From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by dpdk.org (Postfix) with ESMTP id DF98A1BA72 for ; Thu, 26 Oct 2017 00:39:24 +0200 (CEST) Received: by mail-wm0-f65.google.com with SMTP id r196so4735568wmf.2 for ; Wed, 25 Oct 2017 15:39:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=sr9ae6ydN6+8cocs+Ei9XfW+xNDV1X4Swoi4KhOXhtw=; b=VZfFCasFeZfP+O5o2NsSjTbXsfR0a7TtzrNQI9ILttUO9H0OuffrmmLXNlHlpRg39o 0zZ/Ud5mzdhYJ54kfN2KogexZKwU4cFUrHwRicTjcXXz/1+DGnI1VuLOb7KPeG1/Wko5 t6lrdeYo4qQWd+tWy6p2P/8yFHF2YGN3Z5ziPW9sJvgysPPTamiR5/N+q3OYb8XsICIu crbGr6AFj1LGKqqZjuoBYuJcTZWZyEpIuALCCJoXKsRbPGgtGgU6GCSqqIAoXB+uaGY6 AifBD+uqoDORDLztKAu+OeUJB1WenO3b1vgSDdjTN1dd8ZmGMH3kYEgHzhvngTZQTUqR RRzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=sr9ae6ydN6+8cocs+Ei9XfW+xNDV1X4Swoi4KhOXhtw=; b=aewwJkquJwQH6NtZApn6px6nDWSmQNnZzHKaWlgXxg+7h3MK5deyceihzyGfkK5+nG wOkGxnViNIcmOXl895VBqhqqlKylNkQMii/FlkaOEZ537HMLUEY/1FGrlJDNBgWk6oeC c2prM78xX9AjKGFWREOjCy0ckENmaTtfsnieMlutkO7XMvL6tPhlUt5kQsxRT4dlfVSS jxXjJvLLv9aJf471vCBsi0w5CxmODUMxp1XFwMXpvsyXnEc/I43VrCZy/vB0IzPQNR+H bxoth3o9YzscPX8nCri50oon6IGMWb2RRJk41TIhyEBMwTDQrPcrh7vKU9q6WeqZ3nGx Mjpw== X-Gm-Message-State: AMCzsaVzQZ7amfRTYake9SBiNAY+rjiFeuaKi7XxT1b5qbVysZ44BJwU 3tcj/y7+snDTEwGvaYi53kwzo/Cl X-Google-Smtp-Source: ABhQp+TdisWYfav0RTjJBxscEGMZ+m0WYHbMYKWHDL7BEOY38cSzWAMsSdybkCJtzEOSNCCJLvGwgQ== X-Received: by 10.28.31.21 with SMTP id f21mr2825049wmf.18.1508971164178; Wed, 25 Oct 2017 15:39:24 -0700 (PDT) Received: from bidouze.dev.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id r63sm4466124wmg.13.2017.10.25.15.39.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 25 Oct 2017 15:39:23 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 26 Oct 2017 00:38:34 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH v7 12/25] pci: avoid over-complicated macro X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Oct 2017 22:39:25 -0000 Using a macro helps writing the code to the detriment of the reader in this case. This is backward. Write once, read many. The few LOCs gained is not worth the opacity of the implementation. Signed-off-by: Gaetan Rivet --- lib/librte_eal/common/eal_common_pci.c | 67 +++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index b4e35d0..20ae349 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -87,42 +87,67 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev) return NULL; } -/* Macro used by pci addr parsing functions. **/ -#define GET_PCIADDR_FIELD(in, fd, lim, dlm) \ -do { \ - unsigned long val; \ - char *end; \ - errno = 0; \ - val = strtoul((in), &end, 16); \ - if (errno != 0 || end[0] != (dlm) || val > (lim)) \ - return -EINVAL; \ - (fd) = (typeof (fd))val; \ - (in) = end + 1; \ -} while(0) +static inline const char * +get_u8_pciaddr_field(const char *in, void *_u8, char dlm) +{ + unsigned long val; + uint8_t *u8 = _u8; + char *end; + + errno = 0; + val = strtoul(in, &end, 16); + if (errno != 0 || end[0] != dlm || val > UINT8_MAX) { + errno = errno ? errno : EINVAL; + return NULL; + } + *u8 = (uint8_t)val; + return end + 1; +} int eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr) { + const char *in = input; + dev_addr->domain = 0; - GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':'); - GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.'); - GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0); + in = get_u8_pciaddr_field(in, &dev_addr->bus, ':'); + if (in == NULL) + return -EINVAL; + in = get_u8_pciaddr_field(in, &dev_addr->devid, '.'); + if (in == NULL) + return -EINVAL; + in = get_u8_pciaddr_field(in, &dev_addr->function, '\0'); + if (in == NULL) + return -EINVAL; return 0; } int eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr) { - GET_PCIADDR_FIELD(input, dev_addr->domain, UINT16_MAX, ':'); - GET_PCIADDR_FIELD(input, dev_addr->bus, UINT8_MAX, ':'); - GET_PCIADDR_FIELD(input, dev_addr->devid, UINT8_MAX, '.'); - GET_PCIADDR_FIELD(input, dev_addr->function, UINT8_MAX, 0); + const char *in = input; + unsigned long val; + char *end; + + errno = 0; + val = strtoul(in, &end, 16); + if (errno != 0 || end[0] != ':' || val > UINT16_MAX) + return -EINVAL; + dev_addr->domain = (uint16_t)val; + in = end + 1; + in = get_u8_pciaddr_field(in, &dev_addr->bus, ':'); + if (in == NULL) + return -EINVAL; + in = get_u8_pciaddr_field(in, &dev_addr->devid, '.'); + if (in == NULL) + return -EINVAL; + in = get_u8_pciaddr_field(in, &dev_addr->function, '\0'); + if (in == NULL) + return -EINVAL; return 0; } -#undef GET_PCIADDR_FIELD - void rte_pci_device_name(const struct rte_pci_addr *addr, char *output, size_t size) -- 2.1.4