The branch main has been updated by obiwac:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7bc6ec1a255da6678a72330d65a1f320de538727

commit 7bc6ec1a255da6678a72330d65a1f320de538727
Author:     Aymeric Wibo <[email protected]>
AuthorDate: 2025-10-01 09:13:56 +0000
Commit:     Aymeric Wibo <[email protected]>
CommitDate: 2025-10-01 09:13:56 +0000

    Revert "acpi_powerres: Fix turning off power resources on first D-state 
switch"
    
    This reverts commit a13f28d57ecfd136ce73493659c28a47fa1a4b9f.
    
    Reported by:    phk
    Tested by:      phk
    Sponsored by:   The FreeBSD Foundation
---
 sys/dev/acpica/acpi_powerres.c | 110 ++---------------------------------------
 1 file changed, 5 insertions(+), 105 deletions(-)

diff --git a/sys/dev/acpica/acpi_powerres.c b/sys/dev/acpica/acpi_powerres.c
index 0baa5c595470..29d1690f1bdd 100644
--- a/sys/dev/acpica/acpi_powerres.c
+++ b/sys/dev/acpica/acpi_powerres.c
@@ -76,13 +76,6 @@ struct acpi_powerconsumer {
     /* Device which is powered */
     ACPI_HANDLE                                ac_consumer;
     int                                        ac_state;
-
-    struct {
-       bool                            prx_has;
-       size_t                          prx_count;
-       ACPI_HANDLE                     *prx_deps;
-    } ac_prx[ACPI_D_STATE_COUNT];
-
     TAILQ_ENTRY(acpi_powerconsumer)    ac_link;
     TAILQ_HEAD(,acpi_powerreference)   ac_references;
 };
@@ -103,7 +96,9 @@ static TAILQ_HEAD(acpi_powerconsumer_list, 
acpi_powerconsumer)
 ACPI_SERIAL_DECL(powerres, "ACPI power resources");
 
 static ACPI_STATUS     acpi_pwr_register_consumer(ACPI_HANDLE consumer);
+#ifdef notyet
 static ACPI_STATUS     acpi_pwr_deregister_consumer(ACPI_HANDLE consumer);
+#endif /* notyet */
 static ACPI_STATUS     acpi_pwr_register_resource(ACPI_HANDLE res);
 #ifdef notyet
 static ACPI_STATUS     acpi_pwr_deregister_resource(ACPI_HANDLE res);
@@ -226,84 +221,6 @@ acpi_pwr_deregister_resource(ACPI_HANDLE res)
 }
 #endif /* notyet */
 
