[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/4] VMX: Add posted interrupt supporting
Jan Beulich wrote on 2013-04-09: >>>> On 09.04.13 at 08:01, Yang Zhang <yang.z.zhang@xxxxxxxxx> wrote: >> +static void vmx_deliver_posted_intr(struct vcpu *v, u8 vector, u8 trig_mode) >> +{ >> + vlapic_set_tmr(vcpu_vlapic(v), vector, trig_mode); >> + >> + vmx_update_eoi_exit_bitmap(v, vector, trig_mode); >> + >> + if ( pi_test_and_set_pir(vector, &v->arch.hvm_vmx.pi_desc) ) >> + return; >> + >> + if ( unlikely(v->arch.hvm_vmx.eoi_exitmap_changed) ) >> + { >> + /* If EOI exitbitmap needs to changed or notification vector >> + * can't be allocated, interrupt will not be injected till >> + * VMEntry as it used to be >> + */ >> + pi_test_and_set_on(&v->arch.hvm_vmx.pi_desc); > > Why is this a test-and-set when the result is unused? > > >> + goto out; >> + } >> + >> + if ( !pi_test_and_set_on(&v->arch.hvm_vmx.pi_desc) ) > > And if it's just because you don't want to have a simple "set" only > operation, then the two instances should be folded, and the result > stored in a local variable. Yes. Only want to set on bit. Perhaps it is better to define a separate function pi_set_on() for this to make the logic more clear. > >> +static void vmx_sync_pir_to_irr(struct vcpu *v) >> +{ >> + struct vlapic *vlapic = vcpu_vlapic(v); >> + u32 val; >> + int offset, group; > > unsigned. Sure. >> + >> + if ( !pi_test_and_clear_on(&v->arch.hvm_vmx.pi_desc) ) >> + return; >> + >> + for (group = 0; group < 8; group++ ) > > Formatting. Sure. > >> + { >> + val = pi_get_pir(&v->arch.hvm_vmx.pi_desc, group); >> + offset = APIC_IRR + 0x10 * group; >> + *((uint32_t *)(&vlapic->regs->data[offset])) |= val; > > Can't you use vlapic_set_vector() here (even if that means > looping over vectors individually rather than groups), to add the > necessary atomicity (I don't see how you avoid races with other > updates) and to avoid the ugly cast? > > Jan Best regards, Yang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |