[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 03/13] vpci: move lock outside of struct vpci
- To: Roger Pau Monné <roger.pau@xxxxxxxxxx>
- From: Jan Beulich <jbeulich@xxxxxxxx>
- Date: Mon, 7 Feb 2022 15:33:08 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rnu4bU5tZdendMLAVNuz7lgls4DjjMkja3Rjnbkr7YM=; b=bkU5VwuIFnvprkQZHr9mz0+Pb9VKqAYH/JTMNIhkpI0dZj2Bg2qEn3K35NX3fV759f5yz5f8g9fYWKOh6rd7y1z9ckMf4oWfNi5m/AQJlWGTMaLITEw6ajNEFfTcuGGP7s1cDHPRPACoAzx/oKCGZA5ljH0RCk0QMTQm5qgLn9UjoBx8eYDZ2/Oaq0qlwoYp8DuUXC6tUO2162DU/KVLDANAhtk46YYh2iSOaj5jABktxmCk7QU5OCxl6XnUQOM+/Pj2JjAG98MgnuMR4s1HFhlQ6VrnsmXnuXo9eo1dqBJpn6KkpRh1/rV7WGi/gG2suL4Cberw6pjnuKz3egHhpw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jTGvfyaJM9sp9WhhCxRXVWvg/hYYX5teT4Jq298o2EyLcnFwxMY5vacIeJAOAFrMkOHTImZ31LZWjoGqC7mLQ4/YWDcbeWeE1cz/AMENvFCy38ttNV07k/2Qv29jhgzr1RB6usC1biR7vxNtpjwWvT4NSFY0pTzXzqWxXBxd52C4OIRt4d8l3zDZNBrXoV80/7dCfit8qEKKcfeGhuhhIVUhaUWnousLQu1FcYb7QG/nquYsC4ZE6ccHI7H5p/CtPjgrQRUf/QEoE429Kc1fM97IzgUWH0NlfcNSv+BYeM87E8qgPhtDfOr8x4iUqOZxQa3OZMjI494qOU57VLE+hQ==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
- Cc: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>, "julien@xxxxxxx" <julien@xxxxxxx>, "sstabellini@xxxxxxxxxx" <sstabellini@xxxxxxxxxx>, Oleksandr Tyshchenko <Oleksandr_Tyshchenko@xxxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Artem Mygaiev <Artem_Mygaiev@xxxxxxxx>, "andrew.cooper3@xxxxxxxxxx" <andrew.cooper3@xxxxxxxxxx>, "george.dunlap@xxxxxxxxxx" <george.dunlap@xxxxxxxxxx>, "paul@xxxxxxx" <paul@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Rahul Singh <rahul.singh@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
- Delivery-date: Mon, 07 Feb 2022 14:33:19 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 07.02.2022 15:27, Roger Pau Monné wrote:
> On Mon, Feb 07, 2022 at 03:11:03PM +0100, Jan Beulich wrote:
>> On 07.02.2022 14:53, Oleksandr Andrushchenko wrote:
>>> On 07.02.22 14:46, Roger Pau Monné wrote:
>>>> I think the per-domain rwlock seems like a good option. I would do
>>>> that as a pre-patch.
>>> It is. But it seems it won't solve the thing we started this adventure for:
>>>
>>> With per-domain read lock and still ABBA in modify_bars (hope the below
>>> is correctly seen with a monospace font):
>>>
>>> cpu0: vpci_write-> d->RLock -> pdev1->lock ->
>>> rom_write -> modify_bars: tmp (pdev2) ->lock
>>> cpu1: vpci_write-> d->RLock pdev2->lock -> cmd_write -> modify_bars:
>>> tmp (pdev1) ->lock
>>>
>>> There is no API to upgrade read lock to write lock in modify_bars which
>>> could help,
>>> so in both cases vpci_write should take write lock.
>>
>> Hmm, yes, I think you're right: It's not modify_bars() itself which needs
>> to acquire the write lock, but its (perhaps indirect) caller. Effectively
>> vpci_write() would need to take the write lock if the range written
>> overlaps the BARs or the command register.
>
> I'm confused. If we use a per-domain rwlock approach there would be no
> need to lock tmp again in modify_bars, because we should hold the
> rwlock in write mode, so there's no ABBA?
>
> We will have however to drop the per domain read and vpci locks and
> pick the per-domain lock in write mode.
Well, yes, with intermediate dropping of the lock acquiring in write mode
can be done in modify_bars(). I'm not convinced (yet) that such intermediate
dropping is actually going to be okay.
Jan
|