Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp3862141pxm; Tue, 1 Mar 2022 06:54:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJwusc4ciYc/HKWmP3z0qCJKhrO0/WPb2Ne4cJWnZWPLPGqL29tbPcEoMm74Z/4E7d0oZGuS X-Received: by 2002:a17:906:18b2:b0:6d0:ee54:1add with SMTP id c18-20020a17090618b200b006d0ee541addmr19452396ejf.499.1646146440426; Tue, 01 Mar 2022 06:54:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646146440; cv=none; d=google.com; s=arc-20160816; b=Cd2TPJBRzku/OWwyKOSqXTLBuZxjl6smiOHI+lN786FJ5Oy4rH+SjYYQAi4DL6rvfe hqEL9gjM2U0+//71CCaEHFGKzHUdR7vqaLTB6xjcxLQUoiyL5PFedmuvCSaJCuVtK10r eeGliazHN2H/9biJt6DmBFtKNx//N2GlrU5QYW+eT5wlp9d/SlPYJ+Fu2oJcFXsO/BG5 muhevafhZcatz4lP66HeSnfjVR5YcM00L/3N4af0Pp29OPm9P259H03gfKJ9/Izql9Vq JqJ191jL+eD0mtefz948p0pafIQwSeIRRqhrHO4mOCJvSuzEaHF6sJsBBq26eTdwnmLz mMqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:content-disposition:mime-version :message-id:subject:cc:to:from:date:sender:hmm_source_type :hmm_attache_num:hmm_source_ip; bh=Zi61zkqK/fJEy/b2OWaRzH0MIgH7ZqHZTYPub0APARg=; b=tiNg2tJW0jqYFACdEYy8bpYWpmhDWhygmuVrNrlg7tnJOzDUBJBZyF+SXO76EJ6OaW 9dlpK4HIDXW65p8m3obFOiKPy8yTs4JO0FSNhVeONU3mEPijKR0wUqQZPHVegPZQXZFh 7WBNAioGrCUmVXlNiR6pMdxs4EGaSqrNIMuR5a0lbMCnRdaBypcuNBtXfeuhPSfAX5i1 sznlyouo0S+yEu9URB29S03/vpLLutOR4fNjgm1x6aFqxVxhB7PhI+lYLwqa4X4UQDfP RmP4VaPFRGRoehY0y+7UB8oqXnmY2AKwpvFhjJIQE422X+9UgvVR7/nWrrtP5HrgwVso ftng== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dz18-20020a0564021d5200b0041297628982si10990071edb.146.2022.03.01.06.53.37; Tue, 01 Mar 2022 06:54:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234982AbiCAN1V (ORCPT + 99 others); Tue, 1 Mar 2022 08:27:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230374AbiCAN1U (ORCPT ); Tue, 1 Mar 2022 08:27:20 -0500 Received: from chinatelecom.cn (prt-mail.chinatelecom.cn [42.123.76.226]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3DEDF9D0C1; Tue, 1 Mar 2022 05:26:39 -0800 (PST) HMM_SOURCE_IP: 172.18.0.218:56246.1658835715 HMM_ATTACHE_NUM: 0001 HMM_SOURCE_TYPE: SMTP Received: from clientip-222.210.155.146 (unknown [172.18.0.218]) by chinatelecom.cn (HERMES) with SMTP id D6D50280029; Tue, 1 Mar 2022 21:26:25 +0800 (CST) X-189-SAVE-TO-SEND: +lic121@chinatelecom.cn Received: from ([172.18.0.218]) by app0025 with ESMTP id 06415c6c8f124d04b2344848f72223f3 for bpf@vger.kernel.org; Tue, 01 Mar 2022 21:26:35 CST X-Transaction-ID: 06415c6c8f124d04b2344848f72223f3 X-Real-From: lic121@chinatelecom.cn X-Receive-IP: 172.18.0.218 X-MEDUSA-Status: 0 Sender: lic121@chinatelecom.cn Date: Tue, 1 Mar 2022 13:26:23 +0000 From: lic121 To: bpf@vger.kernel.org Cc: =?iso-8859-1?Q?Bj=F6rn_T=F6pel?= , Magnus Karlsson , Jonathan Lemon , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , "David S. Miller" , Jakub Kicinski , Jesper Dangaard Brouer , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, lic121@chinatelecom.cn Subject: [PATCH bpf] libbpf: unmap rings when umem deleted Message-ID: <20220301132623.GA19995@vscode.7~> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org xsk_umem__create() does mmap for fill/comp rings, but xsk_umem__delete() doesn't do the unmap. This works fine for regular cases, because xsk_socket__delete() does unmap for the rings. But for the case that xsk_socket__create_shared() fails, umem rings are not unmapped. fill_save/comp_save are checked to determine if rings have already be unmapped by xsk. If fill_save and comp_save are NULL, it means that the rings have already been used by xsk. Then they are supposed to be unmapped by xsk_socket__delete(). Otherwise, xsk_umem__delete() does the unmap. Fixes: 2f6324a3937f ("libbpf: Support shared umems between queues and devices") Signed-off-by: lic121 --- tools/lib/bpf/xsk.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c index edafe56..32a2f57 100644 --- a/tools/lib/bpf/xsk.c +++ b/tools/lib/bpf/xsk.c @@ -1193,12 +1193,23 @@ int xsk_socket__create(struct xsk_socket **xsk_ptr, const char *ifname, int xsk_umem__delete(struct xsk_umem *umem) { + struct xdp_mmap_offsets off; + int err; + if (!umem) return 0; if (umem->refcount) return -EBUSY; + err = xsk_get_mmap_offsets(umem->fd, &off); + if (!err && umem->fill_save && umem->comp_save) { + munmap(umem->fill_save->ring - off.fr.desc, + off.fr.desc + umem->config.fill_size * sizeof(__u64)); + munmap(umem->comp_save->ring - off.cr.desc, + off.cr.desc + umem->config.comp_size * sizeof(__u64)); + } + close(umem->fd); free(umem); -- 1.8.3.1