[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