diff options
Diffstat (limited to 'char.c')
-rw-r--r-- | char.c | 20 |
1 files changed, 4 insertions, 16 deletions
@@ -44,11 +44,7 @@ int new_doomdev(struct pci_dev *dev) return -ENOMEM; } - doom_data = kmalloc(sizeof(*doom_data), GFP_KERNEL); - if (doom_data == NULL) { - err = -ENOMEM; - goto error_kmalloc; - } + doom_data = pci_get_drvdata(dev); doom_data->cdev = cdev_alloc(); if (doom_data->cdev == NULL) { @@ -63,8 +59,6 @@ int new_doomdev(struct pci_dev *dev) doom_data->device = device_create(doom_class, &dev->dev, devt, NULL, "doom%d", minor), ORFAIL_PTR(doom_data->device, error_create); - - pci_set_drvdata(dev, doom_data); return 0; @@ -72,19 +66,13 @@ error_create: cdev_del(doom_data->cdev); error_add: error_cdev: - kfree(doom_data); -error_kmalloc: return err; } -void destroy_doomdev(struct pci_dev *dev) +void destroy_doomdev(struct doom_data *doom_data) { - struct doom_data *data; - - data = pci_get_drvdata(dev); - device_destroy(doom_class, data->device->devt); - cdev_del(data->cdev); - kfree(data); + device_destroy(doom_class, doom_data->device->devt); + cdev_del(doom_data->cdev); } int char_init(void) |