]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/staging/qlge/TODO
net: aquantia: correctly handle macvlan and multicast coexistence
[linux.git] / drivers / staging / qlge / TODO
1 * reception stalls permanently (until admin intervention) if the rx buffer
2   queues become empty because of allocation failures (ex. under memory
3   pressure)
4 * commit 7c734359d350 ("qlge: Size RX buffers based on MTU.", v2.6.33-rc1)
5   introduced dead code in the receive routines, which should be rewritten
6   anyways by the admission of the author himself, see the comment above
7   ql_build_rx_skb(). That function is now used exclusively to handle packets
8   that underwent header splitting but it still contains code to handle non
9   split cases.
10 * truesize accounting is incorrect (ex: a 9000B frame has skb->truesize 10280
11   while containing two frags of order-1 allocations, ie. >16K)
12 * while in that area, using two 8k buffers to store one 9k frame is a poor
13   choice of buffer size.
14 * in the "chain of large buffers" case, the driver uses an skb allocated with
15   head room but only puts data in the frags.
16 * rename "rx" queues to "completion" queues. Calling tx completion queues "rx
17   queues" is confusing.
18 * struct rx_ring is used for rx and tx completions, with some members relevant
19   to one case only
20 * there is an inordinate amount of disparate debugging code, most of which is
21   of questionable value. In particular, qlge_dbg.c has hundreds of lines of
22   code bitrotting away in ifdef land (doesn't compile since commit
23   18c49b91777c ("qlge: do vlan cleanup", v3.1-rc1), 8 years ago).
24 * triggering an ethtool regdump will hexdump a 176k struct to dmesg depending
25   on some module parameters.
26 * the flow control implementation in firmware is buggy (sends a flood of pause
27   frames, resets the link, device and driver buffer queues become
28   desynchronized), disable it by default
29 * some structures are initialized redundantly (ex. memset 0 after
30   alloc_etherdev())
31 * the driver has a habit of using runtime checks where compile time checks are
32   possible (ex. ql_free_rx_buffers(), ql_alloc_rx_buffers())
33 * reorder struct members to avoid holes if it doesn't impact performance
34 * in terms of namespace, the driver uses either qlge_, ql_ (used by
35   other qlogic drivers, with clashes, ex: ql_sem_spinlock) or nothing (with
36   clashes, ex: struct ob_mac_iocb_req). Rename everything to use the "qlge_"
37   prefix.
38 * avoid legacy/deprecated apis (ex. replace pci_dma_*, replace pci_enable_msi,
39   use pci_iomap)
40 * some "while" loops could be rewritten with simple "for", ex.
41   ql_wait_reg_rdy(), ql_start_rx_ring())
42 * remove duplicate and useless comments
43 * fix weird line wrapping (all over, ex. the ql_set_routing_reg() calls in
44   qlge_set_multicast_list()).
45 * fix weird indentation (all over, ex. the for loops in qlge_get_stats())
46 * fix checkpatch issues