1* commit 7c734359d350 ("qlge: Size RX buffers based on MTU.", v2.6.33-rc1) 2 introduced dead code in the receive routines, which should be rewritten 3 anyways by the admission of the author himself, see the comment above 4 ql_build_rx_skb(). That function is now used exclusively to handle packets 5 that underwent header splitting but it still contains code to handle non 6 split cases. 7* truesize accounting is incorrect (ex: a 9000B frame has skb->truesize 10280 8 while containing two frags of order-1 allocations, ie. >16K) 9* while in that area, using two 8k buffers to store one 9k frame is a poor 10 choice of buffer size. 11* in the "chain of large buffers" case, the driver uses an skb allocated with 12 head room but only puts data in the frags. 13* rename "rx" queues to "completion" queues. Calling tx completion queues "rx 14 queues" is confusing. 15* struct rx_ring is used for rx and tx completions, with some members relevant 16 to one case only 17* the flow control implementation in firmware is buggy (sends a flood of pause 18 frames, resets the link, device and driver buffer queues become 19 desynchronized), disable it by default 20* some structures are initialized redundantly (ex. memset 0 after 21 alloc_etherdev()) 22* the driver has a habit of using runtime checks where compile time checks are 23 possible (ex. ql_free_rx_buffers(), ql_alloc_rx_buffers()) 24* reorder struct members to avoid holes if it doesn't impact performance 25* avoid legacy/deprecated apis (ex. replace pci_dma_*, replace pci_enable_msi, 26 use pci_iomap) 27* some "while" loops could be rewritten with simple "for", ex. 28 ql_wait_reg_rdy(), ql_start_rx_ring()) 29* remove duplicate and useless comments 30* fix weird line wrapping (all over, ex. the ql_set_routing_reg() calls in 31 qlge_set_multicast_list()). 32* fix weird indentation (all over, ex. the for loops in qlge_get_stats()) 33* fix checkpatch issues 34