Commit 9c7ef209 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull char/misc driver fixes from Greg KH:
 "Here are some small char/misc driver fixes for some reported issues.
  Included in here is:

   - much reported rust_binder fix

   - counter driver fixes

   - new device ids for the mei driver

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'char-misc-6.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  rust_binder: remove spin_lock() in rust_shrink_free_page()
  mei: me: add nova lake point S DID
  counter: 104-quad-8: Fix incorrect return value in IRQ handler
  counter: interrupt-cnt: Drop IRQF_NO_THREAD flag
parents 316a94cb 361e0ff4
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -727,8 +727,5 @@ fn drop(self: Pin<&mut Self>) {
    drop(mm);
    drop(page);

    // SAFETY: We just unlocked the lru lock, but it should be locked when we return.
    unsafe { bindings::spin_lock(&raw mut (*lru).lock) };

    LRU_REMOVED_ENTRY
}
+14 −6
Original line number Diff line number Diff line
@@ -1192,6 +1192,7 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
{
	struct counter_device *counter = private;
	struct quad8 *const priv = counter_priv(counter);
	struct device *dev = counter->parent;
	unsigned int status;
	unsigned long irq_status;
	unsigned long channel;
@@ -1200,8 +1201,11 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
	int ret;

	ret = regmap_read(priv->map, QUAD8_INTERRUPT_STATUS, &status);
	if (ret)
		return ret;
	if (ret) {
		dev_WARN_ONCE(dev, true,
			"Attempt to read Interrupt Status Register failed: %d\n", ret);
		return IRQ_NONE;
	}
	if (!status)
		return IRQ_NONE;

@@ -1223,7 +1227,8 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
				break;
		default:
			/* should never reach this path */
			WARN_ONCE(true, "invalid interrupt trigger function %u configured for channel %lu\n",
			dev_WARN_ONCE(dev, true,
				"invalid interrupt trigger function %u configured for channel %lu\n",
				flg_pins, channel);
			continue;
		}
@@ -1232,8 +1237,11 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
	}

	ret = regmap_write(priv->map, QUAD8_CHANNEL_OPERATION, CLEAR_PENDING_INTERRUPTS);
	if (ret)
		return ret;
	if (ret) {
		dev_WARN_ONCE(dev, true,
			"Attempt to clear pending interrupts by writing to Channel Operation Register failed: %d\n", ret);
		return IRQ_HANDLED;
	}

	return IRQ_HANDLED;
}
+1 −2
Original line number Diff line number Diff line
@@ -229,8 +229,7 @@ static int interrupt_cnt_probe(struct platform_device *pdev)

	irq_set_status_flags(priv->irq, IRQ_NOAUTOEN);
	ret = devm_request_irq(dev, priv->irq, interrupt_cnt_isr,
			       IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
			       dev_name(dev), counter);
			       IRQF_TRIGGER_RISING, dev_name(dev), counter);
	if (ret)
		return ret;

+2 −0
Original line number Diff line number Diff line
@@ -122,6 +122,8 @@

#define MEI_DEV_ID_WCL_P      0x4D70  /* Wildcat Lake P */

#define MEI_DEV_ID_NVL_S      0x6E68  /* Nova Lake Point S */

/*
 * MEI HW Section
 */
+2 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = {

	{MEI_PCI_DEVICE(MEI_DEV_ID_WCL_P, MEI_ME_PCH15_CFG)},

	{MEI_PCI_DEVICE(MEI_DEV_ID_NVL_S, MEI_ME_PCH15_CFG)},

	/* required last entry */
	{0, }
};