[bug report] mt76: mt7915: add support for passing chip/firmware debug data to user space
Dan Carpenter
dan.carpenter at linaro.org
Tue Jul 4 04:27:22 PDT 2023
Hello Felix Fietkau,
The patch 988845c9361a: "mt76: mt7915: add support for passing
chip/firmware debug data to user space" from Dec 26, 2021, leads to
the following Smatch static checker warning:
kernel/relay.c:798 relay_flush()
warn: sleeping in atomic context
Both the mt7915 and mt7916 drivers have this bug.
drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
1263 static void
1264 mt7915_debugfs_write_fwlog(struct mt7915_dev *dev, const void *hdr, int hdrlen,
1265 const void *data, int len)
1266 {
1267 static DEFINE_SPINLOCK(lock);
1268 unsigned long flags;
1269 void *dest;
1270
1271 spin_lock_irqsave(&lock, flags);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Holding a spinlock.
1272 dest = relay_reserve(dev->relay_fwlog, hdrlen + len + 4);
1273 if (dest) {
1274 *(u32 *)dest = hdrlen + len;
1275 dest += 4;
1276
1277 if (hdrlen) {
1278 memcpy(dest, hdr, hdrlen);
1279 dest += hdrlen;
1280 }
1281
1282 memcpy(dest, data, len);
1283 relay_flush(dev->relay_fwlog);
Flushing is a sleeping operation. It takes a mutex. It can't be done
while holding a spinlock.
1284 }
1285 spin_unlock_irqrestore(&lock, flags);
1286 }
regards,
dan carpenter
More information about the Linux-mediatek
mailing list