[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 3/23] VIOMMU: Add irq request callback to deal with irq remapping
On 2017年04月17日 22:39, Konrad Rzeszutek Wilk wrote: > On Fri, Mar 17, 2017 at 07:27:03PM +0800, Lan Tianyu wrote: >> This patch is to add irq request callback for platform implementation >> to deal with irq remapping request. >> >> Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx> >> --- >> xen/common/viommu.c | 11 +++++++++++ >> xen/include/asm-arm/viommu.h | 4 ++++ >> xen/include/asm-x86/viommu.h | 15 +++++++++++++++ >> xen/include/xen/viommu.h | 8 ++++++++ >> 4 files changed, 38 insertions(+) >> >> diff --git a/xen/common/viommu.c b/xen/common/viommu.c >> index 4c1c788..62c66db 100644 >> --- a/xen/common/viommu.c >> +++ b/xen/common/viommu.c >> @@ -87,6 +87,17 @@ u64 viommu_query_caps(struct domain *d) >> return info->ops->query_caps(d); >> } >> >> +int viommu_handle_irq_request(struct domain *d, >> + struct irq_remapping_request *request) >> +{ >> + struct viommu_info *info = &d->viommu; >> + >> + if ( !info || !info->ops || !info->ops->handle_irq_request) > > You are missing an space at the end. Yes, will fix. >> + return -EINVAL; >> + >> + return info->ops->handle_irq_request(d, request); >> +} >> + >> /* >> * Local variables: >> * mode: C >> diff --git a/xen/include/asm-arm/viommu.h b/xen/include/asm-arm/viommu.h >> index ef6a60b..6a81ecb 100644 >> --- a/xen/include/asm-arm/viommu.h >> +++ b/xen/include/asm-arm/viommu.h >> @@ -22,6 +22,10 @@ >> >> #include <xen/viommu.h> >> >> +struct irq_remapping_request >> +{ >> +}; >> + >> static inline const struct viommu_ops *viommu_get_ops(void) >> { >> return NULL; >> diff --git a/xen/include/asm-x86/viommu.h b/xen/include/asm-x86/viommu.h >> index efb435f..b6e01a5 100644 >> --- a/xen/include/asm-x86/viommu.h >> +++ b/xen/include/asm-x86/viommu.h >> @@ -23,6 +23,21 @@ >> #include <xen/viommu.h> >> #include <asm/types.h> >> >> +struct irq_remapping_request >> +{ >> + u8 type; >> + u16 source_id; >> + union { >> + /* MSI */ >> + struct { >> + u64 addr; >> + u32 data; >> + } msi; >> + /* Redirection Entry in IOAPIC */ >> + u64 rte; >> + } msg; >> +}; > > Will this work right? As in with the default padding and such? Sorry. Could you elaborate this? >> + >> static inline const struct viommu_ops *viommu_get_ops(void) >> { >> return NULL; >> diff --git a/xen/include/xen/viommu.h b/xen/include/xen/viommu.h >> index a0abbdf..246b29d 100644 >> --- a/xen/include/xen/viommu.h >> +++ b/xen/include/xen/viommu.h >> @@ -24,6 +24,10 @@ >> >> #define NR_VIOMMU_PER_DOMAIN 1 >> >> +/* IRQ request type */ >> +#define VIOMMU_REQUEST_IRQ_MSI 0 >> +#define VIOMMU_REQUEST_IRQ_APIC 1 > > What is this used for? This is to designate interrupt type of irq remapping request which contains in the structure irq_remapping_request. The vIOMMU device model uses it to parse request data. >> + >> struct viommu { >> u64 base_address; >> u64 length; >> @@ -36,6 +40,8 @@ struct viommu_ops { >> u64 (*query_caps)(struct domain *d); >> int (*create)(struct domain *d, struct viommu *viommu); >> int (*destroy)(struct viommu *viommu); >> + int (*handle_irq_request)(struct domain *d, >> + struct irq_remapping_request *request); >> }; >> >> struct viommu_info { >> @@ -48,6 +54,8 @@ int viommu_init_domain(struct domain *d); >> int viommu_create(struct domain *d, u64 base_address, u64 length, u64 caps); >> int viommu_destroy(struct domain *d, u32 viommu_id); >> u64 viommu_query_caps(struct domain *d); >> +int viommu_handle_irq_request(struct domain *d, >> + struct irq_remapping_request *request); >> >> #endif /* __XEN_VIOMMU_H__ */ >> >> -- >> 1.8.3.1 >> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@xxxxxxxxxxxxx >> https://lists.xen.org/xen-devel -- Best regards Tianyu Lan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |