All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oliver Upton <oliver.upton@linux.dev>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
	kvmarm@lists.linux.dev, Marc Zyngier <maz@kernel.org>,
	James Morse <james.morse@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Zenghui Yu <yuzenghui@huawei.com>,
	Eric Auger <eric.auger@redhat.com>
Subject: Re: [PATCH 01/20] KVM: Treat the device list as an rculist
Date: Wed, 28 Feb 2024 21:07:50 +0000	[thread overview]
Message-ID: <Zd-gpo4nADOFt4wA@linux.dev> (raw)
In-Reply-To: <CABgObfa7WpDayTg2xopH4VSrNWZ0RdtiHF2muytqnK5EM3u6VA@mail.gmail.com>

On Wed, Feb 28, 2024 at 09:23:38PM +0100, Paolo Bonzini wrote:
> On Wed, Feb 28, 2024 at 8:31 PM Oliver Upton <oliver.upton@linux.dev> wrote:
> >
> > On Wed, Feb 28, 2024 at 11:13:52AM -0800, Sean Christopherson wrote:
> > > I'm taking exception to the "Prepare by converting to an rculist." statement.
> > > This is not an RCU-protected list, it's a list that abuses rcu_list_add() and
> > > list_for_each_rcu() to allow readers to run concurrently with insertion.  E.g.
> > > IIUC, if it weren't for PROVE_RCU, the rcu_read_(un)lock() in the reader could
> > > be omitted and everything would work just fine.
> >
> > Fair, if we wanted to be exact about it this change relies on the
> > pointer assignment properties of RCU, but not necessarily full-blown RCU
> > protection. But...
> >
> > > Ah, but it's a moot point, because kvm_device_release() does delete from the list,
> > > and does not do so in an RCU-safe manner.  So that needs to be fixed, and then
> > > this is indeed an RCU-protected list.
> >
> > Shows how much thought I threw at the problem :D Nice catch, I'll fold
> > in a fix next time around.
> 
> You also need to adjust the error case of kvm_ioctl_create_device()
> (not a thorough review, I did).
> 
> Also double check that it's okay for your concurrent reader to find
> the device while ops->init runs (or, better, ensure that it only does
> what it has to do after ops->init is finished, with the appropriate
> store-release/load-acquire operations on the two sides).

The reader on the GIC side of things is protected against this by
construction (no ->init() op), but I'd expect the reader & device to
establish their own ordering / synchronization for the relevant data.
Feel like the generic code is only responsible for protecting the
structure of the liest.

TBH, the issue I was working around isn't lock serialization
but rather lock ordering (I need to get at this while holding the
vcpu->mutex). Zero performance expectations for the reader I added over
in the vgic side of things.

So, with that in mind, I'm equally satisfied doing the less-complicated
thing of protecting the structure of the list with its own lock.

-- 
Thanks,
Oliver

  reply	other threads:[~2024-02-28 21:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27 22:42 [PATCH 00/20] KVM: arm64: Transition to a per-ITS translation cache Oliver Upton
2024-02-27 22:42 ` [PATCH 01/20] KVM: Treat the device list as an rculist Oliver Upton
2024-02-28 13:33   ` Paolo Bonzini
2024-02-28 17:18   ` Sean Christopherson
2024-02-28 18:07     ` Oliver Upton
2024-02-28 19:13       ` Sean Christopherson
2024-02-28 19:31         ` Oliver Upton
2024-02-28 20:23           ` Paolo Bonzini
2024-02-28 21:07             ` Oliver Upton [this message]
2024-02-27 22:42 ` [PATCH 02/20] KVM: arm64: vgic-its: Walk LPI xarray in its_sync_lpi_pending_table() Oliver Upton
2024-02-27 22:42 ` [PATCH 03/20] KVM: arm64: vgic-its: Walk LPI xarray in vgic_its_invall() Oliver Upton
2024-02-27 22:42 ` [PATCH 04/20] KVM: arm64: vgic-its: Walk LPI xarray in vgic_its_cmd_handle_movall() Oliver Upton
2024-02-27 22:42 ` [PATCH 05/20] KVM: arm64: vgic-debug: Use an xarray mark for debug iterator Oliver Upton
2024-02-27 22:42 ` [PATCH 06/20] KVM: arm64: vgic-its: Get rid of vgic_copy_lpi_list() Oliver Upton
2024-02-27 22:42 ` [PATCH 07/20] KVM: arm64: vgic-its: Scope translation cache invalidations to an ITS Oliver Upton
2024-02-27 22:42 ` [PATCH 08/20] KVM: arm64: vgic-its: Spin off helper for finding ITS by doorbell addr Oliver Upton
2024-02-27 22:42 ` [PATCH 09/20] KVM: arm64: vgic-its: Maintain a translation cache per ITS Oliver Upton
2024-02-27 22:42 ` [PATCH 10/20] KVM: arm64: vgic-its: Use the per-ITS translation cache for injection Oliver Upton
2024-02-27 22:42 ` [PATCH 11/20] KVM: arm64: vgic-its: Rip out the global translation cache Oliver Upton
2024-02-27 22:42 ` [PATCH 12/20] KVM: arm64: vgic-its: Get rid of the lpi_list_lock Oliver Upton
2024-02-27 22:42 ` [PATCH 13/20] KVM: selftests: Align with kernel's GIC definitions Oliver Upton
2024-02-27 22:42 ` [PATCH 14/20] KVM: selftests: Standardise layout of GIC frames Oliver Upton
2024-02-27 22:42 ` [PATCH 15/20] KVM: selftests: Add quadword MMIO accessors Oliver Upton
2024-02-27 22:42 ` [PATCH 16/20] KVM: selftests: Add a minimal library for interacting with an ITS Oliver Upton
2024-02-27 22:42 ` [PATCH 17/20] KVM: selftests: Add helper for enabling LPIs on a redistributor Oliver Upton
2024-02-27 22:42 ` [PATCH 18/20] KVM: selftests: Use MPIDR_HWID_BITMASK from cputype.h Oliver Upton
2024-02-27 22:42 ` [PATCH 19/20] KVM: selftests: Hack in support for aligned page allocations Oliver Upton
2024-02-27 22:42 ` [PATCH 20/20] KVM: selftests: Add stress test for LPI injection Oliver Upton

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=Zd-gpo4nADOFt4wA@linux.dev \
    --to=oliver.upton@linux.dev \
    --cc=eric.auger@redhat.com \
    --cc=james.morse@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=yuzenghui@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.