From: Hari Vyas <hari.vyas@broadcom.com>
To: Lukas Wunner <lukas@wunner.de>
Cc: bhelgaas@google.com, linux-pci@vger.kernel.org,
Ray Jui <ray.jui@broadcom.com>
Subject: RE: [PATCH] PCI: Data corruption happening due to race condition
Date: Mon, 25 Jun 2018 16:27:37 +0530 [thread overview]
Message-ID: <3fa3c29e023abf67fa74d6e94a27645f@mail.gmail.com> (raw)
In-Reply-To: <20180625103742.GA20292@wunner.de>
Hi Lukas,
This issue is happening with multiple times device removal and
rescan from sysfs. Card is not removed physically.
Is_added bit is set after device attach which probe nvme driver.
NVMe driver starts one workqueue and that one is calling pci_set_master()
to set is_busmaster bit.
With multiple times device removal and rescan from sysfs, race
condition is observed and is_added bit is over-written to 0 from workqueue
started by NVMe driver.
Hope it clarifies concern.
Sequence 1:
pci_bus_add_device()
{
device_attach();
...
dev->is_added = 1;
}
Sequence 2:
nvme_probe()
{
...
INIT_WORK(&dev->ctrl.reset_work, nvme_reset_work);
...
}
nvme_reset_work()--->nvme_pci_enable()-->pci_set_master()-->__pci_set_mast
er(true)-->dev->is_busmaster = enable
Regards,
Hari
-----Original Message-----
From: Lukas Wunner [mailto:lukas@wunner.de]
Sent: Monday, June 25, 2018 4:08 PM
To: Hari Vyas <hari.vyas@broadcom.com>
Cc: bhelgaas@google.com; linux-pci@vger.kernel.org; ray.jui@broadcom.com
Subject: Re: [PATCH] PCI: Data corruption happening due to race condition
On Mon, Jun 25, 2018 at 03:40:46PM +0530, Hari Vyas wrote:
> When a pci device is detected, a variable is_added is set to
> 1 in pci device structure and proc, sys entries are created.
>
> When a pci device is removed, first is_added is checked for one and
> then device is detached with clearing of proc and sys entries and at
> end, is_added is set to 0.
>
> is_added and is_busmaster are bit fields in pci_dev structure sharing
> same memory location.
>
> A strange issue was observed with multiple times removal and rescan of
> a pcie nvme device using sysfs commands where is_added flag was
> observed as zero instead of one while removing device and proc,sys
> entries are not cleared.
Where exactly was is_added incorrectly observed as 0? Normally addition
and removal of devices are serialized using pci_lock_rescan_remove(),
maybe this is missing somewhere?
Thanks,
Lukas
next prev parent reply other threads:[~2018-06-25 10:57 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-25 10:10 [PATCH] PCI: Data corruption happening due to race condition Hari Vyas
2018-06-25 10:37 ` Lukas Wunner
2018-06-25 10:57 ` Hari Vyas [this message]
2018-06-25 11:15 ` Lukas Wunner
2018-06-26 10:17 ` Hari Vyas
2018-06-26 11:53 ` Lukas Wunner
2018-06-27 9:38 ` [PATCH v1] " Hari Vyas
2018-06-27 16:27 ` Ray Jui
2018-06-27 16:32 ` Hari Vyas
2018-06-27 16:36 ` Ray Jui
2018-06-28 11:23 ` Hari Vyas
[not found] ` <CAM5rFu-Sb5Vhvy19GKesV00=tf0+7Q8hByU11=4F9MVhoO7nWA@mail.gmail.com>
[not found] ` <20180627124920.GA27447@wunner.de>
2018-06-27 13:00 ` [PATCH] " Hari Vyas
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=3fa3c29e023abf67fa74d6e94a27645f@mail.gmail.com \
--to=hari.vyas@broadcom.com \
--cc=bhelgaas@google.com \
--cc=linux-pci@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=ray.jui@broadcom.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).