RE: [PATCH v2 6/8] KVM: Add reset/restore rtc_status support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have send out the latest patch(v4). Please give comments for the latest one, because some issues you point out may not exist on latest patch. If it still exits. please point out it again.

Zhang, Yang Z wrote on 2013-03-20:
> Marcelo Tosatti wrote on 2013-03-20:
>> On Mon, Mar 18, 2013 at 03:24:37PM +0800, Yang Zhang wrote:
>>> From: Yang Zhang <yang.z.zhang@xxxxxxxxx>
>>> 
>>> reset/restore rtc_status when ioapic reset/restore.
>>> 
>>> Signed-off-by: Yang Zhang <yang.z.zhang@xxxxxxxxx>
>>> ---
>>>  arch/x86/kvm/lapic.c |    8 ++++++++
>>>  arch/x86/kvm/lapic.h |    1 +
>>>  virt/kvm/ioapic.c    |   33 +++++++++++++++++++++++++++++++++
>>>  3 files changed, 42 insertions(+), 0 deletions(-)
>>> diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
>>> index 6fb22e3..a223170 100644
>>> --- a/arch/x86/kvm/lapic.c
>>> +++ b/arch/x86/kvm/lapic.c
>>> @@ -94,6 +94,14 @@ static inline int apic_test_vector(int vec, void *bitmap)
>>>  	return test_bit(VEC_POS(vec), (bitmap) + REG_POS(vec));
>>>  }
>>> +bool kvm_apic_pending_eoi(struct kvm_vcpu *vcpu, int vector)
>>> +{
>>> +	struct kvm_lapic *apic = vcpu->arch.apic;
>>> +
>>> +	return apic_test_vector(vector, apic->regs + APIC_ISR) ||
>>> +		apic_test_vector(vector, apic->regs + APIC_IRR);
>>> +}
>>> +
>> 
>> Should hook into kvm_lapic_reset and kvm_vcpu_ioctl_set_lapic to
>> generate updates.
> rtc_irq_restore will be called after lapic is restored. What's the problem if we no
> hook into the two function?
> 
>>>  static inline void apic_set_vector(int vec, void *bitmap)
>>>  {
>>>  	set_bit(VEC_POS(vec), (bitmap) + REG_POS(vec));
>>> diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h index
>>> 3a0f9d8..e2a03d1 100644 --- a/arch/x86/kvm/lapic.h +++
>>> b/arch/x86/kvm/lapic.h @@ -160,5 +160,6 @@ void
>>> kvm_calculate_eoi_exitmap(struct kvm_vcpu *vcpu,
>>> 
>>>  void kvm_get_dest_vcpu(struct kvm *kvm, struct kvm_lapic_irq *irq,
>>>  				unsigned long *vcpu_map);
>>> +bool kvm_apic_pending_eoi(struct kvm_vcpu *vcpu, int vector);
>>> 
>>>  #endif
>>> diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
>>> index 659511d..6266d1f 100644
>>> --- a/virt/kvm/ioapic.c
>>> +++ b/virt/kvm/ioapic.c
>>> @@ -88,6 +88,27 @@ static unsigned long ioapic_read_indirect(struct
>> kvm_ioapic *ioapic,
>>>  }
>>>  
>>>  #ifdef CONFIG_X86
>>> +static void rtc_irq_reset(struct kvm_ioapic *ioapic)
>>> +{
>>> +	ioapic->rtc_status.need_eoi = 0;
>>> +	bitmap_zero(ioapic->rtc_status.vcpu_map, KVM_MAX_VCPUS);
>>> +}
>>> +
>>> +static void rtc_irq_restore(struct kvm_ioapic *ioapic)
>>> +{
>>> +	struct kvm_vcpu *vcpu;
>>> +	int vector, i, need_eoi = 0, rtc_pin = 8;
>>> +
>>> +	vector = ioapic->redirtbl[rtc_pin].fields.vector;
>>> +	kvm_for_each_vcpu(i, vcpu, ioapic->kvm) {
>>> +		if (kvm_apic_pending_eoi(vcpu, vector)) {
>>> +			need_eoi++;
>>> +			set_bit(vcpu->vcpu_id, ioapic->rtc_status.vcpu_map);
>> 
>> Why set bit on vcpu_map here?
> We will set need_eoi here. And if target vcpu is not in vcpu_map, then it will not
> update need_eoi on EOI.
> 
> Best regards,
> Yang


Best regards,
Yang

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux