Re: [PATCH] mm: fix dma_poor_create

2008-02-19 Thread Yinghai Lu
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

2008-02-19 Thread Ingo Molnar

* 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

2008-02-19 Thread Yinghai Lu

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/