On Sat, 28 Apr 2007 09:40:39 -0400 (EDT) "Robert P. J. Day" <[EMAIL PROTECTED]> wrote:
> > i'd always assumed that the type flags of GFP_ATOMIC and GFP_KERNEL > were mutually exclusive when it came to calling kmalloc(), at least > based on everything i'd read. so i'm not sure how to interpret the > following: > > drivers/scsi/aic7xxx_old.c: aic_dev = kmalloc(sizeof(struct aic_dev_data), > GFP_ATOMIC | GFP_KERNEL); > drivers/message/i2o/device.c: resblk = kmalloc(buflen + 8, GFP_KERNEL | > GFP_ATOMIC); > > clarification? GFP_ATOMIC implies that the memory comes from the zones which GFP_KERNEL also uses. So the above usage of GFP_KERNEL is redundant and should be removed. The way to understand this is to look at the definitions: #define GFP_ATOMIC (__GFP_HIGH) #define GFP_NOIO (__GFP_WAIT) #define GFP_NOFS (__GFP_WAIT | __GFP_IO) #define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) #define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL) #define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \ __GFP_HIGHMEM) GFP_KERNEL: can sleep, can do IO, can enter filesystems GFP_ATOMIC: cannot sleep, cannot do IO, cannot enter filesystems Neither of them contains __GFP_DMA or __GFP_HIGHMEM, so both of them refer to ZONE_NORMAL and any lower zones (ie: ZONE_DMA) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/