void AcpiUtReleaseOwnerId ( ACPI_OWNER_ID *OwnerIdPtr) { ACPI_OWNER_ID OwnerId = *OwnerIdPtr; ACPI_STATUS Status; UINT32 Index; UINT32 Bit; ACPI_FUNCTION_TRACE_U32 (UtReleaseOwnerId, OwnerId); /* Always clear the input OwnerId (zero is an invalid ID) */ *OwnerIdPtr = 0; /* Zero is not a valid OwnerID */ if (OwnerId == 0) { ACPI_ERROR ((AE_INFO, "Invalid OwnerId: 0x%2.2X", OwnerId)); return_VOID; } /* Mutex for the global ID mask */ Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_VOID; } /* Normalize the ID to zero */ OwnerId--; /* Decode ID to index/offset pair */ Index = ACPI_DIV_32 (OwnerId); Bit = 1 << ACPI_MOD_32 (OwnerId); /* Free the owner ID only if it is valid */ if (AcpiGbl_OwnerIdMask[Index] & Bit) { AcpiGbl_OwnerIdMask[Index] ^= Bit; } else { ACPI_ERROR ((AE_INFO, "Release of non-allocated OwnerId: 0x%2.2X", OwnerId + 1)); } (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); return_VOID; }
void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr) { acpi_owner_id owner_id = *owner_id_ptr; acpi_status status; u32 index; u32 bit; ACPI_FUNCTION_TRACE_U32(ut_release_owner_id, owner_id); /* Always clear the input owner_id (zero is an invalid ID) */ *owner_id_ptr = 0; /* Zero is not a valid owner_ID */ if (owner_id == 0) { ACPI_ERROR((AE_INFO, "Invalid OwnerId: 0x%2.2X", owner_id)); return_VOID; } /* Mutex for the global ID mask */ status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); if (ACPI_FAILURE(status)) { return_VOID; } /* Normalize the ID to zero */ owner_id--; /* Decode ID to index/offset pair */ index = ACPI_DIV_32(owner_id); bit = 1 << ACPI_MOD_32(owner_id); /* Free the owner ID only if it is valid */ if (acpi_gbl_owner_id_mask[index] & bit) { acpi_gbl_owner_id_mask[index] ^= bit; } else { ACPI_ERROR((AE_INFO, "Release of non-allocated OwnerId: 0x%2.2X", owner_id + 1)); } (void)acpi_ut_release_mutex(ACPI_MTX_CACHES); return_VOID; }