aboutsummaryrefslogtreecommitdiff
path: root/drivers/infiniband/core/cma.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-06-04 14:39:36 -0700
committerKevin Hilman <khilman@linaro.org>2015-06-04 14:39:36 -0700
commit1a621b34f2a4bf8495bf801cd0024f063d561472 (patch)
tree89578d425f3c5f538bebaceec4257339430b8a93 /drivers/infiniband/core/cma.c
parent131b3aa7c04250554e4d303bc90f798bf21423dd (diff)
parent361e3f0276d666faa6a785f610ffc8b7c541d478 (diff)
Merge branch 'linux-linaro-lsk-v3.14' into linux-linaro-lsk-v3.14-rt
* linux-linaro-lsk-v3.14: (218 commits) configs: linaro-base: enable ZRAM features arm64: errata: add workaround for cortex-a53 erratum #845719 Linux 3.14.43 kvm: arm64: vgic: fix hyp panic with 64k pages on juno platform arm64: kvm: use inner-shareable barriers for inner-shareable maintenance KVM: ARM: vgic: Fix the overlap check action about setting the GICD & GICC base address. KVM: arm/arm64: vgic: fix GICD_ICFGR register accesses ARM: KVM: trap VM system registers until MMU and caches are ON ARM: KVM: add world-switch for AMAIR{0,1} ARM: KVM: introduce per-vcpu HYP Configuration Register ARM: KVM: fix ordering of 64bit coprocessor accesses ARM: KVM: fix handling of trapped 64bit coprocessor accesses ARM: KVM: force cache clean on page fault when caches are off arm64: KVM: flush VM pages before letting the guest enable caches ARM: KVM: introduce kvm_p*d_addr_end arm64: KVM: trap VM system registers until MMU and caches are ON arm64: KVM: allows discrimination of AArch32 sysreg access arm64: KVM: force cache clean on page fault when caches are off deal with deadlock in d_walk() ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. ... Conflicts: kernel/softirq.c
Diffstat (limited to 'drivers/infiniband/core/cma.c')
-rw-r--r--drivers/infiniband/core/cma.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 42c3058e6e9c..dbd7d66977c9 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -859,19 +859,27 @@ static void cma_save_ib_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id
memcpy(&ib->sib_addr, &path->dgid, 16);
}
+static __be16 ss_get_port(const struct sockaddr_storage *ss)
+{
+ if (ss->ss_family == AF_INET)
+ return ((struct sockaddr_in *)ss)->sin_port;
+ else if (ss->ss_family == AF_INET6)
+ return ((struct sockaddr_in6 *)ss)->sin6_port;
+ BUG();
+}
+
static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
struct cma_hdr *hdr)
{
- struct sockaddr_in *listen4, *ip4;
+ struct sockaddr_in *ip4;
- listen4 = (struct sockaddr_in *) &listen_id->route.addr.src_addr;
ip4 = (struct sockaddr_in *) &id->route.addr.src_addr;
- ip4->sin_family = listen4->sin_family;
+ ip4->sin_family = AF_INET;
ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr;
- ip4->sin_port = listen4->sin_port;
+ ip4->sin_port = ss_get_port(&listen_id->route.addr.src_addr);
ip4 = (struct sockaddr_in *) &id->route.addr.dst_addr;
- ip4->sin_family = listen4->sin_family;
+ ip4->sin_family = AF_INET;
ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr;
ip4->sin_port = hdr->port;
}
@@ -879,16 +887,15 @@ static void cma_save_ip4_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_i
static void cma_save_ip6_info(struct rdma_cm_id *id, struct rdma_cm_id *listen_id,
struct cma_hdr *hdr)
{
- struct sockaddr_in6 *listen6, *ip6;
+ struct sockaddr_in6 *ip6;
- listen6 = (struct sockaddr_in6 *) &listen_id->route.addr.src_addr;
ip6 = (struct sockaddr_in6 *) &id->route.addr.src_addr;
- ip6->sin6_family = listen6->sin6_family;
+ ip6->sin6_family = AF_INET6;
ip6->sin6_addr = hdr->dst_addr.ip6;
- ip6->sin6_port = listen6->sin6_port;
+ ip6->sin6_port = ss_get_port(&listen_id->route.addr.src_addr);
ip6 = (struct sockaddr_in6 *) &id->route.addr.dst_addr;
- ip6->sin6_family = listen6->sin6_family;
+ ip6->sin6_family = AF_INET6;
ip6->sin6_addr = hdr->src_addr.ip6;
ip6->sin6_port = hdr->port;
}