Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipwireless: Preallocate received packet buffers with MRU size

ipwireless: Preallocate received packet buffers with MRU size

Packets are assembled from link size (~300 bytes) up to PPP MRU
(1500 by default). Try to preallocate full size rather than
repeatedly advance buffer size by 256 bytes.

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

David Sterba and committed by
Linus Torvalds
a0138692 0f38c47a

+8 -1
+2 -1
drivers/char/pcmcia/ipwireless/hardware.c
··· 567 spin_unlock_irqrestore(&hw->lock, flags); 568 list_del(&packet->queue); 569 } else { 570 - static int min_capacity = 256; 571 int new_capacity; 572 573 spin_unlock_irqrestore(&hw->lock, flags);
··· 567 spin_unlock_irqrestore(&hw->lock, flags); 568 list_del(&packet->queue); 569 } else { 570 + const int min_capacity = 571 + ipwireless_ppp_mru(hw->network + 2); 572 int new_capacity; 573 574 spin_unlock_irqrestore(&hw->lock, flags);
+5
drivers/char/pcmcia/ipwireless/network.c
··· 499 500 return ret; 501 }
··· 499 500 return ret; 501 } 502 + 503 + int ipwireless_ppp_mru(const struct ipw_network *network) 504 + { 505 + return network->mru; 506 + }
+1
drivers/char/pcmcia/ipwireless/network.h
··· 48 void ipwireless_ppp_close(struct ipw_network *net); 49 int ipwireless_ppp_channel_index(struct ipw_network *net); 50 int ipwireless_ppp_unit_number(struct ipw_network *net); 51 52 #endif
··· 48 void ipwireless_ppp_close(struct ipw_network *net); 49 int ipwireless_ppp_channel_index(struct ipw_network *net); 50 int ipwireless_ppp_unit_number(struct ipw_network *net); 51 + int ipwireless_ppp_mru(const struct ipw_network *net); 52 53 #endif