Hi On 4/29/23 10:30 PM, Lukas Wunner wrote: > On Fri, Apr 21, 2023 at 10:56:41AM +0800, Rongguang Wei wrote: >> --- a/drivers/pci/hotplug/pciehp_ctrl.c >> +++ b/drivers/pci/hotplug/pciehp_ctrl.c >> @@ -256,6 +256,7 @@ void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events) >> present = pciehp_card_present(ctrl); >> link_active = pciehp_check_link_active(ctrl); >> if (present <= 0 && link_active <= 0) { >> + ctrl->state = OFF_STATE; >> mutex_unlock(&ctrl->state_lock); >> return; >> } > > It has occurred to me that we also need to turn off the Power Indicator, > lest it continues blinking after the 5 second interval. Sorry for not > spotting this earlier. And I'm thinking that making the state change > conditional on BLINKINGON_STATE would serve clarity. > > So could you please amend the above as follows and verify it fixes the > issue for you? > It works fine. > if (present <= 0 && link_active <= 0) { > + if (ctrl->state == BLINKINGON_STATE) { I have a little question and is there necessary to add "cancel_delayed_work(&ctrl->button_work);" here? > + ctrl->state = OFF_STATE; > + pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF, > + INDICATOR_NOOP); > + } > mutex_unlock(&ctrl->state_lock); > return; > } > > Thanks! > > Lukas > Thanks!