Revision efb55222d31c8c2af8b4ba42bb56b0b0beedf98e authored by Vladimir Oltean on 30 August 2019, 01:07:21 UTC, committed by David S. Miller on 01 September 2019, 01:45:34 UTC
taprio_init may fail earlier than this line:

	list_add(&q->taprio_list, &taprio_list);

i.e. due to the net device not being multi queue.

Attempting to remove q from the global taprio_list when it is not part
of it will result in a kernel panic.

Fix it by matching list_add and list_del better to one another in the
order of operations. This way we can keep the deletion unconditional
and with lower complexity - O(1).

Cc: Leandro Dorileo <leandro.maciel.dorileo@intel.com>
Fixes: 7b9eba7ba0c1 ("net/sched: taprio: fix picos_per_byte miscalculation")
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 5f81d54
Raw File
crc32c_asm.S
/* SPDX-License-Identifier: GPL-2.0 */
#include <linux/linkage.h>
#include <asm/visasm.h>
#include <asm/asi.h>

#include "opcodes.h"

ENTRY(crc32c_sparc64)
	/* %o0=crc32p, %o1=data_ptr, %o2=len */
	VISEntryHalf
	lda	[%o0] ASI_PL, %f1
1:	ldd	[%o1], %f2
	CRC32C(0,2,0)
	subcc	%o2, 8, %o2
	bne,pt	%icc, 1b
	 add	%o1, 0x8, %o1
	sta	%f1, [%o0] ASI_PL
	VISExitHalf
2:	retl
	 nop
ENDPROC(crc32c_sparc64)
back to top