diff options
Diffstat (limited to 'drivers/parport')
-rw-r--r-- | drivers/parport/parport_gsc.c | 4 | ||||
-rw-r--r-- | drivers/parport/parport_sunbpp.c | 5 | ||||
-rw-r--r-- | drivers/parport/procfs.c | 6 |
3 files changed, 6 insertions, 9 deletions
diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c index 050773c36823..a5251cb5fb0c 100644 --- a/drivers/parport/parport_gsc.c +++ b/drivers/parport/parport_gsc.c | |||
@@ -246,14 +246,14 @@ struct parport *parport_gsc_probe_port(unsigned long base, | |||
246 | printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base); | 246 | printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base); |
247 | return NULL; | 247 | return NULL; |
248 | } | 248 | } |
249 | ops = kmalloc (sizeof (struct parport_operations), GFP_KERNEL); | 249 | ops = kmemdup(&parport_gsc_ops, sizeof(struct parport_operations), |
250 | GFP_KERNEL); | ||
250 | if (!ops) { | 251 | if (!ops) { |
251 | printk (KERN_DEBUG "parport (0x%lx): no memory for ops!\n", | 252 | printk (KERN_DEBUG "parport (0x%lx): no memory for ops!\n", |
252 | base); | 253 | base); |
253 | kfree (priv); | 254 | kfree (priv); |
254 | return NULL; | 255 | return NULL; |
255 | } | 256 | } |
256 | memcpy (ops, &parport_gsc_ops, sizeof (struct parport_operations)); | ||
257 | priv->ctr = 0xc; | 257 | priv->ctr = 0xc; |
258 | priv->ctr_writable = 0xff; | 258 | priv->ctr_writable = 0xff; |
259 | priv->dma_buf = 0; | 259 | priv->dma_buf = 0; |
diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c index 5c4b6a1db6ca..dffd6d0bd15b 100644 --- a/drivers/parport/parport_sunbpp.c +++ b/drivers/parport/parport_sunbpp.c | |||
@@ -284,12 +284,11 @@ static int bpp_probe(struct platform_device *op) | |||
284 | size = resource_size(&op->resource[0]); | 284 | size = resource_size(&op->resource[0]); |
285 | dma = PARPORT_DMA_NONE; | 285 | dma = PARPORT_DMA_NONE; |
286 | 286 | ||
287 | ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL); | 287 | ops = kmemdup(&parport_sunbpp_ops, sizeof(struct parport_operations), |
288 | GFP_KERNEL); | ||
288 | if (!ops) | 289 | if (!ops) |
289 | goto out_unmap; | 290 | goto out_unmap; |
290 | 291 | ||
291 | memcpy (ops, &parport_sunbpp_ops, sizeof(struct parport_operations)); | ||
292 | |||
293 | dprintk(("register_port\n")); | 292 | dprintk(("register_port\n")); |
294 | if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) | 293 | if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) |
295 | goto out_free_ops; | 294 | goto out_free_ops; |
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c index 3f56bc086cb5..92ed045a5f93 100644 --- a/drivers/parport/procfs.c +++ b/drivers/parport/procfs.c | |||
@@ -476,10 +476,9 @@ int parport_proc_register(struct parport *port) | |||
476 | struct parport_sysctl_table *t; | 476 | struct parport_sysctl_table *t; |
477 | int i; | 477 | int i; |
478 | 478 | ||
479 | t = kmalloc(sizeof(*t), GFP_KERNEL); | 479 | t = kmemdup(&parport_sysctl_template, sizeof(*t), GFP_KERNEL); |
480 | if (t == NULL) | 480 | if (t == NULL) |
481 | return -ENOMEM; | 481 | return -ENOMEM; |
482 | memcpy(t, &parport_sysctl_template, sizeof(*t)); | ||
483 | 482 | ||
484 | t->device_dir[0].extra1 = port; | 483 | t->device_dir[0].extra1 = port; |
485 | 484 | ||
@@ -523,10 +522,9 @@ int parport_device_proc_register(struct pardevice *device) | |||
523 | struct parport_device_sysctl_table *t; | 522 | struct parport_device_sysctl_table *t; |
524 | struct parport * port = device->port; | 523 | struct parport * port = device->port; |
525 | 524 | ||
526 | t = kmalloc(sizeof(*t), GFP_KERNEL); | 525 | t = kmemdup(&parport_device_sysctl_template, sizeof(*t), GFP_KERNEL); |
527 | if (t == NULL) | 526 | if (t == NULL) |
528 | return -ENOMEM; | 527 | return -ENOMEM; |
529 | memcpy(t, &parport_device_sysctl_template, sizeof(*t)); | ||
530 | 528 | ||
531 | t->dev_dir[0].child = t->parport_dir; | 529 | t->dev_dir[0].child = t->parport_dir; |
532 | t->parport_dir[0].child = t->port_dir; | 530 | t->parport_dir[0].child = t->port_dir; |