Re: [PATCH] mm: fix dma_poor_create
On Tuesday 19 February 2008 10:52:30 pm Ingo Molnar wrote: > > * Yinghai Lu <[EMAIL PROTECTED]> wrote: > > > dev_to_node could return node that without RAM. So check it before use > > it in kmalloc_node > > > - retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, dev_to_node(dev)); > > + node = dev_to_node(dev); > > + if (node == -1 || !node_online(node)) > > + node = numa_node_id(); > > + > > + retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, node); > > so this is about not crashing during bootup on nodes that have CPUs but > which have no node-specific memory attached, right? > > Shouldnt kmalloc_node() be made more robust instead? I.e. push the same > code into kmalloc_node() - and make sure it will allocate _something_? > That would probably also fix a similar bug in net/core/skbuff.c's > __netdev_alloc_skb(), which too passes a dev_to_node() result to an > allocator. sound good idea to update the dev_to_node to make sure it will return -1 or the one is online. Will send updated one. YH -- 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/
Re: [PATCH] mm: fix dma_poor_create
* Yinghai Lu <[EMAIL PROTECTED]> wrote: > dev_to_node could return node that without RAM. So check it before use > it in kmalloc_node > - retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, dev_to_node(dev)); > + node = dev_to_node(dev); > + if (node == -1 || !node_online(node)) > + node = numa_node_id(); > + > + retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, node); so this is about not crashing during bootup on nodes that have CPUs but which have no node-specific memory attached, right? Shouldnt kmalloc_node() be made more robust instead? I.e. push the same code into kmalloc_node() - and make sure it will allocate _something_? That would probably also fix a similar bug in net/core/skbuff.c's __netdev_alloc_skb(), which too passes a dev_to_node() result to an allocator. Ingo -- 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/
[PATCH] mm: fix dma_poor_create
dev_to_node could return node that without RAM. So check it before use it in kmalloc_node Signed-off-by: Yinghai Lu <[EMAIL PROTECTED]> diff --git a/mm/dmapool.c b/mm/dmapool.c index 34aaac4..6be5b5a 100644 --- a/mm/dmapool.c +++ b/mm/dmapool.c @@ -128,6 +128,7 @@ struct dma_pool *dma_pool_create(const char *name, struct device *dev, { struct dma_pool *retval; size_t allocation; + int node; if (align == 0) { align = 1; @@ -152,7 +153,11 @@ struct dma_pool *dma_pool_create(const char *name, struct device *dev, return NULL; } - retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, dev_to_node(dev)); + node = dev_to_node(dev); + if (node == -1 || !node_online(node)) + node = numa_node_id(); + + retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, node); if (!retval) return retval; -- 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/