|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH] xen, apic: Setup our own APIC driver and validator for APIC IDs.
On 21/01/15 21:56, Konrad Rzeszutek Wilk wrote:
> +static struct apic xen_apic = {
> + .name = "Xen",
> + .probe = probe_xen,
> + /* The rest is copied from the default. */
Explicitly initialize all required members here. memcpy'ing from the
default makes it far too unclear which ops this apic driver actually
provides.
> +};
> +
> +/*
> + * This is needed as in enlighten.c we mask the x2APIC bit because we
> + * do not want PV guests to use anything but most of the default apic
> routines.
> + *
> + * However the default ->apic_id_valid enforces that the APIC ID MUST
> + * be below 0xFF which is not the case for x2APIC - so we need a way
> + * to allow that to function properly.
> + */
> +static bool __init xen_check_x2apic(void)
> +{
> +#ifdef CONFIG_X2APIC
> + unsigned int ax, bx, cx, dx;
> +
> + ax = 1;
> + cx = 0; /* Don't care about dx, and bx */
> + native_cpuid(&ax, &bx, &cx, &dx);
> + if (cx & (1 << (X86_FEATURE_X2APIC % 32)))
> + return true;
> +#endif
> + return false;
> +}
Not needed (see below).
> void __init xen_init_apic(void)
> {
> x86_io_apic_ops.read = xen_io_apic_read;
> +
> + memcpy(&xen_apic, apic, sizeof(struct apic));
> + xen_apic.probe = probe_xen;
> + xen_apic.name = "Xen";
> +
> + xen_apic.read = xen_apic_read;
> + xen_apic.write = xen_apic_write;
> + xen_apic.icr_read = xen_apic_icr_read;
> + xen_apic.icr_write = xen_apic_icr_write;
> + xen_apic.wait_icr_idle = xen_apic_wait_icr_idle;
> + xen_apic.safe_wait_icr_idle = xen_safe_apic_wait_icr_idle;
> + xen_apic.set_apic_id = xen_set_apic_id;
> + xen_apic.get_apic_id = xen_get_apic_id;
> +
> + xen_apic.send_IPI_allbutself = xen_send_IPI_allbutself;
> + xen_apic.send_IPI_mask_allbutself = xen_send_IPI_mask_allbutself;
> + xen_apic.send_IPI_mask = xen_send_IPI_mask;
> + xen_apic.send_IPI_all = xen_send_IPI_all;
> + xen_apic.send_IPI_self = xen_send_IPI_self;
> +
> + if (xen_check_x2apic())
> + xen_apic.apic_id_valid = xen_id_always_valid;
Just always use xen_id_always_valid regardless of whether the machine
has x2apic or not. It is possible to have more VCPUs that PCPUs.
David
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |