File tree Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Original file line number Diff line number Diff line change @@ -726,7 +726,7 @@ static int wdm_open(struct inode *inode, struct file *file)
726
726
rv = - EBUSY ;
727
727
goto out ;
728
728
}
729
-
729
+ smp_rmb (); /* ordered against wdm_wwan_port_stop() */
730
730
rv = usb_autopm_get_interface (desc -> intf );
731
731
if (rv < 0 ) {
732
732
dev_err (& desc -> intf -> dev , "Error autopm - %d\n" , rv );
@@ -868,8 +868,10 @@ static void wdm_wwan_port_stop(struct wwan_port *port)
868
868
poison_urbs (desc );
869
869
desc -> manage_power (desc -> intf , 0 );
870
870
clear_bit (WDM_READ , & desc -> flags );
871
- clear_bit (WDM_WWAN_IN_USE , & desc -> flags );
872
871
unpoison_urbs (desc );
872
+ smp_wmb (); /* ordered against wdm_open() */
873
+ /* this must be last lest we open a poisoned device */
874
+ clear_bit (WDM_WWAN_IN_USE , & desc -> flags );
873
875
}
874
876
875
877
static void wdm_wwan_port_tx_complete (struct urb * urb )
You can’t perform that action at this time.
0 commit comments