aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto
diff options
context:
space:
mode:
authorDan Streetman <ddstreet@ieee.org>2015-05-28 16:21:31 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-06-02 22:51:23 -0400
commit3e648cbeb31be5cb84b9ec19822e2b85417f07c4 (patch)
tree4832384e797c3164b3d4321e49f13dd5a8c74c9d /drivers/crypto
parentf614e546f5060813ddf69a090cdf200a9ac28cd3 (diff)
crypto: nx - prevent nx 842 load if no hw driver
Change the nx-842 common driver to wait for loading of both platform drivers, and fail loading if the platform driver pointer is not set. Add an independent platform driver pointer, that the platform drivers set if they find they are able to load (i.e. if they find their platform devicetree node(s)). The problem is currently, the main nx-842 driver will stay loaded even if there is no platform driver and thus no possible way it can do any compression or decompression. This allows the crypto 842-nx driver to load even if it won't actually work. For crypto compression users (e.g. zswap) that expect an available crypto compression driver to actually work, this is bad. This patch fixes that, so the 842-nx crypto compression driver won't load if it doesn't have the driver and hardware available to perform the compression. Signed-off-by: Dan Streetman <ddstreet@ieee.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r--drivers/crypto/nx/Makefile3
-rw-r--r--drivers/crypto/nx/nx-842-platform.c84
-rw-r--r--drivers/crypto/nx/nx-842-powernv.c17
-rw-r--r--drivers/crypto/nx/nx-842-pseries.c33
-rw-r--r--drivers/crypto/nx/nx-842.c130
-rw-r--r--drivers/crypto/nx/nx-842.h16
6 files changed, 148 insertions, 135 deletions
diff --git a/drivers/crypto/nx/Makefile b/drivers/crypto/nx/Makefile
index 868b5e630794..e1684f5adb11 100644
--- a/drivers/crypto/nx/Makefile
+++ b/drivers/crypto/nx/Makefile
@@ -10,11 +10,12 @@ nx-crypto-objs := nx.o \
10 nx-sha256.o \ 10 nx-sha256.o \
11 nx-sha512.o 11 nx-sha512.o
12 12
13obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS) += nx-compress.o 13obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS) += nx-compress.o nx-compress-platform.o
14obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES) += nx-compress-pseries.o 14obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES) += nx-compress-pseries.o
15obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV) += nx-compress-powernv.o 15obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV) += nx-compress-powernv.o
16obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_CRYPTO) += nx-compress-crypto.o 16obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_CRYPTO) += nx-compress-crypto.o
17nx-compress-objs := nx-842.o 17nx-compress-objs := nx-842.o
18nx-compress-platform-objs := nx-842-platform.o
18nx-compress-pseries-objs := nx-842-pseries.o 19nx-compress-pseries-objs := nx-842-pseries.o
19nx-compress-powernv-objs := nx-842-powernv.o 20nx-compress-powernv-objs := nx-842-powernv.o
20nx-compress-crypto-objs := nx-842-crypto.o 21nx-compress-crypto-objs := nx-842-crypto.o
diff --git a/drivers/crypto/nx/nx-842-platform.c b/drivers/crypto/nx/nx-842-platform.c
new file mode 100644
index 000000000000..664f13dd06ed
--- /dev/null
+++ b/drivers/crypto/nx/nx-842-platform.c
@@ -0,0 +1,84 @@
1
2#include "nx-842.h"
3
4/* this is needed, separate from the main nx-842.c driver, because that main
5 * driver loads the platform drivers during its init(), and it expects one
6 * (or none) of the platform drivers to set this pointer to its driver.
7 * That means this pointer can't be in the main nx-842 driver, because it
8 * wouldn't be accessible until after the main driver loaded, which wouldn't
9 * be possible as it's waiting for the platform driver to load. So place it
10 * here.
11 */
12static struct nx842_driver *driver;
13static DEFINE_SPINLOCK(driver_lock);
14
15struct nx842_driver *nx842_platform_driver(void)
16{
17 return driver;
18}
19EXPORT_SYMBOL_GPL(nx842_platform_driver);
20
21bool nx842_platform_driver_set(struct nx842_driver *_driver)
22{
23 bool ret = false;
24
25 spin_lock(&driver_lock);
26
27 if (!driver) {
28 driver = _driver;
29 ret = true;
30 } else
31 WARN(1, "can't set platform driver, already set to %s\n",
32 driver->name);
33
34 spin_unlock(&driver_lock);
35 return ret;
36}
37EXPORT_SYMBOL_GPL(nx842_platform_driver_set);
38
39/* only call this from the platform driver exit function */
40void nx842_platform_driver_unset(struct nx842_driver *_driver)
41{
42 spin_lock(&driver_lock);
43
44 if (driver == _driver)
45 driver = NULL;
46 else if (driver)
47 WARN(1, "can't unset platform driver %s, currently set to %s\n",
48 _driver->name, driver->name);
49 else
50 WARN(1, "can't unset platform driver, already unset\n");
51
52 spin_unlock(&driver_lock);
53}
54EXPORT_SYMBOL_GPL(nx842_platform_driver_unset);
55
56bool nx842_platform_driver_get(void)
57{
58 bool ret = false;
59
60 spin_lock(&driver_lock);
61
62 if (driver)
63 ret = try_module_get(driver->owner);
64
65 spin_unlock(&driver_lock);
66
67 return ret;
68}
69EXPORT_SYMBOL_GPL(nx842_platform_driver_get);
70
71void nx842_platform_driver_put(void)
72{
73 spin_lock(&driver_lock);
74
75 if (driver)
76 module_put(driver->owner);
77
78 spin_unlock(&driver_lock);
79}
80EXPORT_SYMBOL_GPL(nx842_platform_driver_put);
81
82MODULE_LICENSE("GPL");
83MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>");
84MODULE_DESCRIPTION("842 H/W Compression platform driver");
diff --git a/drivers/crypto/nx/nx-842-powernv.c b/drivers/crypto/nx/nx-842-powernv.c
index 6a9fb8b2d05b..c388dba7da64 100644
--- a/drivers/crypto/nx/nx-842-powernv.c
+++ b/drivers/crypto/nx/nx-842-powernv.c
@@ -23,7 +23,6 @@
23#include <asm/prom.h> 23#include <asm/prom.h>
24#include <asm/icswx.h> 24#include <asm/icswx.h>
25 25
26#define MODULE_NAME NX842_POWERNV_MODULE_NAME
27MODULE_LICENSE("GPL"); 26MODULE_LICENSE("GPL");
28MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>"); 27MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>");
29MODULE_DESCRIPTION("842 H/W Compression driver for IBM PowerNV processors"); 28MODULE_DESCRIPTION("842 H/W Compression driver for IBM PowerNV processors");
@@ -571,6 +570,7 @@ static struct nx842_constraints nx842_powernv_constraints = {
571}; 570};
572 571
573static struct nx842_driver nx842_powernv_driver = { 572static struct nx842_driver nx842_powernv_driver = {
573 .name = KBUILD_MODNAME,
574 .owner = THIS_MODULE, 574 .owner = THIS_MODULE,
575 .constraints = &nx842_powernv_constraints, 575 .constraints = &nx842_powernv_constraints,
576 .compress = nx842_powernv_compress, 576 .compress = nx842_powernv_compress,
@@ -593,7 +593,7 @@ static __init int nx842_powernv_init(void)
593 593
594 pr_info("loading\n"); 594 pr_info("loading\n");
595 595
596 for_each_compatible_node(dn, NULL, NX842_POWERNV_COMPAT_NAME) 596 for_each_compatible_node(dn, NULL, "ibm,power-nx")
597 nx842_powernv_probe(dn); 597 nx842_powernv_probe(dn);
598 598
599 if (!nx842_ct) { 599 if (!nx842_ct) {
@@ -601,7 +601,16 @@ static __init int nx842_powernv_init(void)
601 return -ENODEV; 601 return -ENODEV;
602 } 602 }
603 603
604 nx842_register_driver(&nx842_powernv_driver); 604 if (!nx842_platform_driver_set(&nx842_powernv_driver)) {
605 struct nx842_coproc *coproc, *n;
606
607 list_for_each_entry_safe(coproc, n, &nx842_coprocs, list) {
608 list_del(&coproc->list);
609 kfree(coproc);
610 }
611
612 return -EEXIST;
613 }
605 614
606 pr_info("loaded\n"); 615 pr_info("loaded\n");
607 616
@@ -613,7 +622,7 @@ static void __exit nx842_powernv_exit(void)
613{ 622{
614 struct nx842_coproc *coproc, *n; 623 struct nx842_coproc *coproc, *n;
615 624
616 nx842_unregister_driver(&nx842_powernv_driver); 625 nx842_platform_driver_unset(&nx842_powernv_driver);
617 626
618 list_for_each_entry_safe(coproc, n, &nx842_coprocs, list) { 627 list_for_each_entry_safe(coproc, n, &nx842_coprocs, list) {
619 list_del(&coproc->list); 628 list_del(&coproc->list);
diff --git a/drivers/crypto/nx/nx-842-pseries.c b/drivers/crypto/nx/nx-842-pseries.c
index 85837e96e9a3..17f191777139 100644
--- a/drivers/crypto/nx/nx-842-pseries.c
+++ b/drivers/crypto/nx/nx-842-pseries.c
@@ -26,7 +26,6 @@
26#include "nx-842.h" 26#include "nx-842.h"
27#include "nx_csbcpb.h" /* struct nx_csbcpb */ 27#include "nx_csbcpb.h" /* struct nx_csbcpb */
28 28
29#define MODULE_NAME NX842_PSERIES_MODULE_NAME
30MODULE_LICENSE("GPL"); 29MODULE_LICENSE("GPL");
31MODULE_AUTHOR("Robert Jennings <rcj@linux.vnet.ibm.com>"); 30MODULE_AUTHOR("Robert Jennings <rcj@linux.vnet.ibm.com>");
32MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors"); 31MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors");
@@ -965,6 +964,7 @@ static struct attribute_group nx842_attribute_group = {
965}; 964};
966 965
967static struct nx842_driver nx842_pseries_driver = { 966static struct nx842_driver nx842_pseries_driver = {
967 .name = KBUILD_MODNAME,
968 .owner = THIS_MODULE, 968 .owner = THIS_MODULE,
969 .constraints = &nx842_pseries_constraints, 969 .constraints = &nx842_pseries_constraints,
970 .compress = nx842_pseries_compress, 970 .compress = nx842_pseries_compress,
@@ -1033,8 +1033,6 @@ static int __init nx842_probe(struct vio_dev *viodev,
1033 goto error; 1033 goto error;
1034 } 1034 }
1035 1035
1036 nx842_register_driver(&nx842_pseries_driver);
1037
1038 return 0; 1036 return 0;
1039 1037
1040error_unlock: 1038error_unlock:
@@ -1066,18 +1064,16 @@ static int __exit nx842_remove(struct vio_dev *viodev)
1066 kfree(old_devdata->counters); 1064 kfree(old_devdata->counters);
1067 kfree(old_devdata); 1065 kfree(old_devdata);
1068 1066
1069 nx842_unregister_driver(&nx842_pseries_driver);
1070
1071 return 0; 1067 return 0;
1072} 1068}
1073 1069
1074static struct vio_device_id nx842_vio_driver_ids[] = { 1070static struct vio_device_id nx842_vio_driver_ids[] = {
1075 {NX842_PSERIES_COMPAT_NAME "-v1", NX842_PSERIES_COMPAT_NAME}, 1071 {"ibm,compression-v1", "ibm,compression"},
1076 {"", ""}, 1072 {"", ""},
1077}; 1073};
1078 1074
1079static struct vio_driver nx842_vio_driver = { 1075static struct vio_driver nx842_vio_driver = {
1080 .name = MODULE_NAME, 1076 .name = KBUILD_MODNAME,
1081 .probe = nx842_probe, 1077 .probe = nx842_probe,
1082 .remove = __exit_p(nx842_remove), 1078 .remove = __exit_p(nx842_remove),
1083 .get_desired_dma = nx842_get_desired_dma, 1079 .get_desired_dma = nx842_get_desired_dma,
@@ -1087,10 +1083,15 @@ static struct vio_driver nx842_vio_driver = {
1087static int __init nx842_init(void) 1083static int __init nx842_init(void)
1088{ 1084{
1089 struct nx842_devdata *new_devdata; 1085 struct nx842_devdata *new_devdata;
1086 int ret;
1087
1090 pr_info("Registering IBM Power 842 compression driver\n"); 1088 pr_info("Registering IBM Power 842 compression driver\n");
1091 1089
1092 BUILD_BUG_ON(sizeof(struct nx842_workmem) > NX842_MEM_COMPRESS); 1090 BUILD_BUG_ON(sizeof(struct nx842_workmem) > NX842_MEM_COMPRESS);
1093 1091
1092 if (!of_find_compatible_node(NULL, NULL, "ibm,compression"))
1093 return -ENODEV;
1094
1094 RCU_INIT_POINTER(devdata, NULL); 1095 RCU_INIT_POINTER(devdata, NULL);
1095 new_devdata = kzalloc(sizeof(*new_devdata), GFP_KERNEL); 1096 new_devdata = kzalloc(sizeof(*new_devdata), GFP_KERNEL);
1096 if (!new_devdata) { 1097 if (!new_devdata) {
@@ -1100,7 +1101,21 @@ static int __init nx842_init(void)
1100 new_devdata->status = UNAVAILABLE; 1101 new_devdata->status = UNAVAILABLE;
1101 RCU_INIT_POINTER(devdata, new_devdata); 1102 RCU_INIT_POINTER(devdata, new_devdata);
1102 1103
1103 return vio_register_driver(&nx842_vio_driver); 1104 ret = vio_register_driver(&nx842_vio_driver);
1105 if (ret) {
1106 pr_err("Could not register VIO driver %d\n", ret);
1107
1108 kfree(new_devdata);
1109 return ret;
1110 }
1111
1112 if (!nx842_platform_driver_set(&nx842_pseries_driver)) {
1113 vio_unregister_driver(&nx842_vio_driver);
1114 kfree(new_devdata);
1115 return -EEXIST;
1116 }
1117
1118 return 0;
1104} 1119}
1105 1120
1106module_init(nx842_init); 1121module_init(nx842_init);
@@ -1111,6 +1126,7 @@ static void __exit nx842_exit(void)
1111 unsigned long flags; 1126 unsigned long flags;
1112 1127
1113 pr_info("Exiting IBM Power 842 compression driver\n"); 1128 pr_info("Exiting IBM Power 842 compression driver\n");
1129 nx842_platform_driver_unset(&nx842_pseries_driver);
1114 spin_lock_irqsave(&devdata_mutex, flags); 1130 spin_lock_irqsave(&devdata_mutex, flags);
1115 old_devdata = rcu_dereference_check(devdata, 1131 old_devdata = rcu_dereference_check(devdata,
1116 lockdep_is_held(&devdata_mutex)); 1132 lockdep_is_held(&devdata_mutex));
@@ -1120,7 +1136,6 @@ static void __exit nx842_exit(void)
1120 if (old_devdata && old_devdata->dev) 1136 if (old_devdata && old_devdata->dev)
1121 dev_set_drvdata(old_devdata->dev, NULL); 1137 dev_set_drvdata(old_devdata->dev, NULL);
1122 kfree(old_devdata); 1138 kfree(old_devdata);
1123 nx842_unregister_driver(&nx842_pseries_driver);
1124 vio_unregister_driver(&nx842_vio_driver); 1139 vio_unregister_driver(&nx842_vio_driver);
1125} 1140}
1126 1141
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
index bf2823ceaf4e..9f391d64c722 100644
--- a/drivers/crypto/nx/nx-842.c
+++ b/drivers/crypto/nx/nx-842.c
@@ -21,71 +21,10 @@
21 21
22#include "nx-842.h" 22#include "nx-842.h"
23 23
24#define MODULE_NAME "nx-compress"
25MODULE_LICENSE("GPL"); 24MODULE_LICENSE("GPL");
26MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>"); 25MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>");
27MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors"); 26MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors");
28 27
29/* Only one driver is expected, based on the HW platform */
30static struct nx842_driver *nx842_driver;
31static DEFINE_SPINLOCK(nx842_driver_lock); /* protects driver pointers */
32
33void nx842_register_driver(struct nx842_driver *driver)
34{
35 spin_lock(&nx842_driver_lock);
36
37 if (nx842_driver) {
38 pr_err("can't register driver %s, already using driver %s\n",
39 driver->owner->name, nx842_driver->owner->name);
40 } else {
41 pr_info("registering driver %s\n", driver->owner->name);
42 nx842_driver = driver;
43 }
44
45 spin_unlock(&nx842_driver_lock);
46}
47EXPORT_SYMBOL_GPL(nx842_register_driver);
48
49void nx842_unregister_driver(struct nx842_driver *driver)
50{
51 spin_lock(&nx842_driver_lock);
52
53 if (nx842_driver == driver) {
54 pr_info("unregistering driver %s\n", driver->owner->name);
55 nx842_driver = NULL;
56 } else if (nx842_driver) {
57 pr_err("can't unregister driver %s, using driver %s\n",
58 driver->owner->name, nx842_driver->owner->name);
59 } else {
60 pr_err("can't unregister driver %s, no driver in use\n",
61 driver->owner->name);
62 }
63
64 spin_unlock(&nx842_driver_lock);
65}
66EXPORT_SYMBOL_GPL(nx842_unregister_driver);
67
68static struct nx842_driver *get_driver(void)
69{
70 struct nx842_driver *driver = NULL;
71
72 spin_lock(&nx842_driver_lock);
73
74 driver = nx842_driver;
75
76 if (driver && !try_module_get(driver->owner))
77 driver = NULL;
78
79 spin_unlock(&nx842_driver_lock);
80
81 return driver;
82}
83
84static void put_driver(struct nx842_driver *driver)
85{
86 module_put(driver->owner);
87}
88
89/** 28/**
90 * nx842_constraints 29 * nx842_constraints
91 * 30 *
@@ -109,69 +48,38 @@ static void put_driver(struct nx842_driver *driver)
109 */ 48 */
110int nx842_constraints(struct nx842_constraints *c) 49int nx842_constraints(struct nx842_constraints *c)
111{ 50{
112 struct nx842_driver *driver = get_driver(); 51 memcpy(c, nx842_platform_driver()->constraints, sizeof(*c));
113 int ret = 0; 52 return 0;
114
115 if (!driver)
116 return -ENODEV;
117
118 BUG_ON(!c);
119 memcpy(c, driver->constraints, sizeof(*c));
120
121 put_driver(driver);
122
123 return ret;
124} 53}
125EXPORT_SYMBOL_GPL(nx842_constraints); 54EXPORT_SYMBOL_GPL(nx842_constraints);
126 55
127int nx842_compress(const unsigned char *in, unsigned int in_len, 56int nx842_compress(const unsigned char *in, unsigned int ilen,
128 unsigned char *out, unsigned int *out_len, 57 unsigned char *out, unsigned int *olen, void *wmem)
129 void *wrkmem)
130{ 58{
131 struct nx842_driver *driver = get_driver(); 59 return nx842_platform_driver()->compress(in, ilen, out, olen, wmem);
132 int ret;
133
134 if (!driver)
135 return -ENODEV;
136
137 ret = driver->compress(in, in_len, out, out_len, wrkmem);
138
139 put_driver(driver);
140
141 return ret;
142} 60}
143EXPORT_SYMBOL_GPL(nx842_compress); 61EXPORT_SYMBOL_GPL(nx842_compress);
144 62
145int nx842_decompress(const unsigned char *in, unsigned int in_len, 63int nx842_decompress(const unsigned char *in, unsigned int ilen,
146 unsigned char *out, unsigned int *out_len, 64 unsigned char *out, unsigned int *olen, void *wmem)
147 void *wrkmem)
148{ 65{
149 struct nx842_driver *driver = get_driver(); 66 return nx842_platform_driver()->decompress(in, ilen, out, olen, wmem);
150 int ret;
151
152 if (!driver)
153 return -ENODEV;
154
155 ret = driver->decompress(in, in_len, out, out_len, wrkmem);
156
157 put_driver(driver);
158
159 return ret;
160} 67}
161EXPORT_SYMBOL_GPL(nx842_decompress); 68EXPORT_SYMBOL_GPL(nx842_decompress);
162 69
163static __init int nx842_init(void) 70static __init int nx842_init(void)
164{ 71{
165 pr_info("loading\n"); 72 request_module("nx-compress-powernv");
166 73 request_module("nx-compress-pseries");
167 if (of_find_compatible_node(NULL, NULL, NX842_POWERNV_COMPAT_NAME)) 74
168 request_module_nowait(NX842_POWERNV_MODULE_NAME); 75 /* we prevent loading if there's no platform driver, and we get the
169 else if (of_find_compatible_node(NULL, NULL, NX842_PSERIES_COMPAT_NAME)) 76 * module that set it so it won't unload, so we don't need to check
170 request_module_nowait(NX842_PSERIES_MODULE_NAME); 77 * if it's set in any of the above functions
171 else 78 */
79 if (!nx842_platform_driver_get()) {
172 pr_err("no nx842 driver found.\n"); 80 pr_err("no nx842 driver found.\n");
173 81 return -ENODEV;
174 pr_info("loaded\n"); 82 }
175 83
176 return 0; 84 return 0;
177} 85}
@@ -179,6 +87,6 @@ module_init(nx842_init);
179 87
180static void __exit nx842_exit(void) 88static void __exit nx842_exit(void)
181{ 89{
182 pr_info("NX842 unloaded\n"); 90 nx842_platform_driver_put();
183} 91}
184module_exit(nx842_exit); 92module_exit(nx842_exit);
diff --git a/drivers/crypto/nx/nx-842.h b/drivers/crypto/nx/nx-842.h
index 84b15b7448bb..1730f4da1cf6 100644
--- a/drivers/crypto/nx/nx-842.h
+++ b/drivers/crypto/nx/nx-842.h
@@ -105,6 +105,7 @@ static inline unsigned long nx842_get_pa(void *addr)
105#define SET_FIELD(v, m, val) (((v) & ~(m)) | (((val) << MASK_LSH(m)) & (m))) 105#define SET_FIELD(v, m, val) (((v) & ~(m)) | (((val) << MASK_LSH(m)) & (m)))
106 106
107struct nx842_driver { 107struct nx842_driver {
108 char *name;
108 struct module *owner; 109 struct module *owner;
109 110
110 struct nx842_constraints *constraints; 111 struct nx842_constraints *constraints;
@@ -117,15 +118,10 @@ struct nx842_driver {
117 void *wrkmem); 118 void *wrkmem);
118}; 119};
119 120
120void nx842_register_driver(struct nx842_driver *driver); 121struct nx842_driver *nx842_platform_driver(void);
121void nx842_unregister_driver(struct nx842_driver *driver); 122bool nx842_platform_driver_set(struct nx842_driver *driver);
122 123void nx842_platform_driver_unset(struct nx842_driver *driver);
123 124bool nx842_platform_driver_get(void);
124/* To allow the main nx-compress module to load platform module */ 125void nx842_platform_driver_put(void);
125#define NX842_POWERNV_MODULE_NAME "nx-compress-powernv"
126#define NX842_POWERNV_COMPAT_NAME "ibm,power-nx"
127#define NX842_PSERIES_MODULE_NAME "nx-compress-pseries"
128#define NX842_PSERIES_COMPAT_NAME "ibm,compression"
129
130 126
131#endif /* __NX_842_H__ */ 127#endif /* __NX_842_H__ */