From patchwork Thu Mar 24 14:44:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 8661551 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 213E39F36E for ; Thu, 24 Mar 2016 14:48:48 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1C702203A0 for ; Thu, 24 Mar 2016 14:48:47 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 377D72017D for ; Thu, 24 Mar 2016 14:48:46 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aj6XX-0006BE-Lo; Thu, 24 Mar 2016 14:47:11 +0000 Received: from mail-pa0-x22a.google.com ([2607:f8b0:400e:c03::22a]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aj6XE-0005vZ-Pd for linux-arm-kernel@lists.infradead.org; Thu, 24 Mar 2016 14:46:53 +0000 Received: by mail-pa0-x22a.google.com with SMTP id fl4so23821921pad.0 for ; Thu, 24 Mar 2016 07:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jd+tO6TZERp6CTxm802KCOIn/rKY/M7IhCQ8NBZkt28=; b=A7atIB3+VByazao0TgJJ3Mxm7AKDGfAjnzNYS8oPli26kf1EldOA9YEBosS0N3rz/s Jg3XlwMogWu31rWkxqm6GAZ/j+8brXFpqP9PUHJc4vlW9YfZ7NoVqmRIP7/oKIn861c6 PsI4/F9T5DaSTe6KOEOeOTd6mXDIid+xUFtCs= 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=jd+tO6TZERp6CTxm802KCOIn/rKY/M7IhCQ8NBZkt28=; b=RxXX2FZBsne6m0Lkci8DMq1FKr6995Co2yusUFpWb21ZARwN83BshgdUf/1qe4+FWr 2U2zPTOCSaeAv9TbgMqIts2U1UMLfVZfy4wCcK8PLDZ8JpIM65MjFsixvPJTrRSBFqDe TllPK5mIKKlvBRuv1vY8CHEvVRkp/Nm65La8EQBDhsbexoGi2Pt8wzqy+d6v9E9tbA2J fUxltKmAG3m/eaYBlLgyBXAI/0AJT+ImvDDNfhmakF1GEVK3m9tFbKjzfcj5kTb+mm7k j2n5cHX+FWrR6Zjke+19Za6ZD/NzCNIKMLggS9HsjjB+JpkK5P1SZ40+varVbDEn492s phzQ== X-Gm-Message-State: AD7BkJL+CVkcRwaghSpI0NNJ+Nc7F3lBobueeJLkr6NKHEW2AryISi+HzrxYrN2fl9dAZ8D5 X-Received: by 10.66.225.177 with SMTP id rl17mr13441368pac.46.1458830791148; Thu, 24 Mar 2016 07:46:31 -0700 (PDT) Received: from localhost.localdomain ([104.238.45.135]) by smtp.gmail.com with ESMTPSA id lq10sm10780673pab.36.2016.03.24.07.46.24 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 24 Mar 2016 07:46:30 -0700 (PDT) From: Shannon Zhao To: linux-arm-kernel@lists.infradead.org, stefano.stabellini@citrix.com, david.vrabel@citrix.com Subject: [PATCH v7 03/17] Xen: xlate: Use page_to_xen_pfn instead of page_to_pfn Date: Thu, 24 Mar 2016 22:44:22 +0800 Message-Id: <1458830676-27075-4-git-send-email-shannon.zhao@linaro.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1458830676-27075-1-git-send-email-shannon.zhao@linaro.org> References: <1458830676-27075-1-git-send-email-shannon.zhao@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160324_074652_949418_4524FC65 X-CRM114-Status: GOOD ( 13.19 ) X-Spam-Score: -2.7 (--) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-efi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, peter.huangpeng@huawei.com, julien.grall@arm.com, shannon.zhao@linaro.org, zhaoshenglong@huawei.com, xen-devel@lists.xen.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Make xen_xlate_map_ballooned_pages work with 64K pages. In that case Kernel pages are 64K in size but Xen pages remain 4K in size. Xen pfns refer to 4K pages. Signed-off-by: Shannon Zhao Reviewed-by: Stefano Stabellini --- drivers/xen/xlate_mmu.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/xen/xlate_mmu.c b/drivers/xen/xlate_mmu.c index 9692656..28f728b 100644 --- a/drivers/xen/xlate_mmu.c +++ b/drivers/xen/xlate_mmu.c @@ -207,9 +207,12 @@ int __init xen_xlate_map_ballooned_pages(xen_pfn_t **gfns, void **virt, void *vaddr; int rc; unsigned int i; + unsigned long nr_pages; + xen_pfn_t xen_pfn = 0; BUG_ON(nr_grant_frames == 0); - pages = kcalloc(nr_grant_frames, sizeof(pages[0]), GFP_KERNEL); + nr_pages = DIV_ROUND_UP(nr_grant_frames, XEN_PFN_PER_PAGE); + pages = kcalloc(nr_pages, sizeof(pages[0]), GFP_KERNEL); if (!pages) return -ENOMEM; @@ -218,22 +221,25 @@ int __init xen_xlate_map_ballooned_pages(xen_pfn_t **gfns, void **virt, kfree(pages); return -ENOMEM; } - rc = alloc_xenballooned_pages(nr_grant_frames, pages); + rc = alloc_xenballooned_pages(nr_pages, pages); if (rc) { - pr_warn("%s Couldn't balloon alloc %ld pfns rc:%d\n", __func__, - nr_grant_frames, rc); + pr_warn("%s Couldn't balloon alloc %ld pages rc:%d\n", __func__, + nr_pages, rc); kfree(pages); kfree(pfns); return rc; } - for (i = 0; i < nr_grant_frames; i++) - pfns[i] = page_to_pfn(pages[i]); + for (i = 0; i < nr_grant_frames; i++) { + if ((i % XEN_PFN_PER_PAGE) == 0) + xen_pfn = page_to_xen_pfn(pages[i / XEN_PFN_PER_PAGE]); + pfns[i] = pfn_to_gfn(xen_pfn++); + } - vaddr = vmap(pages, nr_grant_frames, 0, PAGE_KERNEL); + vaddr = vmap(pages, nr_pages, 0, PAGE_KERNEL); if (!vaddr) { - pr_warn("%s Couldn't map %ld pfns rc:%d\n", __func__, - nr_grant_frames, rc); - free_xenballooned_pages(nr_grant_frames, pages); + pr_warn("%s Couldn't map %ld pages rc:%d\n", __func__, + nr_pages, rc); + free_xenballooned_pages(nr_pages, pages); kfree(pages); kfree(pfns); return -ENOMEM;