Skip to content

Commit 8c9d956

Browse files
emuslndavem330
authored andcommitted
ionic: allow adminq requests to override default error message
The AdminQ handler has an error handler that automatically prints an error message when the request has failed. However, there are situations where the caller can expect that it might fail and has an alternative strategy, thus may not want the error message sent to the log, such as hitting -ENOSPC when adding a new vlan id. We add a new interface to the AdminQ API to allow for override of the default behavior, and an interface to the use standard error message formatting. Signed-off-by: Shannon Nelson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9b0b6ba commit 8c9d956

File tree

3 files changed

+42
-20
lines changed

3 files changed

+42
-20
lines changed

drivers/net/ethernet/pensando/ionic/ionic.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,13 @@ struct ionic_admin_ctx {
7070
};
7171

7272
int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
73-
int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx, int err);
73+
int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx,
74+
const int err, const bool do_msg);
7475
int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
76+
int ionic_adminq_post_wait_nomsg(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
77+
void ionic_adminq_netdev_err_print(struct ionic_lif *lif, u8 opcode,
78+
u8 status, int err);
79+
7580
int ionic_dev_cmd_wait(struct ionic *ionic, unsigned long max_wait);
7681
int ionic_set_dma_mask(struct ionic *ionic);
7782
int ionic_setup(struct ionic *ionic);

drivers/net/ethernet/pensando/ionic/ionic_main.c

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -212,24 +212,28 @@ static void ionic_adminq_flush(struct ionic_lif *lif)
212212
spin_unlock_irqrestore(&lif->adminq_lock, irqflags);
213213
}
214214

215+
void ionic_adminq_netdev_err_print(struct ionic_lif *lif, u8 opcode,
216+
u8 status, int err)
217+
{
218+
netdev_err(lif->netdev, "%s (%d) failed: %s (%d)\n",
219+
ionic_opcode_to_str(opcode), opcode,
220+
ionic_error_to_str(status), err);
221+
}
222+
215223
static int ionic_adminq_check_err(struct ionic_lif *lif,
216224
struct ionic_admin_ctx *ctx,
217-
bool timeout)
225+
const bool timeout,
226+
const bool do_msg)
218227
{
219-
struct net_device *netdev = lif->netdev;
220-
const char *opcode_str;
221-
const char *status_str;
222228
int err = 0;
223229

224230
if (ctx->comp.comp.status || timeout) {
225-
opcode_str = ionic_opcode_to_str(ctx->cmd.cmd.opcode);
226-
status_str = ionic_error_to_str(ctx->comp.comp.status);
227231
err = timeout ? -ETIMEDOUT :
228232
ionic_error_to_errno(ctx->comp.comp.status);
229233

230-
netdev_err(netdev, "%s (%d) failed: %s (%d)\n",
231-
opcode_str, ctx->cmd.cmd.opcode,
232-
timeout ? "TIMEOUT" : status_str, err);
234+
if (do_msg)
235+
ionic_adminq_netdev_err_print(lif, ctx->cmd.cmd.opcode,
236+
ctx->comp.comp.status, err);
233237

234238
if (timeout)
235239
ionic_adminq_flush(lif);
@@ -298,7 +302,8 @@ int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
298302
return err;
299303
}
300304

301-
int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx, int err)
305+
int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx,
306+
const int err, const bool do_msg)
302307
{
303308
struct net_device *netdev = lif->netdev;
304309
unsigned long time_limit;
@@ -310,7 +315,7 @@ int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx, int er
310315
name = ionic_opcode_to_str(ctx->cmd.cmd.opcode);
311316

312317
if (err) {
313-
if (!test_bit(IONIC_LIF_F_FW_RESET, lif->state))
318+
if (do_msg && !test_bit(IONIC_LIF_F_FW_RESET, lif->state))
314319
netdev_err(netdev, "Posting of %s (%d) failed: %d\n",
315320
name, ctx->cmd.cmd.opcode, err);
316321
return err;
@@ -328,8 +333,9 @@ int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx, int er
328333

329334
/* interrupt the wait if FW stopped */
330335
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state)) {
331-
netdev_err(netdev, "%s (%d) interrupted, FW in reset\n",
332-
name, ctx->cmd.cmd.opcode);
336+
if (do_msg)
337+
netdev_err(netdev, "%s (%d) interrupted, FW in reset\n",
338+
name, ctx->cmd.cmd.opcode);
333339
return -ENXIO;
334340
}
335341

@@ -339,7 +345,9 @@ int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx, int er
339345
dev_dbg(lif->ionic->dev, "%s: elapsed %d msecs\n",
340346
__func__, jiffies_to_msecs(time_done - time_start));
341347

342-
return ionic_adminq_check_err(lif, ctx, time_after_eq(time_done, time_limit));
348+
return ionic_adminq_check_err(lif, ctx,
349+
time_after_eq(time_done, time_limit),
350+
do_msg);
343351
}
344352

345353
int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
@@ -348,7 +356,16 @@ int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
348356

349357
err = ionic_adminq_post(lif, ctx);
350358

351-
return ionic_adminq_wait(lif, ctx, err);
359+
return ionic_adminq_wait(lif, ctx, err, true);
360+
}
361+
362+
int ionic_adminq_post_wait_nomsg(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
363+
{
364+
int err;
365+
366+
err = ionic_adminq_post(lif, ctx);
367+
368+
return ionic_adminq_wait(lif, ctx, err, false);
352369
}
353370

354371
static void ionic_dev_cmd_clean(struct ionic *ionic)

drivers/net/ethernet/pensando/ionic/ionic_phc.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ static int ionic_phc_adjfine(struct ptp_clock_info *info, long scaled_ppm)
348348

349349
spin_unlock_irqrestore(&phc->lock, irqflags);
350350

351-
return ionic_adminq_wait(phc->lif, &ctx, err);
351+
return ionic_adminq_wait(phc->lif, &ctx, err, true);
352352
}
353353

354354
static int ionic_phc_adjtime(struct ptp_clock_info *info, s64 delta)
@@ -373,7 +373,7 @@ static int ionic_phc_adjtime(struct ptp_clock_info *info, s64 delta)
373373

374374
spin_unlock_irqrestore(&phc->lock, irqflags);
375375

376-
return ionic_adminq_wait(phc->lif, &ctx, err);
376+
return ionic_adminq_wait(phc->lif, &ctx, err, true);
377377
}
378378

379379
static int ionic_phc_settime64(struct ptp_clock_info *info,
@@ -402,7 +402,7 @@ static int ionic_phc_settime64(struct ptp_clock_info *info,
402402

403403
spin_unlock_irqrestore(&phc->lock, irqflags);
404404

405-
return ionic_adminq_wait(phc->lif, &ctx, err);
405+
return ionic_adminq_wait(phc->lif, &ctx, err, true);
406406
}
407407

408408
static int ionic_phc_gettimex64(struct ptp_clock_info *info,
@@ -459,7 +459,7 @@ static long ionic_phc_aux_work(struct ptp_clock_info *info)
459459

460460
spin_unlock_irqrestore(&phc->lock, irqflags);
461461

462-
ionic_adminq_wait(phc->lif, &ctx, err);
462+
ionic_adminq_wait(phc->lif, &ctx, err, true);
463463

464464
return phc->aux_work_delay;
465465
}

0 commit comments

Comments
 (0)