Unverified Commit ea638435 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!9720 firewire: ohci: mask bus reset interrupts between ISR and bottom half

parents daff1cbf 6312d115
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -2001,6 +2001,8 @@ static void bus_reset_work(struct work_struct *work)

	ohci->generation = generation;
	reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
	if (param_debug & OHCI_PARAM_DEBUG_BUSRESETS)
		reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_busReset);

	if (ohci->quirks & QUIRK_RESET_PACKET)
		ohci->request_generation = generation;
@@ -2067,12 +2069,14 @@ static irqreturn_t irq_handler(int irq, void *data)
		return IRQ_NONE;

	/*
	 * busReset and postedWriteErr must not be cleared yet
	 * busReset and postedWriteErr events must not be cleared yet
	 * (OHCI 1.1 clauses 7.2.3.2 and 13.2.8.1)
	 */
	reg_write(ohci, OHCI1394_IntEventClear,
		  event & ~(OHCI1394_busReset | OHCI1394_postedWriteErr));
	log_irqs(ohci, event);
	if (event & OHCI1394_busReset)
		reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset);

	if (event & OHCI1394_selfIDComplete)
		queue_work(selfid_workqueue, &ohci->bus_reset_work);