From: Jason Gunthorpe <jgg@nvidia.com>
To: Uros Bizjak <ubizjak@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>, Joerg Roedel <joro@8bytes.org>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
linux-kernel@vger.kernel.org, iommu@lists.linux.dev,
Robin Murphy <robin.murphy@arm.com>,
vasant.hegde@amd.com, Kevin Tian <kevin.tian@intel.com>,
jon.grimm@amd.com, santosh.shukla@amd.com, pandoh@google.com,
kumaranand@google.com, Linux-Arch <linux-arch@vger.kernel.org>
Subject: Re: [PATCH v9 03/10] asm/rwonce: Introduce [READ|WRITE]_ONCE() support for __int128
Date: Wed, 6 Nov 2024 09:40:34 -0400 [thread overview]
Message-ID: <20241106134034.GN458827@nvidia.com> (raw)
In-Reply-To: <CAFULd4Za4BQL+h9Xmra1TjB2oGGzPwru_y1xOrrAFSg==bfvgg@mail.gmail.com>
On Wed, Nov 06, 2024 at 11:01:20AM +0100, Uros Bizjak wrote:
> On Wed, Nov 6, 2024 at 9:55 AM Arnd Bergmann <arnd@arndb.de> wrote:
> >
> > On Tue, Nov 5, 2024, at 13:30, Joerg Roedel wrote:
> > > On Fri, Nov 01, 2024 at 04:22:57PM +0000, Suravee Suthikulpanit wrote:
> > >> include/asm-generic/rwonce.h | 2 +-
> > >> include/linux/compiler_types.h | 8 +++++++-
> > >> 2 files changed, 8 insertions(+), 2 deletions(-)
> > >
> > > This patch needs Cc:
> > >
> > > Arnd Bergmann <arnd@arndb.de>
> > > linux-arch@vger.kernel.org
> > >
> >
> > It also needs an update to the comment about why this is safe:
> >
> > >> +++ b/include/asm-generic/rwonce.h
> > >> @@ -33,7 +33,7 @@
> > >> * (e.g. a virtual address) and a strong prevailing wind.
> > >> */
> > >> #define compiletime_assert_rwonce_type(t) \
> > >> - compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
> > >> + compiletime_assert(__native_word(t) || sizeof(t) == sizeof(__dword_type), \
> > >> "Unsupported access size for {READ,WRITE}_ONCE().")
> >
> > As far as I can tell, 128-but words don't get stored atomically on
> > any architecture, so this seems wrong, because it would remove
> > the assertion on someone incorrectly using WRITE_ONCE() on a
> > 128-bit variable.
>
> READ_ONCE() and WRITE_ONCE() do not guarantee atomicity for double
> word types. They only guarantee (c.f. include/asm/generic/rwonce.h):
>
> * Prevent the compiler from merging or refetching reads or writes. The
> * compiler is also forbidden from reordering successive instances of
> * READ_ONCE and WRITE_ONCE, but only when the compiler is aware of some
> * particular ordering. ...
>
> and later:
>
> * Yes, this permits 64-bit accesses on 32-bit architectures. These will
> * actually be atomic in some cases (namely Armv7 + LPAE), but for others we
> * rely on the access being split into 2x32-bit accesses for a 32-bit quantity
> * (e.g. a virtual address) and a strong prevailing wind.
>
> This is the "strong prevailing wind", mentioned in the patch review at [1].
>
> [1] https://lore.kernel.org/lkml/20241016130819.GJ3559746@nvidia.com/
Yes, there are two common uses for READ_ONCE, actually "read once" and
prevent compiler double read "optimizations". It doesn't matter if
things tear in this case because it would be used with cmpxchg or
something like that.
The other is an atomic relaxed memory order read, which would
have to guarentee non-tearing.
It is unfortunate the kernel has combined these two things, and we
probably have exciting bugs on 32 bit from places using the atomic
read variation on a u64..
Jason
next prev parent reply other threads:[~2024-11-06 13:40 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-01 16:22 [PATCH v9 00/10] iommu/amd: Use 128-bit cmpxchg operation to update DTE Suravee Suthikulpanit
2024-11-01 16:22 ` [PATCH v9 01/10] iommu/amd: Misc ACPI IVRS debug info clean up Suravee Suthikulpanit
2024-11-01 16:22 ` [PATCH v9 02/10] iommu/amd: Disable AMD IOMMU if CMPXCHG16B feature is not supported Suravee Suthikulpanit
2024-11-01 16:22 ` [PATCH v9 03/10] asm/rwonce: Introduce [READ|WRITE]_ONCE() support for __int128 Suravee Suthikulpanit
2024-11-05 12:30 ` Joerg Roedel
2024-11-06 8:55 ` Arnd Bergmann
2024-11-06 10:01 ` Uros Bizjak
2024-11-06 13:40 ` Jason Gunthorpe [this message]
2024-11-07 10:01 ` Arnd Bergmann
2024-11-07 10:30 ` Uros Bizjak
2024-11-07 13:37 ` Jason Gunthorpe
2024-11-07 13:47 ` Uros Bizjak
2024-11-01 16:22 ` [PATCH v9 04/10] iommu/amd: Introduce struct ivhd_dte_flags to store persistent DTE flags Suravee Suthikulpanit
2024-11-01 16:22 ` [PATCH v9 05/10] iommu/amd: Introduce helper function to update 256-bit DTE Suravee Suthikulpanit
2024-11-01 16:23 ` [PATCH v9 06/10] iommu/amd: Modify set_dte_entry() to use 256-bit DTE helpers Suravee Suthikulpanit
2024-11-01 16:32 ` Jason Gunthorpe
2024-11-01 16:23 ` [PATCH v9 07/10] iommu/amd: Introduce helper function get_dte256() Suravee Suthikulpanit
2024-11-01 16:23 ` [PATCH v9 08/10] iommu/amd: Modify clear_dte_entry() to avoid in-place update Suravee Suthikulpanit
2024-11-01 16:23 ` [PATCH v9 09/10] iommu/amd: Lock DTE before updating the entry with WRITE_ONCE() Suravee Suthikulpanit
2024-11-01 16:23 ` [PATCH v9 10/10] iommu/amd: Remove amd_iommu_apply_erratum_63() Suravee Suthikulpanit
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=20241106134034.GN458827@nvidia.com \
--to=jgg@nvidia.com \
--cc=arnd@arndb.de \
--cc=iommu@lists.linux.dev \
--cc=jon.grimm@amd.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kumaranand@google.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pandoh@google.com \
--cc=robin.murphy@arm.com \
--cc=santosh.shukla@amd.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=ubizjak@gmail.com \
--cc=vasant.hegde@amd.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