2018-03-29 14:54:12

by Hans de Goede

[permalink] [raw]
Subject: aacraid code passes GFP_DMA32 to kmalloc this will not work

Hi All,

Since I made the same mistake myself I've done a quick grep for
GFP_DMA32 in the kernel and drivers/scsi/aacraid/commctrl.c
came up as a result of this grep, it does:

p = kmalloc(sg_count[i], GFP_KERNEL|GFP_DMA32);

But kmalloc always returns memory from the normal memory-zone,
if you need memory from a specific memory-zone like the
DMA32 zone, you must use the dma allocation functions (which
from a quick glance at the code seems appropriate here) or
directly call alloc_page or __get_free_page.

Regards,

Hans


2018-04-04 21:57:40

by Dave Carroll

[permalink] [raw]
Subject: RE: aacraid code passes GFP_DMA32 to kmalloc this will not work

> -----Original Message-----
> From: Hans de Goede [mailto:[email protected]]
> Sent: Thursday, March 29, 2018 8:51 AM
> To: dl-esc-Aacraid Linux Driver <[email protected]>; James E.J.
> Bottomley <[email protected]>; Martin K. Petersen
> <[email protected]>; SCSI development list <linux-
> [email protected]>; Linux Kernel Mailing List <[email protected]>
> Subject: aacraid code passes GFP_DMA32 to kmalloc this will not work
>
>
> Hi All,
>
> Since I made the same mistake myself I've done a quick grep for
> GFP_DMA32 in the kernel and drivers/scsi/aacraid/commctrl.c came up as a
> result of this grep, it does:
>
> p = kmalloc(sg_count[i], GFP_KERNEL|GFP_DMA32);
>
> But kmalloc always returns memory from the normal memory-zone, if you need
> memory from a specific memory-zone like the
> DMA32 zone, you must use the dma allocation functions (which from a quick
> glance at the code seems appropriate here) or directly call alloc_page or
> __get_free_page.

Hi Hans,

I did run into this issue myself recently ... Thanks for a reminder to send in a patch to
correct this.

-Dave
>
> Regards,
>
> Hans