|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6.1 1/3] x86/vioapic: make gsi_vioapic private
And introduce vioapic_get_{mask/vector} in order to replace it's
usage.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Cc: Jan Beulich <jbeulich@xxxxxxxx>
Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
Changes since v6:
- Constify domain parameter.
Changes since v5:
- New in this version.
---
xen/arch/x86/hvm/vioapic.c | 26 ++++++++++++++++++++++++--
xen/arch/x86/hvm/vpt.c | 20 ++++++++++----------
xen/include/asm-x86/hvm/vioapic.h | 6 +++---
3 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c
index abcc473c88..12912f068d 100644
--- a/xen/arch/x86/hvm/vioapic.c
+++ b/xen/arch/x86/hvm/vioapic.c
@@ -61,8 +61,8 @@ static struct hvm_vioapic *addr_vioapic(const struct domain
*d,
return NULL;
}
-struct hvm_vioapic *gsi_vioapic(const struct domain *d, unsigned int gsi,
- unsigned int *pin)
+static struct hvm_vioapic *gsi_vioapic(const struct domain *d,
+ unsigned int gsi, unsigned int *pin)
{
unsigned int i;
@@ -476,6 +476,28 @@ void vioapic_update_EOI(struct domain *d, u8 vector)
spin_unlock(&d->arch.hvm_domain.irq_lock);
}
+int vioapic_get_mask(const struct domain *d, unsigned int gsi)
+{
+ unsigned int pin;
+ const struct hvm_vioapic *vioapic = gsi_vioapic(d, gsi, &pin);
+
+ if ( !vioapic )
+ return -EINVAL;
+
+ return vioapic->redirtbl[pin].fields.mask;
+}
+
+int vioapic_get_vector(const struct domain *d, unsigned int gsi)
+{
+ unsigned int pin;
+ const struct hvm_vioapic *vioapic = gsi_vioapic(d, gsi, &pin);
+
+ if ( !vioapic )
+ return -EINVAL;
+
+ return vioapic->redirtbl[pin].fields.vector;
+}
+
static int ioapic_save(struct domain *d, hvm_domain_context_t *h)
{
struct hvm_vioapic *s;
diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c
index e3f203915b..3841140be7 100644
--- a/xen/arch/x86/hvm/vpt.c
+++ b/xen/arch/x86/hvm/vpt.c
@@ -78,8 +78,8 @@ void hvm_set_guest_time(struct vcpu *v, u64 guest_time)
static int pt_irq_vector(struct periodic_time *pt, enum hvm_intsrc src)
{
struct vcpu *v = pt->vcpu;
- struct hvm_vioapic *vioapic;
- unsigned int gsi, isa_irq, pin;
+ unsigned int gsi, isa_irq;
+ int vector;
if ( pt->source == PTSRC_lapic )
return pt->irq;
@@ -92,8 +92,8 @@ static int pt_irq_vector(struct periodic_time *pt, enum
hvm_intsrc src)
+ (isa_irq & 7));
ASSERT(src == hvm_intsrc_lapic);
- vioapic = gsi_vioapic(v->domain, gsi, &pin);
- if ( !vioapic )
+ vector = vioapic_get_vector(v->domain, gsi);
+ if ( vector < 0 )
{
dprintk(XENLOG_WARNING, "d%u: invalid GSI (%u) for platform timer\n",
v->domain->domain_id, gsi);
@@ -101,14 +101,14 @@ static int pt_irq_vector(struct periodic_time *pt, enum
hvm_intsrc src)
return -1;
}
- return vioapic->redirtbl[pin].fields.vector;
+ return vector;
}
static int pt_irq_masked(struct periodic_time *pt)
{
struct vcpu *v = pt->vcpu;
- unsigned int gsi, isa_irq, pin;
- struct hvm_vioapic *vioapic;
+ unsigned int gsi, isa_irq;
+ int mask;
uint8_t pic_imr;
if ( pt->source == PTSRC_lapic )
@@ -121,8 +121,8 @@ static int pt_irq_masked(struct periodic_time *pt)
isa_irq = pt->irq;
gsi = hvm_isa_irq_to_gsi(isa_irq);
pic_imr = v->domain->arch.hvm_domain.vpic[isa_irq >> 3].imr;
- vioapic = gsi_vioapic(v->domain, gsi, &pin);
- if ( !vioapic )
+ mask = vioapic_get_mask(v->domain, gsi);
+ if ( mask < 0 )
{
dprintk(XENLOG_WARNING, "d%u: invalid GSI (%u) for platform timer\n",
v->domain->domain_id, gsi);
@@ -131,7 +131,7 @@ static int pt_irq_masked(struct periodic_time *pt)
}
return (((pic_imr & (1 << (isa_irq & 7))) || !vlapic_accept_pic_intr(v)) &&
- vioapic->redirtbl[pin].fields.mask);
+ mask);
}
static void pt_lock(struct periodic_time *pt)
diff --git a/xen/include/asm-x86/hvm/vioapic.h
b/xen/include/asm-x86/hvm/vioapic.h
index 2ceb60eaef..07fcd229e0 100644
--- a/xen/include/asm-x86/hvm/vioapic.h
+++ b/xen/include/asm-x86/hvm/vioapic.h
@@ -61,13 +61,13 @@ struct hvm_vioapic {
#define domain_vioapic(d, i) ((d)->arch.hvm_domain.vioapic[i])
#define vioapic_domain(v) ((v)->domain)
-struct hvm_vioapic *gsi_vioapic(const struct domain *d, unsigned int gsi,
- unsigned int *pin);
-
int vioapic_init(struct domain *d);
void vioapic_deinit(struct domain *d);
void vioapic_reset(struct domain *d);
void vioapic_irq_positive_edge(struct domain *d, unsigned int irq);
void vioapic_update_EOI(struct domain *d, u8 vector);
+int vioapic_get_mask(const struct domain *d, unsigned int gsi);
+int vioapic_get_vector(const struct domain *d, unsigned int gsi);
+
#endif /* __ASM_X86_HVM_VIOAPIC_H__ */
--
2.11.0 (Apple Git-81)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |