|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/2] x86/mm: add API for marking only part of a MMIO page read only
On Wed, May 22, 2024 at 09:52:44AM +0200, Jan Beulich wrote:
> On 21.05.2024 04:54, Marek Marczykowski-Górecki wrote:
> > +static void subpage_mmio_write_emulate(
> > + mfn_t mfn,
> > + unsigned int offset,
> > + const void *data,
> > + unsigned int len)
> > +{
> > + struct subpage_ro_range *entry;
> > + void __iomem *addr;
>
> Wouldn't this better be pointer-to-volatile, with ...
Shouldn't then most other uses of __iomem in the code base be this way
too? I see volatile only in few places...
> > + list_for_each_entry(entry, &subpage_ro_ranges, list)
> > + {
> > + if ( mfn_eq(entry->mfn, mfn) )
> > + {
> > + if ( test_bit(offset / SUBPAGE_MMIO_RO_ALIGN,
> > entry->ro_qwords) )
> > + {
> > + write_ignored:
> > + gprintk(XENLOG_WARNING,
> > + "ignoring write to R/O MMIO 0x%"PRI_mfn"%03x len
> > %u\n",
> > + mfn_x(mfn), offset, len);
> > + return;
> > + }
> > +
> > + addr = subpage_mmio_get_page(entry);
> > + if ( !addr )
> > + {
> > + gprintk(XENLOG_ERR,
> > + "Failed to map page for MMIO write at
> > 0x%"PRI_mfn"%03x\n",
> > + mfn_x(mfn), offset);
> > + return;
> > + }
> > +
> > + switch ( len )
> > + {
> > + case 1:
> > + writeb(*(const uint8_t*)data, addr);
> > + break;
> > + case 2:
> > + writew(*(const uint16_t*)data, addr);
> > + break;
> > + case 4:
> > + writel(*(const uint32_t*)data, addr);
> > + break;
> > + case 8:
> > + writeq(*(const uint64_t*)data, addr);
> > + break;
>
> ... this being how it's written? (If so, volatile suitably carried through to
> other places as well.)
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |