Patchwork [3.5.yuz,extended,stable] Patch "drm/radeon: Don't destroy I2C Bus Rec in" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Nov. 21, 2012, 5:08 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/200563/
State New
Headers show


Herton Ronaldo Krzesinski - Nov. 21, 2012, 5:08 a.m.
This is a note to let you know that I have just added a patch titled

    drm/radeon: Don't destroy I2C Bus Rec in

to the linux-3.5.y-queue branch of the 3.5.yuz extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.yuz tree, see



From 39c735f0754c87575816fae74f09d139740f2e60 Mon Sep 17 00:00:00 2001
From: Egbert Eich <>
Date: Mon, 15 Oct 2012 08:21:39 +0200
Subject: [PATCH] drm/radeon: Don't destroy I2C Bus Rec in

commit 082918471139b07964967cfe5f70230909c82ae1 upstream.

radeon_i2c_fini() walks thru the list of I2C bus recs rdev->i2c_bus[]
to destroy each of them.
radeon_ext_tmds_enc_destroy() however also has code to destroy it's
associated I2C bus rec which has been obtained by radeon_i2c_lookup()
and is therefore also in the i2c_bus[] list.
This causes a double free resulting in a kernel panic when unloading
the radeon driver.
Removing destroy code from radeon_ext_tmds_enc_destroy() fixes this

agd5f: fix compiler warning

Signed-off-by: Egbert Eich <>
Signed-off-by: Alex Deucher <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 drivers/gpu/drm/radeon/radeon_legacy_encoders.c |    6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)



diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
index a0c8222..9e62325 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
@@ -974,11 +974,7 @@  static void radeon_legacy_tmds_ext_mode_set(struct drm_encoder *encoder,
 static void radeon_ext_tmds_enc_destroy(struct drm_encoder *encoder)
 	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
-	struct radeon_encoder_ext_tmds *tmds = radeon_encoder->enc_priv;
-	if (tmds) {
-		if (tmds->i2c_bus)
-			radeon_i2c_destroy(tmds->i2c_bus);
-	}
+	/* don't destroy the i2c bus record here, this will be done in radeon_i2c_fini */