From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753838Ab3IKNOM (ORCPT ); Wed, 11 Sep 2013 09:14:12 -0400 Received: from mail-pa0-f47.google.com ([209.85.220.47]:59876 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753726Ab3IKNOK (ORCPT ); Wed, 11 Sep 2013 09:14:10 -0400 Date: Wed, 11 Sep 2013 16:12:43 +0300 From: Sergey Senozhatsky To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org, Alex Deucher Subject: Re: [117/251] radeon kms: do not flush uninitialized hotplug work Message-ID: <20130911131243.GA14072@swordfish.datadirectnet.com> References: <20130911042707.738353451@goodmis.org> <20130911042911.752089217@goodmis.org> <20130911090648.GA2271@swordfish.minsk.epam.com> <20130911083741.6b2783b2@gandalf.local.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130911083741.6b2783b2@gandalf.local.home> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On (09/11/13 08:37), Steven Rostedt wrote: > > > > I'll prepare a proper patch for stable. > > > > I took a crack at it. How's this look? as far as I understand this is 27c505ca84e164ec66ad55dcf3f5befaac83f10a on top of a01c34f72e7cd2624570818f579b5ab464f93de2 [both backported] with moved flush_work_sync() in radeon_irq_kms_fini() to rdev->irq.installed == true case (am I right?). if so, then looks good to me! -ss > -- Steve > > From 39a678bf28d5c3e8266bd88ba1e831818102787e Mon Sep 17 00:00:00 2001 > From: Sergey Senozhatsky > Date: Thu, 29 Aug 2013 12:29:35 +0300 > Subject: [PATCH] radeon kms: fix uninitialised hotplug work usage in > r100_irq_process() > > [ Upstream commit 27c505ca84e164ec66ad55dcf3f5befaac83f10a ] > > Commit a01c34f72e7cd2624570818f579b5ab464f93de2 (radeon kms: do not > flush uninitialized hotplug work) moved work initialisation phase to > the last step of radeon_irq_kms_init(). Meelis Roos reported that this > causes problems on his machine because drm_irq_install() uses hotplug > work on r100. > > hotplug work flushed in radeon_irq_kms_fini(), with two possible cases: > -- radeon_irq_kms_fini() call after successful radeon_irq_kms_init() > -- radeon_irq_kms_fini() call after unsuccessful (or not called at all) > radeon_irq_kms_init() > > The latter one causes flush work on uninitialised hotplug work. Move > work initialisation before drm_irq_install(), but keep existing agreement > to flush hotplug work in radeon_irq_kms_fini() only for `irq.installed' > (successful radeon_irq_kms_init()) case. > > WARNING: CPU: 0 PID: 243 at kernel/workqueue.c:1378 __queue_work+0x132/0x16d() > Call Trace: > [] ? dump_stack+0xa/0x13 > [] ? warn_slowpath_common+0x75/0x8a > [] ? __queue_work+0x132/0x16d > [] ? __queue_work+0x132/0x16d > [] ? warn_slowpath_null+0x1b/0x1f > [] ? __queue_work+0x132/0x16d > [] ? queue_work_on+0x30/0x40 > [] ? r100_irq_process+0x16d/0x1e6 [radeon] > [] ? radeon_driver_irq_preinstall_kms+0xc2/0xc5 [radeon] > [] ? drm_irq_install+0xb2/0x1ac [drm] > [] ? drm_vblank_init+0x196/0x1d2 [drm] > [] ? radeon_irq_kms_init+0x33/0xc6 [radeon] > [] ? r100_startup+0x1a3/0x1d6 [radeon] > [] ? radeon_ttm_init+0x26e/0x287 [radeon] > [] ? r100_init+0x2b3/0x309 [radeon] > [] ? vga_client_register+0x39/0x40 > [] ? radeon_device_init+0x54b/0x61b [radeon] > [] ? cail_mc_write+0x13/0x13 [radeon] > [] ? radeon_driver_load_kms+0x82/0xda [radeon] > [] ? drm_get_pci_dev+0x136/0x22d [drm] > [] ? radeon_pci_probe+0x6c/0x86 [radeon] > [] ? pci_device_probe+0x4c/0x83 > [] ? driver_probe_device+0x80/0x184 > [] ? pci_match_id+0x18/0x36 > [] ? __driver_attach+0x44/0x5f > [] ? bus_for_each_dev+0x50/0x5a > [] ? driver_attach+0x14/0x16 > [] ? __device_attach+0x28/0x28 > [] ? bus_add_driver+0xd6/0x1bf > [] ? driver_register+0x78/0xcf > [] ? 0xf8ba7fff > [] ? do_one_initcall+0x8b/0x121 > [] ? change_page_attr_clear+0x2e/0x33 > [] ? 0xf8ba7fff > [] ? set_memory_ro+0x1c/0x20 > [] ? set_page_attributes+0x11/0x12 > [] ? load_module+0x12fa/0x17e8 > [] ? map_vm_area+0x22/0x31 > [] ? SyS_init_module+0x67/0x7d > [] ? sysenter_do_call+0x12/0x26 > > Reported-by: Meelis Roos > Tested-by: Meelis Roos > Signed-off-by: Sergey Senozhatsky > Signed-off-by: Alex Deucher > Cc: stable@vger.kernel.org > Signed-off-by: Steven Rostedt > --- > drivers/gpu/drm/radeon/radeon_irq_kms.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c > index 4bc6be5..03acf67 100644 > --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c > @@ -258,16 +258,18 @@ int radeon_irq_kms_init(struct radeon_device *rdev) > dev_info(rdev->dev, "radeon: using MSI.\n"); > } > } > + > + INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); > + INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); > + > rdev->irq.installed = true; > r = drm_irq_install(rdev->ddev); > if (r) { > rdev->irq.installed = false; > + flush_work(&rdev->hotplug_work); > return r; > } > > - INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); > - INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); > - > DRM_INFO("radeon: irq initialized.\n"); > return 0; > } > -- > 1.7.10.4 >