qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Hilber via <qemu-devel@nongnu.org>
To: David Woodhouse <dwmw2@infradead.org>,
	linux-kernel@vger.kernel.org, virtualization@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org,
	"Ridoux, Julien" <ridouxj@amazon.com>,
	virtio-dev@lists.linux.dev, "Luu, Ryan" <rluu@amazon.com>,
	"Chashper, David" <chashper@amazon.com>
Cc: "Christopher S . Hall" <christopher.s.hall@intel.com>,
	Jason Wang <jasowang@redhat.com>,
	John Stultz <jstultz@google.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	netdev@vger.kernel.org,
	Richard Cochran <richardcochran@gmail.com>,
	Stephen Boyd <sboyd@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Alessandro Zummo <a.zummo@towertech.it>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Simon Horman <horms@kernel.org>
Subject: Re: [RFC PATCH v4] ptp: Add vDSO-style vmclock support
Date: Tue, 16 Jul 2024 15:20:37 +0200	[thread overview]
Message-ID: <10db46e9-b753-43bb-a826-14d4c11026bd@opensynergy.com> (raw)
In-Reply-To: <DD886A0D-B8E2-4749-AB21-7B26A4B70374@infradead.org>

On 16.07.24 14:32, David Woodhouse wrote:
> On 16 July 2024 12:54:52 BST, Peter Hilber <peter.hilber@opensynergy.com> wrote:
>> On 11.07.24 09:50, David Woodhouse wrote:
>>> On Thu, 2024-07-11 at 09:25 +0200, Peter Hilber wrote:
>>>>
>>>> IMHO this phrasing is better, since it directly refers to the state of the
>>>> structure.
>>>
>>> Thanks. I'll update it.
>>>
>>>> AFAIU if there would be abnormal delays in store buffers, causing some
>>>> driver to still see the old clock for some time, the monotonicity could be
>>>> violated:
>>>>
>>>> 1. device writes new, much slower clock to store buffer
>>>> 2. some time passes
>>>> 3. driver reads old, much faster clock
>>>> 4. device writes store buffer to cache
>>>> 5. driver reads new, much slower clock
>>>>
>>>> But I hope such delays do not occur.
>>>
>>> For the case of the hypervisor←→guest interface this should be handled
>>> by the use of memory barriers and the seqcount lock.
>>>
>>> The guest driver reads the seqcount, performs a read memory barrier,
>>> then reads the contents of the structure. Then performs *another* read
>>> memory barrier, and checks the seqcount hasn't changed:
>>> https://git.infradead.org/?p=users/dwmw2/linux.git;a=blob;f=drivers/ptp/ptp_vmclock.c;hb=vmclock#l351
>>>
>>> The converse happens with write barriers on the hypervisor side:
>>> https://git.infradead.org/?p=users/dwmw2/qemu.git;a=blob;f=hw/acpi/vmclock.c;hb=vmclock#l68
>>
>> My point is that, looking at the above steps 1. - 5.:
>>
>> 3. read HW counter, smp_rmb, read seqcount
>> 4. store seqcount, smp_wmb, stores, smp_wmb, store seqcount become effective
>> 5. read seqcount, smp_rmb, read HW counter
>>
>> AFAIU this would still be a theoretical problem suggesting the use of
>> stronger barriers.
> 
> This seems like a bug on the guest side. The HW counter needs to be read *within* the (paired, matching) seqcount reads, not before or after.
> 
> 

There would be paired reads:

1. device writes new, much slower clock to store buffer
2. some time passes
3. read seqcount, smp_rmb, ..., read HW counter, smp_rmb, read seqcount
4. store seqcount, smp_wmb, stores, smp_wmb, store seqcount all become
   effective only now
5. read seqcount, smp_rmb, read HW counter, ..., smp_rmb, read seqcount

I just omitted the parts which do not necessarily need to happen close to
4. for the monotonicity to be violated. My point is that 1. could become
visible to other cores long after it happened on the local core (during
4.).


  reply	other threads:[~2024-07-16 13:22 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-08  9:27 [RFC PATCH v4] ptp: Add vDSO-style vmclock support David Woodhouse
2024-07-10 13:07 ` Peter Hilber via
2024-07-10 16:01   ` David Woodhouse
2024-07-11  7:25     ` Peter Hilber via
2024-07-11  7:50       ` David Woodhouse
2024-07-16 11:54         ` Peter Hilber via
2024-07-16 12:32           ` David Woodhouse
2024-07-16 13:20             ` Peter Hilber via [this message]
2024-07-17  8:16               ` David Woodhouse
2024-07-16 11:54 ` Peter Hilber via
2024-07-17  8:14   ` David Woodhouse

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=10db46e9-b753-43bb-a826-14d4c11026bd@opensynergy.com \
    --to=qemu-devel@nongnu.org \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=chashper@amazon.com \
    --cc=christopher.s.hall@intel.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=dwmw2@infradead.org \
    --cc=horms@kernel.org \
    --cc=jasowang@redhat.com \
    --cc=jstultz@google.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=peter.hilber@opensynergy.com \
    --cc=richardcochran@gmail.com \
    --cc=ridouxj@amazon.com \
    --cc=rluu@amazon.com \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=virtio-dev@lists.linux.dev \
    --cc=virtualization@lists.linux.dev \
    --cc=xuanzhuo@linux.alibaba.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).