On 2017/9/29 21:12, Rafael J. Wysocki wrote: > On Fri, Sep 29, 2017 at 8:10 AM, Zhengqiang <zhengqiang10@xxxxxxxxxx> wrote: >> Hi,Rafael, thanks for you reply. >> please see my comment. >> >> On 2017/9/29 7:13, Rafael J. Wysocki wrote: >>> On Thu, Sep 28, 2017 at 5:54 AM, Qiang <zhengqiang10@xxxxxxxxxx> wrote: >>>> PCIe PME and hot plug share same interrupt number. In some special case, >>>> Link down event cause hot plug interrupt, devices is not disconnected, >>>> But read config will return 0xff. >>>> >>>> In that case, PME work function will run and not return Because >>>> Root Status PME bit always 1 and can not be cleared. >>>> >>>> This patch add Root Status check in PME interrupt handler, >>>> Just do same as pciehp isr Slot status check. >>>> >>>> Signed-off-by: Qiang Zheng <zhengqiang10@xxxxxxxxxx> >>>> --- >>>> drivers/pci/pcie/pme.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/pci/pcie/pme.c b/drivers/pci/pcie/pme.c >>>> index fafdb16..67144f5 100644 >>>> --- a/drivers/pci/pcie/pme.c >>>> +++ b/drivers/pci/pcie/pme.c >>>> @@ -273,7 +273,7 @@ static irqreturn_t pcie_pme_irq(int irq, void *context) >>>> spin_lock_irqsave(&data->lock, flags); >>>> pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta); >>>> >>>> - if (!(rtsta & PCI_EXP_RTSTA_PME)) { >>>> + if (rtsta == (u32)(~0) || !(rtsta & PCI_EXP_RTSTA_PME)) { >>>> spin_unlock_irqrestore(&data->lock, flags); >>>> return IRQ_NONE; >>>> } >>> >>> OK, but isn't there a symbol for all ones in u32? And if there isn't, >>> what about adding it? >>> >> Here is Root Status register definitions. > > Well, that's not what I meant. > > You have "rtsta == (u32)(~0)" in the patch above, but you could do > "rtsta == U32_MAX" instead. > Sure, I will change it next patch .Thanks. > Thanks, > Rafael > > . >