Commit 3b78cdea authored by jan.koester's avatar jan.koester
Browse files

some fixes

parent ac867b6b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

#include <linux/efi.h>

extern struct boot_params *boot_params_pointer asm("boot_params");

extern void trampoline_32bit_src(void *, bool);
extern const u16 trampoline_ljmp_imm_offset;

+0 −20
Original line number Diff line number Diff line
@@ -1174,21 +1174,6 @@ static int irdma_wait_for_suspend(struct irdma_qp *iwqp)
	return 0;
}

static int irdma_wait_for_suspend(struct irdma_qp *iwqp)
{
	if (!wait_event_timeout(iwqp->iwdev->suspend_wq,
				!iwqp->suspend_pending,
				msecs_to_jiffies(IRDMA_EVENT_TIMEOUT_MS))) {
		iwqp->suspend_pending = false;
		ibdev_warn(&iwqp->iwdev->ibdev,
			   "modify_qp timed out waiting for suspend. qp_id = %d, last_ae = 0x%x\n",
			   iwqp->ibqp.qp_num, iwqp->last_aeq);
		return -EBUSY;
	}

	return 0;
}

/**
 * irdma_modify_qp_roce - modify qp request
 * @ibqp: qp's pointer for modify
@@ -2951,11 +2936,6 @@ static int irdma_reg_user_mr_type_qp(struct irdma_mem_reg_req req,
	int err;
	u8 lvl;

	/* iWarp: Catch page not starting on OS page boundary */
	if (!rdma_protocol_roce(&iwdev->ibdev, 1) &&
	    ib_umem_offset(iwmr->region))
		return -EINVAL;

	/* iWarp: Catch page not starting on OS page boundary */
	if (!rdma_protocol_roce(&iwdev->ibdev, 1) &&
	    ib_umem_offset(iwmr->region))
+3 −28
Original line number Diff line number Diff line
@@ -616,10 +616,7 @@ static int verity_verify_io(struct dm_verity_io *io)
		if (unlikely(r < 0))
			return r;

#if defined(CONFIG_DM_VERITY_FEC)
		if (verity_fec_is_enabled(v))
		start = *iter;
#endif
		r = verity_for_io_block(v, io, iter, &wait);
		if (unlikely(r < 0))
			return r;
@@ -704,23 +701,6 @@ static void verity_work(struct work_struct *w)
	verity_finish_io(io, errno_to_blk_status(verity_verify_io(io)));
}

static void verity_tasklet(unsigned long data)
{
	struct dm_verity_io *io = (struct dm_verity_io *)data;
	int err;

	io->in_tasklet = true;
	err = verity_verify_io(io);
	if (err == -EAGAIN || err == -ENOMEM) {
		/* fallback to retrying with work-queue */
		INIT_WORK(&io->work, verity_work);
		queue_work(io->v->verify_wq, &io->work);
		return;
	}

	verity_finish_io(io, errno_to_blk_status(err));
}

static void verity_end_io(struct bio *bio)
{
	struct dm_verity_io *io = bio->bi_private;
@@ -733,14 +713,9 @@ static void verity_end_io(struct bio *bio)
		return;
	}

	if (static_branch_unlikely(&use_tasklet_enabled) && io->v->use_tasklet) {
		tasklet_init(&io->tasklet, verity_tasklet, (unsigned long)io);
		tasklet_schedule(&io->tasklet);
	} else {
	INIT_WORK(&io->work, verity_work);
	queue_work(io->v->verify_wq, &io->work);
}
}

/*
 * Prefetch buffers for the specified io.
+55 −20
Original line number Diff line number Diff line
@@ -539,44 +539,79 @@ stmmac_set_pauseparam(struct net_device *netdev,
	}
}

static u64 stmmac_get_rx_normal_irq_n(struct stmmac_priv *priv, int q)
{
	u64 total;
	int cpu;

	total = 0;
	for_each_possible_cpu(cpu) {
		struct stmmac_pcpu_stats *pcpu;
		unsigned int start;
		u64 irq_n;

		pcpu = per_cpu_ptr(priv->xstats.pcpu_stats, cpu);
		do {
			start = u64_stats_fetch_begin(&pcpu->syncp);
			irq_n = u64_stats_read(&pcpu->rx_normal_irq_n[q]);
		} while (u64_stats_fetch_retry(&pcpu->syncp, start));
		total += irq_n;
	}
	return total;
}

static u64 stmmac_get_tx_normal_irq_n(struct stmmac_priv *priv, int q)
{
	u64 total;
	int cpu;

	total = 0;
	for_each_possible_cpu(cpu) {
		struct stmmac_pcpu_stats *pcpu;
		unsigned int start;
		u64 irq_n;

		pcpu = per_cpu_ptr(priv->xstats.pcpu_stats, cpu);
		do {
			start = u64_stats_fetch_begin(&pcpu->syncp);
			irq_n = u64_stats_read(&pcpu->tx_normal_irq_n[q]);
		} while (u64_stats_fetch_retry(&pcpu->syncp, start));
		total += irq_n;
	}
	return total;
}

static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data)
{
	u32 tx_cnt = priv->plat->tx_queues_to_use;
	u32 rx_cnt = priv->plat->rx_queues_to_use;
	unsigned int start;
	int q, stat;
	char *p;
	int q;

	for (q = 0; q < tx_cnt; q++) {
		struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q];
		struct stmmac_txq_stats snapshot;
		u64 pkt_n;

		do {
			start = u64_stats_fetch_begin(&txq_stats->syncp);
			snapshot = *txq_stats;
		} while (u64_stats_fetch_retry(&txq_stats->syncp, start));
			start = u64_stats_fetch_begin(&txq_stats->napi_syncp);
			pkt_n = u64_stats_read(&txq_stats->napi.tx_pkt_n);
		} while (u64_stats_fetch_retry(&txq_stats->napi_syncp, start));

		p = (char *)&snapshot + offsetof(struct stmmac_txq_stats, tx_pkt_n);
		for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) {
			*data++ = (*(u64 *)p);
			p += sizeof(u64);
		}
		*data++ = pkt_n;
		*data++ = stmmac_get_tx_normal_irq_n(priv, q);
	}

	for (q = 0; q < rx_cnt; q++) {
		struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q];
		struct stmmac_rxq_stats snapshot;
		u64 pkt_n;

		do {
			start = u64_stats_fetch_begin(&rxq_stats->syncp);
			snapshot = *rxq_stats;
		} while (u64_stats_fetch_retry(&rxq_stats->syncp, start));
			start = u64_stats_fetch_begin(&rxq_stats->napi_syncp);
			pkt_n = u64_stats_read(&rxq_stats->napi.rx_pkt_n);
		} while (u64_stats_fetch_retry(&rxq_stats->napi_syncp, start));

		p = (char *)&snapshot + offsetof(struct stmmac_rxq_stats, rx_pkt_n);
		for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) {
			*data++ = (*(u64 *)p);
			p += sizeof(u64);
		}
		*data++ = pkt_n;
		*data++ = stmmac_get_rx_normal_irq_n(priv, q);
	}
}