| .. | .. |
|---|
| 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); |
|---|