.. | .. |
---|
89 | 89 | #undef DIONAME |
---|
90 | 90 | #undef DIOFBNAME |
---|
91 | 91 | |
---|
92 | | -static const char *unknowndioname |
---|
93 | | - = "unknown DIO board -- please email <linux-m68k@lists.linux-m68k.org>!"; |
---|
| 92 | +static const char unknowndioname[] |
---|
| 93 | + = "unknown DIO board, please email linux-m68k@lists.linux-m68k.org"; |
---|
94 | 94 | |
---|
95 | 95 | static const char *dio_getname(int id) |
---|
96 | 96 | { |
---|
.. | .. |
---|
109 | 109 | #define dio_getname(_id) (dio_no_name) |
---|
110 | 110 | |
---|
111 | 111 | #endif /* CONFIG_DIO_CONSTANTS */ |
---|
| 112 | + |
---|
| 113 | +static void dio_dev_release(struct device *dev) |
---|
| 114 | +{ |
---|
| 115 | + struct dio_dev *ddev = container_of(dev, typeof(struct dio_dev), dev); |
---|
| 116 | + kfree(ddev); |
---|
| 117 | +} |
---|
112 | 118 | |
---|
113 | 119 | int __init dio_find(int deviceid) |
---|
114 | 120 | { |
---|
.. | .. |
---|
135 | 141 | else |
---|
136 | 142 | va = ioremap(pa, PAGE_SIZE); |
---|
137 | 143 | |
---|
138 | | - if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) { |
---|
| 144 | + if (copy_from_kernel_nofault(&i, |
---|
| 145 | + (unsigned char *)va + DIO_IDOFF, 1)) { |
---|
139 | 146 | if (scode >= DIOII_SCBASE) |
---|
140 | 147 | iounmap(va); |
---|
141 | 148 | continue; /* no board present at that select code */ |
---|
.. | .. |
---|
208 | 215 | else |
---|
209 | 216 | va = ioremap(pa, PAGE_SIZE); |
---|
210 | 217 | |
---|
211 | | - if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) { |
---|
| 218 | + if (copy_from_kernel_nofault(&i, |
---|
| 219 | + (unsigned char *)va + DIO_IDOFF, 1)) { |
---|
212 | 220 | if (scode >= DIOII_SCBASE) |
---|
213 | 221 | iounmap(va); |
---|
214 | 222 | continue; /* no board present at that select code */ |
---|
.. | .. |
---|
222 | 230 | dev->bus = &dio_bus; |
---|
223 | 231 | dev->dev.parent = &dio_bus.dev; |
---|
224 | 232 | dev->dev.bus = &dio_bus_type; |
---|
| 233 | + dev->dev.release = dio_dev_release; |
---|
225 | 234 | dev->scode = scode; |
---|
226 | 235 | dev->resource.start = pa; |
---|
227 | 236 | dev->resource.end = pa + DIO_SIZE(scode, va); |
---|
.. | .. |
---|
249 | 258 | if (error) { |
---|
250 | 259 | pr_err("DIO: Error registering device %s\n", |
---|
251 | 260 | dev->name); |
---|
| 261 | + put_device(&dev->dev); |
---|
252 | 262 | continue; |
---|
253 | 263 | } |
---|
254 | 264 | error = dio_create_sysfs_dev_files(dev); |
---|