diff options
author | David Woodhouse <dwmw2@tylersburg.infradead.org> | 2009-07-13 06:35:12 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-10-29 10:38:47 -0400 |
commit | f5e70d0fe3ea990cfb3fc8d7f76a719adcb1e0b5 (patch) | |
tree | 1794eb51814228ff76f672a541100ad62dd791c9 | |
parent | 17d857be649a21ca90008c6dc425d849fa83db5c (diff) |
md: Factor out RAID6 algorithms into lib/
We'll want to use these in btrfs too.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/md/Kconfig | 7 | ||||
-rw-r--r-- | drivers/md/Makefile | 76 | ||||
-rw-r--r-- | lib/Kconfig | 3 | ||||
-rw-r--r-- | lib/Makefile | 1 | ||||
-rw-r--r-- | lib/raid6/Makefile | 78 | ||||
-rw-r--r-- | lib/raid6/mktables.c (renamed from drivers/md/mktables.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6algos.c (renamed from drivers/md/raid6algos.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6altivec.uc (renamed from drivers/md/raid6altivec.uc) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6int.uc (renamed from drivers/md/raid6int.uc) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6mmx.c (renamed from drivers/md/raid6mmx.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6recov.c (renamed from drivers/md/raid6recov.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6sse1.c (renamed from drivers/md/raid6sse1.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6sse2.c (renamed from drivers/md/raid6sse2.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6test/Makefile (renamed from drivers/md/raid6test/Makefile) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6test/test.c (renamed from drivers/md/raid6test/test.c) | 0 | ||||
-rw-r--r-- | lib/raid6/raid6x86.h (renamed from drivers/md/raid6x86.h) | 0 | ||||
-rw-r--r-- | lib/raid6/unroll.pl (renamed from drivers/md/unroll.pl) | 0 |
17 files changed, 84 insertions, 81 deletions
diff --git a/drivers/md/Kconfig b/drivers/md/Kconfig index 2158377a1359..891f7c8490d3 100644 --- a/drivers/md/Kconfig +++ b/drivers/md/Kconfig | |||
@@ -121,7 +121,7 @@ config MD_RAID10 | |||
121 | config MD_RAID456 | 121 | config MD_RAID456 |
122 | tristate "RAID-4/RAID-5/RAID-6 mode" | 122 | tristate "RAID-4/RAID-5/RAID-6 mode" |
123 | depends on BLK_DEV_MD | 123 | depends on BLK_DEV_MD |
124 | select MD_RAID6_PQ | 124 | select RAID6_PQ |
125 | select ASYNC_MEMCPY | 125 | select ASYNC_MEMCPY |
126 | select ASYNC_XOR | 126 | select ASYNC_XOR |
127 | select ASYNC_PQ | 127 | select ASYNC_PQ |
@@ -165,12 +165,9 @@ config MULTICORE_RAID456 | |||
165 | 165 | ||
166 | If unsure, say N. | 166 | If unsure, say N. |
167 | 167 | ||
168 | config MD_RAID6_PQ | ||
169 | tristate | ||
170 | |||
171 | config ASYNC_RAID6_TEST | 168 | config ASYNC_RAID6_TEST |
172 | tristate "Self test for hardware accelerated raid6 recovery" | 169 | tristate "Self test for hardware accelerated raid6 recovery" |
173 | depends on MD_RAID6_PQ | 170 | depends on RAID6_PQ |
174 | select ASYNC_RAID6_RECOV | 171 | select ASYNC_RAID6_RECOV |
175 | ---help--- | 172 | ---help--- |
176 | This is a one-shot self test that permutes through the | 173 | This is a one-shot self test that permutes through the |
diff --git a/drivers/md/Makefile b/drivers/md/Makefile index 1dc4185bd781..c9b3a7843d83 100644 --- a/drivers/md/Makefile +++ b/drivers/md/Makefile | |||
@@ -12,13 +12,6 @@ dm-log-userspace-y \ | |||
12 | += dm-log-userspace-base.o dm-log-userspace-transfer.o | 12 | += dm-log-userspace-base.o dm-log-userspace-transfer.o |
13 | md-mod-y += md.o bitmap.o | 13 | md-mod-y += md.o bitmap.o |
14 | raid456-y += raid5.o | 14 | raid456-y += raid5.o |
15 | raid6_pq-y += raid6algos.o raid6recov.o raid6tables.o \ | ||
16 | raid6int1.o raid6int2.o raid6int4.o \ | ||
17 | raid6int8.o raid6int16.o raid6int32.o \ | ||
18 | raid6altivec1.o raid6altivec2.o raid6altivec4.o \ | ||
19 | raid6altivec8.o \ | ||
20 | raid6mmx.o raid6sse1.o raid6sse2.o | ||
21 | hostprogs-y += mktables | ||
22 | 15 | ||
23 | # Note: link order is important. All raid personalities | 16 | # Note: link order is important. All raid personalities |
24 | # and must come before md.o, as they each initialise | 17 | # and must come before md.o, as they each initialise |
@@ -29,7 +22,6 @@ obj-$(CONFIG_MD_LINEAR) += linear.o | |||
29 | obj-$(CONFIG_MD_RAID0) += raid0.o | 22 | obj-$(CONFIG_MD_RAID0) += raid0.o |
30 | obj-$(CONFIG_MD_RAID1) += raid1.o | 23 | obj-$(CONFIG_MD_RAID1) += raid1.o |
31 | obj-$(CONFIG_MD_RAID10) += raid10.o | 24 | obj-$(CONFIG_MD_RAID10) += raid10.o |
32 | obj-$(CONFIG_MD_RAID6_PQ) += raid6_pq.o | ||
33 | obj-$(CONFIG_MD_RAID456) += raid456.o | 25 | obj-$(CONFIG_MD_RAID456) += raid456.o |
34 | obj-$(CONFIG_MD_MULTIPATH) += multipath.o | 26 | obj-$(CONFIG_MD_MULTIPATH) += multipath.o |
35 | obj-$(CONFIG_MD_FAULTY) += faulty.o | 27 | obj-$(CONFIG_MD_FAULTY) += faulty.o |
@@ -45,75 +37,7 @@ obj-$(CONFIG_DM_MIRROR) += dm-mirror.o dm-log.o dm-region-hash.o | |||
45 | obj-$(CONFIG_DM_LOG_USERSPACE) += dm-log-userspace.o | 37 | obj-$(CONFIG_DM_LOG_USERSPACE) += dm-log-userspace.o |
46 | obj-$(CONFIG_DM_ZERO) += dm-zero.o | 38 | obj-$(CONFIG_DM_ZERO) += dm-zero.o |
47 | 39 | ||
48 | quiet_cmd_unroll = UNROLL $@ | ||
49 | cmd_unroll = $(PERL) $(srctree)/$(src)/unroll.pl $(UNROLL) \ | ||
50 | < $< > $@ || ( rm -f $@ && exit 1 ) | ||
51 | |||
52 | ifeq ($(CONFIG_ALTIVEC),y) | ||
53 | altivec_flags := -maltivec -mabi=altivec | ||
54 | endif | ||
55 | |||
56 | ifeq ($(CONFIG_DM_UEVENT),y) | 40 | ifeq ($(CONFIG_DM_UEVENT),y) |
57 | dm-mod-objs += dm-uevent.o | 41 | dm-mod-objs += dm-uevent.o |
58 | endif | 42 | endif |
59 | 43 | ||
60 | targets += raid6int1.c | ||
61 | $(obj)/raid6int1.c: UNROLL := 1 | ||
62 | $(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
63 | $(call if_changed,unroll) | ||
64 | |||
65 | targets += raid6int2.c | ||
66 | $(obj)/raid6int2.c: UNROLL := 2 | ||
67 | $(obj)/raid6int2.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
68 | $(call if_changed,unroll) | ||
69 | |||
70 | targets += raid6int4.c | ||
71 | $(obj)/raid6int4.c: UNROLL := 4 | ||
72 | $(obj)/raid6int4.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
73 | $(call if_changed,unroll) | ||
74 | |||
75 | targets += raid6int8.c | ||
76 | $(obj)/raid6int8.c: UNROLL := 8 | ||
77 | $(obj)/raid6int8.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
78 | $(call if_changed,unroll) | ||
79 | |||
80 | targets += raid6int16.c | ||
81 | $(obj)/raid6int16.c: UNROLL := 16 | ||
82 | $(obj)/raid6int16.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
83 | $(call if_changed,unroll) | ||
84 | |||
85 | targets += raid6int32.c | ||
86 | $(obj)/raid6int32.c: UNROLL := 32 | ||
87 | $(obj)/raid6int32.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
88 | $(call if_changed,unroll) | ||
89 | |||
90 | CFLAGS_raid6altivec1.o += $(altivec_flags) | ||
91 | targets += raid6altivec1.c | ||
92 | $(obj)/raid6altivec1.c: UNROLL := 1 | ||
93 | $(obj)/raid6altivec1.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
94 | $(call if_changed,unroll) | ||
95 | |||
96 | CFLAGS_raid6altivec2.o += $(altivec_flags) | ||
97 | targets += raid6altivec2.c | ||
98 | $(obj)/raid6altivec2.c: UNROLL := 2 | ||
99 | $(obj)/raid6altivec2.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
100 | $(call if_changed,unroll) | ||
101 | |||
102 | CFLAGS_raid6altivec4.o += $(altivec_flags) | ||
103 | targets += raid6altivec4.c | ||
104 | $(obj)/raid6altivec4.c: UNROLL := 4 | ||
105 | $(obj)/raid6altivec4.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
106 | $(call if_changed,unroll) | ||
107 | |||
108 | CFLAGS_raid6altivec8.o += $(altivec_flags) | ||
109 | targets += raid6altivec8.c | ||
110 | $(obj)/raid6altivec8.c: UNROLL := 8 | ||
111 | $(obj)/raid6altivec8.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
112 | $(call if_changed,unroll) | ||
113 | |||
114 | quiet_cmd_mktable = TABLE $@ | ||
115 | cmd_mktable = $(obj)/mktables > $@ || ( rm -f $@ && exit 1 ) | ||
116 | |||
117 | targets += raid6tables.c | ||
118 | $(obj)/raid6tables.c: $(obj)/mktables FORCE | ||
119 | $(call if_changed,mktable) | ||
diff --git a/lib/Kconfig b/lib/Kconfig index bb1326d3839c..1cc756c4c78c 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -7,6 +7,9 @@ config BINARY_PRINTF | |||
7 | 7 | ||
8 | menu "Library routines" | 8 | menu "Library routines" |
9 | 9 | ||
10 | config RAID6_PQ | ||
11 | tristate | ||
12 | |||
10 | config BITREVERSE | 13 | config BITREVERSE |
11 | tristate | 14 | tristate |
12 | 15 | ||
diff --git a/lib/Makefile b/lib/Makefile index 2e78277eff9d..b25faf0d1d5c 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -65,6 +65,7 @@ obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/ | |||
65 | obj-$(CONFIG_REED_SOLOMON) += reed_solomon/ | 65 | obj-$(CONFIG_REED_SOLOMON) += reed_solomon/ |
66 | obj-$(CONFIG_LZO_COMPRESS) += lzo/ | 66 | obj-$(CONFIG_LZO_COMPRESS) += lzo/ |
67 | obj-$(CONFIG_LZO_DECOMPRESS) += lzo/ | 67 | obj-$(CONFIG_LZO_DECOMPRESS) += lzo/ |
68 | obj-$(CONFIG_RAID6_PQ) += raid6/ | ||
68 | 69 | ||
69 | lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o | 70 | lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o |
70 | lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o | 71 | lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o |
diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile new file mode 100644 index 000000000000..b2fe4baa90e0 --- /dev/null +++ b/lib/raid6/Makefile | |||
@@ -0,0 +1,78 @@ | |||
1 | obj-$(CONFIG_RAID6_PQ) += raid6_pq.o | ||
2 | |||
3 | raid6_pq-y += raid6algos.o raid6recov.o raid6tables.o \ | ||
4 | raid6int1.o raid6int2.o raid6int4.o \ | ||
5 | raid6int8.o raid6int16.o raid6int32.o \ | ||
6 | raid6altivec1.o raid6altivec2.o raid6altivec4.o \ | ||
7 | raid6altivec8.o \ | ||
8 | raid6mmx.o raid6sse1.o raid6sse2.o | ||
9 | hostprogs-y += mktables | ||
10 | |||
11 | quiet_cmd_unroll = UNROLL $@ | ||
12 | cmd_unroll = $(PERL) $(srctree)/$(src)/unroll.pl $(UNROLL) \ | ||
13 | < $< > $@ || ( rm -f $@ && exit 1 ) | ||
14 | |||
15 | ifeq ($(CONFIG_ALTIVEC),y) | ||
16 | altivec_flags := -maltivec -mabi=altivec | ||
17 | endif | ||
18 | |||
19 | targets += raid6int1.c | ||
20 | $(obj)/raid6int1.c: UNROLL := 1 | ||
21 | $(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
22 | $(call if_changed,unroll) | ||
23 | |||
24 | targets += raid6int2.c | ||
25 | $(obj)/raid6int2.c: UNROLL := 2 | ||
26 | $(obj)/raid6int2.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
27 | $(call if_changed,unroll) | ||
28 | |||
29 | targets += raid6int4.c | ||
30 | $(obj)/raid6int4.c: UNROLL := 4 | ||
31 | $(obj)/raid6int4.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
32 | $(call if_changed,unroll) | ||
33 | |||
34 | targets += raid6int8.c | ||
35 | $(obj)/raid6int8.c: UNROLL := 8 | ||
36 | $(obj)/raid6int8.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
37 | $(call if_changed,unroll) | ||
38 | |||
39 | targets += raid6int16.c | ||
40 | $(obj)/raid6int16.c: UNROLL := 16 | ||
41 | $(obj)/raid6int16.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
42 | $(call if_changed,unroll) | ||
43 | |||
44 | targets += raid6int32.c | ||
45 | $(obj)/raid6int32.c: UNROLL := 32 | ||
46 | $(obj)/raid6int32.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE | ||
47 | $(call if_changed,unroll) | ||
48 | |||
49 | CFLAGS_raid6altivec1.o += $(altivec_flags) | ||
50 | targets += raid6altivec1.c | ||
51 | $(obj)/raid6altivec1.c: UNROLL := 1 | ||
52 | $(obj)/raid6altivec1.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
53 | $(call if_changed,unroll) | ||
54 | |||
55 | CFLAGS_raid6altivec2.o += $(altivec_flags) | ||
56 | targets += raid6altivec2.c | ||
57 | $(obj)/raid6altivec2.c: UNROLL := 2 | ||
58 | $(obj)/raid6altivec2.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
59 | $(call if_changed,unroll) | ||
60 | |||
61 | CFLAGS_raid6altivec4.o += $(altivec_flags) | ||
62 | targets += raid6altivec4.c | ||
63 | $(obj)/raid6altivec4.c: UNROLL := 4 | ||
64 | $(obj)/raid6altivec4.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
65 | $(call if_changed,unroll) | ||
66 | |||
67 | CFLAGS_raid6altivec8.o += $(altivec_flags) | ||
68 | targets += raid6altivec8.c | ||
69 | $(obj)/raid6altivec8.c: UNROLL := 8 | ||
70 | $(obj)/raid6altivec8.c: $(src)/raid6altivec.uc $(src)/unroll.pl FORCE | ||
71 | $(call if_changed,unroll) | ||
72 | |||
73 | quiet_cmd_mktable = TABLE $@ | ||
74 | cmd_mktable = $(obj)/mktables > $@ || ( rm -f $@ && exit 1 ) | ||
75 | |||
76 | targets += raid6tables.c | ||
77 | $(obj)/raid6tables.c: $(obj)/mktables FORCE | ||
78 | $(call if_changed,mktable) | ||
diff --git a/drivers/md/mktables.c b/lib/raid6/mktables.c index 3b1500843bba..3b1500843bba 100644 --- a/drivers/md/mktables.c +++ b/lib/raid6/mktables.c | |||
diff --git a/drivers/md/raid6algos.c b/lib/raid6/raid6algos.c index 866215ac7f25..866215ac7f25 100644 --- a/drivers/md/raid6algos.c +++ b/lib/raid6/raid6algos.c | |||
diff --git a/drivers/md/raid6altivec.uc b/lib/raid6/raid6altivec.uc index 699dfeee4944..699dfeee4944 100644 --- a/drivers/md/raid6altivec.uc +++ b/lib/raid6/raid6altivec.uc | |||
diff --git a/drivers/md/raid6int.uc b/lib/raid6/raid6int.uc index f9bf9cba357f..f9bf9cba357f 100644 --- a/drivers/md/raid6int.uc +++ b/lib/raid6/raid6int.uc | |||
diff --git a/drivers/md/raid6mmx.c b/lib/raid6/raid6mmx.c index e7f6c13132bf..e7f6c13132bf 100644 --- a/drivers/md/raid6mmx.c +++ b/lib/raid6/raid6mmx.c | |||
diff --git a/drivers/md/raid6recov.c b/lib/raid6/raid6recov.c index 2609f00e0d61..2609f00e0d61 100644 --- a/drivers/md/raid6recov.c +++ b/lib/raid6/raid6recov.c | |||
diff --git a/drivers/md/raid6sse1.c b/lib/raid6/raid6sse1.c index b274dd5eab8f..b274dd5eab8f 100644 --- a/drivers/md/raid6sse1.c +++ b/lib/raid6/raid6sse1.c | |||
diff --git a/drivers/md/raid6sse2.c b/lib/raid6/raid6sse2.c index 6ed6c6c0389f..6ed6c6c0389f 100644 --- a/drivers/md/raid6sse2.c +++ b/lib/raid6/raid6sse2.c | |||
diff --git a/drivers/md/raid6test/Makefile b/lib/raid6/raid6test/Makefile index 58ffdf4f5161..58ffdf4f5161 100644 --- a/drivers/md/raid6test/Makefile +++ b/lib/raid6/raid6test/Makefile | |||
diff --git a/drivers/md/raid6test/test.c b/lib/raid6/raid6test/test.c index 7a930318b17d..7a930318b17d 100644 --- a/drivers/md/raid6test/test.c +++ b/lib/raid6/raid6test/test.c | |||
diff --git a/drivers/md/raid6x86.h b/lib/raid6/raid6x86.h index 4c22c1568558..4c22c1568558 100644 --- a/drivers/md/raid6x86.h +++ b/lib/raid6/raid6x86.h | |||
diff --git a/drivers/md/unroll.pl b/lib/raid6/unroll.pl index 3acc710a20ea..3acc710a20ea 100644 --- a/drivers/md/unroll.pl +++ b/lib/raid6/unroll.pl | |||