|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 05/10] AMD/IOMMU: introduce 128-bit IRTE non-guest-APIC IRTE format
On 02.07.2019 16:41, Andrew Cooper wrote:
> On 27/06/2019 16:21, Jan Beulich wrote:
>> @@ -142,7 +187,21 @@ static void free_intremap_entry(unsigned
>> {
>> union irte_ptr entry = get_intremap_entry(seg, bdf, index);
>>
>> - ACCESS_ONCE(entry.ptr32->raw[0]) = 0;
>> + switch ( irte_mode )
>> + {
>> + case irte32:
>> + ACCESS_ONCE(entry.ptr32->raw[0]) = 0;
>> + break;
>> +
>> + case irte128:
>> + ACCESS_ONCE(entry.ptr128->raw[0]) = 0;
>> + barrier();
>
> smp_wmb().
>
> Using barrier here isn't technically correct, because what matters is
> the external visibility of the write.
>
> It functions correctly on x86 because smp_wmb() is barrier(), but this
> code doesn't work correctly on e.g. ARM.
Well, I did reply to a similar earlier comment of yours, and I
had hoped to get a reply from you in turn before actually sending
out v2. As said there, smp_wmb() isn't correct either, yet you
also don't want wmb() here. Even if we don't patch them ourselves,
we should still follow the abstract Linux model and _assume_
smp_*mb() convert to no-op when running on a UP system. The
barrier, however, is needed even in that case.
What I'm okay to do is accompany the barrier() (or, if you insist,
smp_wmb()) use with a comment clarifying that this is fine for x86,
but would need changing if the code was included in builds for
other architectures.
>> @@ -444,9 +601,9 @@ static int update_intremap_entry_from_ms
>> unsigned long flags;
>> union irte_ptr entry;
>> u16 req_id, alias_id;
>> - u8 delivery_mode, dest, vector, dest_mode;
>> + uint8_t delivery_mode, vector, dest_mode;
>
> For the ioapic version, you used unsigned int, rather than uint8_t. I'd
> expect them to at least be consistent.
The type change on the I/O-APIC side is because "dest" is among
the variables there. But looking at both changes again, I guess
I'll rather use the approach here also in the I/O-APIC function,
moving "dest" down together with "offset".
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |