From patchwork Thu May 10 06:55:28 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Ungerer X-Patchwork-Id: 158325 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:4978:20e::2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 7B1A0B6FA5 for ; Fri, 11 May 2012 00:08:10 +1000 (EST) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1SSU0a-0000RD-1X; Thu, 10 May 2012 14:06:20 +0000 Received: from [85.118.1.10] (helo=casper.infradead.org) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1SSOo6-0008E8-Mh for linux-mtd@merlin.infradead.org; Thu, 10 May 2012 08:33:07 +0000 Received: from sncsmrelay2.nai.com ([67.97.80.206]) by casper.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1SSNPA-0007cJ-Ri for linux-mtd@lists.infradead.org; Thu, 10 May 2012 07:03:18 +0000 Received: from SNCEXHT2.corp.nai.org (unknown [10.68.5.52]) by sncsmrelay2.nai.com with smtp id 3e34_0dde_7497dd96_62dc_4c40_b675_8c1527b1c04c; Thu, 10 May 2012 01:57:10 -0500 Received: from SNCEXAMMB3.corp.nai.org (10.68.48.8) by SNCEXHT2.corp.nai.org (10.68.5.52) with Microsoft SMTP Server (TLS) id 8.3.245.1; Wed, 9 May 2012 23:57:09 -0700 Received: from localhost.localdomain (172.22.196.22) by mail.na.nai.com (10.68.48.8) with Microsoft SMTP Server id 8.3.245.1; Wed, 9 May 2012 23:57:08 -0700 From: To: , Subject: [PATCH 1/2] mtd: fix wrong usage of ioremap_nocache() in uclinux.c map driver Date: Thu, 10 May 2012 16:55:28 +1000 Message-ID: <1336632929-26100-1-git-send-email-gerg@snapgear.com> X-Mailer: git-send-email 1.5.5.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20120510_080317_505914_B38A9409 X-CRM114-Status: GOOD ( 13.70 ) X-Spam-Score: -4.2 (----) X-Spam-Report: SpamAssassin version 3.3.2 on casper.infradead.org summary: Content analysis details: (-4.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/, medium trust [67.97.80.206 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.0 SUBJ_OBFU_PUNCT_FEW Possible punctuation-obfuscated Subject: header Cc: Greg Ungerer X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Greg Ungerer The uclinux.c mapping driver uses ioremap_nocache() to map its physical mapping address to a system virtual address. Problem is that the region it is mapping is not device memory. It is ordinary system RAM. On most non-MMU systems this doesn't matter, and the mapping is always a 1:1 translation of the address. But if we want to use the uclinux.c mapping driver on real MMU enabled systems we should be using phys_to_virt() for the translation, since that is really what we are doing. So change it to do that. Signed-off-by: Greg Ungerer --- drivers/mtd/maps/uclinux.c | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/maps/uclinux.c b/drivers/mtd/maps/uclinux.c index cfff454..6d43c75 100644 --- a/drivers/mtd/maps/uclinux.c +++ b/drivers/mtd/maps/uclinux.c @@ -68,10 +68,10 @@ static int __init uclinux_mtd_init(void) printk("uclinux[mtd]: RAM probe address=0x%x size=0x%x\n", (int) mapp->phys, (int) mapp->size); - mapp->virt = ioremap_nocache(mapp->phys, mapp->size); + mapp->virt = phys_to_virt(mapp->phys); if (mapp->virt == 0) { - printk("uclinux[mtd]: ioremap_nocache() failed\n"); + printk("uclinux[mtd]: no virtual mapping?\n"); return(-EIO); } @@ -80,7 +80,6 @@ static int __init uclinux_mtd_init(void) mtd = do_map_probe("map_ram", mapp); if (!mtd) { printk("uclinux[mtd]: failed to find a mapping?\n"); - iounmap(mapp->virt); return(-ENXIO); } @@ -103,10 +102,8 @@ static void __exit uclinux_mtd_cleanup(void) map_destroy(uclinux_ram_mtdinfo); uclinux_ram_mtdinfo = NULL; } - if (uclinux_ram_map.virt) { - iounmap((void *) uclinux_ram_map.virt); + if (uclinux_ram_map.virt) uclinux_ram_map.virt = 0; - } } /****************************************************************************/