Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a9bc71e authored by Tony Zelenoff's avatar Tony Zelenoff Committed by David S. Miller
Browse files

atl1: do not process interrupts in cycle in handler



As the rx/tx handled inside napi handler, the cycle is
not needed now, because only the rx/tx need such kind of
processing.

Signed-off-by: default avatarTony Zelenoff <antonz@parallels.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 73650f28
Loading
Loading
Loading
Loading
+48 −57
Original line number Original line Diff line number Diff line
@@ -2499,13 +2499,11 @@ static irqreturn_t atl1_intr(int irq, void *data)
{
{
	struct atl1_adapter *adapter = netdev_priv(data);
	struct atl1_adapter *adapter = netdev_priv(data);
	u32 status;
	u32 status;
	int max_ints = 10;


	status = adapter->cmb.cmb->int_stats;
	status = adapter->cmb.cmb->int_stats;
	if (!status)
	if (!status)
		return IRQ_NONE;
		return IRQ_NONE;


	do {
	/* clear CMB interrupt status at once */
	/* clear CMB interrupt status at once */
	adapter->cmb.cmb->int_stats = 0;
	adapter->cmb.cmb->int_stats = 0;


@@ -2549,9 +2547,8 @@ static irqreturn_t atl1_intr(int irq, void *data)
	}
	}


	/* transmit or receive event */
	/* transmit or receive event */
		if (status & (ISR_CMB_TX | ISR_CMB_RX) &&
	if (status & (ISR_CMB_TX | ISR_CMB_RX))
		    atl1_sched_rings_clean(adapter))
	    atl1_sched_rings_clean(adapter);
			break;


	/* rx exception */
	/* rx exception */
	if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN |
	if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN |
@@ -2562,15 +2559,9 @@ static irqreturn_t atl1_intr(int irq, void *data)
				&adapter->pdev->dev,
				&adapter->pdev->dev,
				"rx exception, ISR = 0x%x\n",
				"rx exception, ISR = 0x%x\n",
				status);
				status);
			if (atl1_sched_rings_clean(adapter))
		atl1_sched_rings_clean(adapter);
				break;
	}
	}


		if (--max_ints < 0)
			break;

	} while ((status = adapter->cmb.cmb->int_stats));

	/* re-enable Interrupt */
	/* re-enable Interrupt */
	iowrite32(ISR_DIS_SMB | ISR_DIS_DMA, adapter->hw.hw_addr + REG_ISR);
	iowrite32(ISR_DIS_SMB | ISR_DIS_DMA, adapter->hw.hw_addr + REG_ISR);
	return IRQ_HANDLED;
	return IRQ_HANDLED;
+4 −0
Original line number Original line Diff line number Diff line
@@ -1100,6 +1100,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
	if (!sym->st_shndx || get_secindex(info, sym) >= info->num_sections)
	if (!sym->st_shndx || get_secindex(info, sym) >= info->num_sections)
		return;
		return;


	/* We're looking for an object */
	if (ELF_ST_TYPE(sym->st_info) != STT_OBJECT)
		return;

	/* All our symbols are of form <prefix>__mod_XXX_device_table. */
	/* All our symbols are of form <prefix>__mod_XXX_device_table. */
	name = strstr(symname, "__mod_");
	name = strstr(symname, "__mod_");
	if (!name)
	if (!name)