Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp343380pxk; Thu, 24 Sep 2020 07:02:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx8xZDfjqJPKOOqm2J7PxU9VN6Cafr3/gNfkic7T6d6kZYXSChcmzO8cH6cz0HrnwvuLLkM X-Received: by 2002:a17:907:417c:: with SMTP id oe20mr45422ejb.322.1600956144330; Thu, 24 Sep 2020 07:02:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600956144; cv=none; d=google.com; s=arc-20160816; b=h2FQHcv3REKNkxrlI9s2FmNkGOLnujB2Y9Cot0YewQbB7wZyApsqkZY3OkFjK9IPQT XKktiLf7Cno5qz6IDh9hgmyBKovoinO2JKjiW6hmw6EGrSXawXenWc5dBsOneP40WDzD Ss9eVeWdECGmoRKypHpui+HPNJPVcIuaRG3uOrCAAEKTyPjs8bV2WGymFtt4ikFBxtYq QNp9beDi5jLmkS60WHItU39rq74Pj1nhLeHEA26ohFyuN8iy+nAY5MhWWdi5F593dps9 mQCpK2xuXmYdFPr03si8mCloB4ZtZb0SgWuRQ2nsu94SwcNXD0nVatEx4041VxErm4Cr +jKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=DoQjzQarxloGAmnDI67QP4f0cjzIHBlULRPmusZkYFE=; b=ii7J4SarGyiK0qocVn9vwT2WeihZw/eNCOMCQHWp2cT4YMn9ABFBfWP+/3Gc6Sp4bI iZFQAnVfl7CLCHJdKTk3ADY2RMEUnAfIDUwVZrjGCbVg1KGavvgtagrWDH2HFkVDI7CJ XtxZDUBzrrtOd8UBzRU9jUxDEO8R7dFooYVw/cNu4rX5tJKWdGYiz7BNfxh0RN1Sva0H wfUjxCMExOAfDl5b+bpXlT+AfoFDzW0pZTYQZnrLrakneec6T8mxGSdR9Ajh9+I9CqMw WfuPKkn2KlTCL+p9Gd1SxXzqrdYmj726h23zsd3wsAYxIzI3//FWmqsdq2XeLL/rNudb Z9DQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=Wle5rrsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bc11si2273338edb.532.2020.09.24.07.01.51; Thu, 24 Sep 2020 07:02:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=Wle5rrsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728206AbgIXN73 (ORCPT + 99 others); Thu, 24 Sep 2020 09:59:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728152AbgIXN7T (ORCPT ); Thu, 24 Sep 2020 09:59:19 -0400 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FBBBC0613D8 for ; Thu, 24 Sep 2020 06:59:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=DoQjzQarxloGAmnDI67QP4f0cjzIHBlULRPmusZkYFE=; b=Wle5rrsf+RqFWFUJjUE1hZ+CeZ gESFPu3GnpG43g18SN2z5c30lwsCJXPouUI2dOzKKGTOY4iO72QA54PRkRtRNYAMtAhUoVaGNfsAP qEUVsmaPq/JprzOd6dGTNyNyIxR4W5PWejpsei3Uuj82SsW7ET4sYAkFsZRjQBtBqwe799KZw1aha 7G8PNMRi5V1UH0TNGLwrymdthFBu3HqxsMm8Zxzzs3gza4c11P8o1Ap8kM1EVo++DvMZuKLMq1nmo qmJyACVq9ezddAPwb2l/W3GltjZj6sQO1OLZ+iYp/9MgqLxWTTwQx2QmH7Zz8VpZ03Hnv8BGJbsEx kQU0B9/Q==; Received: from p4fdb0c34.dip0.t-ipconnect.de ([79.219.12.52] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLRm7-0003xB-62; Thu, 24 Sep 2020 13:59:07 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Peter Zijlstra , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , Jani Nikula , Joonas Lahtinen , Tvrtko Ursulin , Chris Wilson , Matthew Auld , Rodrigo Vivi , Minchan Kim , Matthew Wilcox , Nitin Gupta , x86@kernel.org, xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org Subject: [PATCH 10/11] x86/xen: open code alloc_vm_area in arch_gnttab_valloc Date: Thu, 24 Sep 2020 15:58:52 +0200 Message-Id: <20200924135853.875294-11-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200924135853.875294-1-hch@lst.de> References: <20200924135853.875294-1-hch@lst.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Replace the last call to alloc_vm_area with an open coded version using an iterator in struct gnttab_vm_area instead of the triple indirection magic in alloc_vm_area. Signed-off-by: Christoph Hellwig --- arch/x86/xen/grant-table.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c index 4988e19598c8a5..1e681bf62561a0 100644 --- a/arch/x86/xen/grant-table.c +++ b/arch/x86/xen/grant-table.c @@ -25,6 +25,7 @@ static struct gnttab_vm_area { struct vm_struct *area; pte_t **ptes; + int idx; } gnttab_shared_vm_area, gnttab_status_vm_area; int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, @@ -90,19 +91,31 @@ void arch_gnttab_unmap(void *shared, unsigned long nr_gframes) } } +static int gnttab_apply(pte_t *pte, unsigned long addr, void *data) +{ + struct gnttab_vm_area *area = data; + + area->ptes[area->idx++] = pte; + return 0; +} + static int arch_gnttab_valloc(struct gnttab_vm_area *area, unsigned nr_frames) { area->ptes = kmalloc_array(nr_frames, sizeof(*area->ptes), GFP_KERNEL); if (area->ptes == NULL) return -ENOMEM; - - area->area = alloc_vm_area(PAGE_SIZE * nr_frames, area->ptes); - if (area->area == NULL) { - kfree(area->ptes); - return -ENOMEM; - } - + area->area = get_vm_area(PAGE_SIZE * nr_frames, VM_IOREMAP); + if (!area->area) + goto out_free_ptes; + if (apply_to_page_range(&init_mm, (unsigned long)area->area->addr, + PAGE_SIZE * nr_frames, gnttab_apply, area)) + goto out_free_vm_area; return 0; +out_free_vm_area: + free_vm_area(area->area); +out_free_ptes: + kfree(area->ptes); + return -ENOMEM; } static void arch_gnttab_vfree(struct gnttab_vm_area *area) -- 2.28.0