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

Re: [Xen-devel] [PATCH v4 2/3] x86/xen/time: setup vcpu 0 time info page



> +static void xen_setup_vsyscall_time_info(void)
> +{
> +     struct vcpu_register_time_memory_area t;
> +     struct pvclock_vsyscall_time_info *ti;
> +     struct pvclock_vcpu_time_info *pvti;
> +     int ret;
> +
> +     pvti = &__this_cpu_read(xen_vcpu)->time;
> +
> +     /*
> +      * We check ahead on the primary time info if this
> +      * bit is supported hence speeding up Xen clocksource.
> +      */
> +     if (!(pvti->flags & PVCLOCK_TSC_STABLE_BIT))
> +             return;
> +
> +     pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT);

Is it OK to have this flag set if anything below fails?

(I can see in the changelog that apparently at some point I've asked
about this at v1 but I can't remember/find what exactly it was)

-boris

> +
> +     ti = (struct pvclock_vsyscall_time_info *)get_zeroed_page(GFP_KERNEL);
> +     if (!ti)
> +             return;
> +
> +     t.addr.v = &ti->pvti;
> +
> +     ret = HYPERVISOR_vcpu_op(VCPUOP_register_vcpu_time_memory_area, 0, &t);
> +     if (ret) {
> +             pr_notice("xen: VCLOCK_PVCLOCK not supported (err %d)\n", ret);
> +             free_page((unsigned long)ti);
> +             return;
> +     }
> +
> +     /*
> +      * If the check above succedded this one should too since it's the
> +      * same data on both primary and secondary time infos just different
> +      * memory regions. But we still check it in case hypervisor is buggy.
> +      */
> +     pvti = &ti->pvti;
> +     if (!(pvti->flags & PVCLOCK_TSC_STABLE_BIT)) {
> +             t.addr.v = NULL;
> +             ret = HYPERVISOR_vcpu_op(VCPUOP_register_vcpu_time_memory_area,
> +                                      0, &t);
> +             if (!ret)
> +                     free_page((unsigned long)ti);
> +
> +             pr_notice("xen: VCLOCK_PVCLOCK not supported (tsc unstable)\n");
> +             return;
> +     }
> +
> +     xen_clock = ti;
> +     pvclock_set_pvti_cpu0_va(xen_clock);
> +
> +     xen_clocksource.archdata.vclock_mode = VCLOCK_PVCLOCK;
> +}
> +


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.