All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Wunner <lukas@wunner.de>
To: yaoma <yaoma@linux.alibaba.com>
Cc: bhelgaas@google.com, weirongguang@kylinos.cn,
	kanie@linux.alibaba.com, linux-pci@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] PCI: pciehp: Use appropriate conditions to check the hotplug controller status
Date: Mon, 27 May 2024 10:50:48 +0200	[thread overview]
Message-ID: <ZlRJaEEGEMsyxXqm@wunner.de> (raw)
In-Reply-To: <7855600C-4BB6-417B-8F91-24F4F7E0820E@linux.alibaba.com>

On Sun, May 26, 2024 at 10:45:36PM +0800, yaoma wrote:
> > 2024 5 24 15:53 Lukas Wunner <lukas@wunner.de>
> > On Fri, May 24, 2024 at 02:30:23PM +0800, Bitao Hu wrote:
> > > The values of 'present' and 'link_active' have similar meanings:
> > > the value is %1 if the status is ready, and %0 if it is not. If the
> > > hotplug controller itself is not available, the value should be
> > > %-ENODEV. However, both %1 and %-ENODEV are considered true, which
> > > obviously does not meet expectations. 'Slot(xx): Card present' and
> > > 'Slot(xx): Link Up' should only be output when the value is %1.
> > [...]
> > > --- a/drivers/pci/hotplug/pciehp_ctrl.c
> > > +++ b/drivers/pci/hotplug/pciehp_ctrl.c
> > > @@ -276,10 +276,10 @@ void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events)
> > > 	case OFF_STATE:
> > > 		ctrl->state = POWERON_STATE;
> > > 		mutex_unlock(&ctrl->state_lock);
> > > -		if (present)
> > > +		if (present > 0)
> > > 			ctrl_info(ctrl, "Slot(%s): Card present\n",
> > > 				  slot_name(ctrl));
> > > -		if (link_active)
> > > +		if (link_active > 0)
> > > 			ctrl_info(ctrl, "Slot(%s): Link Up\n",
> > > 				  slot_name(ctrl));
> > > 		ctrl->request_result = pciehp_enable_slot(ctrl);
> > 
> > We already handle the "<= 0" case immediately above this code excerpt:
> > 
> > 	if (present <= 0 && link_active <= 0) {
> > 	...
> > 	}
> 
> I'm not sure if the following scenarios would occur in actual production
> environment, but from the code level, there is the possibility of
> "present <= 0 && link_active > 0" or "present > 0 && link_active <= 0".
> In these cases, the "<= 0" conditions will not be properly handled,
> and "ctrl_info" will output incorrect prompt messages.

I see, that makes sense.

"present" and "link_active" can be -ENODEV if reading the config space
of the hotplug port failed.  That's typically the case if the hotplug
port itself was hot-removed, which happens all the time with
Thunderbolt/USB4.

E.g. pciehp_card_present() may return 1 and pciehp_check_link_active()
may return -ENODEV because the hotplug port was hot-removed in-between
the two function calls.  In that case we'll emit both "Card present"
*and* "Link Up".  The latter is uncalled for and is supressed by your
patch.

So your code change is
Reviewed-by: Lukas Wunner <lukas@wunner.de>

...but it would be good if you could respin the patch and explain the
rationale of the code change in the commit message more clearly.
Basically summarize what you and I have explained above.

Also, the percent sign % in front of 0, 1, -ENODEV is unnecessary in
commit messages. It only has special meaning in kernel-doc.

Thanks,

Lukas

  reply	other threads:[~2024-05-27  8:50 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-24  6:30 [PATCH] PCI: pciehp: Use appropriate conditions to check the hotplug controller status Bitao Hu
2024-05-24  7:53 ` Lukas Wunner
2024-05-26 14:45   ` yaoma
2024-05-27  8:50     ` Lukas Wunner [this message]
2024-05-27  9:43       ` yaoma
2024-05-28  6:42 ` [PATCHv2] " Bitao Hu
2024-05-28 10:54   ` Ilpo Järvinen
2024-06-14 18:41   ` Bjorn Helgaas
2024-06-14 19:36     ` Lukas Wunner
2024-06-14 22:03       ` Bjorn Helgaas
2024-06-15 10:06         ` Lukas Wunner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZlRJaEEGEMsyxXqm@wunner.de \
    --to=lukas@wunner.de \
    --cc=bhelgaas@google.com \
    --cc=kanie@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=weirongguang@kylinos.cn \
    --cc=yaoma@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.