/* polling for result */ for (i = 0; i < MLX4_EN_LOOPBACK_RETRIES; ++i) {
msleep(MLX4_EN_LOOPBACK_TIMEOUT); if (priv->loopback_ok) {
loopback_ok = 1; break;
}
} if (!loopback_ok)
en_err(priv, "Loopback packet didn't arrive\n");
staticint mlx4_en_test_interrupts(struct mlx4_en_priv *priv)
{ struct mlx4_en_dev *mdev = priv->mdev; int err = 0; int i = 0;
err = mlx4_test_async(mdev->dev); /* When not in MSI_X or slave, test only async */ if (!(mdev->dev->flags & MLX4_FLAG_MSI_X) || mlx4_is_slave(mdev->dev)) return err;
/* A loop over all completion vectors of current port, *foreachvectorcheckwhetheritworksbymappingcommand *completionstothatvectorandperformingaNOPcommand
*/ for (i = 0; i < priv->rx_ring_num; i++) {
err = mlx4_test_interrupt(mdev->dev, priv->rx_cq[i]->vector); if (err) break;
}
return err;
}
staticint mlx4_en_test_link(struct mlx4_en_priv *priv)
{ if (mlx4_en_QUERY_PORT(priv->mdev, priv->port)) return -ENOMEM; if (priv->port_state.link_state == 1) return0; else return1;
}
if (*flags & ETH_TEST_FL_OFFLINE) { /* disable the interface */
carrier_ok = netif_carrier_ok(dev);
netif_carrier_off(dev); /* Wait until all tx queues are empty. *thereshouldnotbeanyadditionalincomingtraffic
* since we turned the carrier off */
msleep(200);
if (priv->mdev->dev->caps.flags &
MLX4_DEV_CAP_FLAG_UC_LOOPBACK) {
buf[3] = mlx4_en_test_registers(priv); if (priv->port_up && dev->mtu >= MLX4_SELFTEST_LB_MIN_MTU)
buf[4] = mlx4_en_test_loopback(priv);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.