[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V1 02/16] xen/ioreq: Make x86's IOREQ feature common
On 23.09.2020 14:28, Oleksandr wrote: > On 22.09.20 18:52, Jan Beulich wrote: >> On 22.09.2020 17:05, Oleksandr wrote: >>> 3. *arch.hvm.hvm_io*: We could also use the following: >>> >>> #define ioreq_get_io_completion(v) ((v)->arch.hvm.hvm_io.io_completion) >>> #define ioreq_get_io_req(v) ((v)->arch.hvm.hvm_io.io_req) >>> >>> This way struct hvm_vcpu_io won't be used in common code as well. >> But if Arm needs similar field, why keep them in arch.hvm.hvm_io? > Yes, Arm needs the "some" fields, but not "all of them" as x86 has. > For example Arm needs only the following (at least in the context of > this series): > > +struct hvm_vcpu_io { > + /* I/O request in flight to device model. */ > + enum hvm_io_completion io_completion; > + ioreq_t io_req; > + > + /* > + * HVM emulation: > + * Linear address @mmio_gla maps to MMIO physical frame @mmio_gpfn. > + * The latter is known to be an MMIO frame (not RAM). > + * This translation is only valid for accesses as per @mmio_access. > + */ > + struct npfec mmio_access; > + unsigned long mmio_gla; > + unsigned long mmio_gpfn; > +}; > > But for x86 the number of fields is quite bigger. If they were in same > way applicable for both archs (as what we have with ioreq_server struct) > I would move it to the common domain. I didn't think of a better idea > than just abstracting accesses to these (used in common ioreq.c) two > fields by macro. I'm surprised Arm would need all the three last fields that you mention. Both here and ... >>> @@ -247,7 +247,7 @@ static gfn_t hvm_alloc_legacy_ioreq_gfn(struct >>> hvm_ioreq_server *s) >>> for ( i = HVM_PARAM_IOREQ_PFN; i <= HVM_PARAM_BUFIOREQ_PFN; i++ ) >>> { >>> if ( !test_and_clear_bit(i, &d->ioreq_gfn.legacy_mask) ) >>> - return _gfn(d->arch.hvm.params[i]); >>> + return _gfn(ioreq_get_params(d, i)); >>> } >>> >>> return INVALID_GFN; >>> @@ -279,7 +279,7 @@ static bool hvm_free_legacy_ioreq_gfn(struct >>> hvm_ioreq_server *s, >>> >>> for ( i = HVM_PARAM_IOREQ_PFN; i <= HVM_PARAM_BUFIOREQ_PFN; i++ ) >>> { >>> - if ( gfn_eq(gfn, _gfn(d->arch.hvm.params[i])) ) >>> + if ( gfn_eq(gfn, _gfn(ioreq_get_params(d, i))) ) >>> break; >>> } >>> if ( i > HVM_PARAM_BUFIOREQ_PFN ) >> And these two are needed by Arm? Shouldn't Arm exclusively use >> the new model, via acquire_resource? > I dropped HVMOP plumbing on Arm as it was requested. Only acquire > interface should be used. > This code is not supposed to be called on Arm, but it is a part of > common code and we need to find a way how to abstract away *arch.hvm.params* ... here I wonder whether you aren't moving more pieces to common code than are actually arch-independent. I think a prereq step missing so far is to clearly identify which pieces of the code are arch-independent, and work towards abstracting away all of the arch-dependent ones. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |