From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f49.google.com (mail-wg0-f49.google.com [74.125.82.49]) by dpdk.org (Postfix) with ESMTP id 4D02AC406 for ; Tue, 30 Jun 2015 11:28:53 +0200 (CEST) Received: by wgqq4 with SMTP id q4so4252211wgq.1 for ; Tue, 30 Jun 2015 02:28:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=u+pQ03+78CX0egJVDsb9/9FJxXkERT+tp7Ms0WrFT2I=; b=MZFlPSaymKXfQ6MEkgmnONCBRyC4qMtNrIsSUQqinFda3z1JksnXjD/MneQ8AhM801 tmOQ6MTYmHSRY970Mz2h+ledr7KPRNi99kilzrCRIm+1k8yYcFOGxqTrlFyAvoSeU2Bm oAOsUWTV4kn19rhWNPmyOLsh99Va+26MlvmYtFUduAnPGjCp8xV4JXfpOrfDHrfqBVrO +lgunDIKo4Z9xdSuSSmJgcz/rOxRLDi9ekEpDSAyws0ZYVvfok+dSxc4EdaH9qyolot+ Ak1HkIDBCC+T0pfTVosl/Q4ziKpYKUJq7oOA35GwyoqaUQEwbnAinOe6i1JNqP3bvSJJ PdKA== X-Gm-Message-State: ALoCoQkZShA+41EMaCv91O4EOYqqYEMEillEifcFtcdStgUI1ZZ5xuojCmoBVBkEh9O8rhp752ts X-Received: by 10.180.72.195 with SMTP id f3mr11006039wiv.11.1435656533208; Tue, 30 Jun 2015 02:28:53 -0700 (PDT) Received: from 6wind.com (6wind.net2.nerim.net. [213.41.151.210]) by mx.google.com with ESMTPSA id v3sm68030569wja.31.2015.06.30.02.28.51 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 30 Jun 2015 02:28:52 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Date: Tue, 30 Jun 2015 11:27:58 +0200 Message-Id: <1435656489-27986-13-git-send-email-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1435656489-27986-1-git-send-email-adrien.mazarguil@6wind.com> References: <1433546120-2254-1-git-send-email-adrien.mazarguil@6wind.com> <1435656489-27986-1-git-send-email-adrien.mazarguil@6wind.com> Subject: [dpdk-dev] [PATCH v2 12/23] mlx4: query netdevice to get initial MAC address X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2015 09:28:53 -0000 From: Or Ami Querying the netdevice instead of deriving the port's MAC address from its GID is less prone to errors. There is no guarantee that the GID will always contain it nor that the algorithm won't change. Signed-off-by: Or Ami Signed-off-by: Olga Shern Signed-off-by: Adrien Mazarguil --- drivers/net/mlx4/mlx4.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 37aca55..cdc679a 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -4305,22 +4305,25 @@ mlx4_ibv_device_to_pci_addr(const struct ibv_device *device, } /** - * Derive MAC address from port GID. + * Get MAC address by querying netdevice. * + * @param[in] priv + * struct priv for the requested device. * @param[out] mac * MAC address output buffer. - * @param port - * Physical port number. - * @param[in] gid - * Port GID. + * + * @return + * 0 on success, -1 on failure and errno is set. */ -static void -mac_from_gid(uint8_t (*mac)[ETHER_ADDR_LEN], uint32_t port, uint8_t *gid) +static int +priv_get_mac(struct priv *priv, uint8_t (*mac)[ETHER_ADDR_LEN]) { - memcpy(&(*mac)[0], gid + 8, 3); - memcpy(&(*mac)[3], gid + 13, 3); - if (port == 1) - (*mac)[0] ^= 2; + struct ifreq request; + + if (priv_ifreq(priv, SIOCGIFHWADDR, &request)) + return -1; + memcpy(mac, request.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); + return 0; } /* Support up to 32 adapters. */ @@ -4482,7 +4485,6 @@ mlx4_pci_devinit(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) struct ibv_exp_device_attr exp_device_attr; #endif /* HAVE_EXP_QUERY_DEVICE */ struct ether_addr mac; - union ibv_gid temp_gid; #ifdef HAVE_EXP_QUERY_DEVICE exp_device_attr.comp_mask = IBV_EXP_DEVICE_ATTR_EXP_CAP_FLAGS; @@ -4594,12 +4596,12 @@ mlx4_pci_devinit(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) (void)mlx4_getenv_int; priv->vf = vf; - if (ibv_query_gid(ctx, port, 0, &temp_gid)) { - ERROR("ibv_query_gid() failure"); + /* Configure the first MAC address by default. */ + if (priv_get_mac(priv, &mac.addr_bytes)) { + ERROR("cannot get MAC address, is mlx4_en loaded?" + " (errno: %s)", strerror(errno)); goto port_error; } - /* Configure the first MAC address by default. */ - mac_from_gid(&mac.addr_bytes, port, temp_gid.raw); INFO("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x", priv->port, mac.addr_bytes[0], mac.addr_bytes[1], -- 2.1.0