Пример #1
0
static void tool_db_event(void *ctx, int vec)
{
	struct tool_ctx *tc = ctx;
	u64 db_bits, db_mask;

	db_mask = ntb_db_vector_mask(tc->ntb, vec);
	db_bits = ntb_db_read(tc->ntb);

	dev_dbg(&tc->ntb->dev, "doorbell vec %d mask %#llx bits %#llx\n",
		vec, db_mask, db_bits);
}
Пример #2
0
static void perf_db_event(void *ctx, int vec)
{
	struct perf_ctx *perf = ctx;
	u64 db_bits, db_mask;

	db_mask = ntb_db_vector_mask(perf->ntb, vec);
	db_bits = ntb_db_read(perf->ntb);

	dev_dbg(&perf->ntb->dev, "doorbell vec %d mask %#llx bits %#llx\n",
		vec, db_mask, db_bits);
}
Пример #3
0
static void
ntb_transport_doorbell_callback(void *data, uint32_t vector)
{
	struct ntb_transport_ctx *nt = data;
	struct ntb_transport_qp *qp;
	struct _qpset db_bits;
	uint64_t vec_mask;
	unsigned qp_num;

	BIT_COPY(QP_SETSIZE, &nt->qp_bitmap, &db_bits);
	BIT_NAND(QP_SETSIZE, &db_bits, &nt->qp_bitmap_free);

	vec_mask = ntb_db_vector_mask(nt->ntb, vector);
	while (vec_mask != 0) {
		qp_num = ffsll(vec_mask) - 1;

		if (test_bit(qp_num, &db_bits)) {
			qp = &nt->qp_vec[qp_num];
			taskqueue_enqueue(taskqueue_swi, &qp->rxc_db_work);
		}

		vec_mask &= ~(1ull << qp_num);
	}
}