From patchwork Tue Sep 25 21:08:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Flavio Leitner X-Patchwork-Id: 974743 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sysclose.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sysclose.org header.i=fbl@sysclose.org header.b="YQHjE5oy"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42KYb06zRMz9s4s for ; Wed, 26 Sep 2018 07:08:44 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 12C0810CE; Tue, 25 Sep 2018 21:08:43 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id E5C8B101E for ; Tue, 25 Sep 2018 21:08:41 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from sender-of-o51.zoho.com (sender-of-o51.zoho.com [135.84.80.216]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 2C7CB27B for ; Tue, 25 Sep 2018 21:08:41 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1537909718; cv=none; d=zoho.com; s=zohoarc; b=j/Dx8lI6lFuAQNDqH/Hlk2vYaqmY3PWYCgErLZAZ7x/arfMcYyN9m7PC8AzlBbj/0+mLnWo0JuhFpJY0ifso+Jvd1npdJWgTXEsudvrJatSmLM/dsDDZZSz74derhLDsGaIgKitAtY/Jv2+WBP7/KFMAEpl8HjjLNCB8CjsNSUI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1537909718; h=Cc:Date:From:Message-ID:Subject:To:ARC-Authentication-Results; bh=XRzeYJWSCyYYUqJhFiKKldSd/Ci84Nt5zMDiJ25swr8=; b=k2w5AOo8YuBaZywN0Vb5thZckCgdHRqNhQHQuV8NyG/t3LXiF9dJRkTdF3eUxDI2vwcU+htGHT/h+lwsg2j8JUGG+nP0pLWTk1aadL9Yuhe7hz8K+9RINIwxnnRRHiu+MHeGle9j6FWxZlTkjAhEBd1TLYaIqBWbLs2EJ9xLGAM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass header.i=sysclose.org; spf=pass smtp.mailfrom=fbl@sysclose.org; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1537909718; s=zoho; d=sysclose.org; i=fbl@sysclose.org; h=From:To:Cc:Subject:Date:Message-Id; l=10007; bh=XRzeYJWSCyYYUqJhFiKKldSd/Ci84Nt5zMDiJ25swr8=; b=YQHjE5oyyoaAFcPKSeRUVugBjYyKF9qYTUCtConriahsXRi8BVO4Xll5YtqT4MRw /dXnoT/stETUwwVIPCeIsrTi93NGK9Vsp/9o+Y/YPBtLRodTnwVX4WLNgCkwhWS+UNy bvDLEf+KBV9gscJjJZ5Q4IS1bw+uz1DJS3K3bggI= Received: from localhost (177.183.215.101 [177.183.215.101]) by mx.zohomail.com with SMTPS id 1537909717614363.3794187352156; Tue, 25 Sep 2018 14:08:37 -0700 (PDT) From: Flavio Leitner To: dev@openvswitch.org Date: Tue, 25 Sep 2018 18:08:04 -0300 Message-Id: <20180925210804.12226-1-fbl@sysclose.org> X-Mailer: git-send-email 2.14.4 X-ZohoMailClient: External X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH] dp-packet.h: move funcs to be within cond block X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org There is already an ifdef DPDK_NETDEV block, so instead of checking on each and every function, move them to the right block. No functional change. Signed-off-by: Flavio Leitner Acked-by: Tiago Lam --- lib/dp-packet.h | 260 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 146 insertions(+), 114 deletions(-) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index ba91e5891..5b4c9c7a3 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -465,113 +465,142 @@ dp_packet_set_allocated(struct dp_packet *b, uint16_t s) { b->mbuf.buf_len = s; } -#else -static inline void * -dp_packet_base(const struct dp_packet *b) + +/* Returns the RSS hash of the packet 'p'. Note that the returned value is + * correct only if 'dp_packet_rss_valid(p)' returns true */ +static inline uint32_t +dp_packet_get_rss_hash(struct dp_packet *p) { - return b->base_; + return p->mbuf.hash.rss; } static inline void -dp_packet_set_base(struct dp_packet *b, void *d) +dp_packet_set_rss_hash(struct dp_packet *p, uint32_t hash) { - b->base_ = d; + p->mbuf.hash.rss = hash; + p->mbuf.ol_flags |= PKT_RX_RSS_HASH; } -static inline uint32_t -dp_packet_size(const struct dp_packet *b) +static inline bool +dp_packet_rss_valid(struct dp_packet *p) { - return b->size_; + return p->mbuf.ol_flags & PKT_RX_RSS_HASH; } static inline void -dp_packet_set_size(struct dp_packet *b, uint32_t v) +dp_packet_rss_invalidate(struct dp_packet *p OVS_UNUSED) { - b->size_ = v; } -static inline uint16_t -__packet_data(const struct dp_packet *b) +static inline void +dp_packet_mbuf_rss_flag_reset(struct dp_packet *p) { - return b->data_ofs; + p->mbuf.ol_flags &= ~PKT_RX_RSS_HASH; } +/* This initialization is needed for packets that do not come + * from DPDK interfaces, when vswitchd is built with --with-dpdk. + * The DPDK rte library will still otherwise manage the mbuf. + * We only need to initialize the mbuf ol_flags. */ static inline void -__packet_set_data(struct dp_packet *b, uint16_t v) +dp_packet_mbuf_init(struct dp_packet *p) { - b->data_ofs = v; + p->mbuf.ol_flags = 0; } -static inline uint16_t -dp_packet_get_allocated(const struct dp_packet *b) +static inline bool +dp_packet_ip_checksum_valid(struct dp_packet *p) { - return b->allocated_; + return (p->mbuf.ol_flags & PKT_RX_IP_CKSUM_MASK) == + PKT_RX_IP_CKSUM_GOOD; } -static inline void -dp_packet_set_allocated(struct dp_packet *b, uint16_t s) +static inline bool +dp_packet_ip_checksum_bad(struct dp_packet *p) { - b->allocated_ = s; + return (p->mbuf.ol_flags & PKT_RX_IP_CKSUM_MASK) == + PKT_RX_IP_CKSUM_BAD; +} + +static inline bool +dp_packet_l4_checksum_valid(struct dp_packet *p) +{ + return (p->mbuf.ol_flags & PKT_RX_L4_CKSUM_MASK) == + PKT_RX_L4_CKSUM_GOOD; +} + +static inline bool +dp_packet_l4_checksum_bad(struct dp_packet *p) +{ + return (p->mbuf.ol_flags & PKT_RX_L4_CKSUM_MASK) == + PKT_RX_L4_CKSUM_BAD; } -#endif static inline void -dp_packet_reset_cutlen(struct dp_packet *b) +reset_dp_packet_checksum_ol_flags(struct dp_packet *p) { - b->cutlen = 0; + p->mbuf.ol_flags &= ~(PKT_RX_L4_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD | + PKT_RX_IP_CKSUM_GOOD | PKT_RX_IP_CKSUM_BAD); } -static inline uint32_t -dp_packet_set_cutlen(struct dp_packet *b, uint32_t max_len) +static inline bool +dp_packet_has_flow_mark(struct dp_packet *p, uint32_t *mark) { - if (max_len < ETH_HEADER_LEN) { - max_len = ETH_HEADER_LEN; + if (p->mbuf.ol_flags & PKT_RX_FDIR_ID) { + *mark = p->mbuf.hash.fdir.hi; + return true; } - if (max_len >= dp_packet_size(b)) { - b->cutlen = 0; - } else { - b->cutlen = dp_packet_size(b) - max_len; - } - return b->cutlen; + return false; } -static inline uint32_t -dp_packet_get_cutlen(const struct dp_packet *b) +#else /* DPDK_NETDEV */ +static inline void * +dp_packet_base(const struct dp_packet *b) { - /* Always in valid range if user uses dp_packet_set_cutlen. */ - return b->cutlen; + return b->base_; +} + +static inline void +dp_packet_set_base(struct dp_packet *b, void *d) +{ + b->base_ = d; } static inline uint32_t -dp_packet_get_send_len(const struct dp_packet *b) +dp_packet_size(const struct dp_packet *b) { - return dp_packet_size(b) - dp_packet_get_cutlen(b); + return b->size_; } -static inline void * -dp_packet_data(const struct dp_packet *b) +static inline void +dp_packet_set_size(struct dp_packet *b, uint32_t v) { - return __packet_data(b) != UINT16_MAX - ? (char *) dp_packet_base(b) + __packet_data(b) : NULL; + b->size_ = v; +} + +static inline uint16_t +__packet_data(const struct dp_packet *b) +{ + return b->data_ofs; } static inline void -dp_packet_set_data(struct dp_packet *b, void *data) +__packet_set_data(struct dp_packet *b, uint16_t v) { - if (data) { - __packet_set_data(b, (char *) data - (char *) dp_packet_base(b)); - } else { - __packet_set_data(b, UINT16_MAX); - } + b->data_ofs = v; +} + +static inline uint16_t +dp_packet_get_allocated(const struct dp_packet *b) +{ + return b->allocated_; } static inline void -dp_packet_reset_packet(struct dp_packet *b, int off) +dp_packet_set_allocated(struct dp_packet *b, uint16_t s) { - dp_packet_set_size(b, dp_packet_size(b) - off); - dp_packet_set_data(b, ((unsigned char *) dp_packet_data(b) + off)); - dp_packet_reset_offsets(b); + b->allocated_ = s; } /* Returns the RSS hash of the packet 'p'. Note that the returned value is @@ -579,130 +608,133 @@ dp_packet_reset_packet(struct dp_packet *b, int off) static inline uint32_t dp_packet_get_rss_hash(struct dp_packet *p) { -#ifdef DPDK_NETDEV - return p->mbuf.hash.rss; -#else return p->rss_hash; -#endif } static inline void dp_packet_set_rss_hash(struct dp_packet *p, uint32_t hash) { -#ifdef DPDK_NETDEV - p->mbuf.hash.rss = hash; - p->mbuf.ol_flags |= PKT_RX_RSS_HASH; -#else p->rss_hash = hash; p->rss_hash_valid = true; -#endif } static inline bool dp_packet_rss_valid(struct dp_packet *p) { -#ifdef DPDK_NETDEV - return p->mbuf.ol_flags & PKT_RX_RSS_HASH; -#else return p->rss_hash_valid; -#endif } static inline void -dp_packet_rss_invalidate(struct dp_packet *p OVS_UNUSED) +dp_packet_rss_invalidate(struct dp_packet *p) { -#ifndef DPDK_NETDEV p->rss_hash_valid = false; -#endif } static inline void dp_packet_mbuf_rss_flag_reset(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - p->mbuf.ol_flags &= ~PKT_RX_RSS_HASH; -#endif } -/* This initialization is needed for packets that do not come - * from DPDK interfaces, when vswitchd is built with --with-dpdk. - * The DPDK rte library will still otherwise manage the mbuf. - * We only need to initialize the mbuf ol_flags. */ static inline void dp_packet_mbuf_init(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - p->mbuf.ol_flags = 0; -#endif } static inline bool dp_packet_ip_checksum_valid(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - return (p->mbuf.ol_flags & PKT_RX_IP_CKSUM_MASK) == - PKT_RX_IP_CKSUM_GOOD; -#else return false; -#endif } static inline bool dp_packet_ip_checksum_bad(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - return (p->mbuf.ol_flags & PKT_RX_IP_CKSUM_MASK) == - PKT_RX_IP_CKSUM_BAD; -#else return false; -#endif } static inline bool dp_packet_l4_checksum_valid(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - return (p->mbuf.ol_flags & PKT_RX_L4_CKSUM_MASK) == - PKT_RX_L4_CKSUM_GOOD; -#else return false; -#endif } static inline bool dp_packet_l4_checksum_bad(struct dp_packet *p OVS_UNUSED) { -#ifdef DPDK_NETDEV - return (p->mbuf.ol_flags & PKT_RX_L4_CKSUM_MASK) == - PKT_RX_L4_CKSUM_BAD; -#else return false; -#endif } -#ifdef DPDK_NETDEV static inline void -reset_dp_packet_checksum_ol_flags(struct dp_packet *p) +reset_dp_packet_checksum_ol_flags(struct dp_packet *p OVS_UNUSED) { - p->mbuf.ol_flags &= ~(PKT_RX_L4_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD | - PKT_RX_IP_CKSUM_GOOD | PKT_RX_IP_CKSUM_BAD); } -#else -#define reset_dp_packet_checksum_ol_flags(arg) -#endif static inline bool dp_packet_has_flow_mark(struct dp_packet *p OVS_UNUSED, uint32_t *mark OVS_UNUSED) { -#ifdef DPDK_NETDEV - if (p->mbuf.ol_flags & PKT_RX_FDIR_ID) { - *mark = p->mbuf.hash.fdir.hi; - return true; - } -#endif return false; } +#endif /* DPDK_NETDEV */ + +static inline void +dp_packet_reset_cutlen(struct dp_packet *b) +{ + b->cutlen = 0; +} + +static inline uint32_t +dp_packet_set_cutlen(struct dp_packet *b, uint32_t max_len) +{ + if (max_len < ETH_HEADER_LEN) { + max_len = ETH_HEADER_LEN; + } + + if (max_len >= dp_packet_size(b)) { + b->cutlen = 0; + } else { + b->cutlen = dp_packet_size(b) - max_len; + } + return b->cutlen; +} + +static inline uint32_t +dp_packet_get_cutlen(const struct dp_packet *b) +{ + /* Always in valid range if user uses dp_packet_set_cutlen. */ + return b->cutlen; +} + +static inline uint32_t +dp_packet_get_send_len(const struct dp_packet *b) +{ + return dp_packet_size(b) - dp_packet_get_cutlen(b); +} + +static inline void * +dp_packet_data(const struct dp_packet *b) +{ + return __packet_data(b) != UINT16_MAX + ? (char *) dp_packet_base(b) + __packet_data(b) : NULL; +} + +static inline void +dp_packet_set_data(struct dp_packet *b, void *data) +{ + if (data) { + __packet_set_data(b, (char *) data - (char *) dp_packet_base(b)); + } else { + __packet_set_data(b, UINT16_MAX); + } +} + +static inline void +dp_packet_reset_packet(struct dp_packet *b, int off) +{ + dp_packet_set_size(b, dp_packet_size(b) - off); + dp_packet_set_data(b, ((unsigned char *) dp_packet_data(b) + off)); + dp_packet_reset_offsets(b); +} enum { NETDEV_MAX_BURST = 32 }; /* Maximum number packets in a batch. */