ACPI: PCC: Free channel on OpRegion deactivation

ACPICA calls the address space setup callback with
ACPI_REGION_DEACTIVATE when a PCC OperationRegion is torn down.

The PCC setup callback currently allocates a fresh pcc_data and requests
the mailbox channel before looking at the function argument. If ACPICA
deactivates a region, this can leave the existing region context and
mailbox channel unreleased, and may also request a channel during
teardown.

Handle ACPI_REGION_DEACTIVATE before allocation. Free the PCC mailbox
channel, release the region context and clear the context pointer.

Fixes: 77e2a04745 ("ACPI: PCC: Implement OperationRegion handler for the PCC Type 3 subtype")
Reviewed-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org>
Link: https://patch.msgid.link/20260922144302.3847593-4-sudeep.holla@kernel.org
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Sudeep Holla 2026-09-22 15:43:01 +01:00 committed by Rafael J. Wysocki
parent 46c263c213
commit fa9c7ee692

View File

@ -55,6 +55,19 @@ acpi_pcc_address_space_setup(acpi_handle region_handle, u32 function,
struct pcc_mbox_chan *pcc_chan;
acpi_status ret;
if (function == ACPI_REGION_DEACTIVATE) {
data = *region_context;
if (data) {
pcc_mbox_free_channel(data->pcc_chan);
kfree(data);
*region_context = NULL;
}
return AE_OK;
}
if (function != ACPI_REGION_ACTIVATE)
return AE_BAD_PARAMETER;
data = kzalloc_obj(*data);
if (!data)
return AE_NO_MEMORY;