That USO works for these two cards on 64-bit systems is just pure luck. Currently, the computation of the UDP segmentation header is performed using sizeof() a pointer instead of the sizeof() the UDP header that the pointer points to. Since the UDP header happens to be 8 bytes long and a pointer is 8 bytes long on a 64-bit system, this works on all those systems. But no such luck for anyone using a 32-bit system as 8 bytes != 4 bytes. So fix this by using sizeof() the UDP header that the pointer points to instead.
This was found by an LLM while implementing something else that used USO. Magnus Karlsson (2): ice: fix USO for 32-bit systems iavf: fix USO for 32-bit systems drivers/net/ethernet/intel/iavf/iavf_txrx.c | 2 +- drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -- 2.38.1
