Skip to content

Commit 1857fcc

Browse files
herbertxakpm00
authored andcommitted
lib/raid6: replace custom zero page with ZERO_PAGE
Use the system-wide zero page instead of a custom zero page. [[email protected]: update lib/raid6/recov_rvv.c, per Klara] Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Herbert Xu <[email protected]> Cc: Song Liu <[email protected]> Cc: Yu Kuai <[email protected]> Cc: Klara Modin <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 41a7f73 commit 1857fcc

File tree

11 files changed

+38
-31
lines changed

11 files changed

+38
-31
lines changed

crypto/async_tx/async_pq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ do_sync_gen_syndrome(struct page **blocks, unsigned int *offsets, int disks,
119119
for (i = 0; i < disks; i++) {
120120
if (blocks[i] == NULL) {
121121
BUG_ON(i > disks - 3); /* P or Q can't be zero */
122-
srcs[i] = (void*)raid6_empty_zero_page;
122+
srcs[i] = raid6_get_zero_page();
123123
} else {
124124
srcs[i] = page_address(blocks[i]) + offsets[i];
125125

crypto/async_tx/async_raid6_recov.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
414414
async_tx_quiesce(&submit->depend_tx);
415415
for (i = 0; i < disks; i++)
416416
if (blocks[i] == NULL)
417-
ptrs[i] = (void *) raid6_empty_zero_page;
417+
ptrs[i] = raid6_get_zero_page();
418418
else
419419
ptrs[i] = page_address(blocks[i]) + offs[i];
420420

@@ -497,7 +497,7 @@ async_raid6_datap_recov(int disks, size_t bytes, int faila,
497497
async_tx_quiesce(&submit->depend_tx);
498498
for (i = 0; i < disks; i++)
499499
if (blocks[i] == NULL)
500-
ptrs[i] = (void*)raid6_empty_zero_page;
500+
ptrs[i] = raid6_get_zero_page();
501501
else
502502
ptrs[i] = page_address(blocks[i]) + offs[i];
503503

include/linux/raid/pq.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
#ifdef __KERNEL__
1212

1313
#include <linux/blkdev.h>
14+
#include <linux/mm.h>
1415

15-
extern const char raid6_empty_zero_page[PAGE_SIZE];
16+
/* This should be const but the raid6 code is too convoluted for that. */
17+
static inline void *raid6_get_zero_page(void)
18+
{
19+
return page_address(ZERO_PAGE(0));
20+
}
1621

1722
#else /* ! __KERNEL__ */
1823
/* Used for testing in user space */
@@ -191,6 +196,11 @@ static inline uint32_t raid6_jiffies(void)
191196
return tv.tv_sec*1000 + tv.tv_usec/1000;
192197
}
193198

199+
static inline void *raid6_get_zero_page(void)
200+
{
201+
return raid6_empty_zero_page;
202+
}
203+
194204
#endif /* ! __KERNEL__ */
195205

196206
#endif /* LINUX_RAID_RAID6_H */

lib/raid6/algos.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@
1818
#else
1919
#include <linux/module.h>
2020
#include <linux/gfp.h>
21-
/* In .bss so it's zeroed */
22-
const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(256)));
23-
EXPORT_SYMBOL(raid6_empty_zero_page);
2421
#endif
2522

2623
struct raid6_calls raid6_call;

lib/raid6/recov.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ static void raid6_2data_recov_intx1(int disks, size_t bytes, int faila,
3131
Use the dead data pages as temporary storage for
3232
delta p and delta q */
3333
dp = (u8 *)ptrs[faila];
34-
ptrs[faila] = (void *)raid6_empty_zero_page;
34+
ptrs[faila] = raid6_get_zero_page();
3535
ptrs[disks-2] = dp;
3636
dq = (u8 *)ptrs[failb];
37-
ptrs[failb] = (void *)raid6_empty_zero_page;
37+
ptrs[failb] = raid6_get_zero_page();
3838
ptrs[disks-1] = dq;
3939

4040
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -72,7 +72,7 @@ static void raid6_datap_recov_intx1(int disks, size_t bytes, int faila,
7272
/* Compute syndrome with zero for the missing data page
7373
Use the dead data page as temporary storage for delta q */
7474
dq = (u8 *)ptrs[faila];
75-
ptrs[faila] = (void *)raid6_empty_zero_page;
75+
ptrs[faila] = raid6_get_zero_page();
7676
ptrs[disks-1] = dq;
7777

7878
raid6_call.gen_syndrome(disks, bytes, ptrs);

lib/raid6/recov_avx2.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ static void raid6_2data_recov_avx2(int disks, size_t bytes, int faila,
2828
Use the dead data pages as temporary storage for
2929
delta p and delta q */
3030
dp = (u8 *)ptrs[faila];
31-
ptrs[faila] = (void *)raid6_empty_zero_page;
31+
ptrs[faila] = raid6_get_zero_page();
3232
ptrs[disks-2] = dp;
3333
dq = (u8 *)ptrs[failb];
34-
ptrs[failb] = (void *)raid6_empty_zero_page;
34+
ptrs[failb] = raid6_get_zero_page();
3535
ptrs[disks-1] = dq;
3636

3737
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -196,7 +196,7 @@ static void raid6_datap_recov_avx2(int disks, size_t bytes, int faila,
196196
/* Compute syndrome with zero for the missing data page
197197
Use the dead data page as temporary storage for delta q */
198198
dq = (u8 *)ptrs[faila];
199-
ptrs[faila] = (void *)raid6_empty_zero_page;
199+
ptrs[faila] = raid6_get_zero_page();
200200
ptrs[disks-1] = dq;
201201

202202
raid6_call.gen_syndrome(disks, bytes, ptrs);

lib/raid6/recov_avx512.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ static void raid6_2data_recov_avx512(int disks, size_t bytes, int faila,
3737
*/
3838

3939
dp = (u8 *)ptrs[faila];
40-
ptrs[faila] = (void *)raid6_empty_zero_page;
40+
ptrs[faila] = raid6_get_zero_page();
4141
ptrs[disks-2] = dp;
4242
dq = (u8 *)ptrs[failb];
43-
ptrs[failb] = (void *)raid6_empty_zero_page;
43+
ptrs[failb] = raid6_get_zero_page();
4444
ptrs[disks-1] = dq;
4545

4646
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -238,7 +238,7 @@ static void raid6_datap_recov_avx512(int disks, size_t bytes, int faila,
238238
*/
239239

240240
dq = (u8 *)ptrs[faila];
241-
ptrs[faila] = (void *)raid6_empty_zero_page;
241+
ptrs[faila] = raid6_get_zero_page();
242242
ptrs[disks-1] = dq;
243243

244244
raid6_call.gen_syndrome(disks, bytes, ptrs);

lib/raid6/recov_loongarch_simd.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ static void raid6_2data_recov_lsx(int disks, size_t bytes, int faila,
4242
* delta p and delta q
4343
*/
4444
dp = (u8 *)ptrs[faila];
45-
ptrs[faila] = (void *)raid6_empty_zero_page;
45+
ptrs[faila] = raid6_get_zero_page();
4646
ptrs[disks - 2] = dp;
4747
dq = (u8 *)ptrs[failb];
48-
ptrs[failb] = (void *)raid6_empty_zero_page;
48+
ptrs[failb] = raid6_get_zero_page();
4949
ptrs[disks - 1] = dq;
5050

5151
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -197,7 +197,7 @@ static void raid6_datap_recov_lsx(int disks, size_t bytes, int faila,
197197
* Use the dead data page as temporary storage for delta q
198198
*/
199199
dq = (u8 *)ptrs[faila];
200-
ptrs[faila] = (void *)raid6_empty_zero_page;
200+
ptrs[faila] = raid6_get_zero_page();
201201
ptrs[disks - 1] = dq;
202202

203203
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -316,10 +316,10 @@ static void raid6_2data_recov_lasx(int disks, size_t bytes, int faila,
316316
* delta p and delta q
317317
*/
318318
dp = (u8 *)ptrs[faila];
319-
ptrs[faila] = (void *)raid6_empty_zero_page;
319+
ptrs[faila] = raid6_get_zero_page();
320320
ptrs[disks - 2] = dp;
321321
dq = (u8 *)ptrs[failb];
322-
ptrs[failb] = (void *)raid6_empty_zero_page;
322+
ptrs[failb] = raid6_get_zero_page();
323323
ptrs[disks - 1] = dq;
324324

325325
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -436,7 +436,7 @@ static void raid6_datap_recov_lasx(int disks, size_t bytes, int faila,
436436
* Use the dead data page as temporary storage for delta q
437437
*/
438438
dq = (u8 *)ptrs[faila];
439-
ptrs[faila] = (void *)raid6_empty_zero_page;
439+
ptrs[faila] = raid6_get_zero_page();
440440
ptrs[disks - 1] = dq;
441441

442442
raid6_call.gen_syndrome(disks, bytes, ptrs);

lib/raid6/recov_neon.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ static void raid6_2data_recov_neon(int disks, size_t bytes, int faila,
3636
* delta p and delta q
3737
*/
3838
dp = (u8 *)ptrs[faila];
39-
ptrs[faila] = (void *)raid6_empty_zero_page;
39+
ptrs[faila] = raid6_get_zero_page();
4040
ptrs[disks - 2] = dp;
4141
dq = (u8 *)ptrs[failb];
42-
ptrs[failb] = (void *)raid6_empty_zero_page;
42+
ptrs[failb] = raid6_get_zero_page();
4343
ptrs[disks - 1] = dq;
4444

4545
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -74,7 +74,7 @@ static void raid6_datap_recov_neon(int disks, size_t bytes, int faila,
7474
* Use the dead data page as temporary storage for delta q
7575
*/
7676
dq = (u8 *)ptrs[faila];
77-
ptrs[faila] = (void *)raid6_empty_zero_page;
77+
ptrs[faila] = raid6_get_zero_page();
7878
ptrs[disks - 1] = dq;
7979

8080
raid6_call.gen_syndrome(disks, bytes, ptrs);

lib/raid6/recov_s390xc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ static void raid6_2data_recov_s390xc(int disks, size_t bytes, int faila,
3535
Use the dead data pages as temporary storage for
3636
delta p and delta q */
3737
dp = (u8 *)ptrs[faila];
38-
ptrs[faila] = (void *)raid6_empty_zero_page;
38+
ptrs[faila] = raid6_get_zero_page();
3939
ptrs[disks-2] = dp;
4040
dq = (u8 *)ptrs[failb];
41-
ptrs[failb] = (void *)raid6_empty_zero_page;
41+
ptrs[failb] = raid6_get_zero_page();
4242
ptrs[disks-1] = dq;
4343

4444
raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -82,7 +82,7 @@ static void raid6_datap_recov_s390xc(int disks, size_t bytes, int faila,
8282
/* Compute syndrome with zero for the missing data page
8383
Use the dead data page as temporary storage for delta q */
8484
dq = (u8 *)ptrs[faila];
85-
ptrs[faila] = (void *)raid6_empty_zero_page;
85+
ptrs[faila] = raid6_get_zero_page();
8686
ptrs[disks-1] = dq;
8787

8888
raid6_call.gen_syndrome(disks, bytes, ptrs);

0 commit comments

Comments
 (0)