diff options
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_main.c | 29 |
2 files changed, 22 insertions, 9 deletions
diff --git a/drivers/infiniband/hw/ocrdma/Kconfig b/drivers/infiniband/hw/ocrdma/Kconfig index cf993424e2fb..b5b6056c8518 100644 --- a/drivers/infiniband/hw/ocrdma/Kconfig +++ b/drivers/infiniband/hw/ocrdma/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config INFINIBAND_OCRDMA | 1 | config INFINIBAND_OCRDMA |
| 2 | tristate "Emulex One Connect HCA support" | 2 | tristate "Emulex One Connect HCA support" |
| 3 | depends on ETHERNET && NETDEVICES && PCI | 3 | depends on ETHERNET && NETDEVICES && PCI && (IPV6 || IPV6=n) |
| 4 | select NET_VENDOR_EMULEX | 4 | select NET_VENDOR_EMULEX |
| 5 | select BE2NET | 5 | select BE2NET |
| 6 | ---help--- | 6 | ---help--- |
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c index 0bc1efb02ff5..a20d16eaae71 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c | |||
| @@ -51,12 +51,6 @@ static DEFINE_SPINLOCK(ocrdma_devlist_lock); | |||
| 51 | static DEFINE_IDR(ocrdma_dev_id); | 51 | static DEFINE_IDR(ocrdma_dev_id); |
| 52 | 52 | ||
| 53 | static union ib_gid ocrdma_zero_sgid; | 53 | static union ib_gid ocrdma_zero_sgid; |
| 54 | static int ocrdma_inet6addr_event(struct notifier_block *, | ||
| 55 | unsigned long, void *); | ||
| 56 | |||
| 57 | static struct notifier_block ocrdma_inet6addr_notifier = { | ||
| 58 | .notifier_call = ocrdma_inet6addr_event | ||
| 59 | }; | ||
| 60 | 54 | ||
| 61 | static int ocrdma_get_instance(void) | 55 | static int ocrdma_get_instance(void) |
| 62 | { | 56 | { |
| @@ -204,6 +198,8 @@ static int ocrdma_build_sgid_tbl(struct ocrdma_dev *dev) | |||
| 204 | return 0; | 198 | return 0; |
| 205 | } | 199 | } |
| 206 | 200 | ||
| 201 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 202 | |||
| 207 | static int ocrdma_inet6addr_event(struct notifier_block *notifier, | 203 | static int ocrdma_inet6addr_event(struct notifier_block *notifier, |
| 208 | unsigned long event, void *ptr) | 204 | unsigned long event, void *ptr) |
| 209 | { | 205 | { |
| @@ -259,6 +255,12 @@ static int ocrdma_inet6addr_event(struct notifier_block *notifier, | |||
| 259 | return NOTIFY_OK; | 255 | return NOTIFY_OK; |
| 260 | } | 256 | } |
| 261 | 257 | ||
| 258 | static struct notifier_block ocrdma_inet6addr_notifier = { | ||
| 259 | .notifier_call = ocrdma_inet6addr_event | ||
| 260 | }; | ||
| 261 | |||
| 262 | #endif /* IPV6 */ | ||
| 263 | |||
| 262 | static enum rdma_link_layer ocrdma_link_layer(struct ib_device *device, | 264 | static enum rdma_link_layer ocrdma_link_layer(struct ib_device *device, |
| 263 | u8 port_num) | 265 | u8 port_num) |
| 264 | { | 266 | { |
| @@ -541,23 +543,34 @@ static struct ocrdma_driver ocrdma_drv = { | |||
| 541 | .state_change_handler = ocrdma_event_handler, | 543 | .state_change_handler = ocrdma_event_handler, |
| 542 | }; | 544 | }; |
| 543 | 545 | ||
| 546 | static void ocrdma_unregister_inet6addr_notifier(void) | ||
| 547 | { | ||
| 548 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 549 | unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier); | ||
| 550 | #endif | ||
| 551 | } | ||
| 552 | |||
| 544 | static int __init ocrdma_init_module(void) | 553 | static int __init ocrdma_init_module(void) |
| 545 | { | 554 | { |
| 546 | int status; | 555 | int status; |
| 547 | 556 | ||
| 557 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 548 | status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier); | 558 | status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier); |
| 549 | if (status) | 559 | if (status) |
| 550 | return status; | 560 | return status; |
| 561 | #endif | ||
| 562 | |||
| 551 | status = be_roce_register_driver(&ocrdma_drv); | 563 | status = be_roce_register_driver(&ocrdma_drv); |
| 552 | if (status) | 564 | if (status) |
| 553 | unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier); | 565 | ocrdma_unregister_inet6addr_notifier(); |
| 566 | |||
| 554 | return status; | 567 | return status; |
| 555 | } | 568 | } |
| 556 | 569 | ||
| 557 | static void __exit ocrdma_exit_module(void) | 570 | static void __exit ocrdma_exit_module(void) |
| 558 | { | 571 | { |
| 559 | be_roce_unregister_driver(&ocrdma_drv); | 572 | be_roce_unregister_driver(&ocrdma_drv); |
| 560 | unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier); | 573 | ocrdma_unregister_inet6addr_notifier(); |
| 561 | } | 574 | } |
| 562 | 575 | ||
| 563 | module_init(ocrdma_init_module); | 576 | module_init(ocrdma_init_module); |
