mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 21:36:52 +00:00
Split mt7921_mcu_regd_update() into two functions to prevent recursive
mutex acquisition. Introduce __mt7921_mcu_regd_update() as the internal
implementation that assumes the mutex is already held by the caller,
while mt7921_mcu_regd_update() remains as the external interface that
handles mutex acquisition and release.
This fixes a deadlock issue when mt7921_regd_set_6ghz_power_type() is
called with the device mutex already held. Without this change, calling
mt7921_mcu_regd_update() would attempt to acquire the same mutex again,
causing a recursive lock deadlock.
The __mt7921_mcu_regd_update() function can be safely called when the
caller has already acquired the device mutex, avoiding the deadlock
while maintaining proper synchronization for regulatory domain updates.
Fixes: dc2608cf5224 ("wifi: mt76: mt7921: refactor regulatory notifier flow")
Signed-off-by: Charlie-cy Wu <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Felix Fietkau <[email protected]>
22 lines
679 B
C
22 lines
679 B
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/* Copyright (C) 2025 MediaTek Inc. */
|
|
|
|
#ifndef __MT7921_REGD_H
|
|
#define __MT7921_REGD_H
|
|
|
|
struct mt792x_dev;
|
|
struct wiphy;
|
|
struct regulatory_request;
|
|
|
|
int mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
|
|
enum environment_cap country_ie_env);
|
|
int __mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
|
|
enum environment_cap country_ie_env);
|
|
void mt7921_regd_notifier(struct wiphy *wiphy,
|
|
struct regulatory_request *request);
|
|
bool mt7921_regd_clc_supported(struct mt792x_dev *dev);
|
|
int mt7921_regd_change(struct mt792x_phy *phy, char *alpha2);
|
|
int mt7921_regd_init(struct mt792x_phy *phy);
|
|
|
|
#endif
|