diff mbox

i915: 3.1.0-rc3+: WARNING: at fs/sysfs/dir.c:455 sysfs_add_one+0xb8/0xf0()

Message ID 20110826233028.074830de@sf.home (mailing list archive)
State New, archived
Headers show

Commit Message

Sergei Trofimovich Aug. 26, 2011, 8:30 p.m. 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:
 [<ffffffff8103e7ba>] warn_slowpath_common+0x7a/0xb0
 [<ffffffff8103e891>] warn_slowpath_fmt+0x41/0x50
 [<ffffffff81130878>] sysfs_add_one+0xb8/0xf0
 [<ffffffff8113136c>] create_dir+0x7c/0xd0
 [<ffffffff8113143c>] sysfs_create_dir+0x7c/0xd0
 [<ffffffff81035b7d>] ? sub_preempt_count+0x9d/0xd0
 [<ffffffff8123302d>] kobject_add_internal+0xbd/0x200
 [<ffffffff81233288>] kobject_add_varg+0x38/0x60
 [<ffffffff81233364>] kobject_add+0x44/0x70
 [<ffffffff81232e4a>] ? kobject_get+0x1a/0x30
 [<ffffffff812cb218>] device_add+0x98/0x690
 [<ffffffff812d4d81>] ? pm_runtime_init+0xd1/0xe0
 [<ffffffff812d3ef9>] ? device_pm_init+0x59/0x80
 [<ffffffff812cb829>] device_register+0x19/0x20
 [<ffffffff81274021>] backlight_device_register+0xf1/0x1c0
 [<ffffffffa0281e53>] intel_panel_setup_backlight+0x73/0xf0 [i915]
 [<ffffffffa027640b>] ? intel_crt_init+0xeb/0x1d0 [i915]
 [<ffffffffa026ddc9>] intel_modeset_init+0x7c9/0x1100 [i915]
 [<ffffffffa024adc1>] i915_driver_load+0xc81/0x1170 [i915]
 [<ffffffffa01fe251>] ? drm_sysfs_device_add+0x81/0xb0 [drm]
 [<ffffffff81233cb7>] ? kobject_uevent_env+0x1b7/0x470
 [<ffffffffa01fb203>] ? drm_get_minor+0x243/0x300 [drm]
 [<ffffffffa01fd3b8>] drm_get_pci_dev+0x188/0x2b0 [drm]
 [<ffffffff81035b7d>] ? sub_preempt_count+0x9d/0xd0
 [<ffffffffa028e4a0>] i915_pci_probe+0x1b/0x13f [i915]
 [<ffffffff81253aea>] local_pci_probe+0x5a/0xd0
 [<ffffffff81254680>] pci_device_probe+0x80/0xb0
 [<ffffffff812cd71a>] ? driver_sysfs_add+0x7a/0xb0
 [<ffffffff812cd866>] driver_probe_device+0x96/0x1c0
 [<ffffffff812cd990>] ? driver_probe_device+0x1c0/0x1c0
 [<ffffffff812cda23>] __driver_attach+0x93/0xa0
 [<ffffffff812cd990>] ? driver_probe_device+0x1c0/0x1c0
 [<ffffffff812ccf58>] bus_for_each_dev+0x68/0x90
 [<ffffffff812cd699>] driver_attach+0x19/0x20
 [<ffffffff812cc808>] bus_add_driver+0x198/0x260
 [<ffffffff812ce078>] driver_register+0x78/0x140
 [<ffffffff81254931>] __pci_register_driver+0x51/0xd0
 [<ffffffffa01fd5f9>] drm_pci_init+0x119/0x130 [drm]
 [<ffffffffa02ae000>] ? 0xffffffffa02adfff
 [<ffffffffa02ae08b>] i915_init+0x8b/0x8d [i915]
 [<ffffffff810001ce>] do_one_initcall+0x3e/0x170
 [<ffffffff81075b9a>] sys_init_module+0x8a/0x1e0
 [<ffffffff814325fb>] system_call_fastpath+0x16/0x1b
---[ end trace 1c7dd79996e79e7a ]---

Comments

Lucas De Marchi Aug. 27, 2011, 1:04 p.m. UTC | #1
Hi Sergei,

On Fri, Aug 26, 2011 at 17:30, Sergei Trofimovich <slyich@gmail.com> wrote:
> 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.
>

There's another patch that fixes this issue:

https://patchwork.kernel.org/patch/1086232/

regards,
Lucas De Marchi
Sergei Trofimovich Aug. 27, 2011, 2:12 p.m. UTC | #2
> >> 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'

> There's another patch that fixes this issue:
> 
> https://patchwork.kernel.org/patch/1086232/

Yeah, it fixes WARNING: for me and yet does not break anything.

Thank you!
diff mbox

Patch

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 <linux/io-mapping.h>
 #include <linux/i2c.h>
 #include <drm/intel-gtt.h>
-#include <linux/backlight.h>
 
 /* 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