When CONFIG_IPV6 disabled, we run into a link error:
drivers/infiniband/hw/qedr/qedr_iw_cm.o: In function `qedr_addr6_resolve.isra.3':
qedr_iw_cm.c:(.text+0x4e0): undefined reference to `ip6_route_output_flags'
The ipv6 handling code is obviously not needed here, so this
adds a compile-time check for the Kconfig symbol in all three
places in the code that decide between ipv4 and ipv6.
We don't have to worry about a link error wtih QEDR=y/IPV6=m, as
that configuration is already prohibited by CONFIG_INFINIBAND
depending on "m || IPV6 != m".
Fixes: e411e0587e0d ("RDMA/qedr: Add iWARP connection management functions")
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/infiniband/hw/qedr/qedr_iw_cm.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
index fe9b2b6149b0..2950d3f6ecb8 100644
--- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
@@ -98,7 +98,8 @@ qedr_iw_mpa_request(void *context, struct qed_iwarp_cm_event_params *params)
event.event = IW_CM_EVENT_CONNECT_REQUEST;
event.status = params->status;
- if (params->cm_info->ip_version == QED_TCP_IPV4)
+ if (!IS_ENABLED(CONFIG_IPV6) ||
+ params->cm_info->ip_version == QED_TCP_IPV4)
qedr_fill_sockaddr4(params->cm_info, &event);
else
qedr_fill_sockaddr6(params->cm_info, &event);
@@ -522,7 +523,8 @@ int qedr_iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
memset(cm_info->local_ip, 0, sizeof(cm_info->local_ip));
memset(cm_info->remote_ip, 0, sizeof(cm_info->remote_ip));
- if (cm_id->remote_addr.ss_family == AF_INET) {
+ if (!IS_ENABLED(CONFIG_IPV6) ||
+ cm_id->remote_addr.ss_family == AF_INET) {
cm_info->ip_version = QED_TCP_IPV4;
cm_info->remote_ip[0] = ntohl(raddr->sin_addr.s_addr);
@@ -616,7 +618,8 @@ int qedr_iw_create_listen(struct iw_cm_id *cm_id, int backlog)
iparams.event_cb = qedr_iw_event_handler;
iparams.max_backlog = backlog;
- if (cm_id->local_addr.ss_family == AF_INET) {
+ if (!IS_ENABLED(CONFIG_IPV6) ||
+ cm_id->local_addr.ss_family == AF_INET) {
iparams.ip_version = QED_TCP_IPV4;
memset(iparams.ip_addr, 0, sizeof(iparams.ip_addr));
--
2.9.0
> From: Arnd Bergmann [mailto:[email protected]]
> Sent: Tuesday, September 05, 2017 5:59 PM
> To: Amrani, Ram <[email protected]>; Kalderon, Michal
> <[email protected]>; Elior, Ariel <[email protected]>;
> Doug Ledford <[email protected]>; Sean Hefty
> <[email protected]>; Hal Rosenstock <[email protected]>
> Cc: Arnd Bergmann <[email protected]>; David S. Miller
> <[email protected]>; Mintz, Yuval <[email protected]>; linux-
> [email protected]; [email protected]
> Subject: [PATCH] RDMA/qedr: fix build error without ipv6
>
> When CONFIG_IPV6 disabled, we run into a link error:
>
> drivers/infiniband/hw/qedr/qedr_iw_cm.o: In function
> `qedr_addr6_resolve.isra.3':
> qedr_iw_cm.c:(.text+0x4e0): undefined reference to
> `ip6_route_output_flags'
>
> The ipv6 handling code is obviously not needed here, so this adds a compile-
> time check for the Kconfig symbol in all three places in the code that decide
> between ipv4 and ipv6.
>
> We don't have to worry about a link error wtih QEDR=y/IPV6=m, as that
> configuration is already prohibited by CONFIG_INFINIBAND depending on "m
> || IPV6 != m".
>
> Fixes: e411e0587e0d ("RDMA/qedr: Add iWARP connection management
> functions")
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> drivers/infiniband/hw/qedr/qedr_iw_cm.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
> b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
> index fe9b2b6149b0..2950d3f6ecb8 100644
> --- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
> +++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
> @@ -98,7 +98,8 @@ qedr_iw_mpa_request(void *context, struct
> qed_iwarp_cm_event_params *params)
> event.event = IW_CM_EVENT_CONNECT_REQUEST;
> event.status = params->status;
>
> - if (params->cm_info->ip_version == QED_TCP_IPV4)
> + if (!IS_ENABLED(CONFIG_IPV6) ||
> + params->cm_info->ip_version == QED_TCP_IPV4)
> qedr_fill_sockaddr4(params->cm_info, &event);
> else
> qedr_fill_sockaddr6(params->cm_info, &event); @@ -522,7
> +523,8 @@ int qedr_iw_connect(struct iw_cm_id *cm_id, struct
> iw_cm_conn_param *conn_param)
> memset(cm_info->local_ip, 0, sizeof(cm_info->local_ip));
> memset(cm_info->remote_ip, 0, sizeof(cm_info->remote_ip));
>
> - if (cm_id->remote_addr.ss_family == AF_INET) {
> + if (!IS_ENABLED(CONFIG_IPV6) ||
> + cm_id->remote_addr.ss_family == AF_INET) {
> cm_info->ip_version = QED_TCP_IPV4;
>
> cm_info->remote_ip[0] = ntohl(raddr->sin_addr.s_addr);
> @@ -616,7 +618,8 @@ int qedr_iw_create_listen(struct iw_cm_id *cm_id,
> int backlog)
> iparams.event_cb = qedr_iw_event_handler;
> iparams.max_backlog = backlog;
>
> - if (cm_id->local_addr.ss_family == AF_INET) {
> + if (!IS_ENABLED(CONFIG_IPV6) ||
> + cm_id->local_addr.ss_family == AF_INET) {
> iparams.ip_version = QED_TCP_IPV4;
> memset(iparams.ip_addr, 0, sizeof(iparams.ip_addr));
>
> --
> 2.9.0
Thanks!
Acked-by: Michal Kalderon <[email protected]>
On Tue, 2017-09-05 at 16:59 +0200, Arnd Bergmann wrote:
> When CONFIG_IPV6 disabled, we run into a link error:
>
> drivers/infiniband/hw/qedr/qedr_iw_cm.o: In function
> `qedr_addr6_resolve.isra.3':
> qedr_iw_cm.c:(.text+0x4e0): undefined reference to
> `ip6_route_output_flags'
>
> The ipv6 handling code is obviously not needed here, so this
> adds a compile-time check for the Kconfig symbol in all three
> places in the code that decide between ipv4 and ipv6.
>
> We don't have to worry about a link error wtih QEDR=y/IPV6=m, as
> that configuration is already prohibited by CONFIG_INFINIBAND
> depending on "m || IPV6 != m".
>
> Fixes: e411e0587e0d ("RDMA/qedr: Add iWARP connection management
> functions")
> Signed-off-by: Arnd Bergmann <[email protected]>
Thanks, applied to for-next area.
--
Doug Ledford <[email protected]>
GPG KeyID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD