From: "Alex Bennée" <alex.bennee@linaro.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Juergen Gross <jgross@suse.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
stratos-dev@op-lists.linaro.org,
Erik Schilling <erik.schilling@linaro.org>,
Manos Pitsidianakis <manos.pitsidianakis@linaro.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org
Subject: Re: [PATCH 2/2] xen: privcmd: Add support for ioeventfd
Date: Mon, 09 Oct 2023 10:40:48 +0100 [thread overview]
Message-ID: <877cnwqg27.fsf@linaro.org> (raw)
In-Reply-To: <20231005063231.vqwhfnlc64phwmto@vireshk-i7>
Viresh Kumar <viresh.kumar@linaro.org> writes:
> On 29-09-23, 07:46, Juergen Gross wrote:
>> On 29.08.23 14:29, Viresh Kumar wrote:
>> > +static irqreturn_t ioeventfd_interrupt(int irq, void *dev_id)
>> > +{
>> > + struct ioreq_port *port = dev_id;
>> > + struct privcmd_kernel_ioreq *kioreq = port->kioreq;
>> > + struct ioreq *ioreq = &kioreq->ioreq[port->vcpu];
>> > + struct privcmd_kernel_ioeventfd *kioeventfd;
>> > + unsigned int state = STATE_IOREQ_READY;
>> > +
>> > + if (ioreq->state != STATE_IOREQ_READY ||
>> > + ioreq->type != IOREQ_TYPE_COPY || ioreq->dir != IOREQ_WRITE)
>> > + return IRQ_NONE;
>> > +
>> > + smp_mb();
>> > + ioreq->state = STATE_IOREQ_INPROCESS;
>> > +
>> > + mutex_lock(&kioreq->lock);
>> > + list_for_each_entry(kioeventfd, &kioreq->ioeventfds, list) {
>> > + if (ioreq->addr == kioeventfd->addr + VIRTIO_MMIO_QUEUE_NOTIFY &&
>> > + ioreq->size == kioeventfd->addr_len &&
>> > + (ioreq->data & QUEUE_NOTIFY_VQ_MASK) == kioeventfd->vq) {
>> > + eventfd_signal(kioeventfd->eventfd, 1);
>> > + state = STATE_IORESP_READY;
>> > + break;
>> > + }
>> > + }
>> > + mutex_unlock(&kioreq->lock);
>> > +
>> > + smp_mb();
>>
>> Is this really needed after calling mutex_unlock()? I think you are trying to
>> avoid any accesses to go past ioreq->state modification. If so, add a comment
>> (either why you need the barrier, or that you don't need it due to the unlock).
>
> Right, want all writes to finish before updating state.
I thought generally sync points act as full barriers. Doing a bunch of
grepping I think ends at:
static __always_inline bool __mutex_unlock_fast(struct mutex *lock)
{
unsigned long curr = (unsigned long)current;
return atomic_long_try_cmpxchg_release(&lock->owner, &curr, 0UL);
}
so you should already have completed your writes by that point.
>
>> In general, shouldn't the state be checked and modified in the locked area?
>
> The handler runs separately for each vcpu and shouldn't run in parallel for the
> same vcpu. And so only one thread should ever be accessing ioreq port structure.
>
> The lock is there to protect the ioeventfds list (as mentioned in struct
> declaration) against parallel access, as threads for different vcpus may end up
> accessing it simultaneously.
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2023-10-09 9:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-29 12:29 [PATCH 0/2] xen: privcmd: Add ioeventfd support Viresh Kumar
2023-08-29 12:29 ` [PATCH 1/2] xen: evtchn: Allow shared registration of IRQ handers Viresh Kumar
2023-09-28 15:33 ` Juergen Gross
2023-08-29 12:29 ` [PATCH 2/2] xen: privcmd: Add support for ioeventfd Viresh Kumar
2023-09-29 5:46 ` Juergen Gross
2023-10-05 6:32 ` Viresh Kumar
2023-10-09 9:40 ` Alex Bennée [this message]
2023-10-09 10:53 ` Viresh Kumar
2023-10-09 10:58 ` Juergen Gross
2023-10-05 10:07 ` Viresh Kumar
2023-10-14 12:19 ` [Stratos-dev] " Arnd Bergmann
2023-09-26 7:16 ` [PATCH 0/2] xen: privcmd: Add ioeventfd support Viresh Kumar
2023-09-26 7:17 ` Juergen Gross
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=877cnwqg27.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=erik.schilling@linaro.org \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manos.pitsidianakis@linaro.org \
--cc=mathieu.poirier@linaro.org \
--cc=oleksandr_tyshchenko@epam.com \
--cc=sstabellini@kernel.org \
--cc=stratos-dev@op-lists.linaro.org \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
--cc=xen-devel@lists.xenproject.org \
/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
Powered by JetHome