mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] mm: fix dma_poor_create
@ 2008-02-20  2:45 Yinghai Lu
  2008-02-20  6:52 ` Ingo Molnar
  0 siblings, 1 reply; 3+ messages in thread
From: Yinghai Lu @ 2008-02-20  2:45 UTC (permalink / raw)
  To: Ingo Molnar, Andrew Morton; +Cc: Linux Kernel Mailing List


dev_to_node could return node that without RAM. So check it before use it in kmalloc_node

Signed-off-by: Yinghai Lu <yinghai.lu@sun.com>

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;
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm: fix dma_poor_create
  2008-02-20  2:45 [PATCH] mm: fix dma_poor_create Yinghai Lu
@ 2008-02-20  6:52 ` Ingo Molnar
  2008-02-20  7:50   ` Yinghai Lu
  0 siblings, 1 reply; 3+ messages in thread
From: Ingo Molnar @ 2008-02-20  6:52 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: Andrew Morton, Linux Kernel Mailing List, David S. Miller


* Yinghai Lu <Yinghai.Lu@Sun.COM> 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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm: fix dma_poor_create
  2008-02-20  6:52 ` Ingo Molnar
@ 2008-02-20  7:50   ` Yinghai Lu
  0 siblings, 0 replies; 3+ messages in thread
From: Yinghai Lu @ 2008-02-20  7:50 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Andrew Morton, Linux Kernel Mailing List, David S. Miller

On Tuesday 19 February 2008 10:52:30 pm Ingo Molnar wrote:
> 
> * Yinghai Lu <Yinghai.Lu@Sun.COM> 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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-02-20  7:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-20  2:45 [PATCH] mm: fix dma_poor_create Yinghai Lu
2008-02-20  6:52 ` Ingo Molnar
2008-02-20  7:50   ` Yinghai Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome