* simple memory malloc and free in ip_output.c @ 2013-12-27 3:16 Guibin(Bill) Tian 2013-12-27 3:24 ` bill4carson 2014-01-02 5:12 ` Mulyadi Santosa 0 siblings, 2 replies; 10+ messages in thread From: Guibin(Bill) Tian @ 2013-12-27 3:16 UTC (permalink / raw) To: kernelnewbies Hi, I am doing a very simple operation at the method of ip_queue_xmit in ip_output.c. The code is very simple. char *p = kmalloc(48, GFP_KERNEL); kfree(p); This will be called every time this method is called. But the result is that the whole system is not responsive at all. This is a very simple, not sure what I am doing wrong. Can anybody help? Thanks -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131226/3b559310/attachment.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2013-12-27 3:16 simple memory malloc and free in ip_output.c Guibin(Bill) Tian @ 2013-12-27 3:24 ` bill4carson 2013-12-27 4:21 ` Guibin(Bill) Tian 2014-01-02 5:12 ` Mulyadi Santosa 1 sibling, 1 reply; 10+ messages in thread From: bill4carson @ 2013-12-27 3:24 UTC (permalink / raw) To: kernelnewbies On 2013?12?27? 11:16, Guibin(Bill) Tian wrote: > Hi, > I am doing a very simple operation at the method of ip_queue_xmit in ip_output.c. > The code is very simple. > > char *p = kmalloc(48, GFP_KERNEL); ^^^^^^^^ GFP_ATOMIC ? -- ?????????,?????????? --bill ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2013-12-27 3:24 ` bill4carson @ 2013-12-27 4:21 ` Guibin(Bill) Tian 2013-12-27 5:39 ` Guibin(Bill) Tian 0 siblings, 1 reply; 10+ messages in thread From: Guibin(Bill) Tian @ 2013-12-27 4:21 UTC (permalink / raw) To: kernelnewbies I tried it, still the same thing. Also, there is another side effect that if I call the two lines of code above, the internet connection seems to break except to localhost. On Thu, Dec 26, 2013 at 10:24 PM, bill4carson <bill4carson@gmail.com> wrote: > > > On 2013?12?27? 11:16, Guibin(Bill) Tian wrote: > >> Hi, >> I am doing a very simple operation at the method of ip_queue_xmit in >> ip_output.c. >> The code is very simple. >> >> char *p = kmalloc(48, GFP_KERNEL); >> > ^^^^^^^^ > GFP_ATOMIC ? > -- > ?????????,?????????? > > --bill > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131226/4775133e/attachment.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2013-12-27 4:21 ` Guibin(Bill) Tian @ 2013-12-27 5:39 ` Guibin(Bill) Tian 2013-12-27 7:02 ` Anand Moon 0 siblings, 1 reply; 10+ messages in thread From: Guibin(Bill) Tian @ 2013-12-27 5:39 UTC (permalink / raw) To: kernelnewbies It does work in your way, thanks Carson On Thursday, December 26, 2013, Guibin(Bill) Tian wrote: > I tried it, still the same thing. > Also, there is another side effect that if I call the two lines of code > above, the internet connection seems to break except to localhost. > > > On Thu, Dec 26, 2013 at 10:24 PM, bill4carson <bill4carson at gmail.com<javascript:_e({}, 'cvml', 'bill4carson@gmail.com');> > > wrote: > >> >> >> On 2013?12?27? 11:16, Guibin(Bill) Tian wrote: >> >>> Hi, >>> I am doing a very simple operation at the method of ip_queue_xmit in >>> ip_output.c. >>> The code is very simple. >>> >>> char *p = kmalloc(48, GFP_KERNEL); >>> >> ^^^^^^^^ >> GFP_ATOMIC ? >> -- >> ?????????,?????????? >> >> --bill >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131227/8c26bcbe/attachment.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2013-12-27 5:39 ` Guibin(Bill) Tian @ 2013-12-27 7:02 ` Anand Moon 0 siblings, 0 replies; 10+ messages in thread From: Anand Moon @ 2013-12-27 7:02 UTC (permalink / raw) To: kernelnewbies Hi, ip_queue_xmit will get called for every packet send, so frequent allocation and free of memory can be a problem for slab allocator. If you need only 48 bytes of memory in a function you can chose to use array. -Anand Moon -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.14 (GNU/Linux) jA0EAwMCYq3dHqTzwcVgyRxC1j+oLxS8Yw92EIeKln+x3eAWzd7mM/pUluRo =0RYk -----END PGP MESSAGE----- On Friday, December 27, 2013 11:11 AM, Guibin(Bill) Tian <gbtian@gmail.com> wrote: It does work in your way, thanks Carson? On Thursday, December 26, 2013, Guibin(Bill) Tian wrote: I tried it, still the same thing.? >Also, there is another side effect that if I call the two lines of code above, the internet connection seems to break except to localhost.? > > > >On Thu, Dec 26, 2013 at 10:24 PM, bill4carson <bill4carson@gmail.com> wrote: > > >> >>On 2013?12?27? 11:16, Guibin(Bill) Tian wrote: >> >>Hi, >>>I am doing a very simple operation at the method of ip_queue_xmit in ip_output.c. >>>The code is very simple. >>> >>>char *p = kmalloc(48, GFP_KERNEL); >>> ? ? ? ? ? ? ? ? ? ? ? ? ?^^^^^^^^ >>? ? ? ? ? ? ? ? ? ? ? ? GFP_ATOMIC ? >>-- >>?????????,?????????? >> >>--bill >> > _______________________________________________ Kernelnewbies mailing list Kernelnewbies at kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131226/e27a6158/attachment-0001.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2013-12-27 3:16 simple memory malloc and free in ip_output.c Guibin(Bill) Tian 2013-12-27 3:24 ` bill4carson @ 2014-01-02 5:12 ` Mulyadi Santosa 2014-01-02 5:41 ` Valdis.Kletnieks at vt.edu 1 sibling, 1 reply; 10+ messages in thread From: Mulyadi Santosa @ 2014-01-02 5:12 UTC (permalink / raw) To: kernelnewbies On Fri, Dec 27, 2013 at 10:16 AM, Guibin(Bill) Tian <gbtian@gmail.com> wrote: > Hi, > I am doing a very simple operation at the method of ip_queue_xmit in > ip_output.c. > The code is very simple. > > char *p = kmalloc(48, GFP_KERNEL); > kfree(p); > > This will be called every time this method is called. > > But the result is that the whole system is not responsive at all. This is a > very simple, not sure what I am doing wrong. Can anybody help? Other than what others have said, IMHO it is better to avoid such rapid alloc/free, assuming your code fragment is running on every packet reception/sending. Instead, I suggest to allocate the memory before the ip_queue_xmit and use-reuse it inside ip_queue_xmit. -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2014-01-02 5:12 ` Mulyadi Santosa @ 2014-01-02 5:41 ` Valdis.Kletnieks at vt.edu 2014-01-02 6:15 ` Mulyadi Santosa 0 siblings, 1 reply; 10+ messages in thread From: Valdis.Kletnieks at vt.edu @ 2014-01-02 5:41 UTC (permalink / raw) To: kernelnewbies On Thu, 02 Jan 2014 12:12:49 +0700, Mulyadi Santosa said: > Other than what others have said, IMHO it is better to avoid such > rapid alloc/free, assuming your code fragment is running on every > packet reception/sending. > > Instead, I suggest to allocate the memory before the ip_queue_xmit and > use-reuse it inside ip_queue_xmit. Be careful with re-entrancy issues - you'll want a separate instance of memory for all possible concurrent callers of ip_queue_xmit (you may need one per active interface, because you can e transmitting packets on multiple interfaces at the same time). -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 848 bytes Desc: not available Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20140102/711f1a02/attachment.bin ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2014-01-02 5:41 ` Valdis.Kletnieks at vt.edu @ 2014-01-02 6:15 ` Mulyadi Santosa 2014-01-02 17:42 ` Guibin(Bill) Tian 0 siblings, 1 reply; 10+ messages in thread From: Mulyadi Santosa @ 2014-01-02 6:15 UTC (permalink / raw) To: kernelnewbies On Thu, Jan 2, 2014 at 12:41 PM, <Valdis.Kletnieks@vt.edu> wrote: > On Thu, 02 Jan 2014 12:12:49 +0700, Mulyadi Santosa said: > >> Other than what others have said, IMHO it is better to avoid such >> rapid alloc/free, assuming your code fragment is running on every >> packet reception/sending. >> >> Instead, I suggest to allocate the memory before the ip_queue_xmit and >> use-reuse it inside ip_queue_xmit. > > Be careful with re-entrancy issues - you'll want a separate instance of memory > for all possible concurrent callers of ip_queue_xmit (you may need one per > active interface, because you can e transmitting packets on multiple interfaces > at the same time). Ah yes, you're correct Valdis. Thanks for note. -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2014-01-02 6:15 ` Mulyadi Santosa @ 2014-01-02 17:42 ` Guibin(Bill) Tian 2014-01-07 11:27 ` Mulyadi Santosa 0 siblings, 1 reply; 10+ messages in thread From: Guibin(Bill) Tian @ 2014-01-02 17:42 UTC (permalink / raw) To: kernelnewbies Thank you sirs. But in fact, I don't alloc/free for every packet. I did exactly as what you said---reuse. I am a little confused why GFP_ATOMIC can work but GFP_KERNEL will cause the system to panic. Does it because that GFP_KERNEL can sleep in kmalloc, then ip_xmit_queue will be held or something? But anyway, GFP_ATOMIC works perfectly. On Thu, Jan 2, 2014 at 1:15 AM, Mulyadi Santosa <mulyadi.santosa@gmail.com>wrote: > On Thu, Jan 2, 2014 at 12:41 PM, <Valdis.Kletnieks@vt.edu> wrote: > > On Thu, 02 Jan 2014 12:12:49 +0700, Mulyadi Santosa said: > > > >> Other than what others have said, IMHO it is better to avoid such > >> rapid alloc/free, assuming your code fragment is running on every > >> packet reception/sending. > >> > >> Instead, I suggest to allocate the memory before the ip_queue_xmit and > >> use-reuse it inside ip_queue_xmit. > > > > Be careful with re-entrancy issues - you'll want a separate instance of > memory > > for all possible concurrent callers of ip_queue_xmit (you may need one > per > > active interface, because you can e transmitting packets on multiple > interfaces > > at the same time). > > Ah yes, you're correct Valdis. Thanks for note. > > > > > -- > regards, > > Mulyadi Santosa > Freelance Linux trainer and consultant > > blog: the-hydra.blogspot.com > training: mulyaditraining.blogspot.com > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20140102/4e4cd4dd/attachment.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* simple memory malloc and free in ip_output.c 2014-01-02 17:42 ` Guibin(Bill) Tian @ 2014-01-07 11:27 ` Mulyadi Santosa 0 siblings, 0 replies; 10+ messages in thread From: Mulyadi Santosa @ 2014-01-07 11:27 UTC (permalink / raw) To: kernelnewbies On Fri, Jan 3, 2014 at 12:42 AM, Guibin(Bill) Tian <gbtian@gmail.com> wrote: > Thank you sirs. But in fact, I don't alloc/free for every packet. I did > exactly as what you said---reuse. > > I am a little confused why GFP_ATOMIC can work but GFP_KERNEL will cause the > system to panic. Does it because that GFP_KERNEL can sleep in kmalloc, then > ip_xmit_queue will be held or something? But anyway, GFP_ATOMIC works > perfectly. yup, you nailed it. gfp_kernel sleeps, while ip_xmit_queue is in interrupt context. -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-01-07 11:27 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-12-27 3:16 simple memory malloc and free in ip_output.c Guibin(Bill) Tian 2013-12-27 3:24 ` bill4carson 2013-12-27 4:21 ` Guibin(Bill) Tian 2013-12-27 5:39 ` Guibin(Bill) Tian 2013-12-27 7:02 ` Anand Moon 2014-01-02 5:12 ` Mulyadi Santosa 2014-01-02 5:41 ` Valdis.Kletnieks at vt.edu 2014-01-02 6:15 ` Mulyadi Santosa 2014-01-02 17:42 ` Guibin(Bill) Tian 2014-01-07 11:27 ` Mulyadi Santosa
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.