netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: change kmalloc into vmalloc for large memory allocations
       [not found] <35FD53F367049845BC99AC72306C23D102844605F38C@CNBJMBX05.corpusers.net>
@ 2014-02-28  8:54 ` Huang Shijie
  2014-02-28  9:20   ` Wang, Yalin
  2014-02-28 14:11 ` change kmalloc into vmalloc for large memory allocations Steven Rostedt
  2014-02-28 14:19 ` Takashi Iwai
  2 siblings, 1 reply; 11+ messages in thread
From: Huang Shijie @ 2014-02-28  8:54 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'perex@perex.cz', 'dmitry.torokhov@gmail.com',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	"'gregkh@linuxfoundation.org

于 2014年02月28日 16:15, Wang, Yalin 写道:
> could this module change the memory allocation into vmalloc ?
the buffer allocated by vmalloc can not be used for the DMA.

I think that's why drivers use the kmalloc.

thanks
Huang Shijie


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: change kmalloc into vmalloc for large memory allocations
  2014-02-28  8:54 ` change kmalloc into vmalloc for large memory allocations Huang Shijie
@ 2014-02-28  9:20   ` Wang, Yalin
  2014-02-28 16:33     ` 'gregkh@linuxfoundation.org'
  0 siblings, 1 reply; 11+ messages in thread
From: Wang, Yalin @ 2014-02-28  9:20 UTC (permalink / raw)
  To: 'Huang Shijie'
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'dmitry.torokhov@gmail.com', 'mingo@redhat.com',
	'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	'gregkh@linuxfoundation.org', "'li

Hi  


Yeah,  
Dma buffer must be allocated by kmalloc,

But the modules I list should can all be changed to use
vmalloc, because the buffer is only used by software,
Not by any hardware .


Thanks

-----Original Message-----
From: Huang Shijie [mailto:b32955@freescale.com] 
Sent: Friday, February 28, 2014 4:55 PM
To: Wang, Yalin
Cc: 'linux-kernel@vger.kernel.org'; 'linux-arm-msm@vger.kernel.org'; 'linux-arm-kernel@lists.infradead.org'; 'linux-input@vger.kernel.org'; 'balbi@ti.com'; 'gregkh@linuxfoundation.org'; 'lrg@ti.com'; 'broonie@opensource.wolfsonmicro.com'; 'perex@perex.cz'; 'tiwai@suse.de'; 'pablo@netfilter.org'; 'kaber@trash.net'; 'davem@davemloft.net'; 'rostedt@goodmis.org'; 'fweisbec@gmail.com'; 'mingo@redhat.com'; 'dmitry.torokhov@gmail.com'; 'rydberg@euromail.se'; 'linux-usb@vger.kernel.org'; 'alsa-devel@alsa-project.org'; 'netfilter-devel@vger.kernel.org'; 'netfilter@vger.kernel.org'; 'coreteam@netfilter.org'; 'netdev@vger.kernel.org'
Subject: Re: change kmalloc into vmalloc for large memory allocations

于 2014年02月28日 16:15, Wang, Yalin 写道:
> could this module change the memory allocation into vmalloc ?
the buffer allocated by vmalloc can not be used for the DMA.

I think that's why drivers use the kmalloc.

thanks
Huang Shijie

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* Re: change kmalloc into vmalloc for large memory allocations
       [not found] <35FD53F367049845BC99AC72306C23D102844605F38C@CNBJMBX05.corpusers.net>
  2014-02-28  8:54 ` change kmalloc into vmalloc for large memory allocations Huang Shijie
@ 2014-02-28 14:11 ` Steven Rostedt
  2014-02-28 14:19 ` Takashi Iwai
  2 siblings, 0 replies; 11+ messages in thread
From: Steven Rostedt @ 2014-02-28 14:11 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'linux-usb@vger.kernel.org', 'tiwai@suse.de',
	'fweisbec@gmail.com', 'dmitry.torokhov@gmail.com',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	'gregkh@linuxfoundation.org',
	'broonie@opensource.wolfsonmicro.com'

On Fri, 28 Feb 2014 16:15:23 +0800
"Wang, Yalin" <Yalin.Wang@sonymobile.com> wrote:

> Kfree(ptr)
> {
> 	If (is_vmalloc_addr(ptr))
> 		Vfree(ptr);
> 	Else
> 		Kfree(ptr);
> }
> 
> 
> But we need add some flags to ensure always use kmalloc for
> Some special use (dma etc..)
> 
> How do you think of it ?

But vmalloc also takes up tlb entries. The more vmalloc space you have,
the more tlb entries that will need to be used, which will have a
performance affect on the entire system.

I would be against making kmalloc() secretly doing a vmalloc. If it is
better for a driver to use a vmalloc on large items, than change the
driver. Don't change a core function.

-- Steve

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

* Re: change kmalloc into vmalloc for large memory allocations
       [not found] <35FD53F367049845BC99AC72306C23D102844605F38C@CNBJMBX05.corpusers.net>
  2014-02-28  8:54 ` change kmalloc into vmalloc for large memory allocations Huang Shijie
  2014-02-28 14:11 ` change kmalloc into vmalloc for large memory allocations Steven Rostedt
@ 2014-02-28 14:19 ` Takashi Iwai
  2014-03-03  1:55   ` Wang, Yalin
  2 siblings, 1 reply; 11+ messages in thread
From: Takashi Iwai @ 2014-02-28 14:19 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'fweisbec@gmail.com', 'dmitry.torokhov@gmail.com',
	'coreteam@netfilter.org',
	'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org', 'mingo@redhat.com',
	'linux-arm-kernel@lists.infradead.org',
	'gregkh@linuxfoundation.org',
	"'linux-usb@vger.kernel.org'" <linux-us

At Fri, 28 Feb 2014 16:15:23 +0800,
Wang, Yalin wrote:
> 
> Hi 
> 
> 
> I find there is some drivers use kmalloc to allocate large 
> Memorys during module_init,  some can be changed to use vmalloc
> To save some low mem, I add log in kernel to track ,
> And list them here:
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/usb/gadget/f_mass_storage.c?h=master#n2724
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/soc-core.c?h=master#n3772

At least the ASoC runtime case doesn't use the allocated memory as
buffer, and they are allocated only once per device, thus it shouldn't
be the problem you stated.  If it really consumes so much memory, we
need to rethink, instead of allocating an array but allocate each
object, for example.


thanks,

Takashi


> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_ftp.c?h=master#n603
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_h323_main.c?h=master#n1849
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_irc.c?h=master#n247
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_sane.c?h=master#n195
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/input/evdev.c?h=master#n403
> 
> 
> they allocate large memory from 10k~64K , 
> this will use lots of low mem, instead if we use 
> vmalloc for these drivers , it will be good for some devices
> like smart phone, we often encounter some errors like kmalloc failed 
> because there is not enough low mem , especially when the device has physical 
> memory less than 1GB .
> 
> 
> could this module change the memory allocation into vmalloc ?
> 
> I was thinking that if we can introduce a helper function in kmalloc.h like this :
> 
> Kmalloc(size, flags)
> {
> 	If (size > PAGE_SIZE && flags&CAN_USE_VMALLOC_FLAG)
> 		return vmalloc(size);
> 	Else
> 		return real_kmalloc(size);
> }
> 
> Kfree(ptr)
> {
> 	If (is_vmalloc_addr(ptr))
> 		Vfree(ptr);
> 	Else
> 		Kfree(ptr);
> }
> 
> 
> But we need add some flags to ensure always use kmalloc for
> Some special use (dma etc..)
> 
> How do you think of it ?
> 
> Thanks
> 
> 
> 

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

* Re: change kmalloc into vmalloc for large memory allocations
  2014-02-28  9:20   ` Wang, Yalin
@ 2014-02-28 16:33     ` 'gregkh@linuxfoundation.org'
  2014-03-03  2:51       ` Wang, Yalin
  0 siblings, 1 reply; 11+ messages in thread
From: 'gregkh@linuxfoundation.org' @ 2014-02-28 16:33 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	'netdev@vger.kernel.org',
	'dmitry.torokhov@gmail.com', "'linux-kern

On Fri, Feb 28, 2014 at 05:20:08PM +0800, Wang, Yalin wrote:
> Hi  
> 
> 
> Yeah,  
> Dma buffer must be allocated by kmalloc,
> 
> But the modules I list should can all be changed to use
> vmalloc, because the buffer is only used by software,
> Not by any hardware .

Are you sure about that?  The USB gadget driver needs DMA memory from
what I can tell, have you tried your change out on a system that does
not allow the USB controller to access non-DMA memory?

And I agree with Steve, just fix the individual drivers, don't do a
"hidden" change of where the memory is allocated from, that's not a good
idea and will cause problems later.

greg k-h

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

* Re: change kmalloc into vmalloc for large memory allocations
  2014-02-28 14:19 ` Takashi Iwai
@ 2014-03-03  1:55   ` Wang, Yalin
  0 siblings, 0 replies; 11+ messages in thread
From: Wang, Yalin @ 2014-03-03  1:55 UTC (permalink / raw)
  To: 'Takashi Iwai'
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'fweisbec@gmail.com', 'dmitry.torokhov@gmail.com',
	'coreteam@netfilter.org',
	'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org', 'mingo@redhat.com',
	'linux-arm-kernel@lists.infradead.org',
	'gregkh@linuxfoundation.org',
	"'linux-usb@vger.kernel.org'" <linux-us

Hi  Takashi,

For this one:
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/soc-core.c?h=master#n3772

in my kernel log,
the allocation size 62496,
about 62KB,
I think need to  change to vmalloc .
How do you think of it ?

Logs:
<4>[   11.469789] ------------[ cut here ]------------
<4>[   11.469803] WARNING: at /media/00DE7FE2DE7FCE82/jb-mr2-yukon/kernel/include/linux/slub_def.h:265 __kmalloc+0x38/0x29c()
<4>[   11.469811] size=62496 flags=80d0
<4>[   11.469815] Modules linked in:
<4>[   11.469835] [<c010c534>] (unwind_backtrace+0x0/0x11c) from [<c018ab04>] (warn_slowpath_common+0x4c/0x64)
<4>[   11.469850] [<c018ab04>] (warn_slowpath_common+0x4c/0x64) from [<c018ab9c>] (warn_slowpath_fmt+0x2c/0x3c)
<4>[   11.469864] [<c018ab9c>] (warn_slowpath_fmt+0x2c/0x3c) from [<c0249ab4>] (__kmalloc+0x38/0x29c)
<4>[   11.469879] [<c0249ab4>] (__kmalloc+0x38/0x29c) from [<c06a0124>] (snd_soc_register_card+0x184/0x104c)
<4>[   11.469896] [<c06a0124>] (snd_soc_register_card+0x184/0x104c) from [<c088183c>] (msm8226_asoc_machine_probe+0x298/0x7f0)
<4>[   11.469913] [<c088183c>] (msm8226_asoc_machine_probe+0x298/0x7f0) from [<c044b1fc>] (platform_drv_probe+0x14/0x18)
<4>[   11.469927] [<c044b1fc>] (platform_drv_probe+0x14/0x18) from [<c0449f2c>] (driver_probe_device+0x134/0x334)
<4>[   11.469940] [<c0449f2c>] (driver_probe_device+0x134/0x334) from [<c044a194>] (__driver_attach+0x68/0x8c)
<4>[   11.469953] [<c044a194>] (__driver_attach+0x68/0x8c) from [<c044849c>] (bus_for_each_dev+0x48/0x80)
<4>[   11.469965] [<c044849c>] (bus_for_each_dev+0x48/0x80) from [<c0449528>] (bus_add_driver+0x100/0x26c)
<4>[   11.469978] [<c0449528>] (bus_add_driver+0x100/0x26c) from [<c044a66c>] (driver_register+0x9c/0x120)
<4>[   11.469992] [<c044a66c>] (driver_register+0x9c/0x120) from [<c010052c>] (do_one_initcall+0x90/0x160)
<4>[   11.470007] [<c010052c>] (do_one_initcall+0x90/0x160) from [<c0d00b74>] (kernel_init+0xec/0x1a8)
<4>[   11.470022] [<c0d00b74>] (kernel_init+0xec/0x1a8) from [<c0106aec>] (kernel_thread_exit+0x0/0x8)
<4>[   11.470030] ---[ end trace 1b75b31a2719ed4d ]---

BRs/ Yalin
-----Original Message-----
From: Takashi Iwai [mailto:tiwai@suse.de] 
Sent: Friday, February 28, 2014 10:20 PM
To: Wang, Yalin
Cc: 'linux-kernel@vger.kernel.org'; 'linux-arm-msm@vger.kernel.org'; 'linux-arm-kernel@lists.infradead.org'; 'linux-input@vger.kernel.org'; 'balbi@ti.com'; 'gregkh@linuxfoundation.org'; 'lrg@ti.com'; 'broonie@opensource.wolfsonmicro.com'; 'perex@perex.cz'; 'pablo@netfilter.org'; 'kaber@trash.net'; 'davem@davemloft.net'; 'rostedt@goodmis.org'; 'fweisbec@gmail.com'; 'mingo@redhat.com'; 'dmitry.torokhov@gmail.com'; 'rydberg@euromail.se'; 'linux-usb@vger.kernel.org'; 'alsa-devel@alsa-project.org'; 'netfilter-devel@vger.kernel.org'; 'netfilter@vger.kernel.org'; 'coreteam@netfilter.org'; 'netdev@vger.kernel.org'
Subject: Re: change kmalloc into vmalloc for large memory allocations

At Fri, 28 Feb 2014 16:15:23 +0800,
Wang, Yalin wrote:
> 
> Hi
> 
> 
> I find there is some drivers use kmalloc to allocate large Memorys 
> during module_init,  some can be changed to use vmalloc To save some 
> low mem, I add log in kernel to track , And list them here:
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drive
> rs/usb/gadget/f_mass_storage.c?h=master#n2724
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound
> /soc/soc-core.c?h=master#n3772

At least the ASoC runtime case doesn't use the allocated memory as buffer, and they are allocated only once per device, thus it shouldn't be the problem you stated.  If it really consumes so much memory, we need to rethink, instead of allocating an array but allocate each object, for example.


thanks,

Takashi


> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_ftp.c?h=master#n603
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_h323_main.c?h=master#n1849
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_irc.c?h=master#n247
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_sane.c?h=master#n195
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drive
> rs/input/evdev.c?h=master#n403
> 
> 
> they allocate large memory from 10k~64K , this will use lots of low 
> mem, instead if we use vmalloc for these drivers , it will be good for 
> some devices like smart phone, we often encounter some errors like 
> kmalloc failed because there is not enough low mem , especially when 
> the device has physical memory less than 1GB .
> 
> 
> could this module change the memory allocation into vmalloc ?
> 
> I was thinking that if we can introduce a helper function in kmalloc.h like this :
> 
> Kmalloc(size, flags)
> {
> 	If (size > PAGE_SIZE && flags&CAN_USE_VMALLOC_FLAG)
> 		return vmalloc(size);
> 	Else
> 		return real_kmalloc(size);
> }
> 
> Kfree(ptr)
> {
> 	If (is_vmalloc_addr(ptr))
> 		Vfree(ptr);
> 	Else
> 		Kfree(ptr);
> }
> 
> 
> But we need add some flags to ensure always use kmalloc for Some 
> special use (dma etc..)
> 
> How do you think of it ?
> 
> Thanks
> 
> 
> 

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

* RE: change kmalloc into vmalloc for large memory allocations
  2014-02-28 16:33     ` 'gregkh@linuxfoundation.org'
@ 2014-03-03  2:51       ` Wang, Yalin
  2014-03-03  3:08         ` 'gregkh@linuxfoundation.org'
  0 siblings, 1 reply; 11+ messages in thread
From: Wang, Yalin @ 2014-03-03  2:51 UTC (permalink / raw)
  To: 'gregkh@linuxfoundation.org'
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'perex@perex.cz', 'mingo@redhat.com',
	'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	'netdev@vger.kernel.org',
	"'dmitry.torokhov@gmail.com'" <dmit

Hi  greg,

I am sorry,
I make a mistake ,
You are right ,
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/usb/gadget/f_mass_storage.c?h=master#n2724

this one should not changed to use vmalloc,
the buffer will be used by DMA,

others should be safe to change:

https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/soc-core.c?h=master#n3772

https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_ftp.c?h=master#n603
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_h323_main.c?h=master#n1849
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_irc.c?h=master#n247
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_sane.c?h=master#n195

https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/input/evdev.c?h=master#n403


Thanks 
-----Original Message-----
From: 'gregkh@linuxfoundation.org' [mailto:gregkh@linuxfoundation.org] 
Sent: Saturday, March 01, 2014 12:33 AM
To: Wang, Yalin
Cc: 'Huang Shijie'; 'linux-kernel@vger.kernel.org'; 'linux-arm-msm@vger.kernel.org'; 'linux-arm-kernel@lists.infradead.org'; 'linux-input@vger.kernel.org'; 'balbi@ti.com'; 'lrg@ti.com'; 'broonie@opensource.wolfsonmicro.com'; 'perex@perex.cz'; 'tiwai@suse.de'; 'pablo@netfilter.org'; 'kaber@trash.net'; 'davem@davemloft.net'; 'rostedt@goodmis.org'; 'fweisbec@gmail.com'; 'mingo@redhat.com'; 'dmitry.torokhov@gmail.com'; 'rydberg@euromail.se'; 'linux-usb@vger.kernel.org'; 'alsa-devel@alsa-project.org'; 'netfilter-devel@vger.kernel.org'; 'netfilter@vger.kernel.org'; 'coreteam@netfilter.org'; 'netdev@vger.kernel.org'
Subject: Re: change kmalloc into vmalloc for large memory allocations

On Fri, Feb 28, 2014 at 05:20:08PM +0800, Wang, Yalin wrote:
> Hi
> 
> 
> Yeah,
> Dma buffer must be allocated by kmalloc,
> 
> But the modules I list should can all be changed to use vmalloc, 
> because the buffer is only used by software, Not by any hardware .

Are you sure about that?  The USB gadget driver needs DMA memory from what I can tell, have you tried your change out on a system that does not allow the USB controller to access non-DMA memory?

And I agree with Steve, just fix the individual drivers, don't do a "hidden" change of where the memory is allocated from, that's not a good idea and will cause problems later.

greg k-h

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

* Re: change kmalloc into vmalloc for large memory allocations
  2014-03-03  2:51       ` Wang, Yalin
@ 2014-03-03  3:08         ` 'gregkh@linuxfoundation.org'
  2014-03-03  8:00           ` Wang, Yalin
  0 siblings, 1 reply; 11+ messages in thread
From: 'gregkh@linuxfoundation.org' @ 2014-03-03  3:08 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	'linux-arm-kernel@lists.infradead.org',
	'netdev@vger.kernel.org',
	'dmitry.torokhov@gmail.com', "'linux-kern

On Mon, Mar 03, 2014 at 10:51:23AM +0800, Wang, Yalin wrote:
> Hi  greg,
> 
> I am sorry,
> I make a mistake ,
> You are right ,
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/usb/gadget/f_mass_storage.c?h=master#n2724
> 
> this one should not changed to use vmalloc,
> the buffer will be used by DMA,

Which is why a wrapper function will never work.

> others should be safe to change:
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/soc-core.c?h=master#n3772
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_ftp.c?h=master#n603
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_h323_main.c?h=master#n1849
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_irc.c?h=master#n247
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_sane.c?h=master#n195
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/input/evdev.c?h=master#n403

Then send individual patches for these and see what happens.

greg k-h
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

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

* RE: change kmalloc into vmalloc for large memory allocations
  2014-03-03  3:08         ` 'gregkh@linuxfoundation.org'
@ 2014-03-03  8:00           ` Wang, Yalin
  2014-03-03 14:10             ` 'gregkh@linuxfoundation.org'
  0 siblings, 1 reply; 11+ messages in thread
From: Wang, Yalin @ 2014-03-03  8:00 UTC (permalink / raw)
  To: 'gregkh@linuxfoundation.org'
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'Will Deacon', 'perex@perex.cz',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'rusty@rustcorp.com.au',
	'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'mschmidt@redhat.com', 'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	"'linux-arm-kernel@lists.infradead

Hi  greg,

For 
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/input/evdev.c?h=master#n403

there have been a patch for kmalloc failed ,

for 
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/soc-core.c?h=master#n3772

I have not change it , need some more code to change in devm_kzalloc ..

I make a patch for netfilter part :

https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_ftp.c?h=master#n603
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_h323_main.c?h=master#n1849
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_irc.c?h=master#n247
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilter/nf_conntrack_sane.c?h=master#n195

seems work well ,
these module will allocate 64KB large memory,
is it possible to be merged ?

Thanks 

-- >8 --
diff --git a/net/netfilter/nf_conntrack_ftp.c b/net/netfilter/nf_conntrack_ftp.c
index b8a0924..0e92b0d 100644
--- a/net/netfilter/nf_conntrack_ftp.c
+++ b/net/netfilter/nf_conntrack_ftp.c
@@ -14,7 +14,7 @@
 #include <linux/moduleparam.h>
 #include <linux/netfilter.h>
 #include <linux/ip.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/ipv6.h>
 #include <linux/ctype.h>
 #include <linux/inet.h>
@@ -593,14 +593,14 @@ static void nf_conntrack_ftp_fini(void)
 		}
 	}
 
