From patchwork Wed Oct 11 03:26:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Pitre X-Patchwork-Id: 115484 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp273836qgn; Tue, 10 Oct 2017 20:27:23 -0700 (PDT) X-Google-Smtp-Source: AOwi7QAJh/StD0uREp8uBRvdrGQdbYr92dqzmzm+CckWX/b326ySkxdxEBhpIqVmYO468htCQWcr X-Received: by 10.98.147.197 with SMTP id r66mr10044220pfk.20.1507692443285; Tue, 10 Oct 2017 20:27:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507692443; cv=none; d=google.com; s=arc-20160816; b=uUY2G3JA5ZkOOCxMjHhK/QBVzPBZFzMvXtJj+2EEW+eXLxAlStNVQIn/4GyLyrxAxw uFZr7mWMpyJPygQrBe25gTA+IK+ScR2/dupPpq6yH25lu/TRDIP9dOFwiLORh7hkLEEm F0ppV1Pyzcg/OLmoEfQmlJkxQJbEwizHybMSUK5nGinZDReX5l7G6KSADzoyO96gJHI/ zNr6S6oFyXw7sklTMNb4Ums8Fl7s2gBnFd3QB2b20hFZ2YW3imMKhOnzQyt7/t/3GoIG wULPRq66WeijP569Kt3q/B2Z8TieNwFZAeXT0DElLQ46b8rWAiL5k0vMfqaihwNCKgRJ kbBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:sender:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:references:in-reply-to:message-id:date:subject :to:from:dkim-signature:dkim-signature:arc-authentication-results; bh=4jzwR3JLURSybJH2QhcqCYc6waXm5uXamkb+cnrZoPM=; b=uxTfZxrPyaAMy8f7z6b9VSvvI+hUVZVqcgtCNpJHAFyvmq21sM3SAWiozgkr5HdpSs 0NpEnfLag08IyWZ/3KZsHEP78A9WC+xTO4NyiZHxuA2JXHjNyrWcih5+8nMAgYj4VT/k 067gfZAgFfFD16y/13+BM/UDTMb9zXfUxy/a6IF5DgaopoTkr/FlMsnvOjEy3P55kRjY bFmKSvKzCfC6ILQOmU3DSa+JbSylmGkidnAi9yFCNUZuuLV4aC89fA080eMd0L4qLqO+ vKEZhkZ0FvcVbzTrstBRl7DFwGvQhXxjObPLW9FjqXQFry7Q6EbvOI9Isz3Iv4oBhsfK n3zA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20170209 header.b=BvFZklk7; dkim=neutral (body hash did not verify) header.i=@pobox.com header.s=sasl header.b=SMCrRGPN; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 65.50.211.133 as permitted sender) smtp.mailfrom=linux-mtd-bounces+patch=linaro.org@lists.infradead.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [65.50.211.133]) by mx.google.com with ESMTPS id p4si9472457pgc.42.2017.10.10.20.27.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 10 Oct 2017 20:27:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 65.50.211.133 as permitted sender) client-ip=65.50.211.133; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20170209 header.b=BvFZklk7; dkim=neutral (body hash did not verify) header.i=@pobox.com header.s=sasl header.b=SMCrRGPN; spf=pass (google.com: best guess record for domain of linux-mtd-bounces+patch=linaro.org@lists.infradead.org designates 65.50.211.133 as permitted sender) smtp.mailfrom=linux-mtd-bounces+patch=linaro.org@lists.infradead.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=4jzwR3JLURSybJH2QhcqCYc6waXm5uXamkb+cnrZoPM=; b=BvFZklk79tiI4pUW4+HrnQzMiA gjNFVYUqd0K1yAFx0v+pwwbhFjcYCxjfIxSYXZ8WoURMG9qWPrekzchQxabrUDcwL0LUCGiy/IAG+ SNONUHs/nHfD7SE733Vi9ZSjkM5JoGcIF9NslqXxSGrkUjekyhYeFy0/9oVzRCiQq9v6o7/zaiw5G +92mP/G2gmDimI2uXYW6nKplh/qxRSfCRYCaGzoqvjYUvo1XeQAwjQeS+xh8jsOp3JBa4ipoPc8xD Ag406o0kKUhV7iHQrEFH4TC+GJRsKWJFpK3FZL+WgBQPxZsr4YKH7/Girr/a7izxe2i31nu9jiWex jhQob3gw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1e27fs-0002t8-NF; Wed, 11 Oct 2017 03:27:12 +0000 Received: from pb-smtp1.pobox.com ([64.147.108.70] helo=sasl.smtp.pobox.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1e27fZ-0002Ln-0G for linux-mtd@lists.infradead.org; Wed, 11 Oct 2017 03:26:56 +0000 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id 9356C9F57C; Tue, 10 Oct 2017 23:26:26 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:date:message-id:in-reply-to:references; s=sasl; bh=O9H5 MiUGdRQlUnrmeIrhsky8wrw=; b=SMCrRGPNs9njqCA5XUGhNk0eL0kkVBK3WaiI TLm83Sx7i4yr7TSorYKT2uktsGPYD5nbv/kZh+0IeNa1WqWEIs4YL0uHqvktk5fF EDqiMFnR/RnP0eQvkFmpDhpUDaN9tKNGebV8ntigb+qoCWs4bFMFYhJVwVfAn/3q iSf0OcQ= Received: from pb-smtp1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id 8AAAE9F578; Tue, 10 Oct 2017 23:26:26 -0400 (EDT) Received: from yoda.home (unknown [137.175.234.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pb-smtp1.pobox.com (Postfix) with ESMTPSA id 2631E9F575; Tue, 10 Oct 2017 23:26:26 -0400 (EDT) Received: from xanadu.home (xanadu.home [192.168.2.2]) by yoda.home (Postfix) with ESMTP id 5FAEF2DA0624; Tue, 10 Oct 2017 23:26:25 -0400 (EDT) From: Nicolas Pitre To: Boris Brezillon Subject: [PATCH 1/5] MTD: mtdram: properly handle the phys argument in the point method Date: Tue, 10 Oct 2017 23:26:17 -0400 Message-Id: <20171011032621.26979-2-nicolas.pitre@linaro.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171011032621.26979-1-nicolas.pitre@linaro.org> References: <20171011032621.26979-1-nicolas.pitre@linaro.org> X-Pobox-Relay-ID: F696471A-AE33-11E7-A1A0-8EF31968708C-78420484!pb-smtp1.pobox.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171010_202653_261429_90452B24 X-CRM114-Status: GOOD ( 14.97 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [64.147.108.70 listed in list.dnswl.org] 0.7 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-mtd@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+patch=linaro.org@lists.infradead.org When the phys pointer is non null, the point method is expected to return the physical address for the pointed area. In the case of the mtdram driver we have to retrieve the physical address for the corresponding vmalloc area. However, there is no guarantee that the vmalloc area is made of physically contiguous pages. In that case we simply limit retlen to the actually contiguous pages. Signed-off-by: Nicolas Pitre --- drivers/mtd/devices/mtdram.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) -- 2.9.5 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ Reviewed-by: Richard Weinberger diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index cbd8547d7a..7dbee8e62f 100644 --- a/drivers/mtd/devices/mtdram.c +++ b/drivers/mtd/devices/mtdram.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,27 @@ static int ram_point(struct mtd_info *mtd, loff_t from, size_t len, { *virt = mtd->priv + from; *retlen = len; + + if (phys) { + /* limit retlen to the number of contiguous physical pages */ + unsigned long page_ofs = offset_in_page(*virt); + void *addr = *virt - page_ofs; + unsigned long pfn1, pfn0 = vmalloc_to_pfn(addr); + + *phys = __pfn_to_phys(pfn0) + page_ofs; + len += page_ofs; + while (len > PAGE_SIZE) { + len -= PAGE_SIZE; + addr += PAGE_SIZE; + pfn0++; + pfn1 = vmalloc_to_pfn(addr); + if (pfn1 != pfn0) { + *retlen = *virt - addr; + break; + } + } + } + return 0; }