From patchwork Tue Oct 17 15:28:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Pitre X-Patchwork-Id: 116126 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp5034121qgn; Tue, 17 Oct 2017 08:29:06 -0700 (PDT) X-Google-Smtp-Source: ABhQp+SZLH36/MWGb1y4//HTikj/5wO931GdsIMiBFwlfFx5J8It+aNVujlnUy37wSfyWxHzmMPw X-Received: by 10.84.129.2 with SMTP id 2mr2738638plb.270.1508254146375; Tue, 17 Oct 2017 08:29:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508254146; cv=none; d=google.com; s=arc-20160816; b=kjPVA8A8UZzrAYNvicIONgBVN5BhlisFF50HKyy3BfuSsBcCZaLzwnPk9GE3o4YjGP a/z6pW9eCjYogF0Laz514uWN9bAqADXyeudpKFOQ23HgQ8vXWW1JaqGsNY2bSdKBBDQL jLUDquRscWy7lKG0rE4PVoQeFZsuaMw8n8NU0v2C3SAUina/4bUFSPm1xLPIQ9KH1xoS UVKzL7MkwpdQjQeSj2Cg3o528H+LJt7RGMEVW7Pbt3d5V8owK277o5U0mQZshHbVGa04 1nM4PlXOYrLD2UStkNk+BMZv0RzvMVZkkMJ1d0Ynl+Ruz1RLiAmLcNjTSzoDlHqz7XiC 3zdg== 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=3d6lJSoSBZdJ30DnE78iPQ9amcSDUUs4IxfNh+69OrE=; b=IJPv/rNefGIwaKjIHIZuTQBGuouPq2/kNOxIH1feYTh0darkgGcqfHFJ4tw4F97MLb d7wFh5RoHFkSMGP2+wkY2zfxLtCZyE0p3Wga3GcMD6H8bb4C3j6ps5ySXyUvMkVbmGFj 7w5T1qGBsHVS6vyycPrBnFMSMRUI26RRR2D4/QseeV9xQjysY4UUbe9DfAxOjN6zko4g RdMzZO73ipTR4I+p8fuMKjrBBWDZULRqumFq727DnBHrrP94dGDxGJxLW6YN7Hs37vht Y9yA7LHLES686GcjGFdbGF6QHEfw0hv6jrVEkhr+aO166MtUA/WhDR+AZOUSNZGXcSsq iFFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.infradead.org header.s=bombadil.20170209 header.b=sPUqNtXt; dkim=neutral (body hash did not verify) header.i=@pobox.com header.s=sasl header.b=EM5iO1ti; 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 b21si6336593pls.38.2017.10.17.08.29.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Oct 2017 08:29:06 -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=sPUqNtXt; dkim=neutral (body hash did not verify) header.i=@pobox.com header.s=sasl header.b=EM5iO1ti; 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=3d6lJSoSBZdJ30DnE78iPQ9amcSDUUs4IxfNh+69OrE=; b=sPUqNtXt0aK6QQqLkBjmyZt4Wv Mch9EukZDX1JAkjvQtj+eyoJ7Z8/gAZyPHb0liGH1aqYuhDMf0UrT9QJeGGZY9f/YUFgDm9hwyh// sXsIs5+CBix3RCEezb1ilVa0CypUM7MH76YeWbdjn2xj+ulbJVP6XRPEF0ekpCSPGrYShyb1vd4ep ZGlTKqKCIi8YnRrwRnCWCgUnt8UqTa+0tjFc4EkNzRiv2WelXqVREDzGYHwqaIQomgJE/QNYeceD1 sjGW9TEmVqt9rSx6+5l4mlCqsZxKlIIHDe/nmYn6N4AvD8frqIHq0kG3exT5gnB75WQYxKpssOWYF e70jU9BA==; 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 1e4Tnh-0004Fw-89; Tue, 17 Oct 2017 15:29:01 +0000 Received: from pb-smtp2.pobox.com ([64.147.108.71] helo=sasl.smtp.pobox.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1e4Tnc-0004BW-LT for linux-mtd@lists.infradead.org; Tue, 17 Oct 2017 15:28:59 +0000 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id 516779A51A; Tue, 17 Oct 2017 11:28:33 -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=ZrIW nK4TxYunlZZpIOgjiQnqXdg=; b=EM5iO1tiXRzG4pDm9otFiAnt8Ljs9RflP4cy GuPgqDfNXH7n85aurtB1F6nEUHOXkw4w7eOOIQ3FA2T9ny7lj9zae7gty3udfhNo yRAFdbdwlTO/sQMrkjj9iG45OPMTWs+y2XIi3FHJm+GpGfRn+2pwmXho1uSFDv3n 6iRYE/8= Received: from pb-smtp2.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id 4A1889A519; Tue, 17 Oct 2017 11:28:33 -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-smtp2.pobox.com (Postfix) with ESMTPSA id C95279A517; Tue, 17 Oct 2017 11:28:32 -0400 (EDT) Received: from xanadu.home (xanadu.home [192.168.2.2]) by yoda.home (Postfix) with ESMTP id 07AC42DA023A; Tue, 17 Oct 2017 11:28:32 -0400 (EDT) From: Nicolas Pitre To: Boris Brezillon , Richard Weinberger Subject: [PATCH v2 1/5] MTD: mtdram: properly handle the phys argument in the point method Date: Tue, 17 Oct 2017 11:28:22 -0400 Message-Id: <20171017152826.11658-2-nicolas.pitre@linaro.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171017152826.11658-1-nicolas.pitre@linaro.org> References: <20171017152826.11658-1-nicolas.pitre@linaro.org> X-Pobox-Relay-ID: D5C5B6EE-B34F-11E7-BCB2-575F0C78B957-78420484!pb-smtp2.pobox.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171017_082856_969260_835D0CB1 X-CRM114-Status: GOOD ( 14.72 ) 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.71 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: Chris Brandt , 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 Reviewed-by: Richard Weinberger --- 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/ diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index cbd8547d7a..4418629e8d 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 = addr - *virt; + break; + } + } + } + return 0; }