[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YHQ9wBFbjpRIj45k@lunn.ch>
Date: Mon, 12 Apr 2021 14:32:00 +0200
From: Andrew Lunn <andrew@...n.ch>
To: Dexuan Cui <decui@...rosoft.com>
Cc: davem@...emloft.net, kuba@...nel.org, kys@...rosoft.com,
haiyangz@...rosoft.com, sthemmin@...rosoft.com, wei.liu@...nel.org,
liuwe@...rosoft.com, netdev@...r.kernel.org, leon@...nel.org,
bernd@...rovitsch.priv.at, rdunlap@...radead.org,
shacharr@...rosoft.com, linux-kernel@...r.kernel.org,
linux-hyperv@...r.kernel.org
Subject: Re: [PATCH v4 net-next] net: mana: Add a driver for Microsoft Azure
Network Adapter (MANA)
> +static void mana_gd_deregiser_irq(struct gdma_queue *queue)
> +{
> + struct gdma_dev *gd = queue->gdma_dev;
> + struct gdma_irq_context *gic;
> + struct gdma_context *gc;
> + struct gdma_resource *r;
> + unsigned int msix_index;
> + unsigned long flags;
> +
> + /* At most num_online_cpus() + 1 interrupts are used. */
> + msix_index = queue->eq.msix_index;
> + if (WARN_ON(msix_index > num_online_cpus()))
> + return;
Do you handle hot{un}plug of CPUs?
> +static void mana_hwc_init_event_handler(void *ctx, struct gdma_queue *q_self,
> + struct gdma_event *event)
> +{
> + struct hw_channel_context *hwc = ctx;
> + struct gdma_dev *gd = hwc->gdma_dev;
> + union hwc_init_type_data type_data;
> + union hwc_init_eq_id_db eq_db;
> + u32 type, val;
> +
> + switch (event->type) {
> + case GDMA_EQE_HWC_INIT_EQ_ID_DB:
> + eq_db.as_uint32 = event->details[0];
> + hwc->cq->gdma_eq->id = eq_db.eq_id;
> + gd->doorbell = eq_db.doorbell;
> + break;
> +
> + case GDMA_EQE_HWC_INIT_DATA:
> +
> + type_data.as_uint32 = event->details[0];
> +
> + case GDMA_EQE_HWC_INIT_DONE:
> + complete(&hwc->hwc_init_eqe_comp);
> + break;
...
> + default:
> + WARN_ON(1);
> + break;
> + }
Are these events from the firmware? If you have newer firmware with an
older driver, are you going to spam the kernel log with WARN_ON dumps?
> +static int mana_move_wq_tail(struct gdma_queue *wq, u32 num_units)
> +{
> + u32 used_space_old;
> + u32 used_space_new;
> +
> + used_space_old = wq->head - wq->tail;
> + used_space_new = wq->head - (wq->tail + num_units);
> +
> + if (used_space_new > used_space_old) {
> + WARN_ON(1);
> + return -ERANGE;
> + }
You could replace the 1 by the condition. There are a couple of these.
Andrew
Powered by blists - more mailing lists