Skip to content

Commit aa9eda7

Browse files
Hans Verkuilmchehab
authored andcommitted
media: pulse8-cec: close serio in disconnect, not adap_free
The serio_close() call was moved to pulse8_cec_adap_free(), but that can be too late if that is called after the serio core pulled down the serio already, in which case you get a kernel oops. Keep it in the disconnect(). Signed-off-by: Hans Verkuil <[email protected]> Fixes: 601282d ("media: pulse8-cec: use adap_free callback") Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent 34a8188 commit aa9eda7

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

drivers/media/usb/pulse8-cec/pulse8-cec.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -635,8 +635,6 @@ static void pulse8_cec_adap_free(struct cec_adapter *adap)
635635
cancel_delayed_work_sync(&pulse8->ping_eeprom_work);
636636
cancel_work_sync(&pulse8->irq_work);
637637
cancel_work_sync(&pulse8->tx_work);
638-
serio_close(pulse8->serio);
639-
serio_set_drvdata(pulse8->serio, NULL);
640638
kfree(pulse8);
641639
}
642640

@@ -652,6 +650,9 @@ static void pulse8_disconnect(struct serio *serio)
652650
struct pulse8 *pulse8 = serio_get_drvdata(serio);
653651

654652
cec_unregister_adapter(pulse8->adap);
653+
pulse8->serio = NULL;
654+
serio_set_drvdata(serio, NULL);
655+
serio_close(serio);
655656
}
656657

657658
static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio,
@@ -872,10 +873,11 @@ static int pulse8_connect(struct serio *serio, struct serio_driver *drv)
872873
return 0;
873874

874875
close_serio:
876+
pulse8->serio = NULL;
877+
serio_set_drvdata(serio, NULL);
875878
serio_close(serio);
876879
delete_adap:
877880
cec_delete_adapter(pulse8->adap);
878-
serio_set_drvdata(serio, NULL);
879881
free_device:
880882
kfree(pulse8);
881883
return err;

0 commit comments

Comments
 (0)