| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/17 05:48 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the ath12k driver, which is a hardware-specific driver for Qualcomm Wi-Fi 7 devices (PCIe/AHB). Since there is no software emulation for this hardware in the kernel, the modified code paths are impossible to reach in virtualized environments like GCE or QEMU.",
"WorthFuzzing": false
} |
| 1/1 | 2026/07/17 05:48 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit ae2e58bd21706c80ee3598009c6a5b87b5a28a5d\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Fri Jul 17 05:48:03 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c\nindex 742d4fd1b598c2..95673d3be9da97 100644\n--- a/drivers/net/wireless/ath/ath12k/core.c\n+++ b/drivers/net/wireless/ath/ath12k/core.c\n@@ -1463,7 +1463,7 @@ void ath12k_core_halt(struct ath12k *ar)\n \n \tath12k_mac_scan_finish(ar);\n \tath12k_mac_peer_cleanup_all(ar);\n-\tcancel_delayed_work_sync(\u0026ar-\u003escan.timeout);\n+\twiphy_delayed_work_cancel(ath12k_ar_to_hw(ar)-\u003ewiphy, \u0026ar-\u003escan.timeout);\n \tcancel_work_sync(\u0026ar-\u003eregd_update_work);\n \tcancel_work_sync(\u0026ar-\u003eregd_channel_update_work);\n \tcancel_work_sync(\u0026ab-\u003erfkill_work);\ndiff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h\nindex fc5127b5c1a37f..b6fd5e9dfdb786 100644\n--- a/drivers/net/wireless/ath/ath12k/core.h\n+++ b/drivers/net/wireless/ath/ath12k/core.h\n@@ -635,11 +635,12 @@ struct ath12k {\n \t\tstruct completion started;\n \t\tstruct completion completed;\n \t\tstruct completion on_channel;\n-\t\tstruct delayed_work timeout;\n+\t\tstruct wiphy_delayed_work timeout;\n \t\tenum ath12k_scan_state state;\n \t\tbool is_roc;\n \t\tint roc_freq;\n \t\tbool roc_notify;\n+\t\tbool finish_queued;\n \t\tstruct wiphy_work vdev_clean_wk;\n \t\tstruct ath12k_link_vif *arvif;\n \t} scan;\ndiff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c\nindex 51c4df32e71695..f53df8d4c808a4 100644\n--- a/drivers/net/wireless/ath/ath12k/mac.c\n+++ b/drivers/net/wireless/ath/ath12k/mac.c\n@@ -5162,7 +5162,7 @@ void __ath12k_mac_scan_finish(struct ath12k *ar)\n \t\t\tieee80211_remain_on_channel_expired(hw);\n \t\tfallthrough;\n \tcase ATH12K_SCAN_STARTING:\n-\t\tcancel_delayed_work(\u0026ar-\u003escan.timeout);\n+\t\tar-\u003escan.finish_queued = true;\n \t\tcomplete_all(\u0026ar-\u003escan.completed);\n \t\twiphy_work_queue(ar-\u003eah-\u003ehw-\u003ewiphy, \u0026ar-\u003escan.vdev_clean_wk);\n \t\tbreak;\n@@ -5254,14 +5254,23 @@ static void ath12k_scan_abort(struct ath12k *ar)\n \tspin_unlock_bh(\u0026ar-\u003edata_lock);\n }\n \n-static void ath12k_scan_timeout_work(struct work_struct *work)\n+static void ath12k_scan_timeout_work(struct wiphy *wiphy,\n+\t\t\t\t struct wiphy_work *work)\n {\n-\tstruct ath12k *ar = container_of(work, struct ath12k,\n-\t\t\t\t\t scan.timeout.work);\n+\tstruct wiphy_delayed_work *dwork;\n+\tstruct ath12k *ar;\n+\n+\tdwork = container_of(work, struct wiphy_delayed_work, work);\n+\tar = container_of(dwork, struct ath12k, scan.timeout);\n+\n+\tspin_lock_bh(\u0026ar-\u003edata_lock);\n+\tif (ar-\u003escan.finish_queued) {\n+\t\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n+\t\treturn;\n+\t}\n+\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n \n-\twiphy_lock(ath12k_ar_to_hw(ar)-\u003ewiphy);\n \tath12k_scan_abort(ar);\n-\twiphy_unlock(ath12k_ar_to_hw(ar)-\u003ewiphy);\n }\n \n static void ath12k_mac_scan_send_complete(struct ath12k *ar,\n@@ -5292,6 +5301,8 @@ static void ath12k_scan_vdev_clean_work(struct wiphy *wiphy, struct wiphy_work *\n \n \tarvif = ar-\u003escan.arvif;\n \n+\twiphy_delayed_work_cancel(wiphy, \u0026ar-\u003escan.timeout);\n+\n \t/* The scan vdev has already been deleted. This can occur when a\n \t * new scan request is made on the same vif with a different\n \t * frequency, causing the scan arvif to move from one radio to\n@@ -5323,6 +5334,7 @@ static void ath12k_scan_vdev_clean_work(struct wiphy *wiphy, struct wiphy_work *\n \t}\n \n \tar-\u003escan.state = ATH12K_SCAN_IDLE;\n+\tar-\u003escan.finish_queued = false;\n \tar-\u003escan_channel = NULL;\n \tar-\u003escan.roc_freq = 0;\n \tspin_unlock_bh(\u0026ar-\u003edata_lock);\n@@ -5609,6 +5621,7 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,\n \t\treinit_completion(\u0026ar-\u003escan.completed);\n \t\tar-\u003escan.state = ATH12K_SCAN_STARTING;\n \t\tar-\u003escan.is_roc = false;\n+\t\tar-\u003escan.finish_queued = false;\n \t\tar-\u003escan.arvif = arvif;\n \t\tret = 0;\n \t\tbreak;\n@@ -5665,6 +5678,7 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,\n \n \t\tspin_lock_bh(\u0026ar-\u003edata_lock);\n \t\tar-\u003escan.state = ATH12K_SCAN_IDLE;\n+\t\tar-\u003escan.finish_queued = false;\n \t\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n \t\tgoto exit;\n \t}\n@@ -5672,9 +5686,10 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,\n \tath12k_dbg(ar-\u003eab, ATH12K_DBG_MAC, \"mac scan started\");\n \n \t/* Add a margin to account for event/command processing */\n-\tieee80211_queue_delayed_work(ath12k_ar_to_hw(ar), \u0026ar-\u003escan.timeout,\n-\t\t\t\t msecs_to_jiffies(arg-\u003emax_scan_time +\n-\t\t\t\t\t\t ATH12K_MAC_SCAN_TIMEOUT_MSECS));\n+\twiphy_delayed_work_queue(ath12k_ar_to_hw(ar)-\u003ewiphy,\n+\t\t\t\t \u0026ar-\u003escan.timeout,\n+\t\t\t\t msecs_to_jiffies(arg-\u003emax_scan_time +\n+\t\t\t\t\t\t ATH12K_MAC_SCAN_TIMEOUT_MSECS));\n \n exit:\n \tif (arg) {\n@@ -5757,6 +5772,7 @@ int ath12k_mac_op_hw_scan(struct ieee80211_hw *hw,\n \t\t\t\tspin_lock_bh(\u0026ar-\u003edata_lock);\n \t\t\t\tar-\u003escan.arvif = NULL;\n \t\t\t\tar-\u003escan.state = ATH12K_SCAN_IDLE;\n+\t\t\t\tar-\u003escan.finish_queued = false;\n \t\t\t\tar-\u003escan_channel = NULL;\n \t\t\t\tar-\u003escan.roc_freq = 0;\n \t\t\t\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n@@ -5792,7 +5808,7 @@ void ath12k_mac_op_cancel_hw_scan(struct ieee80211_hw *hw,\n \n \t\tath12k_scan_abort(ar);\n \n-\t\tcancel_delayed_work_sync(\u0026ar-\u003escan.timeout);\n+\t\twiphy_delayed_work_cancel(hw-\u003ewiphy, \u0026ar-\u003escan.timeout);\n \t}\n }\n EXPORT_SYMBOL(ath12k_mac_op_cancel_hw_scan);\n@@ -9935,7 +9951,7 @@ static void ath12k_mac_stop(struct ath12k *ar)\n \n \tclear_bit(ATH12K_FLAG_CAC_RUNNING, \u0026ar-\u003edev_flags);\n \n-\tcancel_delayed_work_sync(\u0026ar-\u003escan.timeout);\n+\twiphy_delayed_work_cancel(ath12k_ar_to_hw(ar)-\u003ewiphy, \u0026ar-\u003escan.timeout);\n \twiphy_work_cancel(ath12k_ar_to_hw(ar)-\u003ewiphy, \u0026ar-\u003escan.vdev_clean_wk);\n \tcancel_work_sync(\u0026ar-\u003eregd_channel_update_work);\n \tcancel_work_sync(\u0026ar-\u003eregd_update_work);\n@@ -10962,6 +10978,7 @@ void ath12k_mac_op_remove_interface(struct ieee80211_hw *hw,\n \t\t\t}\n \n \t\t\tar-\u003escan.state = ATH12K_SCAN_IDLE;\n+\t\t\tar-\u003escan.finish_queued = false;\n \t\t\tar-\u003escan_channel = NULL;\n \t\t\tar-\u003escan.roc_freq = 0;\n \t\t\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n@@ -13876,7 +13893,7 @@ int ath12k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,\n \n \tath12k_scan_abort(ar);\n \n-\tcancel_delayed_work_sync(\u0026ar-\u003escan.timeout);\n+\twiphy_delayed_work_cancel(hw-\u003ewiphy, \u0026ar-\u003escan.timeout);\n \twiphy_work_flush(hw-\u003ewiphy, \u0026ar-\u003escan.vdev_clean_wk);\n \n \treturn 0;\n@@ -13956,6 +13973,7 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,\n \t\treinit_completion(\u0026ar-\u003escan.on_channel);\n \t\tar-\u003escan.state = ATH12K_SCAN_STARTING;\n \t\tar-\u003escan.is_roc = true;\n+\t\tar-\u003escan.finish_queued = false;\n \t\tar-\u003escan.arvif = arvif;\n \t\tar-\u003escan.roc_freq = chan-\u003ecenter_freq;\n \t\tar-\u003escan.roc_notify = true;\n@@ -13998,6 +14016,7 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,\n \n \t\tspin_lock_bh(\u0026ar-\u003edata_lock);\n \t\tar-\u003escan.state = ATH12K_SCAN_IDLE;\n+\t\tar-\u003escan.finish_queued = false;\n \t\tspin_unlock_bh(\u0026ar-\u003edata_lock);\n \t\treturn ret;\n \t}\n@@ -14011,8 +14030,8 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,\n \t\treturn -ETIMEDOUT;\n \t}\n \n-\tieee80211_queue_delayed_work(hw, \u0026ar-\u003escan.timeout,\n-\t\t\t\t msecs_to_jiffies(duration));\n+\twiphy_delayed_work_queue(hw-\u003ewiphy, \u0026ar-\u003escan.timeout,\n+\t\t\t\t msecs_to_jiffies(duration));\n \n \treturn 0;\n }\n@@ -15052,6 +15071,7 @@ static void ath12k_mac_setup(struct ath12k *ar)\n \tar-\u003enum_tx_chains = hweight32(pdev-\u003ecap.tx_chain_mask);\n \tar-\u003enum_rx_chains = hweight32(pdev-\u003ecap.rx_chain_mask);\n \tar-\u003escan.arvif = NULL;\n+\tar-\u003escan.finish_queued = false;\n \tar-\u003evdev_id_11d_scan = ATH12K_11D_INVALID_VDEV_ID;\n \n \tspin_lock_init(\u0026ar-\u003edata_lock);\n@@ -15077,7 +15097,7 @@ static void ath12k_mac_setup(struct ath12k *ar)\n \tar-\u003ethermal.temperature = 0;\n \tar-\u003ethermal.hwmon_dev = NULL;\n \n-\tINIT_DELAYED_WORK(\u0026ar-\u003escan.timeout, ath12k_scan_timeout_work);\n+\twiphy_delayed_work_init(\u0026ar-\u003escan.timeout, ath12k_scan_timeout_work);\n \twiphy_work_init(\u0026ar-\u003escan.vdev_clean_wk, ath12k_scan_vdev_clean_work);\n \tINIT_WORK(\u0026ar-\u003eregd_channel_update_work, ath12k_regd_update_chan_list_work);\n \tINIT_LIST_HEAD(\u0026ar-\u003eregd_channel_update_queue);\n"
} |
| 2/1 | 2026/07/17 05:48 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the ath12k driver, which is a hardware-specific driver for Qualcomm Wi-Fi 7 devices (PCIe/AHB). Since there is no software emulation for this hardware in the kernel, the modified code paths are impossible to reach in virtualized environments like GCE or QEMU.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Do not list too generic configs (we already have them enabled). Only list those that specifically cover the modified code. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit ae2e58bd21706c80ee3598009c6a5b87b5a28a5d
Author: syz-cluster <triage@syzkaller.com>
Date: Fri Jul 17 05:48:03 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index 742d4fd1b598c2..95673d3be9da97 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -1463,7 +1463,7 @@ void ath12k_core_halt(struct ath12k *ar)
ath12k_mac_scan_finish(ar);
ath12k_mac_peer_cleanup_all(ar);
- cancel_delayed_work_sync(&ar->scan.timeout);
+ wiphy_delayed_work_cancel(ath12k_ar_to_hw(ar)->wiphy, &ar->scan.timeout);
cancel_work_sync(&ar->regd_update_work);
cancel_work_sync(&ar->regd_channel_update_work);
cancel_work_sync(&ab->rfkill_work);
diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h
index fc5127b5c1a37f..b6fd5e9dfdb786 100644
--- a/drivers/net/wireless/ath/ath12k/core.h
+++ b/drivers/net/wireless/ath/ath12k/core.h
@@ -635,11 +635,12 @@ struct ath12k {
struct completion started;
struct completion completed;
struct completion on_channel;
- struct delayed_work timeout;
+ struct wiphy_delayed_work timeout;
enum ath12k_scan_state state;
bool is_roc;
int roc_freq;
bool roc_notify;
+ bool finish_queued;
struct wiphy_work vdev_clean_wk;
struct ath12k_link_vif *arvif;
} scan;
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index 51c4df32e71695..f53df8d4c808a4 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -5162,7 +5162,7 @@ void __ath12k_mac_scan_finish(struct ath12k *ar)
ieee80211_remain_on_channel_expired(hw);
fallthrough;
case ATH12K_SCAN_STARTING:
- cancel_delayed_work(&ar->scan.timeout);
+ ar->scan.finish_queued = true;
complete_all(&ar->scan.completed);
wiphy_work_queue(ar->ah->hw->wiphy, &ar->scan.vdev_clean_wk);
break;
@@ -5254,14 +5254,23 @@ static void ath12k_scan_abort(struct ath12k *ar)
spin_unlock_bh(&ar->data_lock);
}
-static void ath12k_scan_timeout_work(struct work_struct *work)
+static void ath12k_scan_timeout_work(struct wiphy *wiphy,
+ struct wiphy_work *work)
{
- struct ath12k *ar = container_of(work, struct ath12k,
- scan.timeout.work);
+ struct wiphy_delayed_work *dwork;
+ struct ath12k *ar;
+
+ dwork = container_of(work, struct wiphy_delayed_work, work);
+ ar = container_of(dwork, struct ath12k, scan.timeout);
+
+ spin_lock_bh(&ar->data_lock);
+ if (ar->scan.finish_queued) {
+ spin_unlock_bh(&ar->data_lock);
+ return;
+ }
+ spin_unlock_bh(&ar->data_lock);
- wiphy_lock(ath12k_ar_to_hw(ar)->wiphy);
ath12k_scan_abort(ar);
- wiphy_unlock(ath12k_ar_to_hw(ar)->wiphy);
}
static void ath12k_mac_scan_send_complete(struct ath12k *ar,
@@ -5292,6 +5301,8 @@ static void ath12k_scan_vdev_clean_work(struct wiphy *wiphy, struct wiphy_work *
arvif = ar->scan.arvif;
+ wiphy_delayed_work_cancel(wiphy, &ar->scan.timeout);
+
/* The scan vdev has already been deleted. This can occur when a
* new scan request is made on the same vif with a different
* frequency, causing the scan arvif to move from one radio to
@@ -5323,6 +5334,7 @@ static void ath12k_scan_vdev_clean_work(struct wiphy *wiphy, struct wiphy_work *
}
ar->scan.state = ATH12K_SCAN_IDLE;
+ ar->scan.finish_queued = false;
ar->scan_channel = NULL;
ar->scan.roc_freq = 0;
spin_unlock_bh(&ar->data_lock);
@@ -5609,6 +5621,7 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,
reinit_completion(&ar->scan.completed);
ar->scan.state = ATH12K_SCAN_STARTING;
ar->scan.is_roc = false;
+ ar->scan.finish_queued = false;
ar->scan.arvif = arvif;
ret = 0;
break;
@@ -5665,6 +5678,7 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,
spin_lock_bh(&ar->data_lock);
ar->scan.state = ATH12K_SCAN_IDLE;
+ ar->scan.finish_queued = false;
spin_unlock_bh(&ar->data_lock);
goto exit;
}
@@ -5672,9 +5686,10 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,
ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac scan started");
/* Add a margin to account for event/command processing */
- ieee80211_queue_delayed_work(ath12k_ar_to_hw(ar), &ar->scan.timeout,
- msecs_to_jiffies(arg->max_scan_time +
- ATH12K_MAC_SCAN_TIMEOUT_MSECS));
+ wiphy_delayed_work_queue(ath12k_ar_to_hw(ar)->wiphy,
+ &ar->scan.timeout,
+ msecs_to_jiffies(arg->max_scan_time +
+ ATH12K_MAC_SCAN_TIMEOUT_MSECS));
exit:
if (arg) {
@@ -5757,6 +5772,7 @@ int ath12k_mac_op_hw_scan(struct ieee80211_hw *hw,
spin_lock_bh(&ar->data_lock);
ar->scan.arvif = NULL;
ar->scan.state = ATH12K_SCAN_IDLE;
+ ar->scan.finish_queued = false;
ar->scan_channel = NULL;
ar->scan.roc_freq = 0;
spin_unlock_bh(&ar->data_lock);
@@ -5792,7 +5808,7 @@ void ath12k_mac_op_cancel_hw_scan(struct ieee80211_hw *hw,
ath12k_scan_abort(ar);
- cancel_delayed_work_sync(&ar->scan.timeout);
+ wiphy_delayed_work_cancel(hw->wiphy, &ar->scan.timeout);
}
}
EXPORT_SYMBOL(ath12k_mac_op_cancel_hw_scan);
@@ -9935,7 +9951,7 @@ static void ath12k_mac_stop(struct ath12k *ar)
clear_bit(ATH12K_FLAG_CAC_RUNNING, &ar->dev_flags);
- cancel_delayed_work_sync(&ar->scan.timeout);
+ wiphy_delayed_work_cancel(ath12k_ar_to_hw(ar)->wiphy, &ar->scan.timeout);
wiphy_work_cancel(ath12k_ar_to_hw(ar)->wiphy, &ar->scan.vdev_clean_wk);
cancel_work_sync(&ar->regd_channel_update_work);
cancel_work_sync(&ar->regd_update_work);
@@ -10962,6 +10978,7 @@ void ath12k_mac_op_remove_interface(struct ieee80211_hw *hw,
}
ar->scan.state = ATH12K_SCAN_IDLE;
+ ar->scan.finish_queued = false;
ar->scan_channel = NULL;
ar->scan.roc_freq = 0;
spin_unlock_bh(&ar->data_lock);
@@ -13876,7 +13893,7 @@ int ath12k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
ath12k_scan_abort(ar);
- cancel_delayed_work_sync(&ar->scan.timeout);
+ wiphy_delayed_work_cancel(hw->wiphy, &ar->scan.timeout);
wiphy_work_flush(hw->wiphy, &ar->scan.vdev_clean_wk);
return 0;
@@ -13956,6 +13973,7 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
reinit_completion(&ar->scan.on_channel);
ar->scan.state = ATH12K_SCAN_STARTING;
ar->scan.is_roc = true;
+ ar->scan.finish_queued = false;
ar->scan.arvif = arvif;
ar->scan.roc_freq = chan->center_freq;
ar->scan.roc_notify = true;
@@ -13998,6 +14016,7 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
spin_lock_bh(&ar->data_lock);
ar->scan.state = ATH12K_SCAN_IDLE;
+ ar->scan.finish_queued = false;
spin_unlock_bh(&ar->data_lock);
return ret;
}
@@ -14011,8 +14030,8 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
return -ETIMEDOUT;
}
- ieee80211_queue_delayed_work(hw, &ar->scan.timeout,
- msecs_to_jiffies(duration));
+ wiphy_delayed_work_queue(hw->wiphy, &ar->scan.timeout,
+ msecs_to_jiffies(duration));
return 0;
}
@@ -15052,6 +15071,7 @@ static void ath12k_mac_setup(struct ath12k *ar)
ar->num_tx_chains = hweight32(pdev->cap.tx_chain_mask);
ar->num_rx_chains = hweight32(pdev->cap.rx_chain_mask);
ar->scan.arvif = NULL;
+ ar->scan.finish_queued = false;
ar->vdev_id_11d_scan = ATH12K_11D_INVALID_VDEV_ID;
spin_lock_init(&ar->data_lock);
@@ -15077,7 +15097,7 @@ static void ath12k_mac_setup(struct ath12k *ar)
ar->thermal.temperature = 0;
ar->thermal.hwmon_dev = NULL;
- INIT_DELAYED_WORK(&ar->scan.timeout, ath12k_scan_timeout_work);
+ wiphy_delayed_work_init(&ar->scan.timeout, ath12k_scan_timeout_work);
wiphy_work_init(&ar->scan.vdev_clean_wk, ath12k_scan_vdev_clean_work);
INIT_WORK(&ar->regd_channel_update_work, ath12k_regd_update_chan_list_work);
INIT_LIST_HEAD(&ar->regd_channel_update_queue);
|
| 3/2 | 2026/07/17 05:48 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5155 output: 37 thoughts: 329 Thoughts: **Analyzing the ath12k Driver Patch** Okay, so I'm looking at this patch for the `ath12k` wireless driver, and it looks like a straightforward structural change. The core of it seems to be about updating the delayed work handling within the `scan` structure. Specifically, they've switched from the standard `struct delayed_work timeout` to the `wiphy`-aware `struct wiphy_delayed_work timeout`, and correspondingly replaced the older work queue manipulation functions with their `wiphy` counterparts – `cancel_delayed_work_sync` becomes `wiphy_delayed_work_cancel`, the asynchronous version is handled with a flag `ar->scan.finish_queued = true`, `ieee80211_queue_delayed_work` becomes `wiphy_delayed_work_queue`, and `INIT_DELAYED_WORK` is now `wiphy_delayed_work_init`. Functionally, this is a clean modernization. Now, my mind jumps to security implications. Since this is a driver, the attack surface is of particular interest. Is `ath12k` even reachable in a virtualized environment? It's a driver for Qualcomm Wi-Fi 7 devices, specifically PCIe/AHB, which means direct hardware access is likely involved. Wait, can we fuzz it? I am used to fuzzing various drivers. Hardware drivers are notoriously difficult to fuzz directly, but there are some workarounds. I need to know the type of driver. Emulation layers, USB drivers with dummy HCDs, or `mac80211_hwsim` are typical avenues, but it looks like `ath12k` is a PCI/AHB driver. So now, I'm thinking about emulation. I need to check if there is any emulation for `ath12k`. I will use `grepper` to search the Linux source tree for any mention of `ath12k` to see what I can find. |
| 4/2 | 2026/07/17 05:48 | tool | grepper |
0mArgs:{
"Expression": "ath12k",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 34952 lines.\nUse more precise expression if possible.\n\ndrivers/net/wireless/ath/ath12k/Kconfig=2=config ATH12K\ndrivers/net/wireless/ath/ath12k/Kconfig:3:\ttristate \"Qualcomm Wi-Fi 7 support (ath12k)\"\ndrivers/net/wireless/ath/ath12k/Kconfig-4-\tdepends on MAC80211 \u0026\u0026 HAS_DMA \u0026\u0026 PCI\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-14-\ndrivers/net/wireless/ath/ath12k/Kconfig:15:\t If you choose to build a module, it'll be called ath12k.\ndrivers/net/wireless/ath/ath12k/Kconfig-16-\ndrivers/net/wireless/ath/ath12k/Kconfig=17=config ATH12K_AHB\ndrivers/net/wireless/ath/ath12k/Kconfig:18:\tbool \"Qualcomm ath12k AHB support\"\ndrivers/net/wireless/ath/ath12k/Kconfig-19-\tdepends on ATH12K \u0026\u0026 REMOTEPROC\n--\ndrivers/net/wireless/ath/ath12k/Kconfig=25=config ATH12K_DEBUG\ndrivers/net/wireless/ath/ath12k/Kconfig:26:\tbool \"ath12k debugging\"\ndrivers/net/wireless/ath/ath12k/Kconfig-27-\tdepends on ATH12K\n--\ndrivers/net/wireless/ath/ath12k/Kconfig=35=config ATH12K_DEBUGFS\ndrivers/net/wireless/ath/ath12k/Kconfig:36:\tbool \"Qualcomm ath12k debugfs support\"\ndrivers/net/wireless/ath/ath12k/Kconfig-37-\tdepends on ATH12K \u0026\u0026 MAC80211_DEBUGFS\ndrivers/net/wireless/ath/ath12k/Kconfig-38-\thelp\ndrivers/net/wireless/ath/ath12k/Kconfig:39:\t Enable ath12k debugfs support\ndrivers/net/wireless/ath/ath12k/Kconfig-40-\n--\ndrivers/net/wireless/ath/ath12k/Kconfig=44=config ATH12K_TRACING\ndrivers/net/wireless/ath/ath12k/Kconfig:45:\tbool \"ath12k tracing support\"\ndrivers/net/wireless/ath/ath12k/Kconfig-46-\tdepends on ATH12K \u0026\u0026 EVENT_TRACING\ndrivers/net/wireless/ath/ath12k/Kconfig-47-\thelp\ndrivers/net/wireless/ath/ath12k/Kconfig:48:\t Enable ath12k tracing infrastructure.\ndrivers/net/wireless/ath/ath12k/Kconfig-49-\n--\ndrivers/net/wireless/ath/ath12k/Kconfig=53=config ATH12K_COREDUMP\ndrivers/net/wireless/ath/ath12k/Kconfig:54:\tbool \"ath12k coredump\"\ndrivers/net/wireless/ath/ath12k/Kconfig-55-\tdepends on ATH12K\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-57-\thelp\ndrivers/net/wireless/ath/ath12k/Kconfig:58:\t Enable ath12k coredump collection\ndrivers/net/wireless/ath/ath12k/Kconfig-59-\n--\ndrivers/net/wireless/ath/ath12k/Makefile-1-# SPDX-License-Identifier: BSD-3-Clause-Clear\ndrivers/net/wireless/ath/ath12k/Makefile:2:obj-$(CONFIG_ATH12K) += ath12k.o\ndrivers/net/wireless/ath/ath12k/Makefile:3:ath12k-y += core.o \\\ndrivers/net/wireless/ath/ath12k/Makefile-4-\t hal.o \\\n--\ndrivers/net/wireless/ath/ath12k/Makefile-24-\ndrivers/net/wireless/ath/ath12k/Makefile:25:ath12k-$(CONFIG_ATH12K_AHB) += ahb.o\ndrivers/net/wireless/ath/ath12k/Makefile-26-\ndrivers/net/wireless/ath/ath12k/Makefile=27=obj-$(CONFIG_ATH12K) += wifi7/\ndrivers/net/wireless/ath/ath12k/Makefile-28-\ndrivers/net/wireless/ath/ath12k/Makefile:29:ath12k-$(CONFIG_ATH12K_DEBUGFS) += debugfs.o debugfs_htt_stats.o debugfs_sta.o\ndrivers/net/wireless/ath/ath12k/Makefile:30:ath12k-$(CONFIG_ACPI) += acpi.o\ndrivers/net/wireless/ath/ath12k/Makefile:31:ath12k-$(CONFIG_ATH12K_TRACING) += trace.o\ndrivers/net/wireless/ath/ath12k/Makefile:32:ath12k-$(CONFIG_PM) += wow.o\ndrivers/net/wireless/ath/ath12k/Makefile:33:ath12k-$(CONFIG_ATH12K_COREDUMP) += coredump.o\ndrivers/net/wireless/ath/ath12k/Makefile:34:ath12k-$(CONFIG_NL80211_TESTMODE) += testmode.o\ndrivers/net/wireless/ath/ath12k/Makefile:35:ath12k-$(CONFIG_THERMAL) += thermal.o\ndrivers/net/wireless/ath/ath12k/Makefile-36-\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-10-\ndrivers/net/wireless/ath/ath12k/acpi.c:11:static int ath12k_acpi_dsm_get_data(struct ath12k_base *ab, int func)\ndrivers/net/wireless/ath/ath12k/acpi.c-12-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-18-\tif (!root_handle) {\ndrivers/net/wireless/ath/ath12k/acpi.c:19:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"invalid acpi handler\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-20-\t\treturn -EOPNOTSUPP;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-26-\tif (!obj) {\ndrivers/net/wireless/ath/ath12k/acpi.c:27:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"acpi_evaluate_dsm() failed\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-28-\t\treturn -ENOENT;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-46-\t\t\t\t ATH12K_ACPI_BDF_ANCHOR_STRING_LEN)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:47:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM BDF size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-48-\t\t\t\t\t obj-\u003estring.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-62-\t\t\t obj-\u003ebuffer.length \u003e ATH12K_ACPI_DSM_FUNC_MAX_BITMAP_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:63:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM func size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-64-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-75-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_TAS_CFG_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:76:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM TAS config size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-77-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-87-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_TAS_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:88:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM TAS data size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-89-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-99-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_BIOS_SAR_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:100:\t\t\t\tath12k_warn(ab, \"invalid ACPI BIOS SAR data size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-101-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-111-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_GEO_OFFSET_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:112:\t\t\t\tath12k_warn(ab, \"invalid ACPI GEO OFFSET data size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-113-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-123-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_CCA_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:124:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM CCA data size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-125-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-135-\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_BAND_EDGE_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:136:\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM band edge data size: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-137-\t\t\t\t\t obj-\u003ebuffer.length);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-147-\t} else {\ndrivers/net/wireless/ath/ath12k/acpi.c:148:\t\tath12k_warn(ab, \"ACPI DSM method returned an unsupported object type: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-149-\t\t\t obj-\u003etype);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-160-\ndrivers/net/wireless/ath/ath12k/acpi.c:161:static int ath12k_acpi_set_power_limit(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-162-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-167-\t tas_sar_power_table[1] != ATH12K_ACPI_TAS_DATA_ENABLE) {\ndrivers/net/wireless/ath/ath12k/acpi.c:168:\t\tath12k_warn(ab, \"latest ACPI TAS data is invalid\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-169-\t\treturn -EINVAL;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-171-\ndrivers/net/wireless/ath/ath12k/acpi.c:172:\tret = ath12k_wmi_set_bios_cmd(ab, WMI_BIOS_PARAM_TAS_DATA_TYPE,\ndrivers/net/wireless/ath/ath12k/acpi.c-173-\t\t\t\t tas_sar_power_table,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-175-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:176:\t\tath12k_warn(ab, \"failed to send ACPI TAS data table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-177-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-182-\ndrivers/net/wireless/ath/ath12k/acpi.c:183:static int ath12k_acpi_set_bios_sar_power(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-184-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-188-\t ab-\u003eacpi.bios_sar_data[1] != ATH12K_ACPI_POWER_LIMIT_ENABLE_FLAG) {\ndrivers/net/wireless/ath/ath12k/acpi.c:189:\t\tath12k_warn(ab, \"invalid latest ACPI BIOS SAR data\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-190-\t\treturn -EINVAL;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-192-\ndrivers/net/wireless/ath/ath12k/acpi.c:193:\tret = ath12k_wmi_set_bios_sar_cmd(ab, ab-\u003eacpi.bios_sar_data);\ndrivers/net/wireless/ath/ath12k/acpi.c-194-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:195:\t\tath12k_warn(ab, \"failed to set ACPI BIOS SAR table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-196-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-201-\ndrivers/net/wireless/ath/ath12k/acpi.c:202:static void ath12k_acpi_dsm_notify(acpi_handle handle, u32 event, void *data)\ndrivers/net/wireless/ath/ath12k/acpi.c-203-{\ndrivers/net/wireless/ath/ath12k/acpi.c-204-\tint ret;\ndrivers/net/wireless/ath/ath12k/acpi.c:205:\tstruct ath12k_base *ab = data;\ndrivers/net/wireless/ath/ath12k/acpi.c-206-\ndrivers/net/wireless/ath/ath12k/acpi.c-207-\tif (event == ATH12K_ACPI_NOTIFY_EVENT) {\ndrivers/net/wireless/ath/ath12k/acpi.c:208:\t\tath12k_warn(ab, \"unknown acpi notify %u\\n\", event);\ndrivers/net/wireless/ath/ath12k/acpi.c-209-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-212-\tif (!ab-\u003eacpi.acpi_tas_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:213:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"acpi_tas_enable is false\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-214-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-216-\ndrivers/net/wireless/ath/ath12k/acpi.c:217:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_DATA);\ndrivers/net/wireless/ath/ath12k/acpi.c-218-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:219:\t\tath12k_warn(ab, \"failed to update ACPI TAS data table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-220-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-222-\ndrivers/net/wireless/ath/ath12k/acpi.c:223:\tret = ath12k_acpi_set_power_limit(ab);\ndrivers/net/wireless/ath/ath12k/acpi.c-224-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:225:\t\tath12k_warn(ab, \"failed to set ACPI TAS power limit data: %d\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-226-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-231-\ndrivers/net/wireless/ath/ath12k/acpi.c:232:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BIOS_SAR);\ndrivers/net/wireless/ath/ath12k/acpi.c-233-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:234:\t\tath12k_warn(ab, \"failed to update BIOS SAR: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-235-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-237-\ndrivers/net/wireless/ath/ath12k/acpi.c:238:\tret = ath12k_acpi_set_bios_sar_power(ab);\ndrivers/net/wireless/ath/ath12k/acpi.c-239-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:240:\t\tath12k_warn(ab, \"failed to set BIOS SAR power limit: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-241-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-244-\ndrivers/net/wireless/ath/ath12k/acpi.c:245:static int ath12k_acpi_set_bios_sar_params(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-246-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-248-\ndrivers/net/wireless/ath/ath12k/acpi.c:249:\tret = ath12k_wmi_set_bios_sar_cmd(ab, ab-\u003eacpi.bios_sar_data);\ndrivers/net/wireless/ath/ath12k/acpi.c-250-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:251:\t\tath12k_warn(ab, \"failed to set ACPI BIOS SAR table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-252-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-254-\ndrivers/net/wireless/ath/ath12k/acpi.c:255:\tret = ath12k_wmi_set_bios_geo_cmd(ab, ab-\u003eacpi.geo_offset_data);\ndrivers/net/wireless/ath/ath12k/acpi.c-256-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:257:\t\tath12k_warn(ab, \"failed to set ACPI BIOS GEO table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-258-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-263-\ndrivers/net/wireless/ath/ath12k/acpi.c:264:static int ath12k_acpi_set_tas_params(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-265-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-267-\ndrivers/net/wireless/ath/ath12k/acpi.c:268:\tret = ath12k_wmi_set_bios_cmd(ab, WMI_BIOS_PARAM_TAS_CONFIG_TYPE,\ndrivers/net/wireless/ath/ath12k/acpi.c-269-\t\t\t\t ab-\u003eacpi.tas_cfg,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-271-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:272:\t\tath12k_warn(ab, \"failed to send ACPI TAS config table parameter: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-273-\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-276-\ndrivers/net/wireless/ath/ath12k/acpi.c:277:\tret = ath12k_wmi_set_bios_cmd(ab, WMI_BIOS_PARAM_TAS_DATA_TYPE,\ndrivers/net/wireless/ath/ath12k/acpi.c-278-\t\t\t\t ab-\u003eacpi.tas_sar_power_table,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-280-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:281:\t\tath12k_warn(ab, \"failed to send ACPI TAS data table parameter: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-282-\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-288-\ndrivers/net/wireless/ath/ath12k/acpi.c:289:bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-290-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-293-\ndrivers/net/wireless/ath/ath12k/acpi.c:294:bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-295-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-298-\ndrivers/net/wireless/ath/ath12k/acpi.c:299:void ath12k_acpi_set_dsm_func(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-300-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-308-\tif (ab-\u003eacpi.acpi_tas_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:309:\t\tret = ath12k_acpi_set_tas_params(ab);\ndrivers/net/wireless/ath/ath12k/acpi.c-310-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:311:\t\t\tath12k_warn(ab, \"failed to send ACPI TAS parameters: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-312-\t\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-316-\tif (ab-\u003eacpi.acpi_bios_sar_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:317:\t\tret = ath12k_acpi_set_bios_sar_params(ab);\ndrivers/net/wireless/ath/ath12k/acpi.c-318-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:319:\t\t\tath12k_warn(ab, \"failed to send ACPI BIOS SAR: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-320-\t\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-325-\t\tbuf = ab-\u003eacpi.cca_data + ATH12K_ACPI_CCA_THR_OFFSET_DATA_OFFSET;\ndrivers/net/wireless/ath/ath12k/acpi.c:326:\t\tret = ath12k_wmi_set_bios_cmd(ab,\ndrivers/net/wireless/ath/ath12k/acpi.c-327-\t\t\t\t\t WMI_BIOS_PARAM_CCA_THRESHOLD_TYPE,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-330-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:331:\t\t\tath12k_warn(ab, \"failed to set ACPI DSM CCA threshold: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-332-\t\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-337-\tif (ab-\u003eacpi.acpi_band_edge_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:338:\t\tret = ath12k_wmi_set_bios_cmd(ab,\ndrivers/net/wireless/ath/ath12k/acpi.c-339-\t\t\t\t\t WMI_BIOS_PARAM_TYPE_BANDEDGE,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-342-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:343:\t\t\tath12k_warn(ab,\ndrivers/net/wireless/ath/ath12k/acpi.c-344-\t\t\t\t \"failed to set ACPI DSM band edge channel power: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-350-\ndrivers/net/wireless/ath/ath12k/acpi.c:351:int ath12k_acpi_start(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-352-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-368-\ndrivers/net/wireless/ath/ath12k/acpi.c:369:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS);\ndrivers/net/wireless/ath/ath12k/acpi.c-370-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:371:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"failed to get ACPI DSM data: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-372-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-375-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_DISABLE_FLAG)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:376:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG);\ndrivers/net/wireless/ath/ath12k/acpi.c-377-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:378:\t\t\tath12k_warn(ab, \"failed to get ACPI DISABLE FLAG: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-379-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-391-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_BDF_EXT)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:392:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BDF_EXT);\ndrivers/net/wireless/ath/ath12k/acpi.c-393-\t\tif (ret || ab-\u003eacpi.bdf_string[0] == '\\0') {\ndrivers/net/wireless/ath/ath12k/acpi.c:394:\t\t\tath12k_warn(ab, \"failed to get ACPI BDF EXT: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-395-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-401-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_TAS_CFG)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:402:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_CFG);\ndrivers/net/wireless/ath/ath12k/acpi.c-403-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:404:\t\t\tath12k_warn(ab, \"failed to get ACPI TAS config table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-405-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-409-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_TAS_DATA)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:410:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_DATA);\ndrivers/net/wireless/ath/ath12k/acpi.c-411-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:412:\t\t\tath12k_warn(ab, \"failed to get ACPI TAS data table: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-413-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-422-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_BIOS_SAR)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:423:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BIOS_SAR);\ndrivers/net/wireless/ath/ath12k/acpi.c-424-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:425:\t\t\tath12k_warn(ab, \"failed to get ACPI bios sar data: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-426-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-430-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_GEO_OFFSET)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:431:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_GEO_OFFSET);\ndrivers/net/wireless/ath/ath12k/acpi.c-432-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:433:\t\t\tath12k_warn(ab, \"failed to get ACPI geo offset data: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-434-\t\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-444-\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_CCA)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:445:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_INDEX_CCA);\ndrivers/net/wireless/ath/ath12k/acpi.c-446-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:447:\t\t\tath12k_warn(ab, \"failed to get ACPI DSM CCA threshold configuration: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-448-\t\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-459-\t\t\t\t ATH12K_ACPI_FUNC_BIT_BAND_EDGE_CHAN_POWER)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:460:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_INDEX_BAND_EDGE);\ndrivers/net/wireless/ath/ath12k/acpi.c-461-\t\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:462:\t\t\tath12k_warn(ab, \"failed to get ACPI DSM band edge channel power: %d\\n\",\ndrivers/net/wireless/ath/ath12k/acpi.c-463-\t\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-473-\t\t\t\t\t ACPI_DEVICE_NOTIFY,\ndrivers/net/wireless/ath/ath12k/acpi.c:474:\t\t\t\t\t ath12k_acpi_dsm_notify, ab);\ndrivers/net/wireless/ath/ath12k/acpi.c-475-\tif (ACPI_FAILURE(status)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:476:\t\tath12k_warn(ab, \"failed to install DSM notify callback: %d\\n\", status);\ndrivers/net/wireless/ath/ath12k/acpi.c-477-\t\treturn -EIO;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-484-\ndrivers/net/wireless/ath/ath12k/acpi.c:485:int ath12k_acpi_check_bdf_variant_name(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-486-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-492-\tif (strscpy(ab-\u003eqmi.target.bdf_ext, ab-\u003eacpi.bdf_string + 4, max_len) \u003c 0)\ndrivers/net/wireless/ath/ath12k/acpi.c:493:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT,\ndrivers/net/wireless/ath/ath12k/acpi.c-494-\t\t\t \"acpi bdf variant longer than the buffer (variant: %s)\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-499-\ndrivers/net/wireless/ath/ath12k/acpi.c:500:void ath12k_acpi_stop(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.c-501-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-506-\t\t\t\t ACPI_DEVICE_NOTIFY,\ndrivers/net/wireless/ath/ath12k/acpi.c:507:\t\t\t\t ath12k_acpi_dsm_notify);\ndrivers/net/wireless/ath/ath12k/acpi.c-508-\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-74-\ndrivers/net/wireless/ath/ath12k/acpi.h:75:int ath12k_acpi_start(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h:76:void ath12k_acpi_stop(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h:77:bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h:78:bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h:79:void ath12k_acpi_set_dsm_func(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h:80:int ath12k_acpi_check_bdf_variant_name(struct ath12k_base *ab);\ndrivers/net/wireless/ath/ath12k/acpi.h-81-\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-83-\ndrivers/net/wireless/ath/ath12k/acpi.h:84:static inline int ath12k_acpi_start(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-85-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-88-\ndrivers/net/wireless/ath/ath12k/acpi.h:89:static inline void ath12k_acpi_stop(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-90-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-92-\ndrivers/net/wireless/ath/ath12k/acpi.h:93:static inline bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-94-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-97-\ndrivers/net/wireless/ath/ath12k/acpi.h:98:static inline bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-99-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-102-\ndrivers/net/wireless/ath/ath12k/acpi.h:103:static inline void ath12k_acpi_set_dsm_func(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-104-{\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-106-\ndrivers/net/wireless/ath/ath12k/acpi.h:107:static inline int ath12k_acpi_check_bdf_variant_name(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/acpi.h-108-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-22-\ndrivers/net/wireless/ath/ath12k/ahb.c:23:static struct ath12k_ahb_driver *ath12k_ahb_family_drivers[ATH12K_DEVICE_FAMILY_MAX];\ndrivers/net/wireless/ath/ath12k/ahb.c:24:static const char ath12k_userpd_irq[][9] = {\"spawn\",\ndrivers/net/wireless/ath/ath12k/ahb.c-25-\t\t\t\t \"ready\",\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=84=enum ext_irq_num {\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-123-\ndrivers/net/wireless/ath/ath12k/ahb.c:124:static u32 ath12k_ahb_read32(struct ath12k_base *ab, u32 offset)\ndrivers/net/wireless/ath/ath12k/ahb.c-125-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-130-\ndrivers/net/wireless/ath/ath12k/ahb.c:131:static void ath12k_ahb_write32(struct ath12k_base *ab, u32 offset,\ndrivers/net/wireless/ath/ath12k/ahb.c-132-\t\t\t u32 value)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-139-\ndrivers/net/wireless/ath/ath12k/ahb.c:140:static void ath12k_ahb_cancel_workqueue(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-141-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-144-\tfor (i = 0; i \u003c ab-\u003ehw_params-\u003ece_count; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:145:\t\tstruct ath12k_ce_pipe *ce_pipe = \u0026ab-\u003ece.ce_pipe[i];\ndrivers/net/wireless/ath/ath12k/ahb.c-146-\ndrivers/net/wireless/ath/ath12k/ahb.c:147:\t\tif (ath12k_ce_get_attr_flags(ab, i) \u0026 CE_ATTR_DIS_INTR)\ndrivers/net/wireless/ath/ath12k/ahb.c-148-\t\t\tcontinue;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-153-\ndrivers/net/wireless/ath/ath12k/ahb.c:154:static void ath12k_ahb_ext_grp_disable(struct ath12k_ext_irq_grp *irq_grp)\ndrivers/net/wireless/ath/ath12k/ahb.c-155-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-161-\ndrivers/net/wireless/ath/ath12k/ahb.c:162:static void __ath12k_ahb_ext_irq_disable(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-163-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-166-\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:167:\t\tstruct ath12k_ext_irq_grp *irq_grp = \u0026ab-\u003eext_irq_grp[i];\ndrivers/net/wireless/ath/ath12k/ahb.c-168-\ndrivers/net/wireless/ath/ath12k/ahb.c:169:\t\tath12k_ahb_ext_grp_disable(irq_grp);\ndrivers/net/wireless/ath/ath12k/ahb.c-170-\t\tif (irq_grp-\u003enapi_enabled) {\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-177-\ndrivers/net/wireless/ath/ath12k/ahb.c:178:static void ath12k_ahb_ext_grp_enable(struct ath12k_ext_irq_grp *irq_grp)\ndrivers/net/wireless/ath/ath12k/ahb.c-179-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-185-\ndrivers/net/wireless/ath/ath12k/ahb.c:186:static void ath12k_ahb_setbit32(struct ath12k_base *ab, u8 bit, u32 offset)\ndrivers/net/wireless/ath/ath12k/ahb.c-187-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-189-\ndrivers/net/wireless/ath/ath12k/ahb.c:190:\tval = ath12k_ahb_read32(ab, offset);\ndrivers/net/wireless/ath/ath12k/ahb.c:191:\tath12k_ahb_write32(ab, offset, val | BIT(bit));\ndrivers/net/wireless/ath/ath12k/ahb.c-192-}\ndrivers/net/wireless/ath/ath12k/ahb.c-193-\ndrivers/net/wireless/ath/ath12k/ahb.c:194:static void ath12k_ahb_clearbit32(struct ath12k_base *ab, u8 bit, u32 offset)\ndrivers/net/wireless/ath/ath12k/ahb.c-195-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-197-\ndrivers/net/wireless/ath/ath12k/ahb.c:198:\tval = ath12k_ahb_read32(ab, offset);\ndrivers/net/wireless/ath/ath12k/ahb.c:199:\tath12k_ahb_write32(ab, offset, val \u0026 ~BIT(bit));\ndrivers/net/wireless/ath/ath12k/ahb.c-200-}\ndrivers/net/wireless/ath/ath12k/ahb.c-201-\ndrivers/net/wireless/ath/ath12k/ahb.c:202:static void ath12k_ahb_ce_irq_enable(struct ath12k_base *ab, u16 ce_id)\ndrivers/net/wireless/ath/ath12k/ahb.c-203-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-213-\tif (ce_attr-\u003esrc_nentries)\ndrivers/net/wireless/ath/ath12k/ahb.c:214:\t\tath12k_ahb_setbit32(ab, ce_id, ie1_reg_addr);\ndrivers/net/wireless/ath/ath12k/ahb.c-215-\ndrivers/net/wireless/ath/ath12k/ahb.c-216-\tif (ce_attr-\u003edest_nentries) {\ndrivers/net/wireless/ath/ath12k/ahb.c:217:\t\tath12k_ahb_setbit32(ab, ce_id, ie2_reg_addr);\ndrivers/net/wireless/ath/ath12k/ahb.c:218:\t\tath12k_ahb_setbit32(ab, ce_id + CE_HOST_IE_3_SHIFT,\ndrivers/net/wireless/ath/ath12k/ahb.c-219-\t\t\t\t ie3_reg_addr);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-222-\ndrivers/net/wireless/ath/ath12k/ahb.c:223:static void ath12k_ahb_ce_irq_disable(struct ath12k_base *ab, u16 ce_id)\ndrivers/net/wireless/ath/ath12k/ahb.c-224-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-234-\tif (ce_attr-\u003esrc_nentries)\ndrivers/net/wireless/ath/ath12k/ahb.c:235:\t\tath12k_ahb_clearbit32(ab, ce_id, ie1_reg_addr);\ndrivers/net/wireless/ath/ath12k/ahb.c-236-\ndrivers/net/wireless/ath/ath12k/ahb.c-237-\tif (ce_attr-\u003edest_nentries) {\ndrivers/net/wireless/ath/ath12k/ahb.c:238:\t\tath12k_ahb_clearbit32(ab, ce_id, ie2_reg_addr);\ndrivers/net/wireless/ath/ath12k/ahb.c:239:\t\tath12k_ahb_clearbit32(ab, ce_id + CE_HOST_IE_3_SHIFT,\ndrivers/net/wireless/ath/ath12k/ahb.c-240-\t\t\t\t ie3_reg_addr);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-243-\ndrivers/net/wireless/ath/ath12k/ahb.c:244:static void ath12k_ahb_sync_ce_irqs(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-245-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-249-\tfor (i = 0; i \u003c ab-\u003ehw_params-\u003ece_count; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:250:\t\tif (ath12k_ce_get_attr_flags(ab, i) \u0026 CE_ATTR_DIS_INTR)\ndrivers/net/wireless/ath/ath12k/ahb.c-251-\t\t\tcontinue;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-257-\ndrivers/net/wireless/ath/ath12k/ahb.c:258:static void ath12k_ahb_sync_ext_irqs(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-259-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-263-\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:264:\t\tstruct ath12k_ext_irq_grp *irq_grp = \u0026ab-\u003eext_irq_grp[i];\ndrivers/net/wireless/ath/ath12k/ahb.c-265-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-272-\ndrivers/net/wireless/ath/ath12k/ahb.c:273:static void ath12k_ahb_ce_irqs_enable(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-274-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-277-\tfor (i = 0; i \u003c ab-\u003ehw_params-\u003ece_count; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:278:\t\tif (ath12k_ce_get_attr_flags(ab, i) \u0026 CE_ATTR_DIS_INTR)\ndrivers/net/wireless/ath/ath12k/ahb.c-279-\t\t\tcontinue;\ndrivers/net/wireless/ath/ath12k/ahb.c:280:\t\tath12k_ahb_ce_irq_enable(ab, i);\ndrivers/net/wireless/ath/ath12k/ahb.c-281-\t}\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-283-\ndrivers/net/wireless/ath/ath12k/ahb.c:284:static void ath12k_ahb_ce_irqs_disable(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-285-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-288-\tfor (i = 0; i \u003c ab-\u003ehw_params-\u003ece_count; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c:289:\t\tif (ath12k_ce_get_attr_flags(ab, i) \u0026 CE_ATTR_DIS_INTR)\ndrivers/net/wireless/ath/ath12k/ahb.c-290-\t\t\tcontinue;\ndrivers/net/wireless/ath/ath12k/ahb.c:291:\t\tath12k_ahb_ce_irq_disable(ab, i);\ndrivers/net/wireless/ath/ath12k/ahb.c-292-\t}\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-294-\ndrivers/net/wireless/ath/ath12k/ahb.c:295:static int ath12k_ahb_start(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-296-{\ndrivers/net/wireless/ath/ath12k/ahb.c:297:\tath12k_ahb_ce_irqs_enable(ab);\ndrivers/net/wireless/ath/ath12k/ahb.c:298:\tath12k_ce_rx_post_buf(ab);\ndrivers/net/wireless/ath/ath12k/ahb.c-299-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-302-\ndrivers/net/wireless/ath/ath12k/ahb.c:303:static void ath12k_ahb_ext_irq_enable(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-304-{\ndrivers/net/wireless/ath/ath12k/ahb.c:305:\tstruct ath12k_ext_irq_grp *irq_grp;\ndrivers/net/wireless/ath/ath12k/ahb.c-306-\tint i;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-313-\t\t}\ndrivers/net/wireless/ath/ath12k/ahb.c:314:\t\tath12k_ahb_ext_grp_enable(irq_grp);\ndrivers/net/wireless/ath/ath12k/ahb.c-315-\t}\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-317-\ndrivers/net/wireless/ath/ath12k/ahb.c:318:static void ath12k_ahb_ext_irq_disable(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-319-{\n\n"
} |
| 5/2 | 2026/07/17 05:48 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 20687 output: 35 thoughts: 357 Thoughts: **Investigating Syzbot's Interaction with the ath12k Driver** Okay, so the `ath12k` driver has three configuration options: `CONFIG_ATH12K_AHB`, `CONFIG_ATH12K`, and `CONFIG_ATH12K_PCI`. My immediate thought is, is there some kind of emulation setup for `ath12k`? It's not like `mac80211_hwsim`, which usually simulates a more generic mac80211 device, not specifically `ath12k`. Wait, syzbot found a bug in this? Intriguing. Let's see if syzbot even includes `ath12k` in its fuzzing targets. Hold on a second, this commit message says "syz-cluster: applied patch under review" and the author is listed as `syz-cluster <triage@syzkaller.com>`. That means syzbot *is* testing a patch related to `ath12k`. But how? How is syzbot interacting with this driver? Given that `ath12k` is a PCI/AHB driver, is it fuzzed via some virtual bus or perhaps it's a USB driver? The thought is, syzkaller might be using its virtual PCI bus (`vhci` or something similar, no wait, `vhci` is for USB). Does syzkaller have `vfio` or even direct PCI fuzzing? Actually, I remember `mac80211_hwsim` which is for the `mac80211` framework. Aha! Maybe syzkaller is fuzzing `ath12k` indirectly via `nl80211` testmode? That's plausible. Let's check `drivers/net/wireless/ath/ath12k/testmode.c` and see if there are any clues there. |
| 6/2 | 2026/07/17 05:48 | tool | grepper |
0mArgs:{
"Expression": "testmode",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "drivers/net/wireless/ath/ath12k/Makefile=33=ath12k-$(CONFIG_ATH12K_COREDUMP) += coredump.o\ndrivers/net/wireless/ath/ath12k/Makefile:34:ath12k-$(CONFIG_NL80211_TESTMODE) += testmode.o\ndrivers/net/wireless/ath/ath12k/Makefile-35-ath12k-$(CONFIG_THERMAL) += thermal.o\n--\ndrivers/net/wireless/ath/ath12k/mac.c-17-#include \"dp_rx.h\"\ndrivers/net/wireless/ath/ath12k/mac.c:18:#include \"testmode.h\"\ndrivers/net/wireless/ath/ath12k/mac.c-19-#include \"peer.h\"\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-6-\ndrivers/net/wireless/ath/ath12k/testmode.c:7:#include \"testmode.h\"\ndrivers/net/wireless/ath/ath12k/testmode.c-8-#include \u003cnet/netlink.h\u003e\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-13-#include \"hif.h\"\ndrivers/net/wireless/ath/ath12k/testmode.c:14:#include \"../testmode_i.h\"\ndrivers/net/wireless/ath/ath12k/testmode.c-15-\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=45=void ath12k_tm_wmi_event_unsegmented(struct ath12k_base *ab, u32 cmd_id,\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-51-\tath12k_dbg(ab, ATH12K_DBG_TESTMODE,\ndrivers/net/wireless/ath/ath12k/testmode.c:52:\t\t \"testmode event wmi cmd_id %d skb length %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-53-\t\t cmd_id, skb-\u003elen);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-58-\tif (!ar) {\ndrivers/net/wireless/ath/ath12k/testmode.c:59:\t\tath12k_warn(ab, \"testmode event not handled due to invalid pdev\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-60-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-64-\ndrivers/net/wireless/ath/ath12k/testmode.c:65:\tnl_skb = cfg80211_testmode_alloc_event_skb(ar-\u003eah-\u003ehw-\u003ewiphy,\ndrivers/net/wireless/ath/ath12k/testmode.c-66-\t\t\t\t\t\t 2 * nla_total_size(sizeof(u32)) +\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-72-\t\tath12k_warn(ab,\ndrivers/net/wireless/ath/ath12k/testmode.c:73:\t\t\t \"failed to allocate skb for unsegmented testmode wmi event\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-74-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-79-\t nla_put(nl_skb, ATH_TM_ATTR_DATA, skb-\u003elen, skb-\u003edata)) {\ndrivers/net/wireless/ath/ath12k/testmode.c:80:\t\tath12k_warn(ab, \"failed to populate testmode unsegmented event\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-81-\t\tkfree_skb(nl_skb);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-84-\ndrivers/net/wireless/ath/ath12k/testmode.c:85:\tcfg80211_testmode_event(nl_skb, GFP_ATOMIC);\ndrivers/net/wireless/ath/ath12k/testmode.c-86-}\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=88=void ath12k_tm_process_event(struct ath12k_base *ab, u32 cmd_id,\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-99-\tath12k_dbg(ab, ATH12K_DBG_TESTMODE,\ndrivers/net/wireless/ath/ath12k/testmode.c:100:\t\t \"testmode event wmi cmd_id %d ftm event msg %p datalen %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-101-\t\t cmd_id, ftm_msg, length);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-105-\tif (pdev_id \u003e= ab-\u003enum_radios) {\ndrivers/net/wireless/ath/ath12k/testmode.c:106:\t\tath12k_warn(ab, \"testmode event not handled due to invalid pdev id\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-107-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-112-\tif (!ar) {\ndrivers/net/wireless/ath/ath12k/testmode.c:113:\t\tath12k_warn(ab, \"testmode event not handled due to absence of pdev\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-114-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-153-\tspin_lock_bh(\u0026ar-\u003edata_lock);\ndrivers/net/wireless/ath/ath12k/testmode.c:154:\tnl_skb = cfg80211_testmode_alloc_event_skb(ar-\u003eah-\u003ehw-\u003ewiphy,\ndrivers/net/wireless/ath/ath12k/testmode.c-155-\t\t\t\t\t\t 2 * nla_total_size(sizeof(u32)) +\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-161-\t\tath12k_warn(ab,\ndrivers/net/wireless/ath/ath12k/testmode.c:162:\t\t\t \"failed to allocate skb for testmode wmi event\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-163-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-170-\t\t \u0026ab-\u003eftm_event_obj.eventdata[0])) {\ndrivers/net/wireless/ath/ath12k/testmode.c:171:\t\tath12k_warn(ab, \"failed to populate testmode event\");\ndrivers/net/wireless/ath/ath12k/testmode.c-172-\t\tkfree_skb(nl_skb);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-175-\ndrivers/net/wireless/ath/ath12k/testmode.c:176:\tcfg80211_testmode_event(nl_skb, GFP_ATOMIC);\ndrivers/net/wireless/ath/ath12k/testmode.c-177-}\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=179=static int ath12k_tm_cmd_get_version(struct ath12k *ar, struct nlattr *tb[])\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-183-\tath12k_dbg(ar-\u003eab, ATH12K_DBG_TESTMODE,\ndrivers/net/wireless/ath/ath12k/testmode.c:184:\t\t \"testmode cmd get version_major %d version_minor %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-185-\t\t ATH_TESTMODE_VERSION_MAJOR,\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-188-\tspin_lock_bh(\u0026ar-\u003edata_lock);\ndrivers/net/wireless/ath/ath12k/testmode.c:189:\tskb = cfg80211_testmode_alloc_reply_skb(ar-\u003eah-\u003ehw-\u003ewiphy,\ndrivers/net/wireless/ath/ath12k/testmode.c-190-\t\t\t\t\t\t2 * nla_total_size(sizeof(u32)));\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-203-\ndrivers/net/wireless/ath/ath12k/testmode.c:204:\treturn cfg80211_testmode_reply(skb);\ndrivers/net/wireless/ath/ath12k/testmode.c-205-}\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=207=static int ath12k_tm_cmd_process_ftm(struct ath12k *ar, struct nlattr *tb[])\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-229-\tath12k_dbg(ar-\u003eab, ATH12K_DBG_TESTMODE,\ndrivers/net/wireless/ath/ath12k/testmode.c:230:\t\t \"testmode cmd wmi cmd_id %d buf %p buf_len %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-231-\t\t cmd_id, buf, buf_len);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-280-\ndrivers/net/wireless/ath/ath12k/testmode.c:281:static int ath12k_tm_cmd_testmode_start(struct ath12k *ar, struct nlattr *tb[])\ndrivers/net/wireless/ath/ath12k/testmode.c-282-{\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=300=static int ath12k_tm_cmd_wmi(struct ath12k *ar, struct nlattr *tb[])\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-318-\tif (!buf_len) {\ndrivers/net/wireless/ath/ath12k/testmode.c:319:\t\tath12k_warn(ar-\u003eab, \"No data present in testmode command\\n\");\ndrivers/net/wireless/ath/ath12k/testmode.c-320-\t\treturn -EINVAL;\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-331-\tath12k_dbg(ar-\u003eab, ATH12K_DBG_TESTMODE,\ndrivers/net/wireless/ath/ath12k/testmode.c:332:\t\t \"testmode cmd wmi cmd_id %d buf length %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-333-\t\t cmd_id, buf_len);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-346-\t\tdev_kfree_skb(skb);\ndrivers/net/wireless/ath/ath12k/testmode.c:347:\t\tath12k_warn(ar-\u003eab, \"failed to transmit wmi command (testmode): %d\\n\",\ndrivers/net/wireless/ath/ath12k/testmode.c-348-\t\t\t ret);\n--\ndrivers/net/wireless/ath/ath12k/testmode.c=354=int ath12k_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,\n--\ndrivers/net/wireless/ath/ath12k/testmode.c-385-\tcase ATH_TM_CMD_TESTMODE_START:\ndrivers/net/wireless/ath/ath12k/testmode.c:386:\t\treturn ath12k_tm_cmd_testmode_start(ar, tb);\ndrivers/net/wireless/ath/ath12k/testmode.c-387-\tcase ATH_TM_CMD_GET_VERSION:\n--\ndrivers/net/wireless/ath/ath12k/wifi7/hw.c-24-#include \"../debugfs_sta.h\"\ndrivers/net/wireless/ath/ath12k/wifi7/hw.c:25:#include \"../testmode.h\"\ndrivers/net/wireless/ath/ath12k/wifi7/hw.c-26-#include \"hal.h\"\n--\ndrivers/net/wireless/ath/ath12k/wmi.c-26-#include \"p2p.h\"\ndrivers/net/wireless/ath/ath12k/wmi.c:27:#include \"testmode.h\"\ndrivers/net/wireless/ath/ath12k/wmi.c-28-\n"
} |
| 7/2 | 2026/07/17 05:48 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 24882 output: 42 thoughts: 382 Thoughts: **Analyzing the `ath12k` Vulnerability Report** Okay, so syzbot is fuzzing mac80211 drivers using `mac80211_hwsim`. But wait, the specific driver mentioned in the report, `ath12k`, is designed for *real* hardware. That's a bit perplexing. Is there any conceivable way syzbot could even reach `ath12k` in its current testing setup? The fact that syzbot applied the patch suggests it's *trying* to test it, which raises a few immediate questions. The patch touches functions like `ath12k_mac_scan_finish`, `ath12k_mac_initiate_hw_scan`, `ath12k_mac_op_hw_scan`, `ath12k_mac_op_cancel_hw_scan`, `ath12k_mac_op_remain_on_channel`, `ath12k_mac_op_cancel_remain_on_channel`, and `ath12k_mac_setup`. All of these are clearly mac80211 operations, which is encouraging, but again, does syzbot have the necessary hardware to *actually* execute those? A deeper dive is needed. Syzbot typically runs on GCE VMs, and I'm pretty certain those don't have the specific Qualcomm Wi-Fi 7 hardware `ath12k` depends on – it requires either PCI or AHB. So, it's highly improbable syzbot is triggering this as a regular fuzzing scenario. Could it be a compile-only test? Ah, that "syz-cluster: applied patch under review" message makes more sense now. A user submitted the patch to syzbot for testing. Syzbot will try to execute it, but if it is unreachable, the patch will not be tested. Hmm, is there even a remote possibility of *software* emulation for `ath12k` that syzbot could leverage? Time to look through `drivers/net/wireless/ath/ath12k/pci.c` and `core.c` and see if there are any hints of software-based probing or emulation of the hardware. |
| 8/2 | 2026/07/17 05:48 | tool | grepper |
0mArgs:{
"Expression": "ath12k_pci_probe",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "drivers/net/wireless/ath/ath12k/pci.c=1507=ath12k_get_device_family(const struct pci_device_id *pci_dev)\n--\ndrivers/net/wireless/ath/ath12k/pci.c-1527-\ndrivers/net/wireless/ath/ath12k/pci.c:1528:static int ath12k_pci_probe(struct pci_dev *pdev,\ndrivers/net/wireless/ath/ath12k/pci.c-1529-\t\t\t const struct pci_device_id *pci_dev)\n--\ndrivers/net/wireless/ath/ath12k/pci.c=1808=int ath12k_pci_register_driver(const enum ath12k_device_family device_id,\n--\ndrivers/net/wireless/ath/ath12k/pci.c-1829-\tpci_driver-\u003eid_table = driver-\u003eid_table;\ndrivers/net/wireless/ath/ath12k/pci.c:1830:\tpci_driver-\u003eprobe = ath12k_pci_probe;\ndrivers/net/wireless/ath/ath12k/pci.c-1831-\tpci_driver-\u003eremove = ath12k_pci_remove;\n"
} |
| 9/2 | 2026/07/17 05:48 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 26138 output: 42 thoughts: 144 Thoughts: **My Assessment of `ath12k` Virtualization Options** Okay, so I'm thinking about how to test or debug the `ath12k` driver in a virtualized environment. The initial assumption – or, perhaps, wishful thinking – was that some kind of emulation might exist within the kernel itself. But after a quick review, it looks like there's no built-in software emulation *directly* for `ath12k`. Then I considered `mac80211_hwsim`. I remember that's a software simulator for `mac80211`, which is the framework `ath12k` leverages, but it's a completely separate driver (`drivers/net/wireless/mac80211_hwsim.c`). It doesn't actually interact with `ath12k`'s code base. So, that's a dead end. This realization is leading me to the conclusion that, based on this initial investigation, running and interacting with the `ath12k` code is essentially impossible in virtual environments like Google Compute Engine or even QEMU without some form of PCI passthrough of actual, physical hardware. That's a huge constraint on the workflow. Let me just do one last sanity check and see if there is any virtual bus, or some sort of mock environment for the driver, just in case something has changed, or there's some obscure option I'm missing. It would be great if there was an easier method. |
| 10/2 | 2026/07/17 05:48 | tool | grepper |
0mArgs:{
"Expression": "ath12k_ahb_probe",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "drivers/net/wireless/ath/ath12k/ahb.c=998=ath12k_ahb_get_device_family(const struct platform_device *pdev)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-1018-\ndrivers/net/wireless/ath/ath12k/ahb.c:1019:static int ath12k_ahb_probe(struct platform_device *pdev)\ndrivers/net/wireless/ath/ath12k/ahb.c-1020-{\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=1187=int ath12k_ahb_register_driver(const enum ath12k_device_family device_id,\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-1208-\tahb_driver-\u003edriver.of_match_table = driver-\u003eid_table;\ndrivers/net/wireless/ath/ath12k/ahb.c:1209:\tahb_driver-\u003eprobe = ath12k_ahb_probe;\ndrivers/net/wireless/ath/ath12k/ahb.c-1210-\tahb_driver-\u003eremove = ath12k_ahb_remove;\n"
} |
| 11/2 | 2026/07/17 05:48 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 26979 output: 96 thoughts: 361 Thoughts: **My Assessment of the Patch's Fuzzing Potential** Okay, let me think this through. This patch, I see, is targeted at ARM SoCs, which immediately raises a red flag. These often involve very specific hardware requirements that a tool like syzbot usually doesn't natively handle, certainly not without the appropriate device tree nodes. Hmm, could syzbot somehow inject platform devices, I wonder? Perhaps through `syz_devmem` or a similar mechanism? But even then, we're talking about needing to map memory and handle interrupts, and that's a *very* generic way of doing things. Syzbot doesn't have the sophisticated emulation capabilities required for something complex like `ath12k`. Wait a second, what if this patch *isn't* solely about `ath12k`? What if it affects `mac80211` more broadly, and `ath12k` is just one specific driver that's touched? Ah, no, my mistake. The file paths are very specific: `drivers/net/wireless/ath/ath12k/core.c`, `core.h`, and `mac.c`. Okay, so it's strictly `ath12k`-specific then. That changes things. Since `ath12k` is explicitly a hardware driver for Qualcomm Wi-Fi 7 devices, and there's no equivalent software emulation in the kernel like we have with `mac80211_hwsim` or `vkms` for DRM, it's inherently unreachable in virtualized environments. It *requires* the actual hardware to function. Therefore, according to my understanding and assessment of this patch, `WorthFuzzing` has to be `false`. Let me quickly review the instructions just to be sure... Okay, it states: "Return WorthFuzzing=false if the patch only contains code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware." Yes, `ath12k` is a real hardware driver, likely on PCIe or AHB devices. It's simply not possible to reach it in GCE/QEMU, or any other virtualized environment, without the actual hardware present. So, I will confirm, `WorthFuzzing=false`. |
| 12/2 | 2026/07/17 05:48 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the ath12k driver, which is a hardware-specific driver for Qualcomm Wi-Fi 7 devices (PCIe/AHB). Since there is no software emulation for this hardware in the kernel, the modified code paths are impossible to reach in virtualized environments like GCE or QEMU.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the ath12k driver, which is a hardware-specific driver for Qualcomm Wi-Fi 7 devices (PCIe/AHB). Since there is no software emulation for this hardware in the kernel, the modified code paths are impossible to reach in virtualized environments like GCE or QEMU.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|