diff options
Diffstat (limited to 'drivers/infiniband/hw/ehca/ehca_main.c')
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_main.c | 94 |
1 files changed, 42 insertions, 52 deletions
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c index fe90e7454560..c3f99f33b49c 100644 --- a/drivers/infiniband/hw/ehca/ehca_main.c +++ b/drivers/infiniband/hw/ehca/ehca_main.c | |||
@@ -52,7 +52,7 @@ | |||
52 | MODULE_LICENSE("Dual BSD/GPL"); | 52 | MODULE_LICENSE("Dual BSD/GPL"); |
53 | MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>"); | 53 | MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>"); |
54 | MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver"); | 54 | MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver"); |
55 | MODULE_VERSION("SVNEHCA_0022"); | 55 | MODULE_VERSION("SVNEHCA_0023"); |
56 | 56 | ||
57 | int ehca_open_aqp1 = 0; | 57 | int ehca_open_aqp1 = 0; |
58 | int ehca_debug_level = 0; | 58 | int ehca_debug_level = 0; |
@@ -62,7 +62,7 @@ int ehca_use_hp_mr = 0; | |||
62 | int ehca_port_act_time = 30; | 62 | int ehca_port_act_time = 30; |
63 | int ehca_poll_all_eqs = 1; | 63 | int ehca_poll_all_eqs = 1; |
64 | int ehca_static_rate = -1; | 64 | int ehca_static_rate = -1; |
65 | int ehca_scaling_code = 1; | 65 | int ehca_scaling_code = 0; |
66 | 66 | ||
67 | module_param_named(open_aqp1, ehca_open_aqp1, int, 0); | 67 | module_param_named(open_aqp1, ehca_open_aqp1, int, 0); |
68 | module_param_named(debug_level, ehca_debug_level, int, 0); | 68 | module_param_named(debug_level, ehca_debug_level, int, 0); |
@@ -98,6 +98,7 @@ MODULE_PARM_DESC(scaling_code, | |||
98 | 98 | ||
99 | spinlock_t ehca_qp_idr_lock; | 99 | spinlock_t ehca_qp_idr_lock; |
100 | spinlock_t ehca_cq_idr_lock; | 100 | spinlock_t ehca_cq_idr_lock; |
101 | spinlock_t hcall_lock; | ||
101 | DEFINE_IDR(ehca_qp_idr); | 102 | DEFINE_IDR(ehca_qp_idr); |
102 | DEFINE_IDR(ehca_cq_idr); | 103 | DEFINE_IDR(ehca_cq_idr); |
103 | 104 | ||
@@ -453,15 +454,14 @@ static ssize_t ehca_store_debug_level(struct device_driver *ddp, | |||
453 | DRIVER_ATTR(debug_level, S_IRUSR | S_IWUSR, | 454 | DRIVER_ATTR(debug_level, S_IRUSR | S_IWUSR, |
454 | ehca_show_debug_level, ehca_store_debug_level); | 455 | ehca_show_debug_level, ehca_store_debug_level); |
455 | 456 | ||
456 | void ehca_create_driver_sysfs(struct ibmebus_driver *drv) | 457 | static struct attribute *ehca_drv_attrs[] = { |
457 | { | 458 | &driver_attr_debug_level.attr, |
458 | driver_create_file(&drv->driver, &driver_attr_debug_level); | 459 | NULL |
459 | } | 460 | }; |
460 | 461 | ||
461 | void ehca_remove_driver_sysfs(struct ibmebus_driver *drv) | 462 | static struct attribute_group ehca_drv_attr_grp = { |
462 | { | 463 | .attrs = ehca_drv_attrs |
463 | driver_remove_file(&drv->driver, &driver_attr_debug_level); | 464 | }; |
464 | } | ||
465 | 465 | ||
466 | #define EHCA_RESOURCE_ATTR(name) \ | 466 | #define EHCA_RESOURCE_ATTR(name) \ |
467 | static ssize_t ehca_show_##name(struct device *dev, \ | 467 | static ssize_t ehca_show_##name(struct device *dev, \ |
@@ -523,44 +523,28 @@ static ssize_t ehca_show_adapter_handle(struct device *dev, | |||
523 | } | 523 | } |
524 | static DEVICE_ATTR(adapter_handle, S_IRUGO, ehca_show_adapter_handle, NULL); | 524 | static DEVICE_ATTR(adapter_handle, S_IRUGO, ehca_show_adapter_handle, NULL); |
525 | 525 | ||
526 | static struct attribute *ehca_dev_attrs[] = { | ||
527 | &dev_attr_adapter_handle.attr, | ||
528 | &dev_attr_num_ports.attr, | ||
529 | &dev_attr_hw_ver.attr, | ||
530 | &dev_attr_max_eq.attr, | ||
531 | &dev_attr_cur_eq.attr, | ||
532 | &dev_attr_max_cq.attr, | ||
533 | &dev_attr_cur_cq.attr, | ||
534 | &dev_attr_max_qp.attr, | ||
535 | &dev_attr_cur_qp.attr, | ||
536 | &dev_attr_max_mr.attr, | ||
537 | &dev_attr_cur_mr.attr, | ||
538 | &dev_attr_max_mw.attr, | ||
539 | &dev_attr_cur_mw.attr, | ||
540 | &dev_attr_max_pd.attr, | ||
541 | &dev_attr_max_ah.attr, | ||
542 | NULL | ||
543 | }; | ||
526 | 544 | ||
527 | void ehca_create_device_sysfs(struct ibmebus_dev *dev) | 545 | static struct attribute_group ehca_dev_attr_grp = { |
528 | { | 546 | .attrs = ehca_dev_attrs |
529 | device_create_file(&dev->ofdev.dev, &dev_attr_adapter_handle); | 547 | }; |
530 | device_create_file(&dev->ofdev.dev, &dev_attr_num_ports); | ||
531 | device_create_file(&dev->ofdev.dev, &dev_attr_hw_ver); | ||
532 | device_create_file(&dev->ofdev.dev, &dev_attr_max_eq); | ||
533 | device_create_file(&dev->ofdev.dev, &dev_attr_cur_eq); | ||
534 | device_create_file(&dev->ofdev.dev, &dev_attr_max_cq); | ||
535 | device_create_file(&dev->ofdev.dev, &dev_attr_cur_cq); | ||
536 | device_create_file(&dev->ofdev.dev, &dev_attr_max_qp); | ||
537 | device_create_file(&dev->ofdev.dev, &dev_attr_cur_qp); | ||
538 | device_create_file(&dev->ofdev.dev, &dev_attr_max_mr); | ||
539 | device_create_file(&dev->ofdev.dev, &dev_attr_cur_mr); | ||
540 | device_create_file(&dev->ofdev.dev, &dev_attr_max_mw); | ||
541 | device_create_file(&dev->ofdev.dev, &dev_attr_cur_mw); | ||
542 | device_create_file(&dev->ofdev.dev, &dev_attr_max_pd); | ||
543 | device_create_file(&dev->ofdev.dev, &dev_attr_max_ah); | ||
544 | } | ||
545 | |||
546 | void ehca_remove_device_sysfs(struct ibmebus_dev *dev) | ||
547 | { | ||
548 | device_remove_file(&dev->ofdev.dev, &dev_attr_adapter_handle); | ||
549 | device_remove_file(&dev->ofdev.dev, &dev_attr_num_ports); | ||
550 | device_remove_file(&dev->ofdev.dev, &dev_attr_hw_ver); | ||
551 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_eq); | ||
552 | device_remove_file(&dev->ofdev.dev, &dev_attr_cur_eq); | ||
553 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_cq); | ||
554 | device_remove_file(&dev->ofdev.dev, &dev_attr_cur_cq); | ||
555 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_qp); | ||
556 | device_remove_file(&dev->ofdev.dev, &dev_attr_cur_qp); | ||
557 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_mr); | ||
558 | device_remove_file(&dev->ofdev.dev, &dev_attr_cur_mr); | ||
559 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_mw); | ||
560 | device_remove_file(&dev->ofdev.dev, &dev_attr_cur_mw); | ||
561 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_pd); | ||
562 | device_remove_file(&dev->ofdev.dev, &dev_attr_max_ah); | ||
563 | } | ||
564 | 548 | ||
565 | static int __devinit ehca_probe(struct ibmebus_dev *dev, | 549 | static int __devinit ehca_probe(struct ibmebus_dev *dev, |
566 | const struct of_device_id *id) | 550 | const struct of_device_id *id) |
@@ -668,7 +652,10 @@ static int __devinit ehca_probe(struct ibmebus_dev *dev, | |||
668 | } | 652 | } |
669 | } | 653 | } |
670 | 654 | ||
671 | ehca_create_device_sysfs(dev); | 655 | ret = sysfs_create_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp); |
656 | if (ret) /* only complain; we can live without attributes */ | ||
657 | ehca_err(&shca->ib_device, | ||
658 | "Cannot create device attributes ret=%d", ret); | ||
672 | 659 | ||
673 | spin_lock(&shca_list_lock); | 660 | spin_lock(&shca_list_lock); |
674 | list_add(&shca->shca_list, &shca_list); | 661 | list_add(&shca->shca_list, &shca_list); |
@@ -720,7 +707,7 @@ static int __devexit ehca_remove(struct ibmebus_dev *dev) | |||
720 | struct ehca_shca *shca = dev->ofdev.dev.driver_data; | 707 | struct ehca_shca *shca = dev->ofdev.dev.driver_data; |
721 | int ret; | 708 | int ret; |
722 | 709 | ||
723 | ehca_remove_device_sysfs(dev); | 710 | sysfs_remove_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp); |
724 | 711 | ||
725 | if (ehca_open_aqp1 == 1) { | 712 | if (ehca_open_aqp1 == 1) { |
726 | int i; | 713 | int i; |
@@ -812,11 +799,12 @@ int __init ehca_module_init(void) | |||
812 | int ret; | 799 | int ret; |
813 | 800 | ||
814 | printk(KERN_INFO "eHCA Infiniband Device Driver " | 801 | printk(KERN_INFO "eHCA Infiniband Device Driver " |
815 | "(Rel.: SVNEHCA_0022)\n"); | 802 | "(Rel.: SVNEHCA_0023)\n"); |
816 | idr_init(&ehca_qp_idr); | 803 | idr_init(&ehca_qp_idr); |
817 | idr_init(&ehca_cq_idr); | 804 | idr_init(&ehca_cq_idr); |
818 | spin_lock_init(&ehca_qp_idr_lock); | 805 | spin_lock_init(&ehca_qp_idr_lock); |
819 | spin_lock_init(&ehca_cq_idr_lock); | 806 | spin_lock_init(&ehca_cq_idr_lock); |
807 | spin_lock_init(&hcall_lock); | ||
820 | 808 | ||
821 | INIT_LIST_HEAD(&shca_list); | 809 | INIT_LIST_HEAD(&shca_list); |
822 | spin_lock_init(&shca_list_lock); | 810 | spin_lock_init(&shca_list_lock); |
@@ -838,7 +826,9 @@ int __init ehca_module_init(void) | |||
838 | goto module_init2; | 826 | goto module_init2; |
839 | } | 827 | } |
840 | 828 | ||
841 | ehca_create_driver_sysfs(&ehca_driver); | 829 | ret = sysfs_create_group(&ehca_driver.driver.kobj, &ehca_drv_attr_grp); |
830 | if (ret) /* only complain; we can live without attributes */ | ||
831 | ehca_gen_err("Cannot create driver attributes ret=%d", ret); | ||
842 | 832 | ||
843 | if (ehca_poll_all_eqs != 1) { | 833 | if (ehca_poll_all_eqs != 1) { |
844 | ehca_gen_err("WARNING!!!"); | 834 | ehca_gen_err("WARNING!!!"); |
@@ -865,7 +855,7 @@ void __exit ehca_module_exit(void) | |||
865 | if (ehca_poll_all_eqs == 1) | 855 | if (ehca_poll_all_eqs == 1) |
866 | del_timer_sync(&poll_eqs_timer); | 856 | del_timer_sync(&poll_eqs_timer); |
867 | 857 | ||
868 | ehca_remove_driver_sysfs(&ehca_driver); | 858 | sysfs_remove_group(&ehca_driver.driver.kobj, &ehca_drv_attr_grp); |
869 | ibmebus_unregister_driver(&ehca_driver); | 859 | ibmebus_unregister_driver(&ehca_driver); |
870 | 860 | ||
871 | ehca_destroy_slab_caches(); | 861 | ehca_destroy_slab_caches(); |