git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
drivers
/
misc
/
ibmasm
/
module.c
diff --git
a/drivers/misc/ibmasm/module.c
b/drivers/misc/ibmasm/module.c
index
ee29ced
..
c46da50
100644
(file)
--- a/
drivers/misc/ibmasm/module.c
+++ b/
drivers/misc/ibmasm/module.c
@@
-57,15
+57,22
@@
#include "remote.h"
#include "remote.h"
-static int __init ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+static int __
dev
init ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
{
{
- int result = -ENOMEM;
+ int
err,
result = -ENOMEM;
struct service_processor *sp;
struct service_processor *sp;
+ if ((err = pci_enable_device(pdev))) {
+ printk(KERN_ERR "%s: can't enable PCI device at %s\n",
+ DRIVER_NAME, pci_name(pdev));
+ return err;
+ }
+
sp = kmalloc(sizeof(struct service_processor), GFP_KERNEL);
if (sp == NULL) {
dev_err(&pdev->dev, "Failed to allocate memory\n");
sp = kmalloc(sizeof(struct service_processor), GFP_KERNEL);
if (sp == NULL) {
dev_err(&pdev->dev, "Failed to allocate memory\n");
- return result;
+ result = -ENOMEM;
+ goto error_kmalloc;
}
memset(sp, 0, sizeof(struct service_processor));
}
memset(sp, 0, sizeof(struct service_processor));
@@
-100,7
+107,7
@@
static int __init ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_
goto error_remote_queue;
}
goto error_remote_queue;
}
- sp
->lock = SPIN_LOCK_UNLOCKED
;
+ sp
in_lock_init(&sp->lock)
;
INIT_LIST_HEAD(&sp->command_queue);
result = request_irq(sp->irq, ibmasm_interrupt_handler, SA_SHIRQ, sp->devname, (void*)sp);
INIT_LIST_HEAD(&sp->command_queue);
result = request_irq(sp->irq, ibmasm_interrupt_handler, SA_SHIRQ, sp->devname, (void*)sp);
@@
-148,11
+155,13
@@
error_heartbeat:
ibmasm_event_buffer_exit(sp);
error_eventbuffer:
kfree(sp);
ibmasm_event_buffer_exit(sp);
error_eventbuffer:
kfree(sp);
+error_kmalloc:
+ pci_disable_device(pdev);
return result;
}
return result;
}
-static void __exit ibmasm_remove_one(struct pci_dev *pdev)
+static void __
dev
exit ibmasm_remove_one(struct pci_dev *pdev)
{
struct service_processor *sp = (struct service_processor *)pci_get_drvdata(pdev);
{
struct service_processor *sp = (struct service_processor *)pci_get_drvdata(pdev);
@@
-166,6
+175,7
@@
static void __exit ibmasm_remove_one(struct pci_dev *pdev)
iounmap(sp->base_address);
ibmasm_event_buffer_exit(sp);
kfree(sp);
iounmap(sp->base_address);
ibmasm_event_buffer_exit(sp);
kfree(sp);
+ pci_disable_device(pdev);
}
static struct pci_device_id ibmasm_pci_table[] =
}
static struct pci_device_id ibmasm_pci_table[] =
@@
-199,10
+209,9
@@
static int __init ibmasm_init(void)
return result;
}
result = pci_register_driver(&ibmasm_driver);
return result;
}
result = pci_register_driver(&ibmasm_driver);
- if (result <= 0) {
- pci_unregister_driver(&ibmasm_driver);
+ if (result) {
ibmasmfs_unregister();
ibmasmfs_unregister();
- return
-ENODEV
;
+ return
result
;
}
ibmasm_register_panic_notifier();
info(DRIVER_DESC " version " DRIVER_VERSION " loaded");
}
ibmasm_register_panic_notifier();
info(DRIVER_DESC " version " DRIVER_VERSION " loaded");
@@
-215,3
+224,4
@@
module_exit(ibmasm_exit);
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL");
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL");
+