Message ID | af2f934a-49d8-a15d-3b66-94abc0d39081@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] x86/PV32: fix physdev_op_compat handling | expand |
On Mon, Oct 11, 2021 at 10:20:41AM +0200, Jan Beulich wrote: > The conversion of the original code failed to recognize that the 32-bit > compat variant of this (sorry, two different meanings of "compat" here) > needs to continue to invoke the compat handler, not the native one. > Arrange for this by adding yet another #define. > > Affected functions (having existed prior to the introduction of the new > hypercall) are PHYSDEVOP_set_iobitmap and PHYSDEVOP_apic_{read,write}. > For all others the operand struct layout doesn't differ. > > Fixes: 1252e2823117 ("x86/pv: Export pv_hypercall_table[] rather than working around it in several ways") > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> Thanks, Roger.
On 11/10/2021 11:06, Roger Pau Monné wrote: > On Mon, Oct 11, 2021 at 10:20:41AM +0200, Jan Beulich wrote: >> The conversion of the original code failed to recognize that the 32-bit >> compat variant of this (sorry, two different meanings of "compat" here) >> needs to continue to invoke the compat handler, not the native one. >> Arrange for this by adding yet another #define. >> >> Affected functions (having existed prior to the introduction of the new >> hypercall) are PHYSDEVOP_set_iobitmap and PHYSDEVOP_apic_{read,write}. >> For all others the operand struct layout doesn't differ. >> >> Fixes: 1252e2823117 ("x86/pv: Export pv_hypercall_table[] rather than working around it in several ways") >> Signed-off-by: Jan Beulich <jbeulich@suse.com> > Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
--- a/xen/arch/x86/x86_64/compat.c +++ b/xen/arch/x86/x86_64/compat.c @@ -12,6 +12,7 @@ EMIT_FILE; #define physdev_op_t physdev_op_compat_t #define do_physdev_op compat_physdev_op #define do_physdev_op_compat(x) compat_physdev_op_compat(_##x) +#define native compat #define COMPAT #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
The conversion of the original code failed to recognize that the 32-bit compat variant of this (sorry, two different meanings of "compat" here) needs to continue to invoke the compat handler, not the native one. Arrange for this by adding yet another #define. Affected functions (having existed prior to the introduction of the new hypercall) are PHYSDEVOP_set_iobitmap and PHYSDEVOP_apic_{read,write}. For all others the operand struct layout doesn't differ. Fixes: 1252e2823117 ("x86/pv: Export pv_hypercall_table[] rather than working around it in several ways") Signed-off-by: Jan Beulich <jbeulich@suse.com> --- v2: Don't remove do_physdev_op override.