[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Questions about Cx and Px state uploading from dom0
On 06.04.2022 17:09, Roger Pau Monné wrote: > On Wed, Apr 06, 2022 at 02:47:38PM +0200, Jan Beulich wrote: >> On 06.04.2022 12:38, Roger Pau Monné wrote: >>> On Wed, Apr 06, 2022 at 10:13:41AM +0200, Jan Beulich wrote: >>>> On 23.03.2022 09:54, Roger Pau Monné wrote: >>>>> Hello, >>>>> >>>>> I was looking at implementing ACPI Cx and Px state uploading from >>>>> FreeBSD dom0, as my main test box is considerably slower without Xen >>>>> knowing about the Px states. That has raised a couple of questions. >>>>> >>>>> 1. How to figure out what features to report available by OSPM when >>>>> calling the _PDC (or _OSC) ACPI method. I'm confused by the usage of >>>>> this from Linux: it seems to be used to detect mwait support in >>>>> xen_check_mwait but not when calling _PDC (ie: in >>>>> acpi_processor_set_pdc). I'm also not sure what the hypercall expects >>>>> the caller to provide. Should buf[2] be set to all the possible >>>>> features supported by the OS and Xen will trim those as required? >>>> >>>> I'm afraid upstream Linux doesn't quite use this as originally >>>> intended. Consulting my most recent (but meanwhile quite old) forward >>>> port tree of XenoLinux that I still have readily available, I find in >>>> drivers/acpi/processor_pdc.c: >>>> >>>> static acpi_status >>>> acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list >>>> *pdc_in) >>>> { >>>> acpi_status status = AE_OK; >>>> >>>> #ifndef CONFIG_XEN >>>> if (boot_option_idle_override == IDLE_NOMWAIT) { >>>> /* >>>> * If mwait is disabled for CPU C-states, the C2C3_FFH access >>>> * mode will be disabled in the parameter of _PDC object. >>>> * Of course C1_FFH access mode will also be disabled. >>>> */ >>>> #else >>>> { >>>> struct xen_platform_op op; >>>> #endif >>>> union acpi_object *obj; >>>> u32 *buffer = NULL; >>>> >>>> obj = pdc_in->pointer; >>>> buffer = (u32 *)(obj->buffer.pointer); >>>> #ifndef CONFIG_XEN >>>> buffer[2] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH); >>>> #else >>>> op.cmd = XENPF_set_processor_pminfo; >>>> op.u.set_pminfo.id = -1; >>>> op.u.set_pminfo.type = XEN_PM_PDC; >>>> set_xen_guest_handle(op.u.set_pminfo.u.pdc, buffer); >>>> VOID(HYPERVISOR_platform_op(&op)); >>>> #endif >>>> } >>>> status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL); >>>> >>>> if (ACPI_FAILURE(status)) >>>> ACPI_DEBUG_PRINT((ACPI_DB_INFO, >>>> "Could not evaluate _PDC, using legacy perf. control.\n")); >>>> >>>> return status; >>>> } >>>> >>>> (This is a 4.4-based tree, for reference.) >>>> >>>> IOW the buffer is passed to Xen for massaging before invoking _PDC. >>> >>> Indeed. I'm however confused by what should be pre-filled into the >>> buffer by the OS. _PDC is about the processor driver power management >>> support, and none of this power management is done by the OS (I don't >>> plan to let FreeBSD do CPU power management when running as hardware >>> domain), so IMO passing an empty buffer and letting Xen fill it is the >>> correct thing to do, at least for the use-case in FreeBSD. >> >> I don't think that would work: Xen doesn't "fill in" the buffer, but >> merely alters individual bits. The buffer really is IN/OUT here for >> Xen. > > Hm, but I have no idea what to put here from FreeBSD PoV, as said > FreeBSD will only use the processor object to upload the required data > to Xen, but won't attach any driver itself. > > I've so far been providing an empty buffer to Xen and it does seem to > set the right flags so that the Cx and Px states can be fetched > afterwards. Hmm, an empty buffer should result in -EINVAL from the hypercall. The first of the three uint32_t-s should be 1 (ACPI_PDC_REVISION_ID) and the 2nd (size) is supposed to be non-zero. > arch_acpi_set_pdc_bits() does explicitly set some feature bits, so > there's not only cleanup done there. Well, yes, I did say "alter", not "clear", for that reason. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |