From: Bjorn Helgaas <helgaas@kernel.org>
To: Xiang Zheng <zhengxiang9@huawei.com>
Cc: willy@infradead.org, wangxiongfeng2@huawei.com,
wanghaibin.wang@huawei.com, guoheyi@huawei.com,
yebiaoxiang@huawei.com, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org, rjw@rjwysocki.net,
tglx@linutronix.de, guohanjun@huawei.com,
yangyingliang@huawei.com
Subject: Re: [PATCH v2] pci: lock the pci_cfg_wait queue for the consistency of data
Date: Tue, 19 Nov 2019 14:23:05 -0600 [thread overview]
Message-ID: <20191119202305.GA214858@google.com> (raw)
In-Reply-To: <20191119011545.15408-1-zhengxiang9@huawei.com>
On Tue, Nov 19, 2019 at 09:15:45AM +0800, Xiang Zheng wrote:
> Commit "7ea7e98fd8d0" suggests that the "pci_lock" is sufficient,
> and all the callers of pci_wait_cfg() are wrapped with the "pci_lock".
>
> However, since the commit "cdcb33f98244" merged, the accesses to
> the pci_cfg_wait queue are not safe anymore. A "pci_lock" is
> insufficient and we need to hold an additional queue lock while
> read/write the wait queue.
>
> So let's use the add_wait_queue()/remove_wait_queue() instead of
> __add_wait_queue()/__remove_wait_queue(). Also move the wait queue
> functionality around the "schedule()" function to avoid reintroducing
> the deadlock addressed by "cdcb33f98244".
Procedural nits:
- Run "git log --oneline drivers/pci/access.c" and follow the
convention, e.g., starts with "PCI: " and first subsequent word is
capitalized.
- Use conventional commit references, e.g., 7ea7e98fd8d0 ("PCI:
Block on access to temporarily unavailable pci device") and
cdcb33f98244 ("PCI: Avoid possible deadlock on pci_lock and
p->pi_lock")
- IIRC you found that this actually caused a panic; please include
the lore.kernel.org URL to that report.
You can wait for a while to see if there are more substantive comments
to address before posting a v3.
> Signed-off-by: Xiang Zheng <zhengxiang9@huawei.com>
> Cc: Heyi Guo <guoheyi@huawei.com>
> Cc: Biaoxiang Ye <yebiaoxiang@huawei.com>
> ---
>
> v2:
> - Move the wait queue functionality around the "schedule()" function to
> avoid reintroducing the deadlock addressed by "cdcb33f98244"
>
> ---
>
> drivers/pci/access.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/access.c b/drivers/pci/access.c
> index 2fccb5762c76..09342a74e5ea 100644
> --- a/drivers/pci/access.c
> +++ b/drivers/pci/access.c
> @@ -207,14 +207,14 @@ static noinline void pci_wait_cfg(struct pci_dev *dev)
> {
> DECLARE_WAITQUEUE(wait, current);
>
> - __add_wait_queue(&pci_cfg_wait, &wait);
> do {
> set_current_state(TASK_UNINTERRUPTIBLE);
> raw_spin_unlock_irq(&pci_lock);
> + add_wait_queue(&pci_cfg_wait, &wait);
> schedule();
> + remove_wait_queue(&pci_cfg_wait, &wait);
> raw_spin_lock_irq(&pci_lock);
> } while (dev->block_cfg_access);
> - __remove_wait_queue(&pci_cfg_wait, &wait);
> }
>
> /* Returns 0 on success, negative values indicate error. */
> --
> 2.19.1
>
>
next prev parent reply other threads:[~2019-11-19 20:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-19 1:15 [PATCH v2] pci: lock the pci_cfg_wait queue for the consistency of data Xiang Zheng
2019-11-19 20:23 ` Bjorn Helgaas [this message]
2019-11-20 6:18 ` Xiang Zheng
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=20191119202305.GA214858@google.com \
--to=helgaas@kernel.org \
--cc=guohanjun@huawei.com \
--cc=guoheyi@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=wanghaibin.wang@huawei.com \
--cc=wangxiongfeng2@huawei.com \
--cc=willy@infradead.org \
--cc=yangyingliang@huawei.com \
--cc=yebiaoxiang@huawei.com \
--cc=zhengxiang9@huawei.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.