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 | |||
