|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 1/2] x86/mm: add API for marking only part of a MMIO page read only
On 11.06.2024 12:40, Roger Pau Monné wrote:
> On Wed, May 22, 2024 at 05:39:03PM +0200, Marek Marczykowski-Górecki wrote:
>> +int __init subpage_mmio_ro_add(
>> + paddr_t start,
>> + size_t size)
>> +{
>> + mfn_t mfn_start = maddr_to_mfn(start);
>> + paddr_t end = start + size - 1;
>> + mfn_t mfn_end = maddr_to_mfn(end);
>> + unsigned int offset_end = 0;
>> + int rc;
>> + bool subpage_start, subpage_end;
>> +
>> + ASSERT(IS_ALIGNED(start, MMIO_RO_SUBPAGE_GRAN));
>> + ASSERT(IS_ALIGNED(size, MMIO_RO_SUBPAGE_GRAN));
>> + if ( !IS_ALIGNED(size, MMIO_RO_SUBPAGE_GRAN) )
>> + size = ROUNDUP(size, MMIO_RO_SUBPAGE_GRAN);
>> +
>> + if ( !size )
>> + return 0;
>> +
>> + if ( mfn_eq(mfn_start, mfn_end) )
>> + {
>> + /* Both starting and ending parts handled at once */
>> + subpage_start = PAGE_OFFSET(start) || PAGE_OFFSET(end) != PAGE_SIZE
>> - 1;
>> + subpage_end = false;
>
> Given the intended usage of this, don't we want to limit to only a
> single page? So that PFN_DOWN(start + size) == PFN_DOWN/(start), as
> that would simplify the logic here?
>
> Mostly asking because I think for the usage of XHCI the registers that
> need to be marked RO are all inside the same page, and hence would
> like to avoid introducing logic to handle multipage ranges if that's
> not tested at all.
>
>> + }
>> + else
>> + {
>> + subpage_start = PAGE_OFFSET(start);
>> + subpage_end = PAGE_OFFSET(end) != PAGE_SIZE - 1;
>> + }
>> +
>> + spin_lock(&subpage_ro_lock);
>
> Do you really need the lock if modifications can only happen during
> init? Xen initialization is single threaded, so you can likely avoid
> the lock during boot.
I was wondering the same, but then concluded the locking here is for
the sake of completenese, not because it's strictly needed.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |