From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f179.google.com (mail-wi0-f179.google.com [209.85.212.179]) by dpdk.org (Postfix) with ESMTP id 96300C46C for ; Fri, 19 Jun 2015 18:16:54 +0200 (CEST) Received: by wicnd19 with SMTP id nd19so23693812wic.1 for ; Fri, 19 Jun 2015 09:16:54 -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=0eoVLvO3oq1snEXKkRuDlJ9hBThywBJlnEzGbLzOahw=; b=S5Ptisr3FItG1Cz26hWrKKrGuGCIkMR5GZnndSeC3N3E6jOpTQRPB59f6Kyl75Yj4t ySeH/wCZFwjciF2PfIYkofvDEiIjxNLP9jjFL639hgunBiZ/Y9Bj6X/QQMrv2yuRlul2 f4l2lpDpmfVXLz2O7Wc0zZ6PJ58c4CZJ7r924L1p8FFNDgg6JpyUibj71xQQT3OON1M9 2pIQc30OAMXAs5xAtizWTdkCSSEamx4Jn6iWVVBjQtUkNeCWGnqAAOa+8hECwWAPzT8W Wgm+aic+owGoN/4aYqeo09yigeFPviVzxg72RNE/3JyVH5kODS15kVLl+daIvIzJp2HM u3zw== X-Gm-Message-State: ALoCoQk8vhtDuxppt8e3EnNPGYHAxIvdDyvCLbwea63IiHwe+H3UQot5jhKqlXcUS2r93DHjwgL5 X-Received: by 10.180.106.195 with SMTP id gw3mr8124972wib.25.1434730614514; Fri, 19 Jun 2015 09:16:54 -0700 (PDT) Received: from glumotte.dev.6wind.com (6wind.net2.nerim.net. [213.41.151.210]) by mx.google.com with ESMTPSA id ef10sm17739604wjd.49.2015.06.19.09.16.53 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 19 Jun 2015 09:16:54 -0700 (PDT) From: Olivier Matz To: dev@dpdk.org Date: Fri, 19 Jun 2015 18:16:38 +0200 Message-Id: <1434730599-24339-3-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1434730599-24339-1-git-send-email-olivier.matz@6wind.com> References: <1433150143-5842-1-git-send-email-olivier.matz@6wind.com> <1434730599-24339-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH v2 2/3] mempool: introduce objtlr structure for object trailers 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: Fri, 19 Jun 2015 16:16:54 -0000 Each object stored in mempools are suffixed by a trailer, storing a cookie in debug mode which help to detect memory corruptions. Like for headers, introduce a structure that materializes the content of this trailer. Signed-off-by: Olivier Matz --- lib/librte_mempool/rte_mempool.c | 4 +++- lib/librte_mempool/rte_mempool.h | 42 +++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index b2d8700..60369cf 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -131,6 +131,7 @@ mempool_add_elem(struct rte_mempool *mp, void *obj, uint32_t obj_idx, rte_mempool_obj_ctor_t *obj_init, void *obj_init_arg) { struct rte_mempool_objhdr *hdr; + struct rte_mempool_objtlr *tlr __rte_unused; obj = (char *)obj + mp->header_size; @@ -140,7 +141,8 @@ mempool_add_elem(struct rte_mempool *mp, void *obj, uint32_t obj_idx, #ifdef RTE_LIBRTE_MEMPOOL_DEBUG hdr->cookie = RTE_MEMPOOL_HEADER_COOKIE2; - __mempool_write_trailer_cookie(obj); + tlr = __mempool_get_trailer(obj); + tlr->cookie = RTE_MEMPOOL_TRAILER_COOKIE; #endif /* call the initializer */ if (obj_init) diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h index b047810..ec1bb2e 100644 --- a/lib/librte_mempool/rte_mempool.h +++ b/lib/librte_mempool/rte_mempool.h @@ -155,6 +155,18 @@ struct rte_mempool_objhdr { }; /** + * Mempool object trailer structure + * + * In debug mode, each object stored in mempools are suffixed by this + * trailer structure containing a cookie preventing memory corruptions. + */ +struct rte_mempool_objtlr { +#ifdef RTE_LIBRTE_MEMPOOL_DEBUG + uint64_t cookie; /**< Debug cookie. */ +#endif +}; + +/** * The RTE mempool structure. */ struct rte_mempool { @@ -249,6 +261,13 @@ static inline struct rte_mempool_objhdr *__mempool_get_header(void *obj) sizeof(struct rte_mempool_objhdr)); } +/* return the trailer of a mempool object (internal) */ +static inline struct rte_mempool_objtlr *__mempool_get_trailer(void *obj) +{ + return (struct rte_mempool_objtlr *)((char *)obj - + sizeof(struct rte_mempool_objtlr)); +} + /** * Return a pointer to the mempool owning this object. * @@ -264,25 +283,6 @@ static inline struct rte_mempool *rte_mempool_from_obj(void *obj) return hdr->mp; } -#ifdef RTE_LIBRTE_MEMPOOL_DEBUG -/* get trailer cookie value */ -static inline uint64_t __mempool_read_trailer_cookie(void *obj) -{ - struct rte_mempool *mp = rte_mempool_from_obj(obj); - return *(uint64_t *)((char *)obj + mp->elt_size); - -} - -/* write trailer cookie value */ -static inline void __mempool_write_trailer_cookie(void *obj) -{ - uint64_t *cookie_p; - struct rte_mempool *mp = rte_mempool_from_obj(obj); - cookie_p = (uint64_t *)((char *)obj + mp->elt_size); - *cookie_p = RTE_MEMPOOL_TRAILER_COOKIE; -} -#endif /* RTE_LIBRTE_MEMPOOL_DEBUG */ - /** * @internal Check and update cookies or panic. * @@ -306,6 +306,7 @@ static inline void __mempool_check_cookies(const struct rte_mempool *mp, unsigned n, int free) { struct rte_mempool_objhdr *hdr; + struct rte_mempool_objtlr *tlr; uint64_t cookie; void *tmp; void *obj; @@ -356,7 +357,8 @@ static inline void __mempool_check_cookies(const struct rte_mempool *mp, rte_panic("MEMPOOL: bad header cookie (audit)\n"); } } - cookie = __mempool_read_trailer_cookie(obj); + tlr = __mempool_get_trailer(obj); + cookie = tlr->cookie; if (cookie != RTE_MEMPOOL_TRAILER_COOKIE) { rte_log_set_history(0); RTE_LOG(CRIT, MEMPOOL, -- 2.1.4