1
0
Fork 0
alistair23-linux/drivers/net/ethernet/mscc
Horatiu Vultur 248b775139 net: mscc: fix in frame extraction
[ Upstream commit a81541041c ]

Each extracted frame on Ocelot has an IFH. The frame and IFH are extracted
by reading chuncks of 4 bytes from a register.

In case the IFH and frames were read corretly it would try to read the next
frame. In case there are no more frames in the queue, it checks if there
were any previous errors and in that case clear the queue. But this check
will always succeed also when there are no errors. Because when extracting
the IFH the error is checked against 4(number of bytes read) and then the
error is set only if the extraction of the frame failed. So in a happy case
where there are no errors the err variable is still 4. So it could be
a case where after the check that there are no more frames in the queue, a
frame will arrive in the queue but because the error is not reseted, it
would try to flush the queue. So the frame will be lost.

The fix consist in resetting the error after reading the IFH.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-05 16:43:31 +01:00
..
Kconfig net: mscc: ocelot: make use of SerDes PHYs for handling their configuration 2018-10-05 14:36:44 -07:00
Makefile net: mscc: ocelot: Hardware ofload for tc flower filter 2019-06-02 13:49:49 -07:00
ocelot.c net: mscc: ocelot: unregister the PTP clock on deinit 2019-12-18 16:09:14 +01:00
ocelot.h net: mscc: ocelot: fix __ocelot_rmw_ix prototype 2019-11-06 15:34:12 -08:00
ocelot_ace.c ocelot_ace: fix action of trap 2019-08-22 15:44:24 -07:00
ocelot_ace.h drivers: net: use flow block API 2019-07-09 14:38:50 -07:00
ocelot_ana.h
ocelot_board.c net: mscc: fix in frame extraction 2020-03-05 16:43:31 +01:00
ocelot_dev.h
ocelot_flower.c net: sched: use major priority number as hardware priority 2019-08-18 14:13:23 -07:00
ocelot_io.c
ocelot_police.c net: mscc: ocelot: Implement port policers via tc command 2019-05-29 21:37:49 -07:00
ocelot_police.h net: mscc: ocelot: Implement port policers via tc command 2019-05-29 21:37:49 -07:00
ocelot_ptp.h net: mscc: describe the PTP register range 2019-08-15 16:31:11 -07:00
ocelot_qs.h
ocelot_qsys.h
ocelot_regs.c net: mscc: describe the PTP register range 2019-08-15 16:31:11 -07:00
ocelot_rew.h
ocelot_s2.h net: mscc: ocelot: Add support for tcam 2019-06-02 13:49:49 -07:00
ocelot_sys.h
ocelot_tc.c net: flow_offload: add flow_block structure and use it 2019-07-19 21:27:45 -07:00
ocelot_tc.h net: mscc: ocelot: Implement port policers via tc command 2019-05-29 21:37:49 -07:00
ocelot_vcap.h net: mscc: ocelot: Add support for tcam 2019-06-02 13:49:49 -07:00