From patchwork Wed Oct 2 14:58:38 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 2975611 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B2AF89F245 for ; Wed, 2 Oct 2013 14:59:21 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 179DC20303 for ; Wed, 2 Oct 2013 14:59:17 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 5D79A2038B for ; Wed, 2 Oct 2013 14:59:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3DAB6E7929 for ; Wed, 2 Oct 2013 07:59:13 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-ee0-f42.google.com (mail-ee0-f42.google.com [74.125.83.42]) by gabe.freedesktop.org (Postfix) with ESMTP id 0E766E5DE2 for ; Wed, 2 Oct 2013 07:58:54 -0700 (PDT) Received: by mail-ee0-f42.google.com with SMTP id b45so468909eek.1 for ; Wed, 02 Oct 2013 07:58:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=+RQ1tfyY0DrmXLO4/cXOttD1CkPX9VJimvj7lcs8jBA=; b=T15PfpXbsnXwE5yvEMXDN+/imEiIbeJPftM7d8zuPTvZtEQSVdNRkecH49AAk4teGB NNdDeFMWdc6AWeeVTKciMdO0BzXxC1nS7IyuPTVm6poEb1CEZgPevCdQu4TwCZLpo0NK AxgiTRyJj2LK8UG/TSmTaovG+erUiGMXJ+Fk5rY3l95VOhFn9SO9mP6AI+1U5sB6nrLT rjkj5ALEVSiMOSCQE5ZR2HrOseSDNRBKriT2g/R11uHTKbhxVC1rLf7u4ov/t1kRNsyR ywFsdp7Sr5FDQicpcKG5fjhKhkV2CLZnDo8V2Q4xuaGDorbvwYMhukPROWJGG7J6l0FX KeaQ== X-Received: by 10.14.183.2 with SMTP id p2mr4307767eem.44.1380725934258; Wed, 02 Oct 2013 07:58:54 -0700 (PDT) Received: from localhost.localdomain (stgt-5f71b885.pool.mediaWays.net. [95.113.184.133]) by mx.google.com with ESMTPSA id z12sm4675926eev.6.1969.12.31.16.00.00 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 02 Oct 2013 07:58:53 -0700 (PDT) From: David Herrmann To: linux-fbdev@vger.kernel.org Subject: [PATCH 1/2] simplefb: fix unmapping fb during destruction Date: Wed, 2 Oct 2013 16:58:38 +0200 Message-Id: <1380725919-1961-1-git-send-email-dh.herrmann@gmail.com> X-Mailer: git-send-email 1.8.4 Cc: Stephen Warren , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Tomi Valkeinen , Alexandre Courbot , Jean-Christophe Plagniol-Villard X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable 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 Unfortunately, fbdev does not create its own "struct device" for framebuffers. Instead, it attaches to the device of the parent layer. This has the side-effect that devm_* managed resources are not cleaned up on framebuffer-destruction but rather during destruction of the parent-device. In case of fbdev this might be too late, though. remove_conflicting_framebuffer() may remove fbdev devices but keep the parent device as it is. Therefore, we now use plain ioremap() and unmap the framebuffer in the fb_destroy() callback. Note that we must not free the device here as this might race with the parent-device removal. Instead, we rely on unregister_framebuffer() as barrier and we're safe. Reported-by: Tom Gundersen Signed-off-by: David Herrmann Acked-by: Stephen Warren --- Hi I know that simplefb was supposed to stay "as simple as possible" but I really think this series is the last set of fixes I have. Unfortunately framebuffer DRM handover is mandatory so we cannot ignore it in simplefb. Both patches are not critical at all and are targeted at 3.13-rc1. Thanks David drivers/video/simplefb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c index 8d78106..74b016c 100644 --- a/drivers/video/simplefb.c +++ b/drivers/video/simplefb.c @@ -66,8 +66,15 @@ static int simplefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, return 0; } +static void simplefb_destroy(struct fb_info *info) +{ + if (info->screen_base) + iounmap(info->screen_base); +} + static struct fb_ops simplefb_ops = { .owner = THIS_MODULE, + .fb_destroy = simplefb_destroy, .fb_setcolreg = simplefb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -212,8 +219,8 @@ static int simplefb_probe(struct platform_device *pdev) info->fbops = &simplefb_ops; info->flags = FBINFO_DEFAULT | FBINFO_MISC_FIRMWARE; - info->screen_base = devm_ioremap(&pdev->dev, info->fix.smem_start, - info->fix.smem_len); + info->screen_base = ioremap(info->fix.smem_start, + info->fix.smem_len); if (!info->screen_base) { framebuffer_release(info); return -ENODEV; @@ -223,6 +230,7 @@ static int simplefb_probe(struct platform_device *pdev) ret = register_framebuffer(info); if (ret < 0) { dev_err(&pdev->dev, "Unable to register simplefb: %d\n", ret); + iounmap(info->screen_base); framebuffer_release(info); return ret; }