Thread (7 messages) 7 messages, 3 authors, 2012-09-16

Re: [PATCH v2] [media] rc: ite-cir: Initialise ite_dev::rdev earlier

From: Luis Henriques <hidden>
Date: 2012-08-28 20:48:31

On Tue, Aug 28, 2012 at 10:09:55AM -0700, Ben Hutchings wrote:
On Tue, 2012-08-28 at 12:44 +0100, Luis Henriques wrote:
quoted
On Mon, Aug 20, 2012 at 12:32:27AM +0100, Ben Hutchings wrote:
quoted
ite_dev::rdev is currently initialised in ite_probe() after
rc_register_device() returns.  If a newly registered device is opened
quickly enough, we may enable interrupts and try to use ite_dev::rdev
before it has been initialised.  Move it up to the earliest point we
can, right after calling rc_allocate_device().
I believe this is the same bug:

https://bugzilla.kernel.org/show_bug.cgi?id=46391

And the bug is present in other IR devices as well.

I've sent a proposed fix:

http://marc.info/?l=linux-kernel&m=134590803109050&w=2
It might be a worthwhile fix.  But it doesn't fix this bug - after that
patch, the driver will still enable its IRQ before initialising
ite_dev::rdev.
You're absolutely right, sorry for the noise.  I should have taken a
closer look at your patch.

Cheers,
--
Luis
Ben.
quoted
Cheers,
--
Luis
quoted
References: http://bugs.debian.org/684441 Reported-and-tested-by:
YunQiang Su [off-list ref] Signed-off-by: Ben Hutchings
[off-list ref] Cc: stable@vger.kernel.org --- Unlike the
previous version, this will apply cleanly to the media
staging/for_v3.6 branch.

Ben.

 drivers/media/rc/ite-cir.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
index 36fe5a3..24c77a4 100644
--- a/drivers/media/rc/ite-cir.c
+++ b/drivers/media/rc/ite-cir.c
@@ -1473,6 +1473,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
 	rdev = rc_allocate_device();
 	if (!rdev)
 		goto failure;
+	itdev->rdev = rdev;
 
 	ret = -ENODEV;
 
@@ -1604,7 +1605,6 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
 	if (ret)
 		goto failure3;
 
-	itdev->rdev = rdev;
 	ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
 
 	return 0;
-- 
Ben Hutchings
It is a miracle that curiosity survives formal education. - Albert Einstein
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help