-	kfree(ftp_buffer);
+	vfree(ftp_buffer);
 }
 
 static int __init nf_conntrack_ftp_init(void)
 {
 	int i, j = -1, ret = 0;
 
-	ftp_buffer = kmalloc(65536, GFP_KERNEL);
+	ftp_buffer = vmalloc(65536, GFP_KERNEL);
 	if (!ftp_buffer)
 		return -ENOMEM;
 
diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
index 70866d1..49ae092 100644
--- a/net/netfilter/nf_conntrack_h323_main.c
+++ b/net/netfilter/nf_conntrack_h323_main.c
@@ -18,7 +18,7 @@
 #include <linux/inet.h>
 #include <linux/in.h>
 #include <linux/ip.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/udp.h>
 #include <linux/tcp.h>
 #include <linux/skbuff.h>
@@ -1837,7 +1837,7 @@ static void __exit nf_conntrack_h323_fini(void)
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
-	kfree(h323_buffer);
+	vfree(h323_buffer);
 	pr_debug("nf_ct_h323: fini\n");
 }
 
@@ -1846,7 +1846,7 @@ static int __init nf_conntrack_h323_init(void)
 {
 	int ret;
 
-	h323_buffer = kmalloc(65536, GFP_KERNEL);
+	h323_buffer = vmalloc(65536, GFP_KERNEL);
 	if (!h323_buffer)
 		return -ENOMEM;
 	ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245);
@@ -1876,7 +1876,7 @@ err3:
 err2:
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
 err1:
-	kfree(h323_buffer);
+	vfree(h323_buffer);
 	return ret;
 }
 
diff --git a/net/netfilter/nf_conntrack_irc.c b/net/netfilter/nf_conntrack_irc.c
index 0fd2976..b57df10 100644
--- a/net/netfilter/nf_conntrack_irc.c
+++ b/net/netfilter/nf_conntrack_irc.c
@@ -16,7 +16,7 @@
 #include <linux/ip.h>
 #include <linux/tcp.h>
 #include <linux/netfilter.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 
 #include <net/netfilter/nf_conntrack.h>
 #include <net/netfilter/nf_conntrack_expect.h>
@@ -244,7 +244,7 @@ static int __init nf_conntrack_irc_init(void)
 	irc_exp_policy.max_expected = max_dcc_channels;
 	irc_exp_policy.timeout = dcc_timeout;
 
-	irc_buffer = kmalloc(65536, GFP_KERNEL);
+	irc_buffer = vmalloc(65536);
 	if (!irc_buffer)
 		return -ENOMEM;
 
@@ -285,7 +285,7 @@ static void nf_conntrack_irc_fini(void)
 
 	for (i = 0; i < ports_c; i++)
 		nf_conntrack_helper_unregister(&irc[i]);
-	kfree(irc_buffer);
+	vfree(irc_buffer);
 }
 
 module_init(nf_conntrack_irc_init);
diff --git a/net/netfilter/nf_conntrack_sane.c b/net/netfilter/nf_conntrack_sane.c
index 4a2134f..a4c8bf3 100644
--- a/net/netfilter/nf_conntrack_sane.c
+++ b/net/netfilter/nf_conntrack_sane.c
@@ -20,7 +20,7 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/netfilter.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/in.h>
 #include <linux/tcp.h>
 #include <net/netfilter/nf_conntrack.h>
@@ -185,14 +185,14 @@ static void nf_conntrack_sane_fini(void)
 		}
 	}
 
-	kfree(sane_buffer);
+	vfree(sane_buffer);
 }
 
 static int __init nf_conntrack_sane_init(void)
 {
 	int i, j = -1, ret = 0;
 
-	sane_buffer = kmalloc(65536, GFP_KERNEL);
+	sane_buffer = vmalloc(65536);
 	if (!sane_buffer)
 		return -ENOMEM;



-----Original Message-----
From: 'gregkh@linuxfoundation.org' [mailto:gregkh@linuxfoundation.org] 
Sent: Monday, March 03, 2014 11:08 AM
To: Wang, Yalin
Cc: 'Huang Shijie'; 'linux-kernel@vger.kernel.org'; 'linux-arm-msm@vger.kernel.org'; 'linux-arm-kernel@lists.infradead.org'; 'linux-input@vger.kernel.org'; 'balbi@ti.com'; 'lrg@ti.com'; 'broonie@opensource.wolfsonmicro.com'; 'perex@perex.cz'; 'tiwai@suse.de'; 'pablo@netfilter.org'; 'kaber@trash.net'; 'davem@davemloft.net'; 'rostedt@goodmis.org'; 'fweisbec@gmail.com'; 'mingo@redhat.com'; 'dmitry.torokhov@gmail.com'; 'rydberg@euromail.se'; 'linux-usb@vger.kernel.org'; 'alsa-devel@alsa-project.org'; 'netfilter-devel@vger.kernel.org'; 'netfilter@vger.kernel.org'; 'coreteam@netfilter.org'; 'netdev@vger.kernel.org'
Subject: Re: change kmalloc into vmalloc for large memory allocations

On Mon, Mar 03, 2014 at 10:51:23AM +0800, Wang, Yalin wrote:
> Hi  greg,
> 
> I am sorry,
> I make a mistake ,
> You are right ,
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drive
> rs/usb/gadget/f_mass_storage.c?h=master#n2724
> 
> this one should not changed to use vmalloc, the buffer will be used by 
> DMA,

Which is why a wrapper function will never work.

> others should be safe to change:
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound
> /soc/soc-core.c?h=master#n3772
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_ftp.c?h=master#n603
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_h323_main.c?h=master#n1849
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_irc.c?h=master#n247
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/n
> etfilter/nf_conntrack_sane.c?h=master#n195
> 
> https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drive
> rs/input/evdev.c?h=master#n403

Then send individual patches for these and see what happens.

greg k-h
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: change kmalloc into vmalloc for large memory allocations
  2014-03-03  8:00           ` Wang, Yalin
@ 2014-03-03 14:10             ` 'gregkh@linuxfoundation.org'
  2014-03-04  7:30               ` [PATCH] netfilter:Change nf_conntrack modules to use vmalloc Wang, Yalin
  0 siblings, 1 reply; 11+ messages in thread
From: 'gregkh@linuxfoundation.org' @ 2014-03-03 14:10 UTC (permalink / raw)
  To: Wang, Yalin
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'Will Deacon', 'perex@perex.cz',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'rusty@rustcorp.com.au',
	'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'mschmidt@redhat.com', 'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	"'linux-arm-kernel@lists.infradead


On Mon, Mar 03, 2014 at 04:00:59PM +0800, Wang, Yalin wrote:
> Hi  greg,

Please read Documentation/SubmittingPatches for how to properly submit
kernel patches in a form that they could be accepted.

thanks,

greg k-h

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

* [PATCH] netfilter:Change nf_conntrack modules to use vmalloc
  2014-03-03 14:10             ` 'gregkh@linuxfoundation.org'
@ 2014-03-04  7:30               ` Wang, Yalin
  0 siblings, 0 replies; 11+ messages in thread
From: Wang, Yalin @ 2014-03-04  7:30 UTC (permalink / raw)
  To: 'gregkh@linuxfoundation.org'
  Cc: 'alsa-devel@alsa-project.org',
	'broonie@opensource.wolfsonmicro.com',
	'tiwai@suse.de', 'fweisbec@gmail.com',
	'Will Deacon', 'perex@perex.cz',
	'mingo@redhat.com', 'linux-input@vger.kernel.org',
	'rydberg@euromail.se', 'lrg@ti.com',
	'pablo@netfilter.org', 'rusty@rustcorp.com.au',
	'coreteam@netfilter.org',
	'linux-arm-msm@vger.kernel.org',
	'mschmidt@redhat.com', 'rostedt@goodmis.org',
	'netfilter@vger.kernel.org',
	"'linux-arm-kernel@lists.infradead

This patch change some nf_conntrack modules to
use vmalloc to allocate large memory instead of kmalloc,
to save low memorys.

Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com>
---
 net/netfilter/nf_conntrack_ftp.c       | 6 +++---
 net/netfilter/nf_conntrack_h323_main.c | 8 ++++----
 net/netfilter/nf_conntrack_irc.c       | 6 +++---
 net/netfilter/nf_conntrack_sane.c      | 6 +++---
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/net/netfilter/nf_conntrack_ftp.c b/net/netfilter/nf_conntrack_ftp.c
index b8a0924..aad7eca 100644
--- a/net/netfilter/nf_conntrack_ftp.c
+++ b/net/netfilter/nf_conntrack_ftp.c
@@ -14,7 +14,7 @@
 #include <linux/moduleparam.h>
 #include <linux/netfilter.h>
 #include <linux/ip.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/ipv6.h>
 #include <linux/ctype.h>
 #include <linux/inet.h>
@@ -593,14 +593,14 @@ static void nf_conntrack_ftp_fini(void)
 		}
 	}
 
-	kfree(ftp_buffer);
+	vfree(ftp_buffer);
 }
 
 static int __init nf_conntrack_ftp_init(void)
 {
 	int i, j = -1, ret = 0;
 
-	ftp_buffer = kmalloc(65536, GFP_KERNEL);
+	ftp_buffer = vmalloc(65536);
 	if (!ftp_buffer)
 		return -ENOMEM;
 
diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
index 70866d1..5baee1a 100644
--- a/net/netfilter/nf_conntrack_h323_main.c
+++ b/net/netfilter/nf_conntrack_h323_main.c
@@ -18,7 +18,7 @@
 #include <linux/inet.h>
 #include <linux/in.h>
 #include <linux/ip.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/udp.h>
 #include <linux/tcp.h>
 #include <linux/skbuff.h>
@@ -1837,7 +1837,7 @@ static void __exit nf_conntrack_h323_fini(void)
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
-	kfree(h323_buffer);
+	vfree(h323_buffer);
 	pr_debug("nf_ct_h323: fini\n");
 }
 
@@ -1846,7 +1846,7 @@ static int __init nf_conntrack_h323_init(void)
 {
 	int ret;
 
-	h323_buffer = kmalloc(65536, GFP_KERNEL);
+	h323_buffer = vmalloc(65536);
 	if (!h323_buffer)
 		return -ENOMEM;
 	ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245);
@@ -1876,7 +1876,7 @@ err3:
 err2:
 	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
 err1:
-	kfree(h323_buffer);
+	vfree(h323_buffer);
 	return ret;
 }
 
diff --git a/net/netfilter/nf_conntrack_irc.c b/net/netfilter/nf_conntrack_irc.c
index 0fd2976..b57df10 100644
--- a/net/netfilter/nf_conntrack_irc.c
+++ b/net/netfilter/nf_conntrack_irc.c
@@ -16,7 +16,7 @@
 #include <linux/ip.h>
 #include <linux/tcp.h>
 #include <linux/netfilter.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 
 #include <net/netfilter/nf_conntrack.h>
 #include <net/netfilter/nf_conntrack_expect.h>
@@ -244,7 +244,7 @@ static int __init nf_conntrack_irc_init(void)
 	irc_exp_policy.max_expected = max_dcc_channels;
 	irc_exp_policy.timeout = dcc_timeout;
 
-	irc_buffer = kmalloc(65536, GFP_KERNEL);
+	irc_buffer = vmalloc(65536);
 	if (!irc_buffer)
 		return -ENOMEM;
 
@@ -285,7 +285,7 @@ static void nf_conntrack_irc_fini(void)
 
 	for (i = 0; i < ports_c; i++)
 		nf_conntrack_helper_unregister(&irc[i]);
-	kfree(irc_buffer);
+	vfree(irc_buffer);
 }
 
 module_init(nf_conntrack_irc_init);
diff --git a/net/netfilter/nf_conntrack_sane.c b/net/netfilter/nf_conntrack_sane.c
index 4a2134f..a4c8bf3 100644
--- a/net/netfilter/nf_conntrack_sane.c
+++ b/net/netfilter/nf_conntrack_sane.c
@@ -20,7 +20,7 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/netfilter.h>
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/in.h>
 #include <linux/tcp.h>
 #include <net/netfilter/nf_conntrack.h>
@@ -185,14 +185,14 @@ static void nf_conntrack_sane_fini(void)
 		}
 	}
 
-	kfree(sane_buffer);
+	vfree(sane_buffer);
 }
 
 static int __init nf_conntrack_sane_init(void)
 {
 	int i, j = -1, ret = 0;
 
-	sane_buffer = kmalloc(65536, GFP_KERNEL);
+	sane_buffer = vmalloc(65536);
 	if (!sane_buffer)
 		return -ENOMEM;
 
-- 
1.8.2.2

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

end of thread, other threads:[~2014-03-04  7:30 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <35FD53F367049845BC99AC72306C23D102844605F38C@CNBJMBX05.corpusers.net>
2014-02-28  8:54 ` change kmalloc into vmalloc for large memory allocations Huang Shijie
2014-02-28  9:20   ` Wang, Yalin
2014-02-28 16:33     ` 'gregkh@linuxfoundation.org'
2014-03-03  2:51       ` Wang, Yalin
2014-03-03  3:08         ` 'gregkh@linuxfoundation.org'
2014-03-03  8:00           ` Wang, Yalin
2014-03-03 14:10             ` 'gregkh@linuxfoundation.org'
2014-03-04  7:30               ` [PATCH] netfilter:Change nf_conntrack modules to use vmalloc Wang, Yalin
2014-02-28 14:11 ` change kmalloc into vmalloc for large memory allocations Steven Rostedt
2014-02-28 14:19 ` Takashi Iwai
2014-03-03  1:55   ` Wang, Yalin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).