On Tue, Feb 15, 2022 at 11:22:04AM -0700, Jens Axboe wrote: > The interrupt mask is enabled before any potential failure points in > the driver, which can leave a failure path where we exit with > interrupts enabled but the device not live. This causes an infinite > stream of interrupts on an Apple M1 Pro laptop on USB-C. > > Add a failure label that's used post enabling interrupts, where we > mask them again before returning an error. > > Suggested-by: Sven Peter <sven@xxxxxxxxxxxxx> > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> Should this be marked as a fix? Reviewed-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > --- > drivers/usb/typec/tipd/core.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c > index 6d27a5b5e3ca..7ffcda94d323 100644 > --- a/drivers/usb/typec/tipd/core.c > +++ b/drivers/usb/typec/tipd/core.c > @@ -761,12 +761,12 @@ static int tps6598x_probe(struct i2c_client *client) > > ret = tps6598x_read32(tps, TPS_REG_STATUS, &status); > if (ret < 0) > - return ret; > + goto err_clear_mask; > trace_tps6598x_status(status); > > ret = tps6598x_read32(tps, TPS_REG_SYSTEM_CONF, &conf); > if (ret < 0) > - return ret; > + goto err_clear_mask; > > /* > * This fwnode has a "compatible" property, but is never populated as a > @@ -855,7 +855,8 @@ static int tps6598x_probe(struct i2c_client *client) > usb_role_switch_put(tps->role_sw); > err_fwnode_put: > fwnode_handle_put(fwnode); > - > +err_clear_mask: > + tps6598x_write64(tps, TPS_REG_INT_MASK1, 0); > return ret; > } -- heikki