| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/30 02:07 | flow | patch-triage |
2mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Microchip WILC1000 wireless driver, which is a vendor-specific driver for physical SDIO/SPI WiFi chips. Since QEMU and standard virtualized environments do not emulate this specific hardware, and there is no software-emulated alternative (like mac80211_hwsim or USB gadget) for it, the driver cannot be probed and the modified code paths are impossible to reach during fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/07/30 02:07 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 2caf998712da6e625c2b9651ae7d07f856d66f13\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Thu Jul 30 02:07:20 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/microchip/wilc1000/mon.c b/drivers/net/wireless/microchip/wilc1000/mon.c\nindex b5cf6fa7a8510..9b8c083b403de 100644\n--- a/drivers/net/wireless/microchip/wilc1000/mon.c\n+++ b/drivers/net/wireless/microchip/wilc1000/mon.c\n@@ -142,6 +142,9 @@ static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)\n static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\n \t\t\t\t struct net_device *dev)\n {\n+\tstruct ieee80211_radiotap_header_fixed *rtap_hdr;\n+\tstruct ieee80211_hdr_3addr *hdr;\n+\tunsigned int hdr_len;\n \tu32 rtap_len, ret = 0;\n \tstruct wilc_wfi_mon_priv *mon_priv;\n \tstruct sk_buff *skb2;\n@@ -153,13 +156,26 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\n \tif (!mon_priv)\n \t\treturn -EFAULT;\n \n+\tif (skb-\u003elen \u003c sizeof(*rtap_hdr))\n+\t\tgoto drop;\n+\n+\trtap_hdr = (void *)skb-\u003edata;\n+\tif (rtap_hdr-\u003eit_version)\n+\t\tgoto drop;\n+\n \trtap_len = ieee80211_get_radiotap_len(skb-\u003edata);\n-\tif (skb-\u003elen \u003c rtap_len)\n-\t\treturn -1;\n+\tif (rtap_len \u003c sizeof(*rtap_hdr) || skb-\u003elen \u003c rtap_len)\n+\t\tgoto drop;\n \n \tskb_pull(skb, rtap_len);\n+\thdr_len = ieee80211_get_hdrlen_from_skb(skb);\n+\tif (hdr_len \u003c sizeof(*hdr))\n+\t\tgoto drop;\n \n-\tif (skb-\u003edata[0] == 0xc0 \u0026\u0026 is_broadcast_ether_addr(\u0026skb-\u003edata[4])) {\n+\thdr = (void *)skb-\u003edata;\n+\n+\tif (ieee80211_is_deauth(hdr-\u003eframe_control) \u0026\u0026\n+\t is_broadcast_ether_addr(hdr-\u003eaddr1)) {\n \t\tskb2 = dev_alloc_skb(skb-\u003elen + sizeof(*cb_hdr));\n \t\tif (!skb2)\n \t\t\treturn -ENOMEM;\n@@ -191,8 +207,8 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\n \t}\n \tskb-\u003edev = mon_priv-\u003ereal_ndev;\n \n-\tether_addr_copy(srcadd, \u0026skb-\u003edata[10]);\n-\tether_addr_copy(bssid, \u0026skb-\u003edata[16]);\n+\tether_addr_copy(srcadd, hdr-\u003eaddr2);\n+\tether_addr_copy(bssid, hdr-\u003eaddr3);\n \t/*\n \t * Identify if data or mgmt packet, if source address and bssid\n \t * fields are equal send it to mgmt frames handler\n@@ -207,6 +223,10 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\n \t}\n \n \treturn ret;\n+\n+drop:\n+\tdev_kfree_skb(skb);\n+\treturn NETDEV_TX_OK;\n }\n \n static const struct net_device_ops wilc_wfi_netdev_ops = {\n"
} |
| 2/1 | 2026/07/30 02:07 | agent | patch-evaluator |
2mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Microchip WILC1000 wireless driver, which is a vendor-specific driver for physical SDIO/SPI WiFi chips. Since QEMU and standard virtualized environments do not emulate this specific hardware, and there is no software-emulated alternative (like mac80211_hwsim or USB gadget) for it, the driver cannot be probed and the modified code paths are impossible to reach during fuzzing.",
"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). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. 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. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 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. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. 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 2caf998712da6e625c2b9651ae7d07f856d66f13
Author: syz-cluster <triage@syzkaller.com>
Date: Thu Jul 30 02:07:20 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/microchip/wilc1000/mon.c b/drivers/net/wireless/microchip/wilc1000/mon.c
index b5cf6fa7a8510..9b8c083b403de 100644
--- a/drivers/net/wireless/microchip/wilc1000/mon.c
+++ b/drivers/net/wireless/microchip/wilc1000/mon.c
@@ -142,6 +142,9 @@ static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)
static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,
struct net_device *dev)
{
+ struct ieee80211_radiotap_header_fixed *rtap_hdr;
+ struct ieee80211_hdr_3addr *hdr;
+ unsigned int hdr_len;
u32 rtap_len, ret = 0;
struct wilc_wfi_mon_priv *mon_priv;
struct sk_buff *skb2;
@@ -153,13 +156,26 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,
if (!mon_priv)
return -EFAULT;
+ if (skb->len < sizeof(*rtap_hdr))
+ goto drop;
+
+ rtap_hdr = (void *)skb->data;
+ if (rtap_hdr->it_version)
+ goto drop;
+
rtap_len = ieee80211_get_radiotap_len(skb->data);
- if (skb->len < rtap_len)
- return -1;
+ if (rtap_len < sizeof(*rtap_hdr) || skb->len < rtap_len)
+ goto drop;
skb_pull(skb, rtap_len);
+ hdr_len = ieee80211_get_hdrlen_from_skb(skb);
+ if (hdr_len < sizeof(*hdr))
+ goto drop;
- if (skb->data[0] == 0xc0 && is_broadcast_ether_addr(&skb->data[4])) {
+ hdr = (void *)skb->data;
+
+ if (ieee80211_is_deauth(hdr->frame_control) &&
+ is_broadcast_ether_addr(hdr->addr1)) {
skb2 = dev_alloc_skb(skb->len + sizeof(*cb_hdr));
if (!skb2)
return -ENOMEM;
@@ -191,8 +207,8 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,
}
skb->dev = mon_priv->real_ndev;
- ether_addr_copy(srcadd, &skb->data[10]);
- ether_addr_copy(bssid, &skb->data[16]);
+ ether_addr_copy(srcadd, hdr->addr2);
+ ether_addr_copy(bssid, hdr->addr3);
/*
* Identify if data or mgmt packet, if source address and bssid
* fields are equal send it to mgmt frames handler
@@ -207,6 +223,10 @@ static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,
}
return ret;
+
+drop:
+ dev_kfree_skb(skb);
+ return NETDEV_TX_OK;
}
static const struct net_device_ops wilc_wfi_netdev_ops = {
|
| 3/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2844 output: 45 thoughts: 172 Thoughts: **Analyzing the `wilc_wfi_mon_xmit` Patch** Okay, so this patch is touching `wilc_wfi_mon_xmit` within `drivers/net/wireless/microchip/wilc1000/mon.c`. Right, that's the driver for the Microchip WILC1000 wireless chips. My first question is always whether this driver is even *reachable* in a virtualized environment. These hardware-specific wireless drivers, like the wilc1000, usually depend on the physical hardware being present, which poses a huge hurdle for fuzzing and testing. I need to quickly figure out if this is some kind of software-emulated version of the hardware, or if there's any clever way to make it work without the actual chip. I remember syzkaller has some packet injection capabilities for net devices, but that won't help if the device itself can't even be instantiated in the first place, or bound to a network namespace. So, before I go down that rabbit hole, I need to check the Kconfig file for this driver. Let me dig into `drivers/net/wireless/microchip/wilc1000/Kconfig`. Hopefully, that will give me some clues as to the driver's dependencies and configuration options. |
| 4/2 | 2026/07/30 02:07 | tool | read-file |
0mArgs:{
"File": "drivers/net/wireless/microchip/wilc1000/Kconfig",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0\n 2:\tconfig WILC1000\n 3:\t\ttristate\n 4:\t\thelp\n 5:\t\t Add support for the Atmel WILC1000 802.11 b/g/n SoC.\n 6:\t\t This provides Wi-FI over an SDIO or SPI interface, and\n 7:\t\t is usually found in IoT devices.\n 8:\t\n 9:\t\t This module only support IEEE 802.11n WiFi.\n 10:\t\n 11:\tconfig WILC1000_SDIO\n 12:\t\ttristate \"Atmel WILC1000 SDIO (WiFi only)\"\n 13:\t\tdepends on CFG80211 \u0026\u0026 INET \u0026\u0026 MMC\n 14:\t\tselect WILC1000\n 15:\t\thelp\n 16:\t\t This module adds support for the SDIO interface of adapters using\n 17:\t\t WILC1000 chipset. The Atmel WILC1000 SDIO is a full speed interface.\n 18:\t\t It meets SDIO card specification version 2.0. The interface supports\n 19:\t\t the 1-bit/4-bit SD transfer mode at the clock range of 0-50 MHz.\n 20:\t\t The host can use this interface to read and write from any register\n 21:\t\t within the chip as well as configure the WILC1000 for data DMA.\n 22:\t\t To use this interface, pin9 (SDIO_SPI_CFG) must be grounded. Select\n 23:\t\t this if your platform is using the SDIO bus.\n 24:\t\n 25:\tconfig WILC1000_SPI\n 26:\t\ttristate \"Atmel WILC1000 SPI (WiFi only)\"\n 27:\t\tdepends on CFG80211 \u0026\u0026 INET \u0026\u0026 SPI\n 28:\t\tselect WILC1000\n 29:\t\tselect CRC7\n 30:\t\tselect CRC_ITU_T\n 31:\t\thelp\n 32:\t\t This module adds support for the SPI interface of adapters using\n 33:\t\t WILC1000 chipset. The Atmel WILC1000 has a Serial Peripheral\n 34:\t\t Interface (SPI) that operates as a SPI slave. This SPI interface can\n 35:\t\t be used for control and for serial I/O of 802.11 data. The SPI is a\n 36:\t\t full-duplex slave synchronous serial interface that is available\n 37:\t\t immediately following reset when pin 9 (SDIO_SPI_CFG) is tied to\n 38:\t\t VDDIO. Select this if your platform is using the SPI bus.\n 39:\t\n 40:\tconfig WILC1000_HW_OOB_INTR\n 41:\t\tbool \"WILC1000 out of band interrupt\"\n 42:\t\tdepends on WILC1000_SDIO\n 43:\t\thelp\n 44:\t\t This option enables out-of-band interrupt support for the WILC1000\n 45:\t\t chipset. This OOB interrupt is intended to provide a faster interrupt\n 46:\t\t mechanism for SDIO host controllers that don't support SDIO interrupt.\n 47:\t\t Select this option If the SDIO host controller in your platform\n 48:\t\t doesn't support SDIO time division interrupt.\n"
} |
| 5/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4213 output: 24 thoughts: 258 Thoughts: **Investigating the Atmel WILC1000 Driver in QEMU** Okay, so I'm looking at this Atmel WILC1000 driver, specifically for SDIO/SPI. The immediate question is, can I instantiate this thing within a QEMU environment? Generally, I'd expect SDIO and SPI devices to be tricky – typically, you need to mock them, which is possible, but usually, that means physical hardware or very specific board emulation. Wait a second, though... isn't there something about syzkaller? Yeah, it supports injecting devices via `mac80211_hwsim`, but this is a *specific* driver, the WILC1000. So how's this going to work? Hold on, I see a syzkaller report, "syz-cluster: applied patch under review". That's interesting, the author is identified as syz-cluster. But then, the commit says the patch is *under review*, yet syzkaller found a bug? That seems contradictory. Let's see if syzkaller can even *reach* this driver. Hmm, syzkaller *does* have methods for creating net devices. Maybe the WILC1000 driver registers a net device? If so, could I create it using netlink commands, like `ip link add type ...`? Or is it perhaps a virtual device? Okay, let me check `drivers/net/wireless/microchip/wilc1000/mon.c`. I'll start with `wilc_wfi_mon_xmit` and see what it's doing. |
| 6/2 | 2026/07/30 02:07 | tool | grepper |
0mArgs:{
"Expression": "wilc_wfi_mon_xmit"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/mon.c=115=static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-141-\ndrivers/net/wireless/microchip/wilc1000/mon.c:142:static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\ndrivers/net/wireless/microchip/wilc1000/mon.c-143-\t\t\t\t struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c=232=static const struct net_device_ops wilc_wfi_netdev_ops = {\ndrivers/net/wireless/microchip/wilc1000/mon.c:233:\t.ndo_start_xmit = wilc_wfi_mon_xmit,\ndrivers/net/wireless/microchip/wilc1000/mon.c-234-\n"
} |
| 7/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5142 output: 24 thoughts: 32 Thoughts: Okay, let's break this down. **Diving into the Network Driver's Transmission Path** Right, so I'm looking at `ndo_start_xmit`. That's the function called within the `wilc_wfi_netdev_ops` structure to handle transmission from the wireless card. That's a key entry point, the critical function called when a packet needs to go out over the air. But, first, I need to understand the larger context. How is this network device, the thing that houses all these operations, actually created in the first place? Where does `wilc_wfi_netdev_ops` get populated? Is it during the initialization of the module, when the device registers with the kernel, or some other part of the boot process? Knowing this should give me better insight into the whole driver's initialization. |
| 8/2 | 2026/07/30 02:07 | tool | grepper |
0mArgs:{
"Expression": "wilc_wfi_netdev_ops"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/mon.c=142=static netdev_tx_t wilc_wfi_mon_xmit(struct sk_buff *skb,\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-231-\ndrivers/net/wireless/microchip/wilc1000/mon.c:232:static const struct net_device_ops wilc_wfi_netdev_ops = {\ndrivers/net/wireless/microchip/wilc1000/mon.c-233-\t.ndo_start_xmit = wilc_wfi_mon_xmit,\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c=237=struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-252-\tstrscpy(wl-\u003emonitor_dev-\u003ename, name, IFNAMSIZ);\ndrivers/net/wireless/microchip/wilc1000/mon.c:253:\twl-\u003emonitor_dev-\u003enetdev_ops = \u0026wilc_wfi_netdev_ops;\ndrivers/net/wireless/microchip/wilc1000/mon.c-254-\twl-\u003emonitor_dev-\u003eneeds_free_netdev = true;\n"
} |
| 9/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5748 output: 25 thoughts: 28 Thoughts: Okay, here's my take on those thoughts, framed as an expert's internal monologue: **Investigating the `wilc_wfi_init_mon_interface` Function** Alright, so `wilc_wfi_init_mon_interface` is responsible for creating the network device, the core of the monitoring interface. My first instinct, as always, is to understand its place in the system. The next step is clear: let's trace its call graph. I need to figure out where and how this function is invoked. Knowing the calling context is crucial. What triggers this creation? Is it on module load, specific events, or something else entirely? A quick code dive should reveal the relevant call sites. The goal is to fully grasp the initialization sequence and dependencies for this particular monitoring interface. Understanding the initial context is vital to understand the monitoring interface's lifecycle. |
| 10/2 | 2026/07/30 02:07 | tool | grepper |
0mArgs:{
"Expression": "wilc_wfi_init_mon_interface"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/cfg80211.c=1522=static struct wireless_dev *add_virtual_intf(struct wiphy *wiphy,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1551-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:1552:\t\tndev = wilc_wfi_init_mon_interface(wl, name, vif-\u003endev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1553-\t\tif (ndev) {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.h=17=void wilc_wfi_deinit_mon_interface(struct wilc *wl, bool rtnl_locked);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.h:18:struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.h-19-\t\t\t\t\t const char *name,\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c=232=static const struct net_device_ops wilc_wfi_netdev_ops = {\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-236-\ndrivers/net/wireless/microchip/wilc1000/mon.c:237:struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,\ndrivers/net/wireless/microchip/wilc1000/mon.c-238-\t\t\t\t\t const char *name,\n"
} |
| 11/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6475 output: 16 thoughts: 333 Thoughts: **Analyzing the `add_virtual_intf` Call Path** Okay, so `add_virtual_intf` is a `cfg80211` callback. That means if the device is present, syzkaller *could* use netlink (`nl80211`) to create a monitor interface and then inject packets, which should lead to `wilc_wfi_mon_xmit`. The key question is: is the `wilc1000` device even present in this virtualized environment? This driver's for an SDIO/SPI device, which raises a red flag. Unless there's some kind of mocking mechanism, the driver *won't* probe, and that `add_virtual_intf` function call is going to be unreachable because the driver doesn't register a Wi-Fi physical device (`wiphy`). So, I need to investigate any potential mocking capabilities or software bus probing possibilities. SDIO and SPI devices are typically absent in a standard x86 QEMU setup, unless explicitly configured, and syzkaller, to my knowledge, doesn't have a generic way to mock these. Unless... is there a syzkaller pseudo-device, or is it a USB device masquerading? Let's check... no, the Kconfig options specify SDIO and SPI. Right, so I need to understand syzkaller's device injection capabilities. Can syzkaller probe SPI or SDIO devices, period? I know it has some USB and PCI device injection features, but I don't recall seeing any generic support for SDIO or SPI. Hold on... perhaps there's a workaround? I need to explore if there's any other avenue to trigger this behavior. Let me see if there are any existing syzkaller descriptions for wilc1000. That's the logical next step. |
| 12/2 | 2026/07/30 02:07 | tool | grepper |
0mArgs:{
"Expression": "wilc"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 6120 lines.\nUse more precise expression if possible.\n\n.mailmap=493=Krzysztof Kozlowski \u003ckrzk@kernel.org\u003e \u003ckrzysztof.kozlowski@linaro.org\u003e\n.mailmap:494:Krzysztof Wilczyński \u003ckwilczynski@kernel.org\u003e \u003ckrzysztof.wilczynski@linux.com\u003e\n.mailmap:495:Krzysztof Wilczyński \u003ckwilczynski@kernel.org\u003e \u003ckw@linux.com\u003e\n.mailmap-496-Kshitiz Godara \u003cquic_kgodara@quicinc.com\u003e \u003ckgodara@codeaurora.org\u003e\n--\n.mailmap=567=Mat Martineau \u003cmartineau@kernel.org\u003e \u003cmathewm@codeaurora.org\u003e\n.mailmap:568:Matthew Wilcox \u003cwilly@infradead.org\u003e \u003cmatthew.r.wilcox@intel.com\u003e\n.mailmap-569-Matthew Wilcox \u003cwilly@infradead.org\u003e \u003cmatthew@wil.cx\u003e\n.mailmap:570:Matthew Wilcox \u003cwilly@infradead.org\u003e \u003cmawilcox@linuxonhyperv.com\u003e\n.mailmap:571:Matthew Wilcox \u003cwilly@infradead.org\u003e \u003cmawilcox@microsoft.com\u003e\n.mailmap-572-Matthew Wilcox \u003cwilly@infradead.org\u003e \u003cwilly@debian.org\u003e\n--\n.mailmap=858=Sven Peter \u003csven@kernel.org\u003e \u003csven@svenpeter.dev\u003e\n.mailmap:859:Szymon Wilczek \u003cswilczek.lx@gmail.com\u003e \u003cszymonwilczek@gmx.com\u003e\n.mailmap-860-Takashi YOSHII \u003ctakashi.yoshii.zj@renesas.com\u003e\n--\nDocumentation/ABI/testing/debugfs-wilco-ec:1:What:\t\t/sys/kernel/debug/wilco_ec/h1_gpio\nDocumentation/ABI/testing/debugfs-wilco-ec-2-Date:\t\tApril 2019\n--\nDocumentation/ABI/testing/debugfs-wilco-ec=4=Description:\n--\nDocumentation/ABI/testing/debugfs-wilco-ec-13-\nDocumentation/ABI/testing/debugfs-wilco-ec:14:What:\t\t/sys/kernel/debug/wilco_ec/raw\nDocumentation/ABI/testing/debugfs-wilco-ec-15-Date:\t\tJanuary 2019\n--\nDocumentation/ABI/testing/debugfs-wilco-ec=17=Description:\n--\nDocumentation/ABI/testing/debugfs-wilco-ec-24-\t\tFor writing, bytes 0-1 indicate the message type, one of enum\nDocumentation/ABI/testing/debugfs-wilco-ec:25:\t\twilco_ec_msg_type. Byte 2+ consist of the data passed in the\nDocumentation/ABI/testing/debugfs-wilco-ec-26-\t\trequest, starting at MBOX[0]. At least three bytes are required\n--\nDocumentation/ABI/testing/debugfs-wilco-ec-34-\t\t // MBOX = [38, 00, 03, 00]\nDocumentation/ABI/testing/debugfs-wilco-ec:35:\t\t $ echo 00 f0 38 00 03 00 \u003e /sys/kernel/debug/wilco_ec/raw\nDocumentation/ABI/testing/debugfs-wilco-ec-36-\t\t // View the result. The decoded ASCII result \"12/21/18\" is\n--\nDocumentation/ABI/testing/debugfs-wilco-ec-38-\t\t // Corresponds with MBOX = [00, 00, 31, 32, 2f, 32, 31, 38, ...]\nDocumentation/ABI/testing/debugfs-wilco-ec:39:\t\t $ cat /sys/kernel/debug/wilco_ec/raw\nDocumentation/ABI/testing/debugfs-wilco-ec-40-\t\t 00 00 31 32 2f 32 31 2f 31 38 00 38 00 01 00 2f 00 ..12/21/18.8...\n--\nDocumentation/ABI/testing/sysfs-class-power-wilco:1:What:\t\t/sys/class/power_supply/wilco-charger/charge_type\nDocumentation/ABI/testing/sysfs-class-power-wilco-2-Date:\t\tApril 2019\n--\nDocumentation/ABI/testing/sysfs-class-power-wilco=4=Description:\n--\nDocumentation/ABI/testing/sysfs-class-power-wilco-27-\nDocumentation/ABI/testing/sysfs-class-power-wilco:28:What:\t\t/sys/class/power_supply/wilco-charger/charge_control_start_threshold\nDocumentation/ABI/testing/sysfs-class-power-wilco-29-Date:\t\tApril 2019\n--\nDocumentation/ABI/testing/sysfs-class-power-wilco=31=Description:\n--\nDocumentation/ABI/testing/sysfs-class-power-wilco-34-\nDocumentation/ABI/testing/sysfs-class-power-wilco:35:What:\t\t/sys/class/power_supply/wilco-charger/charge_control_end_threshold\nDocumentation/ABI/testing/sysfs-class-power-wilco-36-Date:\t\tApril 2019\n--\nDocumentation/devicetree/bindings/firmware/thead,th1520-aon.yaml=21=maintainers:\nDocumentation/devicetree/bindings/firmware/thead,th1520-aon.yaml:22: - Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nDocumentation/devicetree/bindings/firmware/thead,th1520-aon.yaml-23-\n--\nDocumentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml=15=maintainers:\nDocumentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml:16: - Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nDocumentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml-17-\n--\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml=12=properties:\n--\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml-15- - mmc-pwrseq-sd8787\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml:16: - mmc-pwrseq-wilc1000\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml-17-\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-3----\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:4:$id: http://devicetree.org/schemas/net/wireless/microchip,wilc1000.yaml#\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-5-$schema: http://devicetree.org/meta-schemas/core.yaml#\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=13=description:\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:14: The wilc1000 chips can be connected via SPI or SDIO. This document\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:15: describes the binding to connect wilc devices.\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-16-\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=17=properties:\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-20- - items:\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:21: - const: microchip,wilc3000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:22: - const: microchip,wilc1000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:23: - const: microchip,wilc1000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-24-\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-38- maxItems: 1\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:39: description: Used by wilc1000-spi to determine the GPIO line\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-40- connected to the ENABLE line. If specified, reset-gpios\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-47- maxItems: 1\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:48: description: Used by wilc1000-spi to determine the GPIO line\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-49- connected to the RESET line. This should be declared as an\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=61=examples:\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-68- wifi@0 {\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:69: compatible = \"microchip,wilc1000\";\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-70- spi-max-frequency = \u003c48000000\u003e;\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-91- wifi@0 {\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:92: compatible = \"microchip,wilc1000\";\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-93- reg = \u003c0\u003e;\n--\nDocumentation/devicetree/bindings/pwm/thead,th1520-pwm.yaml=9=maintainers:\nDocumentation/devicetree/bindings/pwm/thead,th1520-pwm.yaml:10: - Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nDocumentation/devicetree/bindings/pwm/thead,th1520-pwm.yaml-11-\n--\nDocumentation/devicetree/bindings/reset/thead,th1520-reset.yaml=13=maintainers:\nDocumentation/devicetree/bindings/reset/thead,th1520-reset.yaml:14: - Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nDocumentation/devicetree/bindings/reset/thead,th1520-reset.yaml-15-\n--\nMAINTAINERS=20820=M:\tManivannan Sadhasivam \u003cmani@kernel.org\u003e\nMAINTAINERS:20821:M:\tKrzysztof Wilczyński \u003ckwilczynski@kernel.org\u003e\nMAINTAINERS-20822-R:\tKishon Vijay Abraham I \u003ckishon@kernel.org\u003e\n--\nMAINTAINERS=20871=M:\tLorenzo Pieralisi \u003clpieralisi@kernel.org\u003e\nMAINTAINERS:20872:M:\tKrzysztof Wilczyński \u003ckwilczynski@kernel.org\u003e\nMAINTAINERS-20873-M:\tManivannan Sadhasivam \u003cmani@kernel.org\u003e\n--\nMAINTAINERS=20934=R:\tBjorn Helgaas \u003cbhelgaas@google.com\u003e\nMAINTAINERS:20935:R:\tKrzysztof Wilczyński \u003ckwilczynski@kernel.org\u003e\nMAINTAINERS-20936-L:\tlinux-pci@vger.kernel.org\n--\nMAINTAINERS=21860=PWM SUBSYSTEM BINDINGS [RUST]\nMAINTAINERS:21861:M:\tMichal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nMAINTAINERS-21862-L:\tlinux-pwm@vger.kernel.org\n--\nMAINTAINERS=21868=PWM SUBSYSTEM DRIVERS [RUST]\nMAINTAINERS:21869:R:\tMichal Wilczynski \u003cm.wilczynski@samsung.com\u003e\nMAINTAINERS-21870-F:\tdrivers/pwm/*.rs\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi=42=\twifi_pwrseq: wifi_pwrseq {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:43:\t\tcompatible = \"mmc-pwrseq-wilc1000\";\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-44-\t\treset-gpios = \u003c\u0026pioA PIN_PA27 GPIO_ACTIVE_HIGH\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-45-\t\tpowerdown-gpios = \u003c\u0026pioA PIN_PA29 GPIO_ACTIVE_HIGH\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:46:\t\tpinctrl-0 = \u003c\u0026pinctrl_wilc_pwrseq\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-47-\t\tpinctrl-names = \"default\";\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi=347=\t\tconf-ck {\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-352-\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:353:\tpinctrl_wilc_default: wilc_default {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-354-\t\tconf-irq {\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-359-\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:360:\tpinctrl_wilc_pwrseq: wilc_pwrseq {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-361-\t\tconf-ce-nrst {\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi=374=\u0026sdmmc1 {\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-385-\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:386:\twilc: wifi@0 {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-387-\t\treg = \u003c0\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:388:\t\tcompatible = \"microchip,wilc3000\", \"microchip,wilc1000\";\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-389-\t\tpinctrl-names = \"default\";\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:390:\t\tpinctrl-0 = \u003c\u0026pinctrl_wilc_default\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-391-\t\tclocks = \u003c\u0026pmc PMC_TYPE_SYSTEM 9\u003e;\n--\narch/arm/boot/dts/microchip/at91-sama5d2_icp.dts=706=\u0026qspi1 {\n--\narch/arm/boot/dts/microchip/at91-sama5d2_icp.dts-708-\tpinctrl-0 = \u003c\u0026pinctrl_qspi1_default\u003e;\narch/arm/boot/dts/microchip/at91-sama5d2_icp.dts:709:\tstatus = \"disabled\"; /* Conflict with wilc_pwrseq, flx2 */\narch/arm/boot/dts/microchip/at91-sama5d2_icp.dts-710-\n--\ndrivers/firmware/thead,th1520-aon.c-4- * Copyright (c) 2024 Samsung Electronics Co., Ltd.\ndrivers/firmware/thead,th1520-aon.c:5: * Author: Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\ndrivers/firmware/thead,th1520-aon.c-6- */\n--\ndrivers/firmware/thead,th1520-aon.c=245=EXPORT_SYMBOL_GPL(th1520_aon_deinit);\ndrivers/firmware/thead,th1520-aon.c-246-\ndrivers/firmware/thead,th1520-aon.c:247:MODULE_AUTHOR(\"Michal Wilczynski \u003cm.wilczynski@samsung.com\u003e\");\ndrivers/firmware/thead,th1520-aon.c-248-MODULE_DESCRIPTION(\"T-HEAD TH1520 Always-On firmware protocol library\");\n--\ndrivers/mmc/core/pwrseq_sd8787.c=45=static void mmc_pwrseq_sd8787_power_off(struct mmc_host *host)\n--\ndrivers/mmc/core/pwrseq_sd8787.c-52-\ndrivers/mmc/core/pwrseq_sd8787.c:53:static void mmc_pwrseq_wilc1000_pre_power_on(struct mmc_host *host)\ndrivers/mmc/core/pwrseq_sd8787.c-54-{\n--\ndrivers/mmc/core/pwrseq_sd8787.c-62-\ndrivers/mmc/core/pwrseq_sd8787.c:63:static void mmc_pwrseq_wilc1000_power_off(struct mmc_host *host)\ndrivers/mmc/core/pwrseq_sd8787.c-64-{\n--\ndrivers/mmc/core/pwrseq_sd8787.c=71=static const struct mmc_pwrseq_ops mmc_pwrseq_sd8787_ops = {\n--\ndrivers/mmc/core/pwrseq_sd8787.c-75-\ndrivers/mmc/core/pwrseq_sd8787.c:76:static const struct mmc_pwrseq_ops mmc_pwrseq_wilc1000_ops = {\ndrivers/mmc/core/pwrseq_sd8787.c:77:\t.pre_power_on = mmc_pwrseq_wilc1000_pre_power_on,\ndrivers/mmc/core/pwrseq_sd8787.c:78:\t.power_off = mmc_pwrseq_wilc1000_power_off,\ndrivers/mmc/core/pwrseq_sd8787.c-79-};\n--\ndrivers/mmc/core/pwrseq_sd8787.c=81=static const struct of_device_id mmc_pwrseq_sd8787_of_match[] = {\ndrivers/mmc/core/pwrseq_sd8787.c-82-\t{ .compatible = \"mmc-pwrseq-sd8787\", .data = \u0026mmc_pwrseq_sd8787_ops },\ndrivers/mmc/core/pwrseq_sd8787.c:83:\t{ .compatible = \"mmc-pwrseq-wilc1000\", .data = \u0026mmc_pwrseq_wilc1000_ops },\ndrivers/mmc/core/pwrseq_sd8787.c-84-\t{/* sentinel */},\n--\ndrivers/net/wireless/microchip/Kconfig=13=if WLAN_VENDOR_MICROCHIP\ndrivers/net/wireless/microchip/Kconfig:14:source \"drivers/net/wireless/microchip/wilc1000/Kconfig\"\ndrivers/net/wireless/microchip/Kconfig-15-endif # WLAN_VENDOR_MICROCHIP\n--\ndrivers/net/wireless/microchip/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/Makefile:2:obj-$(CONFIG_WILC1000)\t\t+= wilc1000/\n--\ndrivers/net/wireless/microchip/wilc1000/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/wilc1000/Makefile:2:obj-$(CONFIG_WILC1000) += wilc1000.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-3-\ndrivers/net/wireless/microchip/wilc1000/Makefile:4:wilc1000-objs := cfg80211.o netdev.o mon.o \\\ndrivers/net/wireless/microchip/wilc1000/Makefile-5-\t\t\thif.o wlan_cfg.o wlan.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-6-\ndrivers/net/wireless/microchip/wilc1000/Makefile:7:obj-$(CONFIG_WILC1000_SDIO) += wilc1000-sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:8:wilc1000-sdio-objs += sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-9-\ndrivers/net/wireless/microchip/wilc1000/Makefile:10:obj-$(CONFIG_WILC1000_SPI) += wilc1000-spi.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:11:wilc1000-spi-objs += spi.o\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=20=static const struct ieee80211_txrx_stypes\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:21:\twilc_wfi_cfg80211_mgmt_types[NUM_NL80211_IFTYPES] = {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-22-\t[NL80211_IFTYPE_STATION] = {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=52=static const struct wiphy_wowlan_support wowlan_support = {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-56-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:57:struct wilc_p2p_mgmt_data {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-58-\tint size;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-61-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:62:struct wilc_p2p_pub_act_frame {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-63-\tu8 category;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-71-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:72:struct wilc_vendor_specific_ie {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-73-\tu8 tag_number;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-79-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:80:struct wilc_attr_entry {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-81-\tu8 attr_type;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-85-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:86:struct wilc_attr_oper_ch {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-87-\tu8 attr_type;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-93-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:94:struct wilc_attr_ch_list {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-95-\tu8 attr_type;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-100-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:101:struct wilc_ch_list_elem {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-102-\tu8 op_class;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=107=static void cfg_scan_result(enum scan_event scan_event,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:108:\t\t\t struct wilc_rcvd_net_info *info,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:109:\t\t\t struct wilc_priv *priv)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-110-{\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=163=static void cfg_connect_result(enum conn_event conn_disconn_evt, u8 mac_status,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:164:\t\t\t struct wilc_priv *priv)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-165-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-166-\tstruct net_device *dev = priv-\u003edev;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:167:\tstruct wilc_vif *vif = netdev_priv(dev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:168:\tstruct wilc *wl = vif-\u003ewilc;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-169-\tstruct host_if_drv *wfi_drv = priv-\u003ehif_drv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:170:\tstruct wilc_conn_info *conn_info = \u0026wfi_drv-\u003econn_info;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-171-\tstruct wiphy *wiphy = dev-\u003eieee80211_ptr-\u003ewiphy;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-180-\t\t\tconnect_status = WLAN_STATUS_UNSPECIFIED_FAILURE;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:181:\t\t\twilc_wlan_set_bssid(priv-\u003edev, NULL, WILC_STATION_MODE);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-182-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-206-\t\teth_zero_addr(priv-\u003eassociated_bss);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:207:\t\twilc_wlan_set_bssid(priv-\u003edev, NULL, WILC_STATION_MODE);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-208-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-221-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:222:struct wilc_vif *wilc_get_wl_to_vif(struct wilc *wl)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-223-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:224:\tstruct wilc_vif *vif;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-225-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=233=static int set_channel(struct wiphy *wiphy,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-236-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:237:\tstruct wilc *wl = wiphy_priv(wiphy);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:238:\tstruct wilc_vif *vif;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-239-\tu32 channelnum;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-243-\tsrcu_idx = srcu_read_lock(\u0026wl-\u003esrcu);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:244:\tvif = wilc_get_wl_to_vif(wl);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-245-\tif (IS_ERR(vif)) {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-252-\twl-\u003eop_ch = channelnum;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:253:\tresult = wilc_set_mac_chnl_num(vif, channelnum);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-254-\tif (result)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=261=static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-262-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:263:\tstruct wilc_vif *vif = netdev_priv(request-\u003ewdev-\u003enetdev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:264:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-265-\tu32 i;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-287-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:288:\tret = wilc_scan(vif, WILC_FW_USER_SCAN, scan_type,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-289-\t\t\tscan_ch_list, cfg_scan_result, request);\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=299=static int connect(struct wiphy *wiphy, struct net_device *dev,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-301-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:302:\tstruct wilc_vif *vif = netdev_priv(dev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:303:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-304-\tstruct host_if_drv *wfi_drv = priv-\u003ehif_drv;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-395-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:396:\tjoin_params = wilc_parse_join_bss_param(bss, \u0026sme-\u003ecrypto);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-397-\tif (!join_params) {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-404-\tch = ieee80211_frequency_to_channel(bss-\u003echannel-\u003ecenter_freq);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:405:\tvif-\u003ewilc-\u003eop_ch = ch;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-406-\tif (vif-\u003eiftype != WILC_CLIENT_MODE)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:407:\t\tvif-\u003ewilc-\u003esta_ch = ch;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-408-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:409:\twilc_wlan_set_bssid(dev, bss-\u003ebssid, WILC_STATION_MODE);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-410-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-423-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:424:\tret = wilc_set_join_req(vif, bss-\u003ebssid, sme-\u003eie, sme-\u003eie_len);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-425-\tif (ret) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:426:\t\tnetdev_err(dev, \"wilc_set_join_req(): Error\\n\");\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-427-\t\tret = -ENOENT;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-428-\t\tif (vif-\u003eiftype != WILC_CLIENT_MODE)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:429:\t\t\tvif-\u003ewilc-\u003esta_ch = WILC_INVALID_CHANNEL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:430:\t\twilc_wlan_set_bssid(dev, NULL, WILC_STATION_MODE);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-431-\t\twfi_drv-\u003econn_info.conn_result = NULL;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=448=static int disconnect(struct wiphy *wiphy, struct net_device *dev,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-450-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:451:\tstruct wilc_vif *vif = netdev_priv(dev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:452:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:453:\tstruct wilc *wilc = vif-\u003ewilc;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-454-\tint ret;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-457-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:458:\tif (!wilc)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-459-\t\treturn -EIO;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-460-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:461:\tif (wilc-\u003eclose) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-462-\t\t/* already disconnected done */\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-467-\tif (vif-\u003eiftype != WILC_CLIENT_MODE)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:468:\t\twilc-\u003esta_ch = WILC_INVALID_CHANNEL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:469:\twilc_wlan_set_bssid(priv-\u003edev, NULL, WILC_STATION_MODE);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-470-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-472-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:473:\tret = wilc_disconnect(vif);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-474-\tif (ret != 0) {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-483-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:484:static int wilc_wfi_cfg_allocate_wpa_entry(struct wilc_priv *priv, u8 idx)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-485-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:486:\tif (!priv-\u003ewilc_gtk[idx]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:487:\t\tpriv-\u003ewilc_gtk[idx] = kzalloc_obj(*priv-\u003ewilc_gtk[idx]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:488:\t\tif (!priv-\u003ewilc_gtk[idx])\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-489-\t\t\treturn -ENOMEM;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-491-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:492:\tif (!priv-\u003ewilc_ptk[idx]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:493:\t\tpriv-\u003ewilc_ptk[idx] = kzalloc_obj(*priv-\u003ewilc_ptk[idx]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:494:\t\tif (!priv-\u003ewilc_ptk[idx])\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-495-\t\t\treturn -ENOMEM;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-500-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:501:static int wilc_wfi_cfg_allocate_wpa_igtk_entry(struct wilc_priv *priv, u8 idx)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-502-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-503-\tidx -= 4;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:504:\tif (!priv-\u003ewilc_igtk[idx]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:505:\t\tpriv-\u003ewilc_igtk[idx] = kzalloc_obj(*priv-\u003ewilc_igtk[idx]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:506:\t\tif (!priv-\u003ewilc_igtk[idx])\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-507-\t\t\treturn -ENOMEM;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-511-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:512:static int wilc_wfi_cfg_copy_wpa_info(struct wilc_wfi_key *key_info,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-513-\t\t\t\t struct key_params *params)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=537=static int add_key(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-546-\tu8 op_mode;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:547:\tstruct wilc_vif *vif = netdev_priv(wdev-\u003enetdev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:548:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:549:\tstruct wilc_wfi_key *key;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-550-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-555-\t\t priv-\u003ewdev.iftype == NL80211_IFTYPE_P2P_GO) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:556:\t\t\tstruct wilc_wfi_key *key;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-557-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:558:\t\t\tret = wilc_wfi_cfg_allocate_wpa_entry(priv, key_index);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-559-\t\t\tif (ret)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-574-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:575:\t\t\t\tpriv-\u003ewilc_groupkey = mode;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-576-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:577:\t\t\t\tkey = priv-\u003ewilc_gtk[key_index];\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-578-\t\t\t} else {\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-581-\t\t\t\telse\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:582:\t\t\t\t\tmode = priv-\u003ewilc_groupkey | WILC_FW_AES;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-583-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:584:\t\t\t\tkey = priv-\u003ewilc_ptk[key_index];\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-585-\t\t\t}\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:586:\t\t\tret = wilc_wfi_cfg_copy_wpa_info(key, params);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-587-\t\t\tif (ret)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-602-\t\tif (!pairwise)\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:603:\t\t\tret = wilc_add_rx_gtk(vif, params-\u003ekey, keylen,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-604-\t\t\t\t\t key_index, params-\u003eseq_len,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-607-\t\telse\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:608:\t\t\tret = wilc_add_ptk(vif, params-\u003ekey, keylen, mac_addr,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-609-\t\t\t\t\t rx_mic, tx_mic, op_mode, mode,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-613-\tcase WLAN_CIPHER_SUITE_AES_CMAC:\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:614:\t\tret = wilc_wfi_cfg_allocate_wpa_igtk_entry(priv, key_index);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-615-\t\tif (ret)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-617-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:618:\t\tkey = priv-\u003ewilc_igtk[key_index - 4];\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:619:\t\tret = wilc_wfi_cfg_copy_wpa_info(key, params);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-620-\t\tif (ret)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-628-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:629:\t\tret = wilc_add_igtk(vif, params-\u003ekey, keylen, params-\u003eseq,\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-630-\t\t\t\t params-\u003eseq_len, mac_addr, op_mode,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=642=static int del_key(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-646-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:647:\tstruct wilc_vif *vif = netdev_priv(wdev-\u003enetdev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:648:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-649-\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-651-\t\tkey_index -= 4;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:652:\t\tif (priv-\u003ewilc_igtk[key_index]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:653:\t\t\tkfree(priv-\u003ewilc_igtk[key_index]-\u003ekey);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:654:\t\t\tpriv-\u003ewilc_igtk[key_index]-\u003ekey = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:655:\t\t\tkfree(priv-\u003ewilc_igtk[key_index]-\u003eseq);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:656:\t\t\tpriv-\u003ewilc_igtk[key_index]-\u003eseq = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:657:\t\t\tkfree(priv-\u003ewilc_igtk[key_index]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:658:\t\t\tpriv-\u003ewilc_igtk[key_index] = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-659-\t\t}\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-660-\t} else {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:661:\t\tif (priv-\u003ewilc_gtk[key_index]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:662:\t\t\tkfree(priv-\u003ewilc_gtk[key_index]-\u003ekey);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:663:\t\t\tpriv-\u003ewilc_gtk[key_index]-\u003ekey = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:664:\t\t\tkfree(priv-\u003ewilc_gtk[key_index]-\u003eseq);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:665:\t\t\tpriv-\u003ewilc_gtk[key_index]-\u003eseq = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-666-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:667:\t\t\tkfree(priv-\u003ewilc_gtk[key_index]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:668:\t\t\tpriv-\u003ewilc_gtk[key_index] = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-669-\t\t}\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:670:\t\tif (priv-\u003ewilc_ptk[key_index]) {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:671:\t\t\tkfree(priv-\u003ewilc_ptk[key_index]-\u003ekey);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:672:\t\t\tpriv-\u003ewilc_ptk[key_index]-\u003ekey = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:673:\t\t\tkfree(priv-\u003ewilc_ptk[key_index]-\u003eseq);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:674:\t\t\tpriv-\u003ewilc_ptk[key_index]-\u003eseq = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:675:\t\t\tkfree(priv-\u003ewilc_ptk[key_index]);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:676:\t\t\tpriv-\u003ewilc_ptk[key_index] = NULL;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-677-\t\t}\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=683=static int get_key(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-687-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:688:\tstruct wilc_vif *vif = netdev_priv(wdev-\u003enetdev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:689:\tstruct wilc_priv *priv = \u0026vif-\u003epriv;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-690-\tstruct key_params key_params;\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-694-\t\t\tkey_index -= 4;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:695:\t\t\tkey_params.key = priv-\u003ewilc_igtk[key_index]-\u003ekey;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:696:\t\t\tkey_params.cipher = priv-\u003ewilc_igtk[key_index]-\u003ecipher;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:697:\t\t\tkey_params.key_len = priv-\u003ewilc_igtk[key_index]-\u003ekey_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:698:\t\t\tkey_params.seq = priv-\u003ewilc_igtk[key_index]-\u003eseq;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:699:\t\t\tkey_params.seq_len = priv-\u003ewilc_igtk[key_index]-\u003eseq_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-700-\t\t} else {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:701:\t\t\tkey_params.key = priv-\u003ewilc_gtk[key_index]-\u003ekey;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:702:\t\t\tkey_params.cipher = priv-\u003ewilc_gtk[key_index]-\u003ecipher;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:703:\t\t\tkey_params.key_len = priv-\u003ewilc_gtk[key_index]-\u003ekey_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:704:\t\t\tkey_params.seq = priv-\u003ewilc_gtk[key_index]-\u003eseq;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:705:\t\t\tkey_params.seq_len = priv-\u003ewilc_gtk[key_index]-\u003eseq_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-706-\t\t}\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-707-\t} else {\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:708:\t\tkey_params.key = priv-\u003ewilc_ptk[key_index]-\u003ekey;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:709:\t\tkey_params.cipher = priv-\u003ewilc_ptk[key_index]-\u003ecipher;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:710:\t\tkey_params.key_len = priv-\u003ewilc_ptk[key_index]-\u003ekey_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:711:\t\tkey_params.seq = priv-\u003ewilc_ptk[key_index]-\u003eseq;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:712:\t\tkey_params.seq_len = priv-\u003ewilc_ptk[key_index]-\u003eseq_len;\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-713-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=728=static int set_default_mgmt_key(struct wiphy *wiphy, struct wireless_dev *wdev,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-730-{\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:731:\tstruct wilc_vif *vif = netdev_priv(wdev-\u003enetdev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-732-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:733:\treturn wilc_set_default_mgmt_key_index(vif, key_index);\n\n"
} |
| 13/2 | 2026/07/30 02:07 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 23374 output: 20 thoughts: 991 Thoughts: **Reaching the WILC1000 Driver in a Virtualized Environment** Okay, so I see `mmc-pwrseq-wilc1000` in the power sequence driver and the device tree instantiation for `microchip,wilc1000` in an ARM device description. This tells me it's an ARM-based SDIO/SPI Wi-Fi chip, managed via Device Tree. My initial thought is, can this even be reached in QEMU? Syzkaller usually struggles with Device Tree-instantiated hardware unless there's a mock or it's a generic subsystem. If the driver isn't loaded, like `wilc_wfi_mon_xmit`, then the code path would never execute. I'm checking, but I'm expecting this to only be SDIO/SPI. Syzkaller doesn't have native SDIO/SPI injection support. Wait, how did Syzkaller find a bug if I'm thinking this is unreachable? I need to check the commit message. "syz-cluster: applied patch under review". Ah! This wasn't a "found" bug, this was a patch testing request from a developer! Given this is a physical chip (WILC1000), it's probably *impossible* to reach in standard QEMU. QEMU doesn't emulate this specific Microchip chip. Syzkaller might run on ARM QEMU, but if the device isn't emulated, it's still unreachable, like the prompt says. The prompt specifically says to return false if the code paths are unreachable in standard QEMU. So, unless I find some kind of software emulation in the kernel, it's unreachable. I'll double-check for that, but I'm betting I won't find anything. |
| 14/2 | 2026/07/30 02:08 | tool | grepper |
0mArgs:{
"Expression": "wilc1000"
}Results: {
"Output": "Documentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml=12=properties:\n--\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml-15- - mmc-pwrseq-sd8787\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml:16: - mmc-pwrseq-wilc1000\nDocumentation/devicetree/bindings/mmc/mmc-pwrseq-sd8787.yaml-17-\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-3----\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:4:$id: http://devicetree.org/schemas/net/wireless/microchip,wilc1000.yaml#\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-5-$schema: http://devicetree.org/meta-schemas/core.yaml#\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=13=description:\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:14: The wilc1000 chips can be connected via SPI or SDIO. This document\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-15- describes the binding to connect wilc devices.\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=17=properties:\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-21- - const: microchip,wilc3000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:22: - const: microchip,wilc1000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:23: - const: microchip,wilc1000\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-24-\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-38- maxItems: 1\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:39: description: Used by wilc1000-spi to determine the GPIO line\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-40- connected to the ENABLE line. If specified, reset-gpios\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-47- maxItems: 1\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:48: description: Used by wilc1000-spi to determine the GPIO line\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-49- connected to the RESET line. This should be declared as an\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml=61=examples:\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-68- wifi@0 {\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:69: compatible = \"microchip,wilc1000\";\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-70- spi-max-frequency = \u003c48000000\u003e;\n--\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-91- wifi@0 {\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml:92: compatible = \"microchip,wilc1000\";\nDocumentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml-93- reg = \u003c0\u003e;\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi=42=\twifi_pwrseq: wifi_pwrseq {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:43:\t\tcompatible = \"mmc-pwrseq-wilc1000\";\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-44-\t\treset-gpios = \u003c\u0026pioA PIN_PA27 GPIO_ACTIVE_HIGH\u003e;\n--\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi=386=\twilc: wifi@0 {\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-387-\t\treg = \u003c0\u003e;\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi:388:\t\tcompatible = \"microchip,wilc3000\", \"microchip,wilc1000\";\narch/arm/boot/dts/microchip/at91-sama5d27_wlsom1.dtsi-389-\t\tpinctrl-names = \"default\";\n--\ndrivers/mmc/core/pwrseq_sd8787.c=45=static void mmc_pwrseq_sd8787_power_off(struct mmc_host *host)\n--\ndrivers/mmc/core/pwrseq_sd8787.c-52-\ndrivers/mmc/core/pwrseq_sd8787.c:53:static void mmc_pwrseq_wilc1000_pre_power_on(struct mmc_host *host)\ndrivers/mmc/core/pwrseq_sd8787.c-54-{\n--\ndrivers/mmc/core/pwrseq_sd8787.c-62-\ndrivers/mmc/core/pwrseq_sd8787.c:63:static void mmc_pwrseq_wilc1000_power_off(struct mmc_host *host)\ndrivers/mmc/core/pwrseq_sd8787.c-64-{\n--\ndrivers/mmc/core/pwrseq_sd8787.c=71=static const struct mmc_pwrseq_ops mmc_pwrseq_sd8787_ops = {\n--\ndrivers/mmc/core/pwrseq_sd8787.c-75-\ndrivers/mmc/core/pwrseq_sd8787.c:76:static const struct mmc_pwrseq_ops mmc_pwrseq_wilc1000_ops = {\ndrivers/mmc/core/pwrseq_sd8787.c:77:\t.pre_power_on = mmc_pwrseq_wilc1000_pre_power_on,\ndrivers/mmc/core/pwrseq_sd8787.c:78:\t.power_off = mmc_pwrseq_wilc1000_power_off,\ndrivers/mmc/core/pwrseq_sd8787.c-79-};\n--\ndrivers/mmc/core/pwrseq_sd8787.c=81=static const struct of_device_id mmc_pwrseq_sd8787_of_match[] = {\ndrivers/mmc/core/pwrseq_sd8787.c-82-\t{ .compatible = \"mmc-pwrseq-sd8787\", .data = \u0026mmc_pwrseq_sd8787_ops },\ndrivers/mmc/core/pwrseq_sd8787.c:83:\t{ .compatible = \"mmc-pwrseq-wilc1000\", .data = \u0026mmc_pwrseq_wilc1000_ops },\ndrivers/mmc/core/pwrseq_sd8787.c-84-\t{/* sentinel */},\n--\ndrivers/net/wireless/microchip/Kconfig=13=if WLAN_VENDOR_MICROCHIP\ndrivers/net/wireless/microchip/Kconfig:14:source \"drivers/net/wireless/microchip/wilc1000/Kconfig\"\ndrivers/net/wireless/microchip/Kconfig-15-endif # WLAN_VENDOR_MICROCHIP\n--\ndrivers/net/wireless/microchip/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/Makefile:2:obj-$(CONFIG_WILC1000)\t\t+= wilc1000/\n--\ndrivers/net/wireless/microchip/wilc1000/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/wilc1000/Makefile:2:obj-$(CONFIG_WILC1000) += wilc1000.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-3-\ndrivers/net/wireless/microchip/wilc1000/Makefile:4:wilc1000-objs := cfg80211.o netdev.o mon.o \\\ndrivers/net/wireless/microchip/wilc1000/Makefile-5-\t\t\thif.o wlan_cfg.o wlan.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-6-\ndrivers/net/wireless/microchip/wilc1000/Makefile:7:obj-$(CONFIG_WILC1000_SDIO) += wilc1000-sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:8:wilc1000-sdio-objs += sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-9-\ndrivers/net/wireless/microchip/wilc1000/Makefile:10:obj-$(CONFIG_WILC1000_SPI) += wilc1000-spi.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:11:wilc1000-spi-objs += spi.o\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=1849=int wilc_cfg80211_register(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1851-\t/* WPA3/SAE supported only on WILC1000 */\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:1852:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1853-\t\twilc-\u003ewiphy-\u003efeatures |= NL80211_FEATURE_SAE;\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-21-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:22:#define WILC1000_FW_PREFIX\t\t\"atmel/wilc1000_wifi_firmware-\"\ndrivers/net/wireless/microchip/wilc1000/netdev.c-23-#define __WILC1000_FW(api)\t\tWILC1000_FW_PREFIX #api \".bin\"\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=200=static int wilc_wlan_get_firmware(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-207-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:208:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/netdev.c-209-\t\tfirmware = WILC1000_FW(WILC1000_API_VER);\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-215-\tnetdev_info(dev, \"WILC%d loading firmware [%s]\\n\",\ndrivers/net/wireless/microchip/wilc1000/netdev.c:216:\t\t is_wilc1000(wilc-\u003echipid) ? 1000 : 3000,\ndrivers/net/wireless/microchip/wilc1000/netdev.c-217-\t\t firmware);\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=456=static void wilc_wlan_deinitialize(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-466-\tif (wl-\u003einitialized) {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:467:\t\tnetdev_info(dev, \"Deinitializing wilc1000...\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-468-\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-484-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:485:\t\tnetdev_dbg(dev, \"wilc1000 deinitialization Done\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-486-\t} else {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:487:\t\tnetdev_dbg(dev, \"wilc1000 is not initialized\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-488-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=508=static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-583-\t} else {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:584:\t\tnetdev_dbg(dev, \"wilc1000 already initialized\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-585-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=787=static int wilc_mac_close(struct net_device *ndev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-806-\tif (wl-\u003eopen_ifcs == 0) {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:807:\t\tnetdev_dbg(ndev, \"Deinitializing wilc1000\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-808-\t\twl-\u003eclose = 1;\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-16-\ndrivers/net/wireless/microchip/wilc1000/sdio.c:17:#define SDIO_MODALIAS \"wilc1000_sdio\"\ndrivers/net/wireless/microchip/wilc1000/sdio.c-18-\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=800=static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status)\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-817-\t\tcmd.function = 0;\ndrivers/net/wireless/microchip/wilc1000/sdio.c:818:\t\tcmd.address = is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/sdio.c-819-\t\t\t WILC1000_SDIO_IRQ_FLAG_REG :\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-828-\tif (sdio_priv-\u003eirq_gpio)\ndrivers/net/wireless/microchip/wilc1000/sdio.c:829:\t\tirq_flags \u0026= is_wilc1000(wilc-\u003echipid) ? 0x1f : 0x0f;\ndrivers/net/wireless/microchip/wilc1000/sdio.c-830-\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=842=static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val)\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-851-\ndrivers/net/wireless/microchip/wilc1000/sdio.c:852:\tif (is_wilc1000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/sdio.c-853-\t\t/* select VMM table 0 */\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-898-\t\tcmd.raw = 0;\ndrivers/net/wireless/microchip/wilc1000/sdio.c:899:\t\tcmd.address = is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/sdio.c-900-\t\t\t WILC1000_SDIO_IRQ_CLEAR_FLAG_REG :\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=1052=static const struct of_device_id wilc_of_match[] = {\ndrivers/net/wireless/microchip/wilc1000/sdio.c:1053:\t{ .compatible = \"microchip,wilc1000\", },\ndrivers/net/wireless/microchip/wilc1000/sdio.c-1054-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c-15-\ndrivers/net/wireless/microchip/wilc1000/spi.c:16:#define SPI_MODALIAS\t\t\"wilc1000_spi\"\ndrivers/net/wireless/microchip/wilc1000/spi.c-17-\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=294=static const struct of_device_id wilc_of_match[] = {\ndrivers/net/wireless/microchip/wilc1000/spi.c:295:\t{ .compatible = \"microchip,wilc1000\", },\ndrivers/net/wireless/microchip/wilc1000/spi.c-296-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=300=static const struct spi_device_id wilc_spi_id[] = {\ndrivers/net/wireless/microchip/wilc1000/spi.c:301:\t{ \"wilc1000\", 0 },\ndrivers/net/wireless/microchip/wilc1000/spi.c-302-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=1227=static int wilc_validate_chipid(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c-1240-\t}\ndrivers/net/wireless/microchip/wilc1000/spi.c:1241:\tif (!is_wilc1000(chipid) \u0026\u0026 !is_wilc3000(chipid)) {\ndrivers/net/wireless/microchip/wilc1000/spi.c-1242-\t\tdev_err(\u0026spi-\u003edev, \"Unknown chip id 0x%x\\n\", chipid);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=530=static struct rxq_entry_t *wilc_wlan_rxq_remove(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-543-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:544:static int chip_allow_sleep_wilc1000(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-545-{\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=630=static int chip_allow_sleep(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-631-{\ndrivers/net/wireless/microchip/wilc1000/wlan.c:632:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/wlan.c:633:\t\treturn chip_allow_sleep_wilc1000(wilc);\ndrivers/net/wireless/microchip/wilc1000/wlan.c-634-\telse\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-637-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:638:static int chip_wakeup_wilc1000(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-639-{\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=760=static int chip_wakeup(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-761-{\ndrivers/net/wireless/microchip/wilc1000/wlan.c:762:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/wlan.c:763:\t\treturn chip_wakeup_wilc1000(wilc);\ndrivers/net/wireless/microchip/wilc1000/wlan.c-764-\telse\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=793=int host_wakeup_notify(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-799-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:800:\twilc-\u003ehif_func-\u003ehif_write_reg(wilc, is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/wlan.c-801-\t\t\t\t\t WILC1000_CORTUS_INTERRUPT_2 :\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=807=int host_sleep_notify(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-813-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:814:\twilc-\u003ehif_func-\u003ehif_write_reg(wilc, is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/wlan.c-815-\t\t\t\t\t WILC1000_CORTUS_INTERRUPT_1 :\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=821=int wilc_wlan_handle_txq(struct wilc *wilc, u32 *txq_count)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-950-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:951:\t\tif (is_wilc1000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-952-\t\t\tret = func-\u003ehif_write_reg(wilc, WILC_HOST_VMM_CTL, 0x2);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=1591=int wilc_get_chipid(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1602-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:1603:\t\t\tif (!is_wilc1000(chipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1604-\t\t\t\twilc-\u003echipid = 0;\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=1737=int wilc_wlan_init(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1760-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:1761:\t\tif (!is_wilc1000(wilc-\u003echipid) \u0026\u0026 !is_wilc3000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1762-\t\t\tnetdev_err(dev, \"Unsupported chipid: %x\\n\", wilc-\u003echipid);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.h=433=struct wilc_vif;\ndrivers/net/wireless/microchip/wilc1000/wlan.h-434-\ndrivers/net/wireless/microchip/wilc1000/wlan.h:435:static inline bool is_wilc1000(u32 id)\ndrivers/net/wireless/microchip/wilc1000/wlan.h-436-{\n"
} |
| 15/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 31769 output: 20 thoughts: 117 Thoughts: **Analyzing the `is_wilc1000()` Check** Okay, I'm seeing this `is_wilc1000()` check... let me step back and think this through. Is *this* the only way we get to this part of the code? My immediate thought is, are there other potential entry points, other scenarios that can trigger this? Ah, I know! Syzkaller! If Syzkaller is running on ARM QEMU, and the device tree specifically *includes* something like `microchip,wilc1000`, the driver *could* be probed. However, hang on... the probe itself needs the hardware. It needs to communicate, either SPI or SDIO. Now, if there's *no* actual hardware present – which is likely in this simulated environment – the probe *should* fail, right? So, let's just make absolutely sure by checking for `wilc_sdio_probe` or `wilc_spi_probe`. I need to confirm those potential probe paths for a complete picture. |
| 16/2 | 2026/07/30 02:08 | tool | grepper |
0mError:no matches Args: {
"Expression": "wilc_spi_probe"
}Results: {
"error": "no matches"
} |
| 17/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 32146 output: 21 thoughts: 22 Thoughts: Here's my thought process, as if I were the one thinking it: **Digging into the Wi-Fi Driver** Okay, so I need to figure out where this issue might be stemming from. The problem sounds like a resource initialization or de-initialization problem so let's check the `wilc_mac_close` function first. It's the logical place to start looking at where the connection ends. If it isn't the problem, my next step is `wilc_wlan_init`. I'll want to see how the connection is set up in the first place, or if there is an error in initialization. One of those seems like the likeliest candidate for the root of the problem. |
| 18/2 | 2026/07/30 02:08 | tool | grepper |
0mArgs:{
"Expression": "wilc_wlan_init"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/netdev.c=491=static int wlan_initialize_threads(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-507-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:508:static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)\ndrivers/net/wireless/microchip/wilc1000/netdev.c-509-{\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-516-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:517:\t\tret = wilc_wlan_init(dev);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-518-\t\tif (ret)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=597=static int wilc_mac_open(struct net_device *ndev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-614-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:615:\tret = wilc_wlan_initialize(ndev, vif);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-616-\tif (ret) {\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=1735=EXPORT_SYMBOL_GPL(wilc_load_mac_from_nv);\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1736-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:1737:int wilc_wlan_init(struct net_device *dev)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1738-{\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.h=470=int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids,\ndrivers/net/wireless/microchip/wilc1000/wlan.h-471-\t\t\t u32 count);\ndrivers/net/wireless/microchip/wilc1000/wlan.h:472:int wilc_wlan_init(struct net_device *dev);\ndrivers/net/wireless/microchip/wilc1000/wlan.h-473-int wilc_get_chipid(struct wilc *wilc);\n"
} |
| 19/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 33066 output: 21 thoughts: 52 Thoughts: **Tracing the Driver Initialization** Okay, let's see... *`wilc_wlan_init`* is being called from *`wilc_mac_open`*. Right, and *`wilc_mac_open`* is our *`ndo_open`* function. That makes sense, that's where the device would get initialized when the interface is brought up. But, I'm trying to recall *how* the net device itself gets registered with the kernel. I need to make sure I understand the whole picture. I'm going to quickly check *`wilc_netdev_init`*. That's the logical next place to look for the netdev registration. |
| 20/2 | 2026/07/30 02:08 | tool | grepper |
0mError:no matches Args: {
"Expression": "wilc_netdev_init"
}Results: {
"error": "no matches"
} |
| 21/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 33302 output: 18 thoughts: 36 Thoughts: Okay, here's my summary, taking on the persona you requested: **Digging into the WILC1000 Driver** Alright, let's get down to it. Given the nature of this inquiry, I'm thinking the likely area for examination regarding this specific wireless driver is within the microchip/wilc1000 directory, specifically within the overall networking infrastructure. I need to understand how this device is getting registered within the kernel. My initial instinct is to check the `register_netdev` or `register_netdevice` calls within that driver code. Those functions are the bread and butter for bringing a network interface online, so that’s where I'll begin my investigation. Let's see what we can find there. |
| 22/2 | 2026/07/30 02:08 | tool | grepper |
0mArgs:{
"Expression": "register_netdev"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 9046 lines.\nUse more precise expression if possible.\n\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst=197=The following sequence is an example of the pcnet32 device driver::\n--\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst-227- calls\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst:228: unregister_netdev() // in /net/core/dev.c\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst-229- {\n--\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst=249=which calls struct pci_driver-\u003eremove() which is pcnet32_remove_one()\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst:250:which calls unregister_netdev() (in net/core/dev.c)\nDocumentation/arch/powerpc/eeh-pci-error-recovery.rst-251-which calls dev_close() (in net/core/dev.c)\n--\nDocumentation/driver-api/driver-model/devres.rst=379=NET\n--\nDocumentation/driver-api/driver-model/devres.rst-381- devm_alloc_etherdev_mqs()\nDocumentation/driver-api/driver-model/devres.rst:382: devm_register_netdev()\nDocumentation/driver-api/driver-model/devres.rst-383-\n--\nDocumentation/networking/driver.rst=28=Auto-close\n--\nDocumentation/networking/driver.rst-30-\nDocumentation/networking/driver.rst:31:The ndo_stop routine will be called by unregister_netdevice\nDocumentation/networking/driver.rst-32-if device is still UP.\n--\nDocumentation/networking/multiqueue.rst=24=device is still operational. netdev-\u003equeue_lock is still used when the device\nDocumentation/networking/multiqueue.rst:25:comes online or when it's completely shut down (unregister_netdev(), etc.).\nDocumentation/networking/multiqueue.rst-26-\n--\nDocumentation/networking/netdevices.rst=28=First group can be used in normal contexts where ``rtnl_lock`` is not already\nDocumentation/networking/netdevices.rst:29:held: register_netdev(), unregister_netdev().\nDocumentation/networking/netdevices.rst-30-Second group can be used when ``rtnl_lock`` is already held:\nDocumentation/networking/netdevices.rst:31:register_netdevice(), unregister_netdevice(), free_netdev().\nDocumentation/networking/netdevices.rst-32-\n--\nDocumentation/networking/netdevices.rst=39=In that case the struct net_device registration is done using\nDocumentation/networking/netdevices.rst:40:the register_netdev(), and unregister_netdev() functions:\nDocumentation/networking/netdevices.rst-41-\n--\nDocumentation/networking/netdevices.rst-53-\nDocumentation/networking/netdevices.rst:54: /* ... do all device setup before calling register_netdev() ...\nDocumentation/networking/netdevices.rst-55- */\nDocumentation/networking/netdevices.rst-56-\nDocumentation/networking/netdevices.rst:57: err = register_netdev(dev);\nDocumentation/networking/netdevices.rst-58- if (err)\n--\nDocumentation/networking/netdevices.rst-71- {\nDocumentation/networking/netdevices.rst:72: unregister_netdev(dev);\nDocumentation/networking/netdevices.rst-73- free_netdev(dev);\n--\nDocumentation/networking/netdevices.rst-75-\nDocumentation/networking/netdevices.rst:76:Note that after calling register_netdev() the device is visible in the system.\nDocumentation/networking/netdevices.rst-77-Users can open it and start sending / receiving traffic immediately,\n--\nDocumentation/networking/netdevices.rst=79=registration.\nDocumentation/networking/netdevices.rst-80-\nDocumentation/networking/netdevices.rst:81:unregister_netdev() closes the device and waits for all users to be done\nDocumentation/networking/netdevices.rst-82-with it. The memory of struct net_device itself may still be referenced\nDocumentation/networking/netdevices.rst=83=by sysfs but all operations on that device will fail.\nDocumentation/networking/netdevices.rst-84-\nDocumentation/networking/netdevices.rst:85:free_netdev() can be called after unregister_netdev() returns or when\nDocumentation/networking/netdevices.rst:86:register_netdev() failed.\nDocumentation/networking/netdevices.rst-87-\n--\nDocumentation/networking/netdevices.rst=96=Example flow of netdev handling under ``rtnl_lock``:\n--\nDocumentation/networking/netdevices.rst-135-\nDocumentation/networking/netdevices.rst:136: err = register_netdevice(dev);\nDocumentation/networking/netdevices.rst-137- if (err)\nDocumentation/networking/netdevices.rst:138: /* register_netdevice() calls destructor on failure */\nDocumentation/networking/netdevices.rst-139- goto err_free_dev;\nDocumentation/networking/netdevices.rst-140-\nDocumentation/networking/netdevices.rst:141: /* If anything fails now unregister_netdevice() (or unregister_netdev())\nDocumentation/networking/netdevices.rst-142- * will take care of calling my_destructor and free_netdev().\n--\nDocumentation/networking/netdevices.rst=154=If struct net_device.priv_destructor is set it will be called by the core\nDocumentation/networking/netdevices.rst:155:some time after unregister_netdevice(), it will also be called if\nDocumentation/networking/netdevices.rst:156:register_netdevice() fails. The callback may be invoked with or without\nDocumentation/networking/netdevices.rst-157-``rtnl_lock`` held.\n--\nDocumentation/networking/netdevices.rst=162=Setting struct net_device.needs_free_netdev makes core call free_netdev()\nDocumentation/networking/netdevices.rst:163:automatically after unregister_netdevice() when all references to the device\nDocumentation/networking/netdevices.rst:164:are gone. It only takes effect after a successful call to register_netdevice()\nDocumentation/networking/netdevices.rst:165:so if register_netdevice() fails driver is responsible for calling\nDocumentation/networking/netdevices.rst-166-free_netdev().\nDocumentation/networking/netdevices.rst-167-\nDocumentation/networking/netdevices.rst:168:free_netdev() is safe to call on error paths right after unregister_netdevice()\nDocumentation/networking/netdevices.rst:169:or when register_netdevice() fails. Parts of netdev (de)registration process\nDocumentation/networking/netdevices.rst-170-happen after ``rtnl_lock`` is released, therefore in those cases free_netdev()\n--\nDocumentation/networking/switchdev.rst=85=On switchdev driver initialization, the driver will allocate and register a\nDocumentation/networking/switchdev.rst:86:struct net_device (using register_netdev()) for each enumerated physical switch\nDocumentation/networking/switchdev.rst-87-port, called the port netdev. A port netdev is the software representation of\n--\nDocumentation/networking/xfrm/xfrm_device.rst=97=Flow\n--\nDocumentation/networking/xfrm/xfrm_device.rst-99-\nDocumentation/networking/xfrm/xfrm_device.rst:100:At probe time and before the call to register_netdev(), the driver should\nDocumentation/networking/xfrm/xfrm_device.rst-101-set up local data structures and XFRM callbacks, and set the feature bits.\n--\narch/m68k/emu/nfeth.c=185=static struct net_device * __init nfeth_probe(int unit)\n--\narch/m68k/emu/nfeth.c-207-\narch/m68k/emu/nfeth.c:208:\terr = register_netdev(dev);\narch/m68k/emu/nfeth.c-209-\tif (err) {\n--\narch/m68k/emu/nfeth.c=251=static void __exit nfeth_cleanup(void)\n--\narch/m68k/emu/nfeth.c-256-\t\tif (nfeth_dev[i]) {\narch/m68k/emu/nfeth.c:257:\t\t\tunregister_netdev(nfeth_dev[i]);\narch/m68k/emu/nfeth.c-258-\t\t\tfree_netdev(nfeth_dev[i]);\n--\narch/um/drivers/vector_kern.c=781=static int vector_remove(int n, char **error_out)\n--\narch/um/drivers/vector_kern.c-793-\t\treturn -EBUSY;\narch/um/drivers/vector_kern.c:794:\tunregister_netdev(dev);\narch/um/drivers/vector_kern.c-795-\tplatform_device_unregister(\u0026vec_d-\u003epdev);\n--\narch/um/drivers/vector_kern.c=1574=static void vector_eth_configure(\n--\narch/um/drivers/vector_kern.c-1600-\t/* If this name ends up conflicting with an existing registered\narch/um/drivers/vector_kern.c:1601:\t * netdevice, that is OK, register_netdev{,ice}() will notice this\narch/um/drivers/vector_kern.c-1602-\t * and fail.\n--\narch/um/drivers/vector_kern.c-1649-\trtnl_lock();\narch/um/drivers/vector_kern.c:1650:\terr = register_netdevice(dev);\narch/um/drivers/vector_kern.c-1651-\trtnl_unlock();\n--\narch/xtensa/platforms/iss/network.c=479=static void iss_net_configure(int index, char *init)\n--\narch/xtensa/platforms/iss/network.c-500-\t * If this name ends up conflicting with an existing registered\narch/xtensa/platforms/iss/network.c:501:\t * netdevice, that is OK, register_netdev{,ice}() will notice this\narch/xtensa/platforms/iss/network.c-502-\t * and fail.\n--\narch/xtensa/platforms/iss/network.c-539-\trtnl_lock();\narch/xtensa/platforms/iss/network.c:540:\tif (register_netdevice(dev)) {\narch/xtensa/platforms/iss/network.c-541-\t\trtnl_unlock();\n--\ndrivers/firewire/net.c=1432=static int fwnet_probe(struct fw_unit *unit,\n--\ndrivers/firewire/net.c-1495-\ndrivers/firewire/net.c:1496:\tret = register_netdev(net);\ndrivers/firewire/net.c-1497-\tif (ret)\n--\ndrivers/firewire/net.c-1505-\tif (ret \u0026\u0026 allocated_netdev) {\ndrivers/firewire/net.c:1506:\t\tunregister_netdev(net);\ndrivers/firewire/net.c-1507-\t\tlist_del(\u0026dev-\u003edev_link);\n--\ndrivers/firewire/net.c=1552=static void fwnet_remove(struct fw_unit *unit)\n--\ndrivers/firewire/net.c-1565-\tif (list_empty(\u0026dev-\u003epeer_list)) {\ndrivers/firewire/net.c:1566:\t\tunregister_netdev(net);\ndrivers/firewire/net.c-1567-\n--\ndrivers/hsi/clients/ssi_protocol.c=1073=static int ssi_protocol_probe(struct device *dev)\n--\ndrivers/hsi/clients/ssi_protocol.c-1127-\tnetif_carrier_off(ssi-\u003enetdev);\ndrivers/hsi/clients/ssi_protocol.c:1128:\terr = register_netdev(ssi-\u003enetdev);\ndrivers/hsi/clients/ssi_protocol.c-1129-\tif (err \u003c 0) {\n--\ndrivers/hsi/clients/ssi_protocol.c=1150=static int ssi_protocol_remove(struct device *dev)\n--\ndrivers/hsi/clients/ssi_protocol.c-1155-\tlist_del(\u0026ssi-\u003elink);\ndrivers/hsi/clients/ssi_protocol.c:1156:\tunregister_netdev(ssi-\u003enetdev);\ndrivers/hsi/clients/ssi_protocol.c-1157-\tssip_free_cmds(ssi);\n--\ndrivers/infiniband/core/cma.c=5486=static int __init cma_init(void)\n--\ndrivers/infiniband/core/cma.c-5511-\tib_sa_register_client(\u0026sa_client);\ndrivers/infiniband/core/cma.c:5512:\tregister_netdevice_notifier(\u0026cma_nb);\ndrivers/infiniband/core/cma.c-5513-\tregister_netevent_notifier(\u0026cma_netevent_cb);\n--\ndrivers/infiniband/core/cma.c-5528-\tunregister_netevent_notifier(\u0026cma_netevent_cb);\ndrivers/infiniband/core/cma.c:5529:\tunregister_netdevice_notifier(\u0026cma_nb);\ndrivers/infiniband/core/cma.c-5530-\tib_sa_unregister_client(\u0026sa_client);\n--\ndrivers/infiniband/core/cma.c=5537=static void __exit cma_cleanup(void)\n--\ndrivers/infiniband/core/cma.c-5541-\tunregister_netevent_notifier(\u0026cma_netevent_cb);\ndrivers/infiniband/core/cma.c:5542:\tunregister_netdevice_notifier(\u0026cma_nb);\ndrivers/infiniband/core/cma.c-5543-\tib_sa_unregister_client(\u0026sa_client);\n--\ndrivers/infiniband/core/device.c=3035=static int __init ib_core_init(void)\n--\ndrivers/infiniband/core/device.c-3105-\ndrivers/infiniband/core/device.c:3106:\tregister_netdevice_notifier(\u0026nb_netdevice);\ndrivers/infiniband/core/device.c-3107-\n--\ndrivers/infiniband/core/device.c=3135=static void __exit ib_core_cleanup(void)\ndrivers/infiniband/core/device.c-3136-{\ndrivers/infiniband/core/device.c:3137:\tunregister_netdevice_notifier(\u0026nb_netdevice);\ndrivers/infiniband/core/device.c-3138-\troce_gid_mgmt_cleanup();\n--\ndrivers/infiniband/core/roce_gid_mgmt.c=918=int __init roce_gid_mgmt_init(void)\n--\ndrivers/infiniband/core/roce_gid_mgmt.c-931-\t */\ndrivers/infiniband/core/roce_gid_mgmt.c:932:\tregister_netdevice_notifier(\u0026nb_netdevice);\ndrivers/infiniband/core/roce_gid_mgmt.c-933-\n--\ndrivers/infiniband/core/roce_gid_mgmt.c=937=void __exit roce_gid_mgmt_cleanup(void)\n--\ndrivers/infiniband/core/roce_gid_mgmt.c-941-\tunregister_inetaddr_notifier(\u0026nb_inetaddr);\ndrivers/infiniband/core/roce_gid_mgmt.c:942:\tunregister_netdevice_notifier(\u0026nb_netdevice);\ndrivers/infiniband/core/roce_gid_mgmt.c-943-\t/* Ensure all gid deletion tasks complete before we go down,\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c=23=static struct bng_re_dev *bng_re_dev_add(struct auxiliary_device *adev,\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-44-\ndrivers/infiniband/hw/bng_re/bng_dev.c:45:static int bng_re_register_netdev(struct bng_re_dev *rdev)\ndrivers/infiniband/hw/bng_re/bng_dev.c-46-{\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c=276=static int bng_re_dev_init(struct bng_re_dev *rdev)\n--\ndrivers/infiniband/hw/bng_re/bng_dev.c-285-\t/* Registered a new RoCE device instance to netdev */\ndrivers/infiniband/hw/bng_re/bng_dev.c:286:\trc = bng_re_register_netdev(rdev);\ndrivers/infiniband/hw/bng_re/bng_dev.c-287-\tif (rc) {\n--\ndrivers/infiniband/hw/bnxt_re/main.c=514=static struct bnxt_ulp_ops bnxt_re_ulp_ops = {\n--\ndrivers/infiniband/hw/bnxt_re/main.c-521-\ndrivers/infiniband/hw/bnxt_re/main.c:522:static int bnxt_re_register_netdev(struct bnxt_re_dev *rdev)\ndrivers/infiniband/hw/bnxt_re/main.c-523-{\n--\ndrivers/infiniband/hw/bnxt_re/main.c=2182=static int bnxt_re_dev_init(struct bnxt_re_dev *rdev, u8 op_type)\n--\ndrivers/infiniband/hw/bnxt_re/main.c-2192-\t\t/* Registered a new RoCE device instance to netdev */\ndrivers/infiniband/hw/bnxt_re/main.c:2193:\t\trc = bnxt_re_register_netdev(rdev);\ndrivers/infiniband/hw/bnxt_re/main.c-2194-\t\tif (rc) {\n--\ndrivers/infiniband/hw/erdma/erdma_main.c=86=static int erdma_device_register(struct erdma_dev *dev)\n--\ndrivers/infiniband/hw/erdma/erdma_main.c-105-\tdev-\u003enetdev_nb.notifier_call = erdma_netdev_event;\ndrivers/infiniband/hw/erdma/erdma_main.c:106:\tret = register_netdevice_notifier(\u0026dev-\u003enetdev_nb);\ndrivers/infiniband/hw/erdma/erdma_main.c-107-\tif (ret) {\n--\ndrivers/infiniband/hw/erdma/erdma_main.c=615=static void erdma_ib_device_remove(struct pci_dev *pdev)\n--\ndrivers/infiniband/hw/erdma/erdma_main.c-618-\ndrivers/infiniband/hw/erdma/erdma_main.c:619:\tunregister_netdevice_notifier(\u0026dev-\u003enetdev_nb);\ndrivers/infiniband/hw/erdma/erdma_main.c-620-\tib_unregister_device(\u0026dev-\u003eibdev);\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c=846=int hns_roce_alloc_bond_grp(struct hns_roce_dev *hr_dev)\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c-878-\t\tbond_grp-\u003ebond_nb.notifier_call = hns_roce_bond_event;\ndrivers/infiniband/hw/hns/hns_roce_bond.c:879:\t\tret = register_netdevice_notifier(\u0026bond_grp-\u003ebond_nb);\ndrivers/infiniband/hw/hns/hns_roce_bond.c-880-\t\tif (ret) {\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c-896-\tfor (i--; i \u003e= 0; i--) {\ndrivers/infiniband/hw/hns/hns_roce_bond.c:897:\t\tunregister_netdevice_notifier(\u0026bgrps[i]-\u003ebond_nb);\ndrivers/infiniband/hw/hns/hns_roce_bond.c-898-\t\tcancel_delayed_work_sync(\u0026bgrps[i]-\u003ebond_work);\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c=906=void hns_roce_dealloc_bond_grp(void)\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c-917-\t\t\t\tcontinue;\ndrivers/infiniband/hw/hns/hns_roce_bond.c:918:\t\t\tunregister_netdevice_notifier(\u0026bond_grp-\u003ebond_nb);\ndrivers/infiniband/hw/hns/hns_roce_bond.c-919-\t\t\tcancel_delayed_work_sync(\u0026bond_grp-\u003ebond_work);\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c=949=void hns_roce_bond_suspend(struct hnae3_handle *handle)\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c-972-\t\t\tcontinue;\ndrivers/infiniband/hw/hns/hns_roce_bond.c:973:\t\tunregister_netdevice_notifier(\u0026bond_grp-\u003ebond_nb);\ndrivers/infiniband/hw/hns/hns_roce_bond.c-974-\t\tcancel_delayed_work_sync(\u0026bond_grp-\u003ebond_work);\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c=982=void hns_roce_bond_resume(struct hnae3_handle *handle)\n--\ndrivers/infiniband/hw/hns/hns_roce_bond.c-1002-\t\t\tcontinue;\ndrivers/infiniband/hw/hns/hns_roce_bond.c:1003:\t\tret = register_netdevice_notifier(\u0026bond_grp-\u003ebond_nb);\ndrivers/infiniband/hw/hns/hns_roce_bond.c-1004-\t\tif (ret)\n--\ndrivers/infiniband/hw/hns/hns_roce_main.c=702=static void hns_roce_unregister_device(struct hns_roce_dev *hr_dev,\n--\ndrivers/infiniband/hw/hns/hns_roce_main.c-716-\thr_dev-\u003eactive = false;\ndrivers/infiniband/hw/hns/hns_roce_main.c:717:\tunregister_netdevice_notifier(\u0026iboe-\u003enb);\ndrivers/infiniband/hw/hns/hns_roce_main.c-718-\tib_unregister_device(\u0026hr_dev-\u003eib_dev);\n--\ndrivers/infiniband/hw/hns/hns_roce_main.c=801=static int hns_roce_register_device(struct hns_roce_dev *hr_dev)\n--\ndrivers/infiniband/hw/hns/hns_roce_main.c-886-\tiboe-\u003enb.notifier_call = hns_roce_netdev_event;\ndrivers/infiniband/hw/hns/hns_roce_main.c:887:\tret = register_netdevice_notifier(\u0026iboe-\u003enb);\ndrivers/infiniband/hw/hns/hns_roce_main.c-888-\tif (ret) {\ndrivers/infiniband/hw/hns/hns_roce_main.c:889:\t\tdev_err(dev, \"register_netdevice_notifier failed!\\n\");\ndrivers/infiniband/hw/hns/hns_roce_main.c-890-\t\tgoto error_failed_setup_mtu_mac;\n--\ndrivers/infiniband/hw/irdma/main.c=26=static void irdma_register_notifiers(void)\n--\ndrivers/infiniband/hw/irdma/main.c-30-\tregister_netevent_notifier(\u0026irdma_net_notifier);\ndrivers/infiniband/hw/irdma/main.c:31:\tregister_netdevice_notifier(\u0026irdma_netdevice_notifier);\ndrivers/infiniband/hw/irdma/main.c-32-}\n--\ndrivers/infiniband/hw/irdma/main.c=34=static void irdma_unregister_notifiers(void)\n--\ndrivers/infiniband/hw/irdma/main.c-38-\tunregister_inet6addr_notifier(\u0026irdma_inetaddr6_notifier);\ndrivers/infiniband/hw/irdma/main.c:39:\tunregister_netdevice_notifier(\u0026irdma_netdevice_notifier);\ndrivers/infiniband/hw/irdma/main.c-40-}\n--\ndrivers/infiniband/hw/mana/device.c=116=static int mana_ib_probe(struct auxiliary_device *adev,\n--\ndrivers/infiniband/hw/mana/device.c-188-\t\tdev-\u003enb.notifier_call = mana_ib_netdev_event;\ndrivers/infiniband/hw/mana/device.c:189:\t\tret = register_netdevice_notifier(\u0026dev-\u003enb);\ndrivers/infiniband/hw/mana/device.c-190-\t\tif (ret) {\n--\ndrivers/infiniband/hw/mana/device.c-225-\tif (mana_ib_is_rnic(dev))\ndrivers/infiniband/hw/mana/device.c:226:\t\tunregister_netdevice_notifier(\u0026dev-\u003enb);\ndrivers/infiniband/hw/mana/device.c-227-destroy_rnic:\n--\ndrivers/infiniband/hw/mana/device.c=239=static void mana_ib_remove(struct auxiliary_device *adev)\n--\ndrivers/infiniband/hw/mana/device.c-248-\tif (mana_ib_is_rnic(dev)) {\ndrivers/infiniband/hw/mana/device.c:249:\t\tunregister_netdevice_notifier(\u0026dev-\u003enb);\ndrivers/infiniband/hw/mana/device.c-250-\t\tmana_ib_gd_destroy_rnic_adapter(dev);\n--\ndrivers/infiniband/hw/mlx4/main.c=2613=static int mlx4_ib_probe(struct auxiliary_device *adev,\n--\ndrivers/infiniband/hw/mlx4/main.c-2827-\t\tiboe-\u003enb.notifier_call = mlx4_ib_netdev_event;\ndrivers/infiniband/hw/mlx4/main.c:2828:\t\terr = register_netdevice_notifier(\u0026iboe-\u003enb);\ndrivers/infiniband/hw/mlx4/main.c-2829-\t\tif (err) {\n--\ndrivers/infiniband/hw/mlx4/main.c-2867-\tif (ibdev-\u003eiboe.nb.notifier_call) {\ndrivers/infiniband/hw/mlx4/main.c:2868:\t\tif (unregister_netdevice_notifier(\u0026ibdev-\u003eiboe.nb))\ndrivers/infiniband/hw/mlx4/main.c-2869-\t\t\tpr_warn(\"failure unregistering notifier\\n\");\n--\ndrivers/infiniband/hw/mlx4/main.c=2975=static void mlx4_ib_remove(struct auxiliary_device *adev)\n--\ndrivers/infiniband/hw/mlx4/main.c-2990-\tif (ibdev-\u003eiboe.nb.notifier_call) {\ndrivers/infiniband/hw/mlx4/main.c:2991:\t\tif (unregister_netdevice_notifier(\u0026ibdev-\u003eiboe.nb))\ndrivers/infiniband/hw/mlx4/main.c-2992-\t\t\tpr_warn(\"failure unregistering notifier\\n\");\n--\ndrivers/infiniband/hw/mlx5/main.c=3765=static void mlx5_netdev_notifier_register(struct mlx5_roce *roce,\n--\ndrivers/infiniband/hw/mlx5/main.c-3773-\troce-\u003enb.notifier_call = mlx5_netdev_event;\ndrivers/infiniband/hw/mlx5/main.c:3774:\terr = register_netdevice_notifier_dev_net(netdev, \u0026roce-\u003enb, \u0026roce-\u003enn);\ndrivers/infiniband/hw/mlx5/main.c-3775-\tWARN_ON(err);\n--\ndrivers/infiniband/hw/mlx5/main.c=3778=static void mlx5_netdev_notifier_unregister(struct mlx5_roce *roce)\n--\ndrivers/infiniband/hw/mlx5/main.c-3781-\t\treturn;\ndrivers/infiniband/hw/mlx5/main.c:3782:\tunregister_netdevice_notifier_dev_net(roce-\u003etracking_netdev, \u0026roce-\u003enb,\ndrivers/infiniband/hw/mlx5/main.c-3783-\t\t\t\t\t \u0026roce-\u003enn);\n--\ndrivers/infiniband/hw/usnic/usnic_ib_main.c=659=static int __init usnic_ib_init(void)\n--\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-670-\ndrivers/infiniband/hw/usnic/usnic_ib_main.c:671:\terr = register_netdevice_notifier(\u0026usnic_ib_netdevice_notifier);\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-672-\tif (err) {\n--\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-695-out_unreg_netdev_notifier:\ndrivers/infiniband/hw/usnic/usnic_ib_main.c:696:\tunregister_netdevice_notifier(\u0026usnic_ib_netdevice_notifier);\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-697-out_pci_unreg:\n--\ndrivers/infiniband/hw/usnic/usnic_ib_main.c=704=static void __exit usnic_ib_destroy(void)\n--\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-709-\tunregister_inetaddr_notifier(\u0026usnic_ib_inetaddr_notifier);\ndrivers/infiniband/hw/usnic/usnic_ib_main.c:710:\tunregister_netdevice_notifier(\u0026usnic_ib_netdevice_notifier);\ndrivers/infiniband/hw/usnic/usnic_ib_main.c-711-\tpci_unregister_driver(\u0026usnic_ib_pci_driver);\n--\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c=764=static int pvrdma_pci_probe(struct pci_dev *pdev,\n--\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c-1015-\tdev-\u003enb_netdev.notifier_call = pvrdma_netdevice_event;\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c:1016:\tret = register_netdevice_notifier(\u0026dev-\u003enb_netdev);\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c-1017-\tif (ret) {\n--\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c=1063=static void pvrdma_pci_remove(struct pci_dev *pdev)\n--\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c-1071-\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c:1072:\tunregister_netdevice_notifier(\u0026dev-\u003enb_netdev);\ndrivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c-1073-\tdev-\u003enb_netdev.notifier_call = NULL;\n--\ndrivers/infiniband/sw/rxe/rxe_net.c=806=int rxe_register_notifier(void)\n--\ndrivers/infiniband/sw/rxe/rxe_net.c-809-\ndrivers/infiniband/sw/rxe/rxe_net.c:810:\terr = register_netdevice_notifier(\u0026rxe_net_notifier);\ndrivers/infiniband/sw/rxe/rxe_net.c-811-\tif (err) {\n--\ndrivers/infiniband/sw/rxe/rxe_net.c=819=void rxe_net_exit(void)\ndrivers/infiniband/sw/rxe/rxe_net.c-820-{\ndrivers/infiniband/sw/rxe/rxe_net.c:821:\tunregister_netdevice_notifier(\u0026rxe_net_notifier);\ndrivers/infiniband/sw/rxe/rxe_net.c-822-}\n--\ndrivers/infiniband/sw/siw/siw_main.c=446=static __init int siw_init_module(void)\n--\ndrivers/infiniband/sw/siw/siw_main.c-469-\ndrivers/infiniband/sw/siw/siw_main.c:470:\trv = register_netdevice_notifier(\u0026siw_netdev_nb);\ndrivers/infiniband/sw/siw/siw_main.c-471-\tif (rv)\n--\ndrivers/infiniband/sw/siw/siw_main.c=490=static void __exit siw_exit_module(void)\n--\ndrivers/infiniband/sw/siw/siw_main.c-493-\ndrivers/infiniband/sw/siw/siw_main.c:494:\tunregister_netdevice_notifier(\u0026siw_netdev_nb);\ndrivers/infiniband/sw/siw/siw_main.c-495-\trdma_link_unregister(\u0026siw_link_ops);\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=1852=static int ipoib_dev_init(struct net_device *dev)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-1920-/*\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:1921: * This must be called before doing an unregister_netdev on a parent device to\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-1922- * shutdown the IB event handler.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2204=void ipoib_setup_common(struct net_device *dev)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2225-\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2226:\t * unregister_netdev always frees the netdev, we use this mode\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2227-\t * consistently to unify all the various unregister paths, including\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2275=int ipoib_intf_init(struct ib_device *hca, u32 port, const char *name,\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2317-\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2318:\t * Only the child register_netdev flows can handle priv_destructor\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2319-\t * being set, so we force it to NULL here and handle manually until it\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2334=struct net_device *ipoib_intf_alloc(struct ib_device *hca, u32 port,\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2351-\t * Upon success the caller must ensure ipoib_intf_free is called or\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2352:\t * register_netdevice succeed'd and priv_destructor is set to\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2353-\t * ipoib_intf_free.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2358=void ipoib_intf_free(struct net_device *dev)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2367-\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2368:\t * There are some error flows around register_netdev failing that may\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2369-\t * attempt to call priv_destructor twice, prevent that from happening.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2583=static struct net_device *ipoib_add_port(const char *format,\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2610-\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2611:\tresult = register_netdev(ndev);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2612-\tif (result) {\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2631-\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2632:\t * We cannot set priv_destructor before register_netdev because we\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2633-\t * need priv to be always valid during the error flow to execute\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2655-\tipoib_parent_unregister_pre(ndev);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2656:\tunregister_netdev(ndev);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2657-\treturn ERR_PTR(-ENOMEM);\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2694=static void ipoib_remove_one(struct ib_device *device, void *client_data)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2707-\t\t\t\t\t list)\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2708:\t\t\tunregister_netdevice_queue(cpriv-\u003edev, \u0026head);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2709-\t\tnetdev_unlock(priv-\u003edev);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2710:\t\tunregister_netdevice_queue(priv-\u003edev, \u0026head);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2711:\t\tunregister_netdevice_many(\u0026head);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2712-\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2725=static int __init ipoib_init_module(void)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2775-#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2776:\tregister_netdevice_notifier(\u0026ipoib_netdev_notifier);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2777-#endif\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c=2793=static void __exit ipoib_cleanup_module(void)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2795-#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG\ndrivers/infiniband/ulp/ipoib/ipoib_main.c:2796:\tunregister_netdevice_notifier(\u0026ipoib_netdev_notifier);\ndrivers/infiniband/ulp/ipoib/ipoib_main.c-2797-#endif\n--\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c=100=static int ipoib_new_child_link(struct net_device *dev,\n--\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c-145-\t\tif (err) {\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c:146:\t\t\tunregister_netdevice(dev);\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c-147-\t\t\treturn err;\n--\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c=154=static void ipoib_del_child_link(struct net_device *dev, struct list_head *head)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c-160-\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c:161:\tunregister_netdevice_queue(dev, head);\ndrivers/infiniband/ulp/ipoib/ipoib_netlink.c-162-}\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c=97=int __ipoib_vlan_add(struct ipoib_dev_priv *ppriv, struct ipoib_dev_priv *priv,\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-104-\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:105:\t * We do not need to touch priv if register_netdevice fails, so just\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-106-\t * always use this flow.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-131-\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:132:\tresult = register_netdevice(ndev);\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-133-\tif (result) {\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-136-\t\t/*\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:137:\t\t * register_netdevice sometimes calls priv_destructor,\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-138-\t\t * sometimes not. Make sure it was done.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-158-sysfs_failed:\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:159:\tunregister_netdevice(priv-\u003edev);\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-160-\treturn -ENOMEM;\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c=215=struct ipoib_vlan_delete_work {\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-221- * sysfs callbacks of a netdevice cannot obtain the rtnl lock as\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:222: * unregister_netdev ultimately deletes the sysfs files while holding the rtnl\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-223- * lock. This deadlocks the system.\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-225- * A callback can use rtnl_trylock to avoid the deadlock but it cannot call\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:226: * unregister_netdev as that internally takes and releases the rtnl_lock. So\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-227- * instead we find the netdev to unregister and then do the actual unregister\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c=230=static void ipoib_vlan_delete_task(struct work_struct *work)\n--\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-243-\t\tipoib_dbg(ppriv, \"delete child vlan %s\\n\", dev-\u003ename);\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c:244:\t\tunregister_netdevice(dev);\ndrivers/infiniband/ulp/ipoib/ipoib_vlan.c-245-\t}\n--\ndrivers/leds/trigger/ledtrig-netdev.c=692=static int netdev_trig_activate(struct led_classdev *led_cdev)\n--\n\n"
} |
| 23/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 45485 output: 40 thoughts: 96 Thoughts: Okay, here's my summary, taking the role of the expert: **Investigating `register_netdev` in the wilc1000 Driver** Hmm, something's not quite right. I could have sworn I saw a reference to `register_netdev` when glancing through the `wilc1000` driver code, specifically in `drivers/net/wireless/microchip/wilc1000/netdev.c`. But the initial `grep` didn't turn it up. That's strange. Perhaps my memory is faulty, or maybe the first search missed something. Let's try a more focused approach. Instead of searching the whole kernel tree, I'll restrict the `grep` to just the `drivers/net/wireless/microchip/wilc1000/` directory. That should isolate the search to the relevant files and hopefully clear up this minor discrepancy. This should help me confirm whether `register_netdev` is actually used within this specific driver's source code, and if so, where and how. It's important to be precise when dealing with netdev registration, especially in a wireless context. |
| 24/2 | 2026/07/30 02:08 | tool | grepper |
0mArgs:{
"Expression": "register_netdev",
"PathPrefix": "drivers/net/wireless/microchip/wilc1000/"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/cfg80211.c=1592=static int del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1601-\tcfg80211_stop_iface(wiphy, wdev, GFP_KERNEL);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:1602:\tcfg80211_unregister_netdevice(vif-\u003endev);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1603-\tvif-\u003emonitor_flag = 0;\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c=237=struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-255-\ndrivers/net/wireless/microchip/wilc1000/mon.c:256:\tif (register_netdevice(wl-\u003emonitor_dev)) {\ndrivers/net/wireless/microchip/wilc1000/mon.c:257:\t\tnetdev_err(real_dev, \"register_netdevice failed\\n\");\ndrivers/net/wireless/microchip/wilc1000/mon.c-258-\t\tfree_netdev(wl-\u003emonitor_dev);\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c=268=void wilc_wfi_deinit_mon_interface(struct wilc *wl, bool rtnl_locked)\n--\ndrivers/net/wireless/microchip/wilc1000/mon.c-273-\tif (rtnl_locked)\ndrivers/net/wireless/microchip/wilc1000/mon.c:274:\t\tunregister_netdevice(wl-\u003emonitor_dev);\ndrivers/net/wireless/microchip/wilc1000/mon.c-275-\telse\ndrivers/net/wireless/microchip/wilc1000/mon.c:276:\t\tunregister_netdev(wl-\u003emonitor_dev);\ndrivers/net/wireless/microchip/wilc1000/mon.c-277-\twl-\u003emonitor_dev = NULL;\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=901=void wilc_netdev_cleanup(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-919-\t\tif (vif-\u003endev)\ndrivers/net/wireless/microchip/wilc1000/netdev.c:920:\t\t\tunregister_netdev(vif-\u003endev);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-921-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=948=struct wilc_vif *wilc_netdev_ifc_init(struct wilc *wl, const char *name,\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-999-\tif (rtnl_locked)\ndrivers/net/wireless/microchip/wilc1000/netdev.c:1000:\t\tret = cfg80211_register_netdevice(ndev);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-1001-\telse\ndrivers/net/wireless/microchip/wilc1000/netdev.c:1002:\t\tret = register_netdev(ndev);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-1003-\n"
} |
| 25/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 46886 output: 46 thoughts: 38 Thoughts: Okay, here's my take on those thoughts, framed as an expert's internal monologue: **Investigating the Network Device Initialization** Right, so `wilc_netdev_ifc_init`… that function calls `register_netdev`. Classic network device setup. Gotta be careful about where that's happening, especially with custom driver implementations. I'm wondering what is calling `wilc_netdev_ifc_init` in the first place. Need to trace its call stack to understand the broader initialization flow and see if there are any potential conflicts or dependencies. Gotta see what's setting things up for the device registration. |
| 26/2 | 2026/07/30 02:08 | tool | grepper |
0mArgs:{
"Expression": "wilc_netdev_ifc_init",
"PathPrefix": "drivers/net/wireless/microchip/wilc1000/"
}Results: {
"Output": "drivers/net/wireless/microchip/wilc1000/cfg80211.c=1522=static struct wireless_dev *add_virtual_intf(struct wiphy *wiphy,\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1584-\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:1585:\tvif = wilc_netdev_ifc_init(wl, name, iftype, type, true);\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1586-\tif (IS_ERR(vif))\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=931=static u8 wilc_get_available_idx(struct wilc *wl)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-947-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:948:struct wilc_vif *wilc_netdev_ifc_init(struct wilc *wl, const char *name,\ndrivers/net/wireless/microchip/wilc1000/netdev.c-949-\t\t\t\t int vif_type, enum nl80211_iftype type,\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-1019-}\ndrivers/net/wireless/microchip/wilc1000/netdev.c:1020:EXPORT_SYMBOL_GPL(wilc_netdev_ifc_init);\ndrivers/net/wireless/microchip/wilc1000/netdev.c-1021-\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.h=300=void wilc_wlan_set_bssid(struct net_device *wilc_netdev, const u8 *bssid,\ndrivers/net/wireless/microchip/wilc1000/netdev.h-301-\t\t\t u8 mode);\ndrivers/net/wireless/microchip/wilc1000/netdev.h:302:struct wilc_vif *wilc_netdev_ifc_init(struct wilc *wl, const char *name,\ndrivers/net/wireless/microchip/wilc1000/netdev.h-303-\t\t\t\t int vif_type, enum nl80211_iftype type,\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=139=static int wilc_sdio_probe(struct sdio_func *func,\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-200-\ndrivers/net/wireless/microchip/wilc1000/sdio.c:201:\tvif = wilc_netdev_ifc_init(wilc, \"wlan%d\", WILC_STATION_MODE,\ndrivers/net/wireless/microchip/wilc1000/sdio.c-202-\t\t\t\t NL80211_IFTYPE_STATION, false);\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=207=static int wilc_bus_probe(struct spi_device *spi)\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c-262-\twilc_wlan_power(wilc, false);\ndrivers/net/wireless/microchip/wilc1000/spi.c:263:\tvif = wilc_netdev_ifc_init(wilc, \"wlan%d\", WILC_STATION_MODE,\ndrivers/net/wireless/microchip/wilc1000/spi.c-264-\t\t\t\t NL80211_IFTYPE_STATION, false);\n"
} |
| 27/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 48126 output: 48 thoughts: 535 Thoughts: **Analyzing the Reachability of `wilc_netdev_ifc_init` in Syzkaller** Okay, so `wilc_netdev_ifc_init` is called from `wilc_sdio_probe` and `wilc_bus_probe`, meaning the driver's initialization hinges on either an SDIO or SPI probe. The crucial question is, can Syzkaller trigger these probes? Unfortunately, Syzkaller doesn't have direct functions like `syz_sdio_connect` or `syz_spi_connect` for injecting SDIO or SPI devices generically. But wait, it *does* have `syz_spi_setup`, which is a potential pathway. However, based on the prompt's instructions, I can't rely on my prior knowledge or external tools (like checking `drivers/spi/spi-loopback-test.c`). I need to make sure to only use tools provided to me to examine the code. The prompt specifically mentions that changes are already applied. Therefore, if Syzkaller *did* find a bug, it implies reachability. However, the prompt also says to return `WorthFuzzing=false` if the code paths are impossible to reach in virtualized environments like GCE or QEMU, even with software-emulated hardware. Since this is an SDIO/SPI driver for the WILC1000, and QEMU doesn't emulate the WILC1000 hardware, and there's no software-emulated equivalent (like mac80211_hwsim or usb gadget), it seems the code path is unreachable in virtualized setups. Although you can instantiate an SPI device via sysfs, the `wilc_bus_probe` function (in `drivers/net/wireless/microchip/wilc1000/spi.c`) will try to talk to the hardware. Therefore, the probe function would be unable to communicate with hardware. Consequently, the initialization would fail. So I'd need to consider that the code will be unreachable and return `WorthFuzzing=false`. |
| 28/2 | 2026/07/30 02:08 | tool | read-file |
0mArgs:{
"File": "drivers/net/wireless/microchip/wilc1000/spi.c",
"FirstLine": 207,
"LineCount": 100
}Results: {
"Contents": " 207:\tstatic int wilc_bus_probe(struct spi_device *spi)\n 208:\t{\n 209:\t\tstruct wilc_spi *spi_priv;\n 210:\t\tstruct wilc_vif *vif;\n 211:\t\tstruct wilc *wilc;\n 212:\t\tint ret;\n 213:\t\n 214:\t\tspi_priv = kzalloc_obj(*spi_priv);\n 215:\t\tif (!spi_priv)\n 216:\t\t\treturn -ENOMEM;\n 217:\t\n 218:\t\tret = wilc_cfg80211_init(\u0026wilc, \u0026spi-\u003edev, WILC_HIF_SPI, \u0026wilc_hif_spi);\n 219:\t\tif (ret)\n 220:\t\t\tgoto free;\n 221:\t\n 222:\t\tspi_set_drvdata(spi, wilc);\n 223:\t\twilc-\u003edev = \u0026spi-\u003edev;\n 224:\t\twilc-\u003ebus_data = spi_priv;\n 225:\t\twilc-\u003edev_irq_num = spi-\u003eirq;\n 226:\t\n 227:\t\tret = wilc_parse_gpios(wilc);\n 228:\t\tif (ret \u003c 0)\n 229:\t\t\tgoto netdev_cleanup;\n 230:\t\n 231:\t\twilc-\u003ertc_clk = devm_clk_get_optional_enabled(\u0026spi-\u003edev, \"rtc\");\n 232:\t\tif (IS_ERR(wilc-\u003ertc_clk)) {\n 233:\t\t\tret = PTR_ERR(wilc-\u003ertc_clk);\n 234:\t\t\tgoto netdev_cleanup;\n 235:\t\t}\n 236:\t\n 237:\t\tdev_info(\u0026spi-\u003edev, \"Selected CRC config: crc7=%s, crc16=%s\\n\",\n 238:\t\t\t enable_crc7 ? \"on\" : \"off\", enable_crc16 ? \"on\" : \"off\");\n 239:\t\n 240:\t\t/* we need power to configure the bus protocol and to read the chip id: */\n 241:\t\n 242:\t\twilc_wlan_power(wilc, true);\n 243:\t\n 244:\t\tret = wilc_spi_configure_bus_protocol(wilc);\n 245:\t\tif (ret)\n 246:\t\t\tgoto power_down;\n 247:\t\n 248:\t\tret = wilc_get_chipid(wilc);\n 249:\t\tif (ret)\n 250:\t\t\tgoto power_down;\n 251:\t\n 252:\t\tret = wilc_cfg80211_register(wilc);\n 253:\t\tif (ret)\n 254:\t\t\tgoto power_down;\n 255:\t\n 256:\t\tret = wilc_load_mac_from_nv(wilc);\n 257:\t\tif (ret) {\n 258:\t\t\tpr_err(\"Can not retrieve MAC address from chip\\n\");\n 259:\t\t\tgoto unregister_wiphy;\n 260:\t\t}\n 261:\t\n 262:\t\twilc_wlan_power(wilc, false);\n 263:\t\tvif = wilc_netdev_ifc_init(wilc, \"wlan%d\", WILC_STATION_MODE,\n 264:\t\t\t\t\t NL80211_IFTYPE_STATION, false);\n 265:\t\tif (IS_ERR(vif)) {\n 266:\t\t\tret = PTR_ERR(vif);\n 267:\t\t\tgoto unregister_wiphy;\n 268:\t\t}\n 269:\t\treturn 0;\n 270:\t\n 271:\tunregister_wiphy:\n 272:\t\twiphy_unregister(wilc-\u003ewiphy);\n 273:\tpower_down:\n 274:\t\twilc_wlan_power(wilc, false);\n 275:\tnetdev_cleanup:\n 276:\t\twilc_netdev_cleanup(wilc);\n 277:\t\twiphy_free(wilc-\u003ewiphy);\n 278:\tfree:\n 279:\t\tkfree(spi_priv);\n 280:\t\treturn ret;\n 281:\t}\n 282:\t\n 283:\tstatic void wilc_bus_remove(struct spi_device *spi)\n 284:\t{\n 285:\t\tstruct wilc *wilc = spi_get_drvdata(spi);\n 286:\t\tstruct wilc_spi *spi_priv = wilc-\u003ebus_data;\n 287:\t\n 288:\t\twilc_netdev_cleanup(wilc);\n 289:\t\twiphy_unregister(wilc-\u003ewiphy);\n 290:\t\twiphy_free(wilc-\u003ewiphy);\n 291:\t\tkfree(spi_priv);\n 292:\t}\n 293:\t\n 294:\tstatic const struct of_device_id wilc_of_match[] = {\n 295:\t\t{ .compatible = \"microchip,wilc1000\", },\n 296:\t\t{ /* sentinel */ }\n 297:\t};\n 298:\tMODULE_DEVICE_TABLE(of, wilc_of_match);\n 299:\t\n 300:\tstatic const struct spi_device_id wilc_spi_id[] = {\n 301:\t\t{ \"wilc1000\", 0 },\n 302:\t\t{ /* sentinel */ }\n 303:\t};\n 304:\tMODULE_DEVICE_TABLE(spi, wilc_spi_id);\n 305:\t\n 306:\tstatic struct spi_driver wilc_spi_driver = {\n"
} |
| 29/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 50692 output: 50 thoughts: 92 Thoughts: **Initial Hardware Validation** Okay, so the first things this code block does are a call to `wilc_spi_configure_bus_protocol(wilc)` and then a call to `wilc_get_chipid(wilc)`. Right away, my expert intuition tells me that this is likely a hardware initialization sequence. `wilc_get_chipid(wilc)` is the critical function here; if the hardware isn't present or functioning, that call *will* fail. If it fails, that means we haven't even got the right chip ID. That will trigger the return of an error. Consequently, the core network interface initialization function, `wilc_netdev_ifc_init`, will never get executed which is exactly what we want. I need to take a closer look at `wilc_get_chipid` to understand how it determines chip presence and whether the SPI interface is operational, as that's where the rubber meets the road. I'll focus on that function's implementation next. |
| 30/2 | 2026/07/30 02:08 | tool | read-file |
0mArgs:{
"File": "drivers/net/wireless/microchip/wilc1000/wlan.c",
"FirstLine": 1591,
"LineCount": 100
}Results: {
"Contents": "1591:\tint wilc_get_chipid(struct wilc *wilc)\n1592:\t{\n1593:\t\tu32 chipid = 0;\n1594:\t\tu32 rfrevid = 0;\n1595:\t\n1596:\t\tif (wilc-\u003echipid == 0) {\n1597:\t\t\twilc-\u003ehif_func-\u003ehif_read_reg(wilc, WILC3000_CHIP_ID, \u0026chipid);\n1598:\t\t\tif (!is_wilc3000(chipid)) {\n1599:\t\t\t\twilc-\u003ehif_func-\u003ehif_read_reg(wilc, WILC_CHIPID, \u0026chipid);\n1600:\t\t\t\twilc-\u003ehif_func-\u003ehif_read_reg(wilc, WILC_RF_REVISION_ID,\n1601:\t\t\t\t\t\t\t \u0026rfrevid);\n1602:\t\n1603:\t\t\t\tif (!is_wilc1000(chipid)) {\n1604:\t\t\t\t\twilc-\u003echipid = 0;\n1605:\t\t\t\t\treturn -EINVAL;\n1606:\t\t\t\t}\n1607:\t\t\t\tif (chipid == WILC_1000_BASE_ID_2A) { /* 0x1002A0 */\n1608:\t\t\t\t\tif (rfrevid != 0x1)\n1609:\t\t\t\t\t\tchipid = WILC_1000_BASE_ID_2A_REV1;\n1610:\t\t\t\t} else if (chipid == WILC_1000_BASE_ID_2B) { /* 0x1002B0 */\n1611:\t\t\t\t\tif (rfrevid == 0x4)\n1612:\t\t\t\t\t\tchipid = WILC_1000_BASE_ID_2B_REV1;\n1613:\t\t\t\t\telse if (rfrevid != 0x3)\n1614:\t\t\t\t\t\tchipid = WILC_1000_BASE_ID_2B_REV2;\n1615:\t\t\t\t}\n1616:\t\t\t}\n1617:\t\n1618:\t\t\twilc-\u003echipid = chipid;\n1619:\t\t}\n1620:\t\n1621:\t\treturn 0;\n1622:\t}\n1623:\tEXPORT_SYMBOL_GPL(wilc_get_chipid);\n1624:\t\n1625:\tstatic int init_chip(struct net_device *dev)\n1626:\t{\n1627:\t\tu32 reg;\n1628:\t\tint ret, rv;\n1629:\t\tstruct wilc_vif *vif = netdev_priv(dev);\n1630:\t\tstruct wilc *wilc = vif-\u003ewilc;\n1631:\t\n1632:\t\tret = acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);\n1633:\t\tif (ret)\n1634:\t\t\treturn ret;\n1635:\t\n1636:\t\tret = wilc_get_chipid(wilc);\n1637:\t\tif (ret)\n1638:\t\t\tgoto release;\n1639:\t\n1640:\t\tif ((wilc-\u003echipid \u0026 0xfff) != 0xa0) {\n1641:\t\t\tret = wilc-\u003ehif_func-\u003ehif_read_reg(wilc,\n1642:\t\t\t\t\t\t\t WILC_CORTUS_RESET_MUX_SEL,\n1643:\t\t\t\t\t\t\t \u0026reg);\n1644:\t\t\tif (ret) {\n1645:\t\t\t\tnetdev_err(dev, \"fail read reg 0x1118\\n\");\n1646:\t\t\t\tgoto release;\n1647:\t\t\t}\n1648:\t\t\treg |= BIT(0);\n1649:\t\t\tret = wilc-\u003ehif_func-\u003ehif_write_reg(wilc,\n1650:\t\t\t\t\t\t\t WILC_CORTUS_RESET_MUX_SEL,\n1651:\t\t\t\t\t\t\t reg);\n1652:\t\t\tif (ret) {\n1653:\t\t\t\tnetdev_err(dev, \"fail write reg 0x1118\\n\");\n1654:\t\t\t\tgoto release;\n1655:\t\t\t}\n1656:\t\t\tret = wilc-\u003ehif_func-\u003ehif_write_reg(wilc,\n1657:\t\t\t\t\t\t\t WILC_CORTUS_BOOT_REGISTER,\n1658:\t\t\t\t\t\t\t WILC_CORTUS_BOOT_FROM_IRAM);\n1659:\t\t\tif (ret) {\n1660:\t\t\t\tnetdev_err(dev, \"fail write reg 0xc0000\\n\");\n1661:\t\t\t\tgoto release;\n1662:\t\t\t}\n1663:\t\t}\n1664:\t\n1665:\t\tif (is_wilc3000(wilc-\u003echipid)) {\n1666:\t\t\tret = wilc-\u003ehif_func-\u003ehif_read_reg(wilc, WILC3000_BOOTROM_STATUS, \u0026reg);\n1667:\t\t\tif (ret) {\n1668:\t\t\t\tnetdev_err(dev, \"failed to read WILC3000 BootROM status register\\n\");\n1669:\t\t\t\tgoto release;\n1670:\t\t\t}\n1671:\t\n1672:\t\t\tret = wilc-\u003ehif_func-\u003ehif_write_reg(wilc, WILC3000_CORTUS_BOOT_REGISTER_2,\n1673:\t\t\t\t\t\t\t WILC_CORTUS_BOOT_FROM_IRAM);\n1674:\t\t\tif (ret) {\n1675:\t\t\t\tnetdev_err(dev, \"failed to write WILC3000 Boot register\\n\");\n1676:\t\t\t\tgoto release;\n1677:\t\t\t}\n1678:\t\t}\n1679:\t\n1680:\trelease:\n1681:\t\trv = release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);\n1682:\t\n1683:\t\treturn ret ? ret : rv;\n1684:\t}\n1685:\t\n1686:\tint wilc_load_mac_from_nv(struct wilc *wl)\n1687:\t{\n1688:\t\tint ret, rv;\n1689:\t\tunsigned int i;\n1690:\t\n"
} |
| 31/2 | 2026/07/30 02:08 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 52723 output: 17 thoughts: 281 Thoughts: **Analyzing the Code's Reachability** Okay, so `wilc_get_chipid` grabs the chip ID from the hardware. If that ID isn't what we expect (WILC1000 or WILC3000), it kicks back an `-EINVAL`. In a virtual environment, like QEMU, there's no actual hardware to read from. My gut says `hif_read_reg` will fail or return zero, which is definitely not a valid chip ID. That would cause `wilc_bus_probe` to fail, and the network device would never even get registered. So, by all logic, this code path shouldn't *ever* be reachable in a virtualized setup. But wait a minute… Syzkaller found a bug here? How is that even possible? Does Syzkaller have some trick up its sleeve to mock SPI devices? I don't recall seeing a generic SPI mock in Syzkaller. Hmm... maybe it injects SPI traffic via a dummy SPI controller? If Syzkaller found a bug, that means this code *is* reachable somehow. I need to re-evaluate my assumptions. Let's see if Syzkaller actually offers something that can fake SPI. Let me check the kernel code to see if there is a dummy SPI controller in the kernel. I know there's `drivers/spi/spi-loopback-test.c`, but that's just for testing an existing controller. I need a *dummy* controller. Is there something like `drivers/spi/spi-mockup.c` or perhaps `drivers/spi/spi-mock.c`... or similar? I need to dig in there. |
| 32/2 | 2026/07/30 02:09 | tool | grepper |
0mError:no matches Args: {
"Expression": "spi-mock"
}Results: {
"error": "no matches"
} |
| 33/2 | 2026/07/30 02:09 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 53396 output: 17 thoughts: 14 Thoughts: Here's a summary of my thought process, focusing on the provided text, assuming an expert background: **Considering `drivers/spi/spi-dummy.c`** Okay, I'm thinking about SPI drivers, and the question that immediately pops into my head is, "What about `drivers/spi/spi-dummy.c`?" That particular file in the kernel tree usually catches my attention as it represents the bare minimum for an SPI driver, often used for testing or as a starting point. Is someone working with it directly? Or perhaps they're using it to build a more complex SPI driver, and need something basic for reference? The context isn't fully clear here, and as an expert I'd need more specifics on where this is being looked at in order to fully determine its relevance. My mind immediately begins scanning for possible use cases and implications. |
| 34/2 | 2026/07/30 02:09 | tool | grepper |
0mError:no matches Args: {
"Expression": "spi-dummy"
}Results: {
"error": "no matches"
} |
| 35/2 | 2026/07/30 02:09 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 53622 output: 20 thoughts: 17 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience and written in the first person: **Investigating a Potential SPI Loopback Test** Okay, so I'm looking at testing some SPI functionality, and my initial thought is to dive into existing examples. What's the standard practice? Let's see... my mind immediately jumped to the `drivers/spi/spi-loopback-test.c` file. It's a pretty logical place to start – usually, that's where you'll find a basic framework for exercising the loopback capabilities, right? I'd expect it to cover fundamental aspects like configuring the SPI controller, setting up the transactions, and verifying the data integrity after the loopback operation. I'm keen to see the approach taken, the data patterns used, and the error handling implemented. It'll give me a solid foundation or, at least, a good starting point to tailor to my specific testing needs, including performance or more robust data patterns. Let's see what's in there... |
| 36/2 | 2026/07/30 02:09 | tool | grepper |
0mArgs:{
"Expression": "spi-loopback-test"
}Results: {
"Output": "Documentation/devicetree/bindings/incomplete-devices.yaml=26=properties:\n--\nDocumentation/devicetree/bindings/incomplete-devices.yaml-245- - gpio-virtuser\nDocumentation/devicetree/bindings/incomplete-devices.yaml:246: - linux,spi-loopback-test\nDocumentation/devicetree/bindings/incomplete-devices.yaml-247- - mailbox-test\n--\ndrivers/spi/Makefile=14=obj-$(CONFIG_SPI_SPIDEV)\t\t+= spidev.o\ndrivers/spi/Makefile:15:obj-$(CONFIG_SPI_LOOPBACK_TEST)\t\t+= spi-loopback-test.o\ndrivers/spi/Makefile-16-\n--\ndrivers/spi/spi-loopback-test.c-2-/*\ndrivers/spi/spi-loopback-test.c:3: * linux/drivers/spi/spi-loopback-test.c\ndrivers/spi/spi-loopback-test.c-4- *\n--\ndrivers/spi/spi-loopback-test.c=357=static int spi_loopback_test_probe(struct spi_device *spi)\n--\ndrivers/spi/spi-loopback-test.c-371-\ndrivers/spi/spi-loopback-test.c:372:\tdev_info(\u0026spi-\u003edev, \"Executing spi-loopback-tests\\n\");\ndrivers/spi/spi-loopback-test.c-373-\n--\ndrivers/spi/spi-loopback-test.c-375-\ndrivers/spi/spi-loopback-test.c:376:\tdev_info(\u0026spi-\u003edev, \"Finished spi-loopback-tests with return: %i\\n\",\ndrivers/spi/spi-loopback-test.c-377-\t\t ret);\n--\ndrivers/spi/spi-loopback-test.c=383=static struct of_device_id spi_loopback_test_of_match[] = {\ndrivers/spi/spi-loopback-test.c:384:\t{ .compatible\t= \"linux,spi-loopback-test\", },\ndrivers/spi/spi-loopback-test.c-385-\t{ }\n--\ndrivers/spi/spi-loopback-test.c=395=static struct spi_driver spi_loopback_test_driver = {\ndrivers/spi/spi-loopback-test.c-396-\t.driver = {\ndrivers/spi/spi-loopback-test.c:397:\t\t.name = \"spi-loopback-test\",\ndrivers/spi/spi-loopback-test.c-398-\t\t.of_match_table = spi_loopback_test_of_match,\n"
} |
| 37/2 | 2026/07/30 02:09 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 54554 output: 35 thoughts: 1689 Thoughts: **Analysis of the wilc1000 Driver Patch for Fuzzing Eligibility** Okay, so I need to determine if this patch is worth fuzzing. The key is whether the code path it modifies is reachable within the standard QEMU environment. My initial thought was that maybe `syzkaller` could be injecting packets through `mac80211_hwsim`, but that's a software-emulated hardware component for mac80211, and it operates separately, not involving the `wilc1000` driver at all. Then I recalled that the `wilc1000` driver is a cfg80211 driver and, importantly, the user has emphasized that I must base my decision on the *actual* source code, not my presumed knowledge, and that it's already committed. I'm specifically instructed to return `WorthFuzzing=false` if the patch concerns code impossible to reach in virtualized environments, even with software emulation like `mac80211_hwsim`. Since the bug is in `wilc_wfi_mon_xmit`, this means `wilc_wfi_mon_xmit` was executed. My immediate question is, does the `wilc1000` have a USB version? Let's check `drivers/net/wireless/microchip/wilc1000/Kconfig`. It appears the chip comes in `WILC1000_SDIO` and `WILC1000_SPI` versions only. No USB. So, how else could `wilc_wfi_mon_xmit` be reached? The code reveals that it is a static function within `drivers/net/wireless/microchip/wilc1000/mon.c`, bound to `wilc_wfi_netdev_ops.ndo_start_xmit`. It can only be called if a netdev is created using `wilc_wfi_netdev_ops`. This netdev is created in `wilc_wfi_init_mon_interface`, called by `add_virtual_intf` in `cfg80211.c`. `add_virtual_intf` is a callback function in `wilc_cfg80211_ops`, which is registered via `wiphy_register` in `wilc_cfg80211_register`. And `wilc_cfg80211_register` is invoked by `wilc_bus_probe` (SPI) or `wilc_sdio_probe` (SDIO). Both probe functions rely on a physical hardware chip responding to chip ID reads. If the hardware isn't present, the probe fails, the wiphy doesn't register, the netdev isn't created, and `wilc_wfi_mon_xmit` is unreachable. Could syzkaller be bypassing this with some kind of fault injection? The instructions are very clear: "Return WorthFuzzing=false if the patch only contains code paths impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware." And further, "Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU." This is a *vendor-specific* SDIO/SPI WiFi driver that *requires* physical hardware that isn't emulated in standard QEMU. So, it falls under the "impossible to reach" category. Is there *any* chance QEMU emulates WILC1000? No. WILC1000 is a very specific Microchip WiFi chip. QEMU doesn't do it. What about syzkaller using a dummy SDIO/SPI controller to inject responses? Syzkaller doesn't have a generic SDIO/SPI injection framework. It has USB and PCI injection via dummy HCD and raw PCI. So, if it's SDIO/SPI, it's not reachable. I quickly reviewed the kernel source looking for software emulation of `wilc1000` or a `mac80211_hwsim`-like equivalent, but nothing exists. I'm now revisiting the patch itself. The patch adds checks for `skb->len` and `rtap_len` in `wilc_wfi_mon_xmit`. It looks like a fix for an out-of-bounds read or a related issue when parsing the radiotap header and 802.11 header in the monitor interface transmit path. |
| 38/2 | 2026/07/30 02:09 | tool | grepper |
0mArgs:{
"Expression": "wilc1000",
"PathPrefix": "drivers/net/wireless/microchip/"
}Results: {
"Output": "drivers/net/wireless/microchip/Kconfig=13=if WLAN_VENDOR_MICROCHIP\ndrivers/net/wireless/microchip/Kconfig:14:source \"drivers/net/wireless/microchip/wilc1000/Kconfig\"\ndrivers/net/wireless/microchip/Kconfig-15-endif # WLAN_VENDOR_MICROCHIP\n--\ndrivers/net/wireless/microchip/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/Makefile:2:obj-$(CONFIG_WILC1000)\t\t+= wilc1000/\n--\ndrivers/net/wireless/microchip/wilc1000/Makefile-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/net/wireless/microchip/wilc1000/Makefile:2:obj-$(CONFIG_WILC1000) += wilc1000.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-3-\ndrivers/net/wireless/microchip/wilc1000/Makefile:4:wilc1000-objs := cfg80211.o netdev.o mon.o \\\ndrivers/net/wireless/microchip/wilc1000/Makefile-5-\t\t\thif.o wlan_cfg.o wlan.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-6-\ndrivers/net/wireless/microchip/wilc1000/Makefile:7:obj-$(CONFIG_WILC1000_SDIO) += wilc1000-sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:8:wilc1000-sdio-objs += sdio.o\ndrivers/net/wireless/microchip/wilc1000/Makefile-9-\ndrivers/net/wireless/microchip/wilc1000/Makefile:10:obj-$(CONFIG_WILC1000_SPI) += wilc1000-spi.o\ndrivers/net/wireless/microchip/wilc1000/Makefile:11:wilc1000-spi-objs += spi.o\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c=1849=int wilc_cfg80211_register(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1851-\t/* WPA3/SAE supported only on WILC1000 */\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c:1852:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/cfg80211.c-1853-\t\twilc-\u003ewiphy-\u003efeatures |= NL80211_FEATURE_SAE;\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-21-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:22:#define WILC1000_FW_PREFIX\t\t\"atmel/wilc1000_wifi_firmware-\"\ndrivers/net/wireless/microchip/wilc1000/netdev.c-23-#define __WILC1000_FW(api)\t\tWILC1000_FW_PREFIX #api \".bin\"\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=200=static int wilc_wlan_get_firmware(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-207-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:208:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/netdev.c-209-\t\tfirmware = WILC1000_FW(WILC1000_API_VER);\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-215-\tnetdev_info(dev, \"WILC%d loading firmware [%s]\\n\",\ndrivers/net/wireless/microchip/wilc1000/netdev.c:216:\t\t is_wilc1000(wilc-\u003echipid) ? 1000 : 3000,\ndrivers/net/wireless/microchip/wilc1000/netdev.c-217-\t\t firmware);\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=456=static void wilc_wlan_deinitialize(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-466-\tif (wl-\u003einitialized) {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:467:\t\tnetdev_info(dev, \"Deinitializing wilc1000...\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-468-\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-484-\ndrivers/net/wireless/microchip/wilc1000/netdev.c:485:\t\tnetdev_dbg(dev, \"wilc1000 deinitialization Done\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-486-\t} else {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:487:\t\tnetdev_dbg(dev, \"wilc1000 is not initialized\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-488-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=508=static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-583-\t} else {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:584:\t\tnetdev_dbg(dev, \"wilc1000 already initialized\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-585-\t}\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c=787=static int wilc_mac_close(struct net_device *ndev)\n--\ndrivers/net/wireless/microchip/wilc1000/netdev.c-806-\tif (wl-\u003eopen_ifcs == 0) {\ndrivers/net/wireless/microchip/wilc1000/netdev.c:807:\t\tnetdev_dbg(ndev, \"Deinitializing wilc1000\\n\");\ndrivers/net/wireless/microchip/wilc1000/netdev.c-808-\t\twl-\u003eclose = 1;\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-16-\ndrivers/net/wireless/microchip/wilc1000/sdio.c:17:#define SDIO_MODALIAS \"wilc1000_sdio\"\ndrivers/net/wireless/microchip/wilc1000/sdio.c-18-\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=800=static int wilc_sdio_read_int(struct wilc *wilc, u32 *int_status)\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-817-\t\tcmd.function = 0;\ndrivers/net/wireless/microchip/wilc1000/sdio.c:818:\t\tcmd.address = is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/sdio.c-819-\t\t\t WILC1000_SDIO_IRQ_FLAG_REG :\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-828-\tif (sdio_priv-\u003eirq_gpio)\ndrivers/net/wireless/microchip/wilc1000/sdio.c:829:\t\tirq_flags \u0026= is_wilc1000(wilc-\u003echipid) ? 0x1f : 0x0f;\ndrivers/net/wireless/microchip/wilc1000/sdio.c-830-\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=842=static int wilc_sdio_clear_int_ext(struct wilc *wilc, u32 val)\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-851-\ndrivers/net/wireless/microchip/wilc1000/sdio.c:852:\tif (is_wilc1000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/sdio.c-853-\t\t/* select VMM table 0 */\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c-898-\t\tcmd.raw = 0;\ndrivers/net/wireless/microchip/wilc1000/sdio.c:899:\t\tcmd.address = is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/sdio.c-900-\t\t\t WILC1000_SDIO_IRQ_CLEAR_FLAG_REG :\n--\ndrivers/net/wireless/microchip/wilc1000/sdio.c=1052=static const struct of_device_id wilc_of_match[] = {\ndrivers/net/wireless/microchip/wilc1000/sdio.c:1053:\t{ .compatible = \"microchip,wilc1000\", },\ndrivers/net/wireless/microchip/wilc1000/sdio.c-1054-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c-15-\ndrivers/net/wireless/microchip/wilc1000/spi.c:16:#define SPI_MODALIAS\t\t\"wilc1000_spi\"\ndrivers/net/wireless/microchip/wilc1000/spi.c-17-\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=294=static const struct of_device_id wilc_of_match[] = {\ndrivers/net/wireless/microchip/wilc1000/spi.c:295:\t{ .compatible = \"microchip,wilc1000\", },\ndrivers/net/wireless/microchip/wilc1000/spi.c-296-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=300=static const struct spi_device_id wilc_spi_id[] = {\ndrivers/net/wireless/microchip/wilc1000/spi.c:301:\t{ \"wilc1000\", 0 },\ndrivers/net/wireless/microchip/wilc1000/spi.c-302-\t{ /* sentinel */ }\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c=1227=static int wilc_validate_chipid(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/spi.c-1240-\t}\ndrivers/net/wireless/microchip/wilc1000/spi.c:1241:\tif (!is_wilc1000(chipid) \u0026\u0026 !is_wilc3000(chipid)) {\ndrivers/net/wireless/microchip/wilc1000/spi.c-1242-\t\tdev_err(\u0026spi-\u003edev, \"Unknown chip id 0x%x\\n\", chipid);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=530=static struct rxq_entry_t *wilc_wlan_rxq_remove(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-543-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:544:static int chip_allow_sleep_wilc1000(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-545-{\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=630=static int chip_allow_sleep(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-631-{\ndrivers/net/wireless/microchip/wilc1000/wlan.c:632:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/wlan.c:633:\t\treturn chip_allow_sleep_wilc1000(wilc);\ndrivers/net/wireless/microchip/wilc1000/wlan.c-634-\telse\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-637-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:638:static int chip_wakeup_wilc1000(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-639-{\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=760=static int chip_wakeup(struct wilc *wilc)\ndrivers/net/wireless/microchip/wilc1000/wlan.c-761-{\ndrivers/net/wireless/microchip/wilc1000/wlan.c:762:\tif (is_wilc1000(wilc-\u003echipid))\ndrivers/net/wireless/microchip/wilc1000/wlan.c:763:\t\treturn chip_wakeup_wilc1000(wilc);\ndrivers/net/wireless/microchip/wilc1000/wlan.c-764-\telse\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=793=int host_wakeup_notify(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-799-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:800:\twilc-\u003ehif_func-\u003ehif_write_reg(wilc, is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/wlan.c-801-\t\t\t\t\t WILC1000_CORTUS_INTERRUPT_2 :\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=807=int host_sleep_notify(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-813-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:814:\twilc-\u003ehif_func-\u003ehif_write_reg(wilc, is_wilc1000(wilc-\u003echipid) ?\ndrivers/net/wireless/microchip/wilc1000/wlan.c-815-\t\t\t\t\t WILC1000_CORTUS_INTERRUPT_1 :\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=821=int wilc_wlan_handle_txq(struct wilc *wilc, u32 *txq_count)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-950-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:951:\t\tif (is_wilc1000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-952-\t\t\tret = func-\u003ehif_write_reg(wilc, WILC_HOST_VMM_CTL, 0x2);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=1591=int wilc_get_chipid(struct wilc *wilc)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1602-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:1603:\t\t\tif (!is_wilc1000(chipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1604-\t\t\t\twilc-\u003echipid = 0;\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c=1737=int wilc_wlan_init(struct net_device *dev)\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1760-\ndrivers/net/wireless/microchip/wilc1000/wlan.c:1761:\t\tif (!is_wilc1000(wilc-\u003echipid) \u0026\u0026 !is_wilc3000(wilc-\u003echipid)) {\ndrivers/net/wireless/microchip/wilc1000/wlan.c-1762-\t\t\tnetdev_err(dev, \"Unsupported chipid: %x\\n\", wilc-\u003echipid);\n--\ndrivers/net/wireless/microchip/wilc1000/wlan.h=433=struct wilc_vif;\ndrivers/net/wireless/microchip/wilc1000/wlan.h-434-\ndrivers/net/wireless/microchip/wilc1000/wlan.h:435:static inline bool is_wilc1000(u32 id)\ndrivers/net/wireless/microchip/wilc1000/wlan.h-436-{\n"
} |
| 39/2 | 2026/07/30 02:09 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 62110 output: 123 thoughts: 277 Thoughts: **Unreachable Code in the WILC1000 Driver** Okay, so I've looked at this patch and, yeah, no USB support here, that's immediately clear. It's all SDIO and SPI, which makes things pretty straightforward. The critical point is that QEMU, and by extension, any standard cloud environment like GCE, doesn't emulate the necessary hardware. This immediately sets off alarm bells. I can't think of any way this would ever be reachable in a virtualized fuzzing context. Let's do a quick double-check though, just to be thorough. Could this `wilc_wfi_mon_xmit` function *somehow* be called by other code directly? No, it's `static`, so that's a dead end. Okay, so perhaps the network device could somehow be created without the hardware being present? That doesn't seem likely either. `wilc_wfi_init_mon_interface` takes a `struct wilc *wl` as an argument, and that `wl` is allocated and initialized during probe. The probe requires the physical hardware to succeed. So, to recap, there's no way to instantiate this particular driver. Therefore, I'm confident in saying this code is unreachable, period. I'll formulate my response, then. `WorthFuzzing: false` `Reasoning: The patch addresses the Microchip WILC1000 wireless driver, a vendor-specific driver for SDIO/SPI WiFi chips. Since QEMU and other standard virtualized environments don't emulate this particular hardware, and there's no software-emulated alternative, like mac80211_hwsim or USB gadget, the driver can't be probed and the code in question simply can't be reached during fuzzing.` |
| 40/2 | 2026/07/30 02:09 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the Microchip WILC1000 wireless driver, which is a vendor-specific driver for physical SDIO/SPI WiFi chips. Since QEMU and standard virtualized environments do not emulate this specific hardware, and there is no software-emulated alternative (like mac80211_hwsim or USB gadget) for it, the driver cannot be probed and the modified code paths are impossible to reach during fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Microchip WILC1000 wireless driver, which is a vendor-specific driver for physical SDIO/SPI WiFi chips. Since QEMU and standard virtualized environments do not emulate this specific hardware, and there is no software-emulated alternative (like mac80211_hwsim or USB gadget) for it, the driver cannot be probed and the modified code paths are impossible to reach during fuzzing.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|