1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-03 09:00:21 +00:00

Remove "diff" line indicator. Next to see if this code works or not.

Submitted by:	mmacy
Sponsored by:	Limelight Networks
This commit is contained in:
Sean Bruno 2018-06-19 15:55:21 +00:00
parent 80eb81f6f0
commit d6c579b29f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335372

View File

@ -386,9 +386,9 @@ ixlv_configure_queues(struct ixlv_sc *sc)
{
device_t dev = sc->dev;
struct ixl_vsi *vsi = &sc->vsi;
+ if_softc_ctx_t scctx = iflib_get_softc_ctx(vsi->ctx);
+ struct ixl_tx_queue *tx_que = vsi->tx_queues;
+ struct ixl_rx_queue *rx_que = vsi->rx_queues;
if_softc_ctx_t scctx = iflib_get_softc_ctx(vsi->ctx);
struct ixl_tx_queue *tx_que = vsi->tx_queues;
struct ixl_rx_queue *rx_que = vsi->rx_queues;
struct tx_ring *txr;
struct rx_ring *rxr;
int len, pairs;
@ -396,9 +396,9 @@ ixlv_configure_queues(struct ixlv_sc *sc)
struct virtchnl_vsi_queue_config_info *vqci;
struct virtchnl_queue_pair_info *vqpi;
+ /* XXX: Linux PF driver wants matching ids in each tx/rx struct, so both TX/RX
+ * queues of a pair need to be configured */
+ pairs = max(vsi->num_tx_queues, vsi->num_rx_queues);
/* XXX: Linux PF driver wants matching ids in each tx/rx struct, so both TX/RX
* queues of a pair need to be configured */
pairs = max(vsi->num_tx_queues, vsi->num_rx_queues);
len = sizeof(struct virtchnl_vsi_queue_config_info) +
(sizeof(struct virtchnl_queue_pair_info) * pairs);
vqci = malloc(len, M_DEVBUF, M_NOWAIT | M_ZERO);
@ -413,24 +413,24 @@ ixlv_configure_queues(struct ixlv_sc *sc)
/* Size check is not needed here - HW max is 16 queue pairs, and we
* can fit info for 31 of them into the AQ buffer before it overflows.
*/
+ for (int i = 0; i < pairs; i++, tx_que++, rx_que++, vqpi++) {
+ txr = &tx_que->txr;
+ rxr = &rx_que->rxr;
+
for (int i = 0; i < pairs; i++, tx_que++, rx_que++, vqpi++) {
txr = &tx_que->txr;
rxr = &rx_que->rxr;
vqpi->txq.vsi_id = vqci->vsi_id;
vqpi->txq.queue_id = i;
+ vqpi->txq.ring_len = scctx->isc_ntxd[0];
+ vqpi->txq.dma_ring_addr = txr->tx_paddr;
vqpi->txq.ring_len = scctx->isc_ntxd[0];
vqpi->txq.dma_ring_addr = txr->tx_paddr;
/* Enable Head writeback */
vqpi->txq.headwb_enabled = 0;
vqpi->txq.dma_headwb_addr = 0;
vqpi->rxq.vsi_id = vqci->vsi_id;
vqpi->rxq.queue_id = i;
+ vqpi->rxq.ring_len = scctx->isc_nrxd[0];
+ vqpi->rxq.dma_ring_addr = rxr->rx_paddr;
+ vqpi->rxq.max_pkt_size = scctx->isc_max_frame_size;
+ // TODO: Get this value from iflib, somehow
vqpi->rxq.ring_len = scctx->isc_nrxd[0];
vqpi->rxq.dma_ring_addr = rxr->rx_paddr;
vqpi->rxq.max_pkt_size = scctx->isc_max_frame_size;
// TODO: Get this value from iflib, somehow
vqpi->rxq.databuffer_size = rxr->mbuf_sz;
vqpi->rxq.splithdr_enabled = 0;
}
@ -451,8 +451,8 @@ ixlv_enable_queues(struct ixlv_sc *sc)
struct virtchnl_queue_select vqs;
vqs.vsi_id = sc->vsi_res->vsi_id;
+ /* XXX: In Linux PF, as long as neither of these is 0,
+ * every queue in VF VSI is enabled. */
/* XXX: In Linux PF, as long as neither of these is 0,
* every queue in VF VSI is enabled. */
vqs.tx_queues = (1 << sc->vsi_res->num_queue_pairs) - 1;
vqs.rx_queues = vqs.tx_queues;
ixlv_send_pf_msg(sc, VIRTCHNL_OP_ENABLE_QUEUES,
@ -470,8 +470,8 @@ ixlv_disable_queues(struct ixlv_sc *sc)
struct virtchnl_queue_select vqs;
vqs.vsi_id = sc->vsi_res->vsi_id;
+ /* XXX: In Linux PF, as long as neither of these is 0,
+ * every queue in VF VSI is disabled. */
/* XXX: In Linux PF, as long as neither of these is 0,
* every queue in VF VSI is disabled. */
vqs.tx_queues = (1 << sc->vsi_res->num_queue_pairs) - 1;
vqs.rx_queues = vqs.tx_queues;
ixlv_send_pf_msg(sc, VIRTCHNL_OP_DISABLE_QUEUES,
@ -490,29 +490,29 @@ ixlv_map_queues(struct ixlv_sc *sc)
struct virtchnl_irq_map_info *vm;
int i, q, len;
struct ixl_vsi *vsi = &sc->vsi;
+ struct ixl_rx_queue *rx_que = vsi->rx_queues;
+ if_softc_ctx_t scctx = vsi->shared;
+ device_t dev = sc->dev;
+
+ // XXX: What happens if we only get 1 MSI-X vector?
+ MPASS(scctx->isc_vectors > 1);
struct ixl_rx_queue *rx_que = vsi->rx_queues;
if_softc_ctx_t scctx = vsi->shared;
device_t dev = sc->dev;
// XXX: What happens if we only get 1 MSI-X vector?
MPASS(scctx->isc_vectors > 1);
/* How many queue vectors, adminq uses one */
+ // XXX: How do we know how many interrupt vectors we have?
+ q = scctx->isc_vectors - 1;
// XXX: How do we know how many interrupt vectors we have?
q = scctx->isc_vectors - 1;
len = sizeof(struct virtchnl_irq_map_info) +
+ (scctx->isc_vectors * sizeof(struct i40e_virtchnl_vector_map));
(scctx->isc_vectors * sizeof(struct i40e_virtchnl_vector_map));
vm = malloc(len, M_DEVBUF, M_NOWAIT);
if (!vm) {
+ device_printf(dev, "%s: unable to allocate memory\n", __func__);
device_printf(dev, "%s: unable to allocate memory\n", __func__);
ixl_vc_schedule_retry(&sc->vc_mgr);
return;
}
+ vm->num_vectors = scctx->isc_vectors;
vm->num_vectors = scctx->isc_vectors;
/* Queue vectors first */
+ for (i = 0; i < q; i++, rx_que++) {
for (i = 0; i < q; i++, rx_que++) {
vm->vecmap[i].vsi_id = sc->vsi_res->vsi_id;
vm->vecmap[i].vector_id = i + 1; /* first is adminq */
// vm->vecmap[i].txq_map = (1 << que->me);
@ -890,12 +890,12 @@ void
ixlv_set_rss_hena(struct ixlv_sc *sc)
{
struct virtchnl_rss_hena hena;
+ struct i40e_hw *hw = &sc->hw;
struct i40e_hw *hw = &sc->hw;
+ if (hw->mac.type == I40E_MAC_X722_VF)
+ hena.hena = IXL_DEFAULT_RSS_HENA_X722;
+ else
+ hena.hena = IXL_DEFAULT_RSS_HENA_XL710;
if (hw->mac.type == I40E_MAC_X722_VF)
hena.hena = IXL_DEFAULT_RSS_HENA_X722;
else
hena.hena = IXL_DEFAULT_RSS_HENA_XL710;
ixlv_send_pf_msg(sc, VIRTCHNL_OP_SET_RSS_HENA,
(u8 *)&hena, sizeof(hena));
@ -931,9 +931,9 @@ ixlv_config_rss_lut(struct ixlv_sc *sc)
* num_queues.)
*/
que_id = rss_get_indirection_to_bucket(i);
+ que_id = que_id % sc->vsi.num_rx_queues;
que_id = que_id % sc->vsi.num_rx_queues;
#else
+ que_id = i % sc->vsi.num_rx_queues;
que_id = i % sc->vsi.num_rx_queues;
#endif
lut = que_id & IXL_RSS_VSI_LUT_ENTRY_MASK;
rss_lut_msg->lut[i] = lut;
@ -980,9 +980,7 @@ ixlv_vc_completion(struct ixlv_sc *sc,
case VIRTCHNL_EVENT_RESET_IMPENDING:
device_printf(dev, "PF initiated reset!\n");
sc->init_state = IXLV_RESET_PENDING;
+ // mtx_unlock(&sc->mtx);
+ ixlv_if_init(sc->vsi.ctx);
+ // mtx_lock(&sc->mtx);
ixlv_if_init(sc->vsi.ctx);
break;
default:
device_printf(dev, "%s: Unknown event %d from AQ\n",