Unverified Commit dbe0038b authored by Palmer Dabbelt's avatar Palmer Dabbelt
Browse files

Merge patch "Fix a segmentation fault also add raid6test for RISC-V support"

This is a fix in the middle of a feature set, so I'm going to take the
fix onto fixes on its own.

* b4-shazam-merge:
  raid6: riscv: Fix NULL pointer dereference issue

Link: https://lore.kernel.org/r/20250610101234.1100660-1-zhangchunyan@iscas.ac.cn


Signed-off-by: default avatarPalmer Dabbelt <palmer@dabbelt.com>
parents 5c5ecd1f bc75552b
Loading
Loading
Loading
Loading
+28 −20
Original line number Diff line number Diff line
@@ -26,9 +26,9 @@ static int rvv_has_vector(void)
static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **ptrs)
{
	u8 **dptr = (u8 **)ptrs;
	unsigned long d;
	int z, z0;
	u8 *p, *q;
	unsigned long vl, d;
	int z, z0;

	z0 = disks - 3;		/* Highest data disk */
	p = dptr[z0 + 1];		/* XOR parity */
@@ -36,8 +36,9 @@ static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	 /* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10 */
@@ -99,7 +100,7 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
{
	u8 **dptr = (u8 **)ptrs;
	u8 *p, *q;
	unsigned long d;
	unsigned long vl, d;
	int z, z0;

	z0 = stop;		/* P/Q right side optimization */
@@ -108,8 +109,9 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10 */
@@ -195,9 +197,9 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **ptrs)
{
	u8 **dptr = (u8 **)ptrs;
	unsigned long d;
	int z, z0;
	u8 *p, *q;
	unsigned long vl, d;
	int z, z0;

	z0 = disks - 3;		/* Highest data disk */
	p = dptr[z0 + 1];		/* XOR parity */
@@ -205,8 +207,9 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*
@@ -287,7 +290,7 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
{
	u8 **dptr = (u8 **)ptrs;
	u8 *p, *q;
	unsigned long d;
	unsigned long vl, d;
	int z, z0;

	z0 = stop;		/* P/Q right side optimization */
@@ -296,8 +299,9 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*
@@ -413,9 +417,9 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **ptrs)
{
	u8 **dptr = (u8 **)ptrs;
	unsigned long d;
	int z, z0;
	u8 *p, *q;
	unsigned long vl, d;
	int z, z0;

	z0 = disks - 3;	/* Highest data disk */
	p = dptr[z0 + 1];	/* XOR parity */
@@ -423,8 +427,9 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*
@@ -539,7 +544,7 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
{
	u8 **dptr = (u8 **)ptrs;
	u8 *p, *q;
	unsigned long d;
	unsigned long vl, d;
	int z, z0;

	z0 = stop;		/* P/Q right side optimization */
@@ -548,8 +553,9 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*
@@ -721,9 +727,9 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **ptrs)
{
	u8 **dptr = (u8 **)ptrs;
	unsigned long d;
	int z, z0;
	u8 *p, *q;
	unsigned long vl, d;
	int z, z0;

	z0 = disks - 3;	/* Highest data disk */
	p = dptr[z0 + 1];	/* XOR parity */
@@ -731,8 +737,9 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*
@@ -915,7 +922,7 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
{
	u8 **dptr = (u8 **)ptrs;
	u8 *p, *q;
	unsigned long d;
	unsigned long vl, d;
	int z, z0;

	z0 = stop;		/* P/Q right side optimization */
@@ -924,8 +931,9 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,

	asm volatile (".option	push\n"
		      ".option	arch,+v\n"
		      "vsetvli	t0, x0, e8, m1, ta, ma\n"
		      "vsetvli	%0, x0, e8, m1, ta, ma\n"
		      ".option	pop\n"
		      : "=&r" (vl)
	);

	/*