Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34955669 authored by Roland Dreier's avatar Roland Dreier
Browse files

RDMA/ocrdma: Fix build with IPV6=n



When IPV6 is not enabled:

    ERROR: "register_inet6addr_notifier" [drivers/infiniband/hw/ocrdma/ocrdma.ko] undefined!
    ERROR: "unregister_inet6addr_notifier" [drivers/infiniband/hw/ocrdma/ocrdma.ko] undefined!

Fix this by wrapping the inet6 calls in #ifdef IPV6.  Also make the
ocrdma module depend on (IPV6 || IPV6=n) to forbid the case of modular
ipv6 but built-in ocrdma (which can't work, because ocrdma calls ipv6
functions).

Reported-by: default avatarRandy Dunlap <rdunlap@xenotime.net>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent d19081e0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
config INFINIBAND_OCRDMA
	tristate "Emulex One Connect HCA support"
	depends on ETHERNET && NETDEVICES && PCI
	depends on ETHERNET && NETDEVICES && PCI && (IPV6 || IPV6=n)
	select NET_VENDOR_EMULEX
	select BE2NET
	---help---
+21 −8
Original line number Diff line number Diff line
@@ -51,12 +51,6 @@ static DEFINE_SPINLOCK(ocrdma_devlist_lock);
static DEFINE_IDR(ocrdma_dev_id);

static union ib_gid ocrdma_zero_sgid;
static int ocrdma_inet6addr_event(struct notifier_block *,
				  unsigned long, void *);

static struct notifier_block ocrdma_inet6addr_notifier = {
	.notifier_call = ocrdma_inet6addr_event
};

static int ocrdma_get_instance(void)
{
@@ -204,6 +198,8 @@ static int ocrdma_build_sgid_tbl(struct ocrdma_dev *dev)
	return 0;
}

#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)

static int ocrdma_inet6addr_event(struct notifier_block *notifier,
				  unsigned long event, void *ptr)
{
@@ -259,6 +255,12 @@ static int ocrdma_inet6addr_event(struct notifier_block *notifier,
	return NOTIFY_OK;
}

static struct notifier_block ocrdma_inet6addr_notifier = {
	.notifier_call = ocrdma_inet6addr_event
};

#endif /* IPV6 */

static enum rdma_link_layer ocrdma_link_layer(struct ib_device *device,
					      u8 port_num)
{
@@ -541,23 +543,34 @@ static struct ocrdma_driver ocrdma_drv = {
	.state_change_handler	= ocrdma_event_handler,
};

static void ocrdma_unregister_inet6addr_notifier(void)
{
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
	unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier);
#endif
}

static int __init ocrdma_init_module(void)
{
	int status;

#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
	status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier);
	if (status)
		return status;
#endif

	status = be_roce_register_driver(&ocrdma_drv);
	if (status)
		unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier);
		ocrdma_unregister_inet6addr_notifier();

	return status;
}

static void __exit ocrdma_exit_module(void)
{
	be_roce_unregister_driver(&ocrdma_drv);
	unregister_inet6addr_notifier(&ocrdma_inet6addr_notifier);
	ocrdma_unregister_inet6addr_notifier();
}

module_init(ocrdma_init_module);