-/*
- * Evaluate the _PRx (power resources each D-state depends on).  This also
- * populates the acpi_powerresources queue with the power resources discovered
- * during this step.
- *
- * ACPI 7.3.8 - 7.3.11 guarantee that _PRx will return the same data each
- * time they are evaluated.
- *
- * If this function fails, acpi_pwr_deregister_consumer() must be called on the
- * power consumer to free already allocated memory.
- */
-static ACPI_STATUS
-acpi_pwr_get_power_resources(ACPI_HANDLE consumer, struct acpi_powerconsumer 
*pc)
-{
-    ACPI_INTEGER       status;
-    ACPI_STRING                reslist_name;
-    ACPI_HANDLE                reslist_handle;
-    ACPI_STRING                reslist_names[] = {"_PR0", "_PR1", "_PR2", 
"_PR3"};
-    ACPI_BUFFER                reslist;
-    ACPI_OBJECT                *reslist_object;
-    ACPI_OBJECT                *dep;
-    ACPI_HANDLE                *res;
-
-    ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
-    ACPI_SERIAL_ASSERT(powerres);
-
-    MPASS(consumer != NULL);
-
-    for (int state = ACPI_STATE_D0; state <= ACPI_STATE_D3_HOT; state++) {
-       pc->ac_prx[state].prx_has = false;
-       pc->ac_prx[state].prx_count = 0;
-       pc->ac_prx[state].prx_deps = NULL;
-
-       reslist_name = reslist_names[state - ACPI_STATE_D0];
-       if (ACPI_FAILURE(AcpiGetHandle(consumer, reslist_name, 
&reslist_handle)))
-           continue;
-
-       reslist.Pointer = NULL;
-       reslist.Length = ACPI_ALLOCATE_BUFFER;
-       status = AcpiEvaluateObjectTyped(reslist_handle, NULL, NULL, &reslist,
-                                        ACPI_TYPE_PACKAGE);
-       if (ACPI_FAILURE(status) || reslist.Pointer == NULL)
-           /*
-            * ACPI_ALLOCATE_BUFFER entails everything will be freed on error
-            * by AcpiEvaluateObjectTyped.
-            */
-           continue;
-
-       reslist_object = (ACPI_OBJECT *)reslist.Pointer;
-       pc->ac_prx[state].prx_has = true;
-       pc->ac_prx[state].prx_count = reslist_object->Package.Count;
-
-       if (reslist_object->Package.Count == 0) {
-           AcpiOsFree(reslist_object);
-           continue;
-       }
-
-       pc->ac_prx[state].prx_deps = mallocarray(pc->ac_prx[state].prx_count,
-           sizeof(*pc->ac_prx[state].prx_deps), M_ACPIPWR, M_NOWAIT);
-       if (pc->ac_prx[state].prx_deps == NULL) {
-           AcpiOsFree(reslist_object);
-           return_ACPI_STATUS (AE_NO_MEMORY);
-       }
-
-       for (size_t i = 0; i < reslist_object->Package.Count; i++) {
-           dep = &reslist_object->Package.Elements[i];
-           res = dep->Reference.Handle;
-           pc->ac_prx[state].prx_deps[i] = res;
-
-           /* It's fine to attempt to register the same resource twice. */
-           acpi_pwr_register_resource(res);
-       }
-       AcpiOsFree(reslist_object);
-    }
-
-    return_ACPI_STATUS (AE_OK);
-}
-
 /*
  * Register a power consumer.  
  *
@@ -312,7 +229,6 @@ acpi_pwr_get_power_resources(ACPI_HANDLE consumer, struct 
acpi_powerconsumer *pc
 static ACPI_STATUS
 acpi_pwr_register_consumer(ACPI_HANDLE consumer)
 {
-    ACPI_INTEGER               status;
     struct acpi_powerconsumer  *pc;
     
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@@ -323,27 +239,12 @@ acpi_pwr_register_consumer(ACPI_HANDLE consumer)
        return_ACPI_STATUS (AE_OK);
     
     /* Allocate a new power consumer */
-    if ((pc = malloc(sizeof(*pc), M_ACPIPWR, M_NOWAIT | M_ZERO)) == NULL)
+    if ((pc = malloc(sizeof(*pc), M_ACPIPWR, M_NOWAIT)) == NULL)
        return_ACPI_STATUS (AE_NO_MEMORY);
     TAILQ_INSERT_HEAD(&acpi_powerconsumers, pc, ac_link);
     TAILQ_INIT(&pc->ac_references);
     pc->ac_consumer = consumer;
 
-    /*
-     * Get all its power resource dependencies, if it has _PRx.  We do this now
-     * as an opportunity to populate the acpi_powerresources queue.
-     *
-     * If this fails, immediately deregister it.
-     */
-    status = acpi_pwr_get_power_resources(consumer, pc);
-    if (ACPI_FAILURE(status)) {
-       ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS,
-                        "failed to get power resources for %s\n",
-                        acpi_name(consumer)));
-       acpi_pwr_deregister_consumer(consumer);
-       return_ACPI_STATUS (status);
-    }
-
     /* XXX we should try to find its current state */
     pc->ac_state = ACPI_STATE_UNKNOWN;
 
@@ -353,6 +254,7 @@ acpi_pwr_register_consumer(ACPI_HANDLE consumer)
     return_ACPI_STATUS (AE_OK);
 }
 
+#ifdef notyet
 /*
  * Deregister a power consumer.
  *
@@ -377,9 +279,6 @@ acpi_pwr_deregister_consumer(ACPI_HANDLE consumer)
 
     /* Pull the consumer off the list and free it */
     TAILQ_REMOVE(&acpi_powerconsumers, pc, ac_link);
-    for (size_t i = 0; i < sizeof(pc->ac_prx) / sizeof(*pc->ac_prx); i++)
-       if (pc->ac_prx[i].prx_deps != NULL)
-           free(pc->ac_prx[i].prx_deps, M_ACPIPWR);
     free(pc, M_ACPIPWR);
 
     ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "deregistered power consumer %s\n",
@@ -387,6 +286,7 @@ acpi_pwr_deregister_consumer(ACPI_HANDLE consumer)
 
     return_ACPI_STATUS (AE_OK);
 }
+#endif /* notyet */
 
 /*
  * Set a power consumer to a particular power state.

Reply via email to