From patchwork Fri Aug 26 20:30:28 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Trofimovich X-Patchwork-Id: 1103242 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p7QL0FmQ017048 for ; Fri, 26 Aug 2011 21:00:35 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2671F9E88E for ; Fri, 26 Aug 2011 14:00:15 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-fx0-f49.google.com (mail-fx0-f49.google.com [209.85.161.49]) by gabe.freedesktop.org (Postfix) with ESMTP id F3EA79E76B for ; Fri, 26 Aug 2011 13:27:12 -0700 (PDT) Received: by fxd20 with SMTP id 20so3630639fxd.36 for ; Fri, 26 Aug 2011 13:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:x-mailer:mime-version :content-type; bh=odg2R2VQSOabpfXIcQ78SsUg7eRNstE+jxH+CBSW/+Q=; b=Y1uJjrDlSCqcMaK4h+y/HNS/l/Sygeub87eFrCqm5ucuffcqTgUc0lHdg7fbp/3fO8 eiGRXUmQk591K47txP6tmamWrSo+/l5Z7Od4gVDt2tetLpQkk9oiNvnOfapeYVzCXQ+0 94NW6dDzhi1A9ztGB0d79qFc9TVVQARt+JSkE= Received: by 10.223.45.18 with SMTP id c18mr2214971faf.86.1314390431913; Fri, 26 Aug 2011 13:27:11 -0700 (PDT) Received: from sf.home ([178.125.102.67]) by mx.google.com with ESMTPS id c5sm1607431fai.20.2011.08.26.13.27.08 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 26 Aug 2011 13:27:10 -0700 (PDT) Date: Fri, 26 Aug 2011 23:30:28 +0300 From: Sergei Trofimovich To: Matthew Garrett Subject: i915: 3.1.0-rc3+: WARNING: at fs/sysfs/dir.c:455 sysfs_add_one+0xb8/0xf0() Message-ID: <20110826233028.074830de@sf.home> X-Mailer: Claws Mail 3.7.9 (GTK+ 2.24.4; x86_64-pc-linux-gnu) Mime-Version: 1.0 X-Mailman-Approved-At: Fri, 26 Aug 2011 13:59:52 -0700 Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Keith@freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Fri, 26 Aug 2011 21:00:35 +0000 (UTC) Around -rc2+ i've noticed the following warning in dmesg [1] > WARNING: at fs/sysfs/dir.c:455 sysfs_add_one+0xb8/0xf0() > sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/intel_backlight' It tries to register backlight twice, so fails miserably. The machine is compaq-2510p with 965GM. Reverting commit aaa6fd2a004147bf32fce05720938236de3361d9 helps. ("Not all systems expose a firmware or platform mechanism for changing the backlight intensity on i915, so add native driver support.") Attached dmesg before reverting the patch and after. Thanks! [1]: ------------[ cut here ]------------ WARNING: at fs/sysfs/dir.c:455 sysfs_add_one+0xb8/0xf0() Hardware name: HP Compaq 2510p Notebook PC sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/intel_backlight' Modules linked in: i915(+) drm_kms_helper drm sdhci_pci sdhci iwl4965 yenta_socket pcmcia_core iwl_legacy mmc_core mac80211 snd_hda_codec_analog processor i2c_algo_bit thermal pcmcia_ rsrc container cfg80211 e1000e battery button ac rfkill snd_hda_intel fan snd_hda_codec snd_hwdep Pid: 828, comm: modprobe Not tainted 3.1.0-rc2-00169-g5ccc387 #137 Call Trace: [] warn_slowpath_common+0x7a/0xb0 [] warn_slowpath_fmt+0x41/0x50 [] sysfs_add_one+0xb8/0xf0 [] create_dir+0x7c/0xd0 [] sysfs_create_dir+0x7c/0xd0 [] ? sub_preempt_count+0x9d/0xd0 [] kobject_add_internal+0xbd/0x200 [] kobject_add_varg+0x38/0x60 [] kobject_add+0x44/0x70 [] ? kobject_get+0x1a/0x30 [] device_add+0x98/0x690 [] ? pm_runtime_init+0xd1/0xe0 [] ? device_pm_init+0x59/0x80 [] device_register+0x19/0x20 [] backlight_device_register+0xf1/0x1c0 [] intel_panel_setup_backlight+0x73/0xf0 [i915] [] ? intel_crt_init+0xeb/0x1d0 [i915] [] intel_modeset_init+0x7c9/0x1100 [i915] [] i915_driver_load+0xc81/0x1170 [i915] [] ? drm_sysfs_device_add+0x81/0xb0 [drm] [] ? kobject_uevent_env+0x1b7/0x470 [] ? drm_get_minor+0x243/0x300 [drm] [] drm_get_pci_dev+0x188/0x2b0 [drm] [] ? sub_preempt_count+0x9d/0xd0 [] i915_pci_probe+0x1b/0x13f [i915] [] local_pci_probe+0x5a/0xd0 [] pci_device_probe+0x80/0xb0 [] ? driver_sysfs_add+0x7a/0xb0 [] driver_probe_device+0x96/0x1c0 [] ? driver_probe_device+0x1c0/0x1c0 [] __driver_attach+0x93/0xa0 [] ? driver_probe_device+0x1c0/0x1c0 [] bus_for_each_dev+0x68/0x90 [] driver_attach+0x19/0x20 [] bus_add_driver+0x198/0x260 [] driver_register+0x78/0x140 [] __pci_register_driver+0x51/0xd0 [] drm_pci_init+0x119/0x130 [drm] [] ? 0xffffffffa02adfff [] i915_init+0x8b/0x8d [i915] [] do_one_initcall+0x3e/0x170 [] sys_init_module+0x8a/0x1e0 [] system_call_fastpath+0x16/0x1b ---[ end trace 1c7dd79996e79e7a ]--- diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 7916bd9..feb4f16 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -36,7 +36,6 @@ #include #include #include -#include /* General customization: */ @@ -691,7 +690,6 @@ typedef struct drm_i915_private { int child_dev_num; struct child_device_config *child_dev; struct drm_connector *int_lvds_connector; - struct drm_connector *int_edp_connector; bool mchbar_need_disable; @@ -725,8 +723,6 @@ typedef struct drm_i915_private { /* list of fbdev register on this device */ struct intel_fbdev *fbdev; - struct backlight_device *backlight; - struct drm_property *broadcast_rgb_property; struct drm_property *force_audio_property; diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 44fef5e..0feae90 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -1841,11 +1841,6 @@ done: static void intel_dp_destroy (struct drm_connector *connector) { - struct drm_device *dev = connector->dev; - - if (intel_dpd_is_edp(dev)) - intel_panel_destroy_backlight(dev); - drm_sysfs_connector_remove(connector); drm_connector_cleanup(connector); kfree(connector); @@ -2077,8 +2072,6 @@ intel_dp_init(struct drm_device *dev, int output_reg) DRM_MODE_TYPE_PREFERRED; } } - dev_priv->int_edp_connector = connector; - intel_panel_setup_backlight(dev); } intel_dp_add_properties(intel_dp, connector); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 0b2ee9d..7b330e7 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -297,10 +297,9 @@ extern void intel_pch_panel_fitting(struct drm_device *dev, extern u32 intel_panel_get_max_backlight(struct drm_device *dev); extern u32 intel_panel_get_backlight(struct drm_device *dev); extern void intel_panel_set_backlight(struct drm_device *dev, u32 level); -extern int intel_panel_setup_backlight(struct drm_device *dev); +extern void intel_panel_setup_backlight(struct drm_device *dev); extern void intel_panel_enable_backlight(struct drm_device *dev); extern void intel_panel_disable_backlight(struct drm_device *dev); -extern void intel_panel_destroy_backlight(struct drm_device *dev); extern enum drm_connector_status intel_panel_detect(struct drm_device *dev); extern void intel_crtc_load_lut(struct drm_crtc *crtc); diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 31da77f..8b521a2 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c @@ -552,8 +552,6 @@ static void intel_lvds_destroy(struct drm_connector *connector) struct drm_device *dev = connector->dev; struct drm_i915_private *dev_priv = dev->dev_private; - intel_panel_destroy_backlight(dev); - if (dev_priv->lid_notifier.notifier_call) acpi_lid_notifier_unregister(&dev_priv->lid_notifier); drm_sysfs_connector_remove(connector); @@ -1034,9 +1032,6 @@ out: /* keep the LVDS connector */ dev_priv->int_lvds_connector = connector; drm_sysfs_connector_add(connector); - - intel_panel_setup_backlight(dev); - return true; failed: diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c index b8e8158b..b7c5ddb 100644 --- a/drivers/gpu/drm/i915/intel_opregion.c +++ b/drivers/gpu/drm/i915/intel_opregion.c @@ -227,6 +227,7 @@ void intel_opregion_asle_intr(struct drm_device *dev) asle->aslc = asle_stat; } +/* Only present on Ironlake+ */ void intel_opregion_gse_intr(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index a9e0c7b..05f500c 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c @@ -277,7 +277,7 @@ void intel_panel_enable_backlight(struct drm_device *dev) dev_priv->backlight_enabled = true; } -static void intel_panel_init_backlight(struct drm_device *dev) +void intel_panel_setup_backlight(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -309,73 +309,3 @@ intel_panel_detect(struct drm_device *dev) return connector_status_unknown; } - -#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE -static int intel_panel_update_status(struct backlight_device *bd) -{ - struct drm_device *dev = bl_get_data(bd); - intel_panel_set_backlight(dev, bd->props.brightness); - return 0; -} - -static int intel_panel_get_brightness(struct backlight_device *bd) -{ - struct drm_device *dev = bl_get_data(bd); - return intel_panel_get_backlight(dev); -} - -static const struct backlight_ops intel_panel_bl_ops = { - .update_status = intel_panel_update_status, - .get_brightness = intel_panel_get_brightness, -}; - -int intel_panel_setup_backlight(struct drm_device *dev) -{ - struct drm_i915_private *dev_priv = dev->dev_private; - struct backlight_properties props; - struct drm_connector *connector; - - intel_panel_init_backlight(dev); - - if (dev_priv->int_lvds_connector) - connector = dev_priv->int_lvds_connector; - else if (dev_priv->int_edp_connector) - connector = dev_priv->int_edp_connector; - else - return -ENODEV; - - props.type = BACKLIGHT_RAW; - props.max_brightness = intel_panel_get_max_backlight(dev); - dev_priv->backlight = - backlight_device_register("intel_backlight", - &connector->kdev, dev, - &intel_panel_bl_ops, &props); - - if (IS_ERR(dev_priv->backlight)) { - DRM_ERROR("Failed to register backlight: %ld\n", - PTR_ERR(dev_priv->backlight)); - dev_priv->backlight = NULL; - return -ENODEV; - } - dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev); - return 0; -} - -void intel_panel_destroy_backlight(struct drm_device *dev) -{ - struct drm_i915_private *dev_priv = dev->dev_private; - if (dev_priv->backlight) - backlight_device_unregister(dev_priv->backlight); -} -#else -int intel_panel_setup_backlight(struct drm_device *dev) -{ - intel_panel_init_backlight(dev); - return 0; -} - -void intel_panel_destroy_backlight(struct drm_device *dev) -{ - return; -} -#endif