svn commit: r347815 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:24:21 2019
New Revision: 347815
URL: https://svnweb.freebsd.org/changeset/base/347815

Log:
  MFC r347264:
  Configure firmware to use RX hash format in mini CQE in mlx5en(4).
  
  When using CQE zipping, one can choose between RX hash and Checksum.
  This will indicate the parameter on which a zipping session should be
  stopped.
  
  While porting the Linux code, Checksum was chosen. However, the value
  of Checksum is not being used anywhere.
  For the FreeBSD driver, we prefer to use the RX hash format which will
  guarantee the RX hash value for all the mini CQEs.
  While at it, make sure to initialize the Checksum value in the
  decompressed CQE.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:24:11 
2019(r347814)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:24:21 
2019(r347815)
@@ -1850,13 +1850,15 @@ mlx5e_build_rx_cq_param(struct mlx5e_priv *priv,
struct net_dim_cq_moder curr;
void *cqc = param->cqc;
 
-
/*
-* TODO The sysctl to control on/off is a bool value for now, which 
means
-* we only support CSUM, once HASH is implemnted we'll need to address 
that.
+* We use MLX5_CQE_FORMAT_HASH because the RX hash mini CQE
+* format is more beneficial for FreeBSD use case.
+*
+* Adding support for MLX5_CQE_FORMAT_CSUM will require changes
+* in mlx5e_decompress_cqe.
 */
if (priv->params.cqe_zipping_en) {
-   MLX5_SET(cqc, cqc, mini_cqe_res_format, MLX5_CQE_FORMAT_CSUM);
+   MLX5_SET(cqc, cqc, mini_cqe_res_format, MLX5_CQE_FORMAT_HASH);
MLX5_SET(cqc, cqc, cqe_compression_en, 1);
}
 

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 17:24:11 2019
(r347814)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 17:24:21 2019
(r347815)
@@ -340,7 +340,12 @@ mlx5e_decompress_cqe(struct mlx5e_cq *cq, struct mlx5_
 */
title->byte_cnt = mini->byte_cnt;
title->wqe_counter = cpu_to_be16((wqe_counter + i) & cq->wq.sz_m1);
-   title->check_sum = mini->checksum;
+   title->rss_hash_result = mini->rx_hash_result;
+   /*
+* Since we use MLX5_CQE_FORMAT_HASH when creating the RX CQ,
+* the value of the checksum should be ignored.
+*/
+   title->check_sum = 0;
title->op_own = (title->op_own & 0xf0) |
(((cq->wq.cc + i) >> cq->wq.log_sz) & 1);
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347805 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:17:12 2019
New Revision: 347805
URL: https://svnweb.freebsd.org/changeset/base/347805

Log:
  MFC r347255:
  Fix tx_jumbo_packets counter in mlx5en(4).
  
  Instead of reading Ethernet RFC 2819 pXtoYoctets counters from
  hardware which counts RX octets, count tx_stat_pXtoYoctets from
  Ethernet extended counters which counts TX octets.
  
  TX jumbo counters should be accumulated only after the PPCNT
  counters were fetched from hardware with their latest value.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:16:31 
2019(r347804)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:17:12 
2019(r347805)
@@ -540,12 +540,6 @@ mlx5e_update_stats_work(struct work_struct *work)
}
}
 
-   s->tx_jumbo_packets =
-   priv->stats.port_stats_debug.p1519to2047octets +
-   priv->stats.port_stats_debug.p2048to4095octets +
-   priv->stats.port_stats_debug.p4096to8191octets +
-   priv->stats.port_stats_debug.p8192to10239octets;
-
/* update counters */
s->tso_packets = tso_packets;
s->tso_bytes = tso_bytes;
@@ -644,6 +638,12 @@ mlx5e_update_stats_work(struct work_struct *work)
 
/* Get physical port counters */
mlx5e_update_pport_counters(priv);
+
+   s->tx_jumbo_packets =
+   priv->stats.port_stats_debug.tx_stat_p1519to2047octets +
+   priv->stats.port_stats_debug.tx_stat_p2048to4095octets +
+   priv->stats.port_stats_debug.tx_stat_p4096to8191octets +
+   priv->stats.port_stats_debug.tx_stat_p8192to10239octets;
 
 #if (__FreeBSD_version < 110)
/* no get_counters interface in fbsd 10 */
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347811 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:22:11 2019
New Revision: 347811
URL: https://svnweb.freebsd.org/changeset/base/347811

Log:
  MFC r347261:
  Implement fast close of RX channel in mlx5en(4).
  
  Instead of waiting for all jobs to be cancelled, simply close the completion
  queue to prevent more completion events and let mlx5e_destroy_rq() cleanup
  the remaining mbufs.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:21:27 
2019(r347810)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:22:11 
2019(r347811)
@@ -1033,17 +1033,10 @@ mlx5e_close_rq(struct mlx5e_rq *rq)
 static void
 mlx5e_close_rq_wait(struct mlx5e_rq *rq)
 {
-   struct mlx5_core_dev *mdev = rq->channel->priv->mdev;
 
-   /* wait till RQ is empty */
-   while (!mlx5_wq_ll_is_empty(&rq->wq) &&
-  (mdev->state != MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
-   msleep(4);
-   rq->cq.mcq.comp(&rq->cq.mcq);
-   }
-
-   cancel_work_sync(&rq->dim.work);
mlx5e_disable_rq(rq);
+   mlx5e_close_cq(&rq->cq);
+   cancel_work_sync(&rq->dim.work);
mlx5e_destroy_rq(rq);
 }
 
@@ -1756,7 +1749,6 @@ mlx5e_close_channel_wait(struct mlx5e_channel *c)
 {
mlx5e_close_rq_wait(&c->rq);
mlx5e_close_sqs_wait(c);
-   mlx5e_close_cq(&c->rq.cq);
mlx5e_close_tx_cqs(c);
/* destroy mutexes */
mlx5e_chan_mtx_destroy(c);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347813 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:23:36 2019
New Revision: 347813
URL: https://svnweb.freebsd.org/changeset/base/347813

Log:
  MFC r347263:
  Disable CQE zipping by default in mlx5en(4).
  
  After doing performance measurements, it seems like CQE zipping doesn't
  have any significant benefit.
  Moreover, we know that this feature is disabled by default on other
  operating systems (Linux for example).
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:22:57 
2019(r347812)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:23:36 
2019(r347813)
@@ -3061,7 +3061,12 @@ mlx5e_build_ifp_priv(struct mlx5_core_dev *mdev,
priv->params.hw_lro_en = false;
priv->params.lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
 
-   priv->params.cqe_zipping_en = !!MLX5_CAP_GEN(mdev, cqe_compression);
+   /*
+* CQE zipping is currently defaulted to off. when it won't
+* anymore we will consider the HW capability:
+* "!!MLX5_CAP_GEN(mdev, cqe_compression)"
+*/
+   priv->params.cqe_zipping_en = false;
 
priv->mdev = mdev;
priv->params.num_channels = num_comp_vectors;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347807 - stable/11/sys/ofed/drivers/infiniband/core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:18:29 2019
New Revision: 347807
URL: https://svnweb.freebsd.org/changeset/base/347807

Log:
  MFC r347257:
  Make sure to error out when arming the CQ fails in ibcore.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c
==
--- stable/11/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c  Thu May 16 
17:17:52 2019(r347806)
+++ stable/11/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c  Thu May 16 
17:18:29 2019(r347807)
@@ -1692,6 +1692,7 @@ ssize_t ib_uverbs_req_notify_cq(struct ib_uverbs_file 
 {
struct ib_uverbs_req_notify_cq cmd;
struct ib_cq  *cq;
+   int retval;
 
if (copy_from_user(&cmd, buf, sizeof cmd))
return -EFAULT;
@@ -1700,12 +1701,15 @@ ssize_t ib_uverbs_req_notify_cq(struct ib_uverbs_file 
if (!cq)
return -EINVAL;
 
-   ib_req_notify_cq(cq, cmd.solicited_only ?
-IB_CQ_SOLICITED : IB_CQ_NEXT_COMP);
+   if (ib_req_notify_cq(cq, cmd.solicited_only ?
+IB_CQ_SOLICITED : IB_CQ_NEXT_COMP) < 0)
+   retval = -ENXIO;
+   else
+   retval = in_len;
 
put_cq_read(cq);
 
-   return in_len;
+   return retval;
 }
 
 ssize_t ib_uverbs_destroy_cq(struct ib_uverbs_file *file,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347804 - in stable/11/sys/dev/mlx5: . mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:16:31 2019
New Revision: 347804
URL: https://svnweb.freebsd.org/changeset/base/347804

Log:
  MFC r347254:
  Update Ethernet extended counters in mlx5en(4).
  
  Expose all Ethernet extended counters those counters via debug_stats
  sysctl:
  dev.mce.X.debug_stats
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/en.h
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/11/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/11/sys/dev/mlx5/mlx5_en/en.h Thu May 16 17:15:41 2019
(r347803)
+++ stable/11/sys/dev/mlx5/mlx5_en/en.h Thu May 16 17:16:31 2019
(r347804)
@@ -254,6 +254,28 @@ struct mlx5e_vport_stats {
   m(+1, u64 out_multicast_pkts, "out_multicast_pkts", "Out multicast packets") 
\
   m(+1, u64 out_broadcast_pkts, "out_broadcast_pkts", "Out broadcast packets")
 
+#defineMLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(m)
\
+  m(+1, u64 port_transmit_wait_high, "port_transmit_wait_high", "Port transmit 
wait high") \
+  m(+1, u64 ecn_marked, "ecn_marked", "ECN marked")\
+  m(+1, u64 no_buffer_discard_mc, "no_buffer_discard_mc", "No buffer discard 
mc") \
+  m(+1, u64 rx_ebp, "rx_ebp", "RX EBP")
\
+  m(+1, u64 tx_ebp, "tx_ebp", "TX EBP")
\
+  m(+1, u64 rx_buffer_almost_full, "rx_buffer_almost_full", "RX buffer almost 
full") \
+  m(+1, u64 rx_buffer_full, "rx_buffer_full", "RX buffer full")\
+  m(+1, u64 rx_icrc_encapsulated, "rx_icrc_encapsulated", "RX ICRC 
encapsulated") \
+  m(+1, u64 ex_reserved_0, "ex_reserved_0", "Reserved") \
+  m(+1, u64 ex_reserved_1, "ex_reserved_1", "Reserved") \
+  m(+1, u64 tx_stat_p64octets, "tx_stat_p64octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p65to127octets, "tx_stat_p65to127octets", "Bytes") 
\
+  m(+1, u64 tx_stat_p128to255octets, "tx_stat_p128to255octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p256to511octets, "tx_stat_p256to511octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p512to1023octets, "tx_stat_p512to1023octets", "Bytes") 
\
+  m(+1, u64 tx_stat_p1024to1518octets, "tx_stat_p1024to1518octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p1519to2047octets, "tx_stat_p1519to2047octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p2048to4095octets, "tx_stat_p2048to4095octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p4096to8191octets, "tx_stat_p4096to8191octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p8192to10239octets, "tx_stat_p8192to10239octets", "Bytes")
+
 #defineMLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)   
\
   m(+1, u64 time_since_last_clear, "time_since_last_clear",
\
"Time since the last counters clear event (msec)")  
\
@@ -348,7 +370,8 @@ struct mlx5e_vport_stats {
 #defineMLX5E_PORT_STATS_DEBUG(m)   \
   MLX5E_PPORT_RFC2819_STATS_DEBUG(m)   \
   MLX5E_PPORT_RFC2863_STATS_DEBUG(m)   \
-  MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)
+  MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)\
+  MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(m)
 
 #defineMLX5E_PPORT_IEEE802_3_STATS_NUM \
   (0 MLX5E_PPORT_IEEE802_3_STATS(MLX5E_STATS_COUNT))
@@ -365,6 +388,8 @@ struct mlx5e_vport_stats {
   (0 MLX5E_PPORT_RFC2863_STATS_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG_NUM \
   (0 MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(MLX5E_STATS_COUNT))
+#defineMLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM \
+  (0 MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PORT_STATS_DEBUG_NUM \
   (0 MLX5E_PORT_STATS_DEBUG(MLX5E_STATS_COUNT))
 

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:15:41 
2019(r347803)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:16:31 
2019(r347804)
@@ -440,6 +440,12 @@ mlx5e_update_pport_counters(struct mlx5e_priv *priv)
for (x = 0; x != MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG_NUM; x++, y++)
s_debug->arg[y] = be64toh(ptr[x]);
 
+   /* read Extended Ethernet counter group using predefined counter layout 
*/
+   MLX5_SET(ppcnt_reg, in, grp, MLX5_ETHERNET_EXTENDED_COUNTERS_GROUP);
+   mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
+   for (x = 0; x != MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM; x++, 
y++)
+   s_debug->arg[y] = be64toh(ptr[x]);
+
/* read per-priority counters */
MLX5_SET(ppcnt_reg, in, grp, MLX5_PER_PRIORITY_COUNTERS_GROUP);
 
@@ 

svn commit: r347809 - stable/11/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:19:48 2019
New Revision: 347809
URL: https://svnweb.freebsd.org/changeset/base/347809

Log:
  MFC r347259:
  Remove unused module parameter in mlx5ib.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 17:19:03 
2019(r347808)
+++ stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 17:19:48 
2019(r347809)
@@ -63,10 +63,6 @@ MODULE_DEPEND(mlx5ib, mlx5, 1, 1, 1);
 MODULE_DEPEND(mlx5ib, ibcore, 1, 1, 1);
 MODULE_VERSION(mlx5ib, 1);
 
-static int deprecated_prof_sel = 2;
-module_param_named(prof_sel, deprecated_prof_sel, int, 0444);
-MODULE_PARM_DESC(prof_sel, "profile selector. Deprecated here. Moved to module 
mlx5_core");
-
 static const char mlx5_version[] =
DRIVER_NAME ": Mellanox Connect-IB Infiniband driver "
DRIVER_VERSION " (" DRIVER_RELDATE ")\n";
@@ -3301,9 +3297,6 @@ static struct mlx5_interface mlx5_ib_interface = {
 static int __init mlx5_ib_init(void)
 {
int err;
-
-   if (deprecated_prof_sel != 2)
-   pr_warn("prof_sel is deprecated for mlx5_ib, set it for 
mlx5_core\n");
 
err = mlx5_ib_odp_init();
if (err)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347812 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:22:57 2019
New Revision: 347812
URL: https://svnweb.freebsd.org/changeset/base/347812

Log:
  MFC r347262:
  Split mlx5e_update_stats_work() in mlx5en(4).
  
  Split the function into the mlx5e_update_stats_locked() core and make
  mlx5e_update_stats_work() call the _locked helper, similar to many other
  places in the kernel. This improves the code structure, making the
  locking clean.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:22:11 
2019(r347811)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:22:57 
2019(r347812)
@@ -475,10 +475,8 @@ free_out:
  * configuration lock.
  */
 static void
-mlx5e_update_stats_work(struct work_struct *work)
+mlx5e_update_stats_locked(struct mlx5e_priv *priv)
 {
-   struct mlx5e_priv *priv = container_of(work, struct mlx5e_priv,
-   update_stats_work);
struct mlx5_core_dev *mdev = priv->mdev;
struct mlx5e_vport_stats *s = &priv->stats.vport;
struct mlx5e_sq_stats *sq_stats;
@@ -505,12 +503,9 @@ mlx5e_update_stats_work(struct work_struct *work)
int i;
int j;
 
-   PRIV_LOCK(priv);
out = mlx5_vzalloc(outlen);
if (out == NULL)
goto free_out;
-   if (test_bit(MLX5E_STATE_OPENED, &priv->state) == 0)
-   goto free_out;
 
/* Collect firts the SW counters and then HW for consistency */
for (i = 0; i < priv->params.num_channels; i++) {
@@ -565,78 +560,70 @@ mlx5e_update_stats_work(struct work_struct *work)
memset(out, 0, outlen);
 
/* get number of out-of-buffer drops first */
-   if (mlx5_vport_query_out_of_rx_buffer(mdev, priv->counter_set_id,
-   &rx_out_of_buffer))
-   goto free_out;
+   if (test_bit(MLX5E_STATE_OPENED, &priv->state) != 0 &&
+   mlx5_vport_query_out_of_rx_buffer(mdev, priv->counter_set_id,
+   &rx_out_of_buffer) == 0) {
+   /* accumulate difference into a 64-bit counter */
+   s->rx_out_of_buffer += (u64)(u32)(rx_out_of_buffer -
+   s->rx_out_of_buffer_prev);
+   s->rx_out_of_buffer_prev = rx_out_of_buffer;
+   }
 
-   /* accumulate difference into a 64-bit counter */
-   s->rx_out_of_buffer += (u64)(u32)(rx_out_of_buffer - 
s->rx_out_of_buffer_prev);
-   s->rx_out_of_buffer_prev = rx_out_of_buffer;
-
/* get port statistics */
-   if (mlx5_cmd_exec(mdev, in, sizeof(in), out, outlen))
-   goto free_out;
-
+   if (mlx5_cmd_exec(mdev, in, sizeof(in), out, outlen) == 0) {
 #defineMLX5_GET_CTR(out, x) \
MLX5_GET64(query_vport_counter_out, out, x)
 
-   s->rx_error_packets =
-   MLX5_GET_CTR(out, received_errors.packets);
-   s->rx_error_bytes =
-   MLX5_GET_CTR(out, received_errors.octets);
-   s->tx_error_packets =
-   MLX5_GET_CTR(out, transmit_errors.packets);
-   s->tx_error_bytes =
-   MLX5_GET_CTR(out, transmit_errors.octets);
+   s->rx_error_packets =
+   MLX5_GET_CTR(out, received_errors.packets);
+   s->rx_error_bytes =
+   MLX5_GET_CTR(out, received_errors.octets);
+   s->tx_error_packets =
+   MLX5_GET_CTR(out, transmit_errors.packets);
+   s->tx_error_bytes =
+   MLX5_GET_CTR(out, transmit_errors.octets);
 
-   s->rx_unicast_packets =
-   MLX5_GET_CTR(out, received_eth_unicast.packets);
-   s->rx_unicast_bytes =
-   MLX5_GET_CTR(out, received_eth_unicast.octets);
-   s->tx_unicast_packets =
-   MLX5_GET_CTR(out, transmitted_eth_unicast.packets);
-   s->tx_unicast_bytes =
-   MLX5_GET_CTR(out, transmitted_eth_unicast.octets);
+   s->rx_unicast_packets =
+   MLX5_GET_CTR(out, received_eth_unicast.packets);
+   s->rx_unicast_bytes =
+   MLX5_GET_CTR(out, received_eth_unicast.octets);
+   s->tx_unicast_packets =
+   MLX5_GET_CTR(out, transmitted_eth_unicast.packets);
+   s->tx_unicast_bytes =
+   MLX5_GET_CTR(out, transmitted_eth_unicast.octets);
 
-   s->rx_multicast_packets =
-   MLX5_GET_CTR(out, received_eth_multicast.packets);
-   s->rx_multicast_bytes =
-   MLX5_GET_CTR(out, received_eth_multicast.octets);
-   s->tx_multicast_packets =
-   MLX5_GET_CTR(out, transmitted_eth_multicast.packets);
-   s->tx_multicast_bytes =
-   MLX5_GET_CTR(out, transmitted_eth_multicast.octets);
+   s->rx_multi

svn commit: r347810 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:21:27 2019
New Revision: 347810
URL: https://svnweb.freebsd.org/changeset/base/347810

Log:
  MFC r347260 and r347326:
  Correct number of elements for priority to traffic class mappings in 
mlx5en(4).
  
  The number of priorities is always 8, while the number of traffic classes
  supported can vary. While at it convert the sysctl node into an array.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/en.h
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/11/sys/dev/mlx5/mlx5_en/en.h Thu May 16 17:19:48 2019
(r347809)
+++ stable/11/sys/dev/mlx5/mlx5_en/en.h Thu May 16 17:21:27 2019
(r347810)
@@ -72,6 +72,9 @@
 #include 
 #include 
 
+#defineMLX5E_MAX_PRIORITY 8
+
+/* IEEE 802.1Qaz standard supported values */
 #defineIEEE_8021QAZ_MAX_TCS8
 
 #defineMLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE0x7
@@ -481,10 +484,10 @@ struct mlx5e_params {
u16 rx_hash_log_tbl_sz;
u32 tx_pauseframe_control __aligned(4);
u32 rx_pauseframe_control __aligned(4);
-   u32 tx_priority_flow_control __aligned(4);
-   u32 rx_priority_flow_control __aligned(4);
u16 tx_max_inline;
u8  tx_min_inline_mode;
+   u8  tx_priority_flow_control;
+   u8  rx_priority_flow_control;
u8  channels_rsss;
 };
 
@@ -523,7 +526,7 @@ struct mlx5e_params_ethtool {
MLX5E_PARAMS(MLX5E_STATS_VAR)
u64 max_bw_value[IEEE_8021QAZ_MAX_TCS];
u8  max_bw_share[IEEE_8021QAZ_MAX_TCS];
-   u8  prio_tc[IEEE_8021QAZ_MAX_TCS];
+   u8  prio_tc[MLX5E_MAX_PRIORITY];
u8  dscp2prio[MLX5_MAX_SUPPORTED_DSCP];
u8  trust_state;
 };

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 17:19:48 
2019(r347809)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 17:21:27 
2019(r347810)
@@ -298,8 +298,8 @@ mlx5e_get_prio_tc(struct mlx5e_priv *priv)
return (EOPNOTSUPP);
}
 
-   for (i = 0; i <= mlx5_max_tc(priv->mdev); i++) {
-   err = -mlx5_query_port_prio_tc(mdev, i, 
&(priv->params_ethtool.prio_tc[i]));
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   err = -mlx5_query_port_prio_tc(mdev, i, 
priv->params_ethtool.prio_tc + i);
if (err)
break;
}
@@ -311,29 +311,35 @@ static int
 mlx5e_prio_to_tc_handler(SYSCTL_HANDLER_ARGS)
 {
struct mlx5e_priv *priv = arg1;
-   int prio_index = arg2;
struct mlx5_core_dev *mdev = priv->mdev;
+   uint8_t temp[MLX5E_MAX_PRIORITY];
int err;
-   uint8_t result;
+   int i;
 
PRIV_LOCK(priv);
-   result = priv->params_ethtool.prio_tc[prio_index];
-   err = sysctl_handle_8(oidp, &result, 0, req);
-   if (err || !req->newptr ||
-   result == priv->params_ethtool.prio_tc[prio_index])
+   err = SYSCTL_OUT(req, priv->params_ethtool.prio_tc, MLX5E_MAX_PRIORITY);
+   if (err || !req->newptr)
goto done;
-
-   if (result > mlx5_max_tc(mdev)) {
-   err = ERANGE;
-   goto done;
-   }
-
-   err = -mlx5_set_port_prio_tc(mdev, prio_index, result);
+   err = SYSCTL_IN(req, temp, MLX5E_MAX_PRIORITY);
if (err)
goto done;
 
-   priv->params_ethtool.prio_tc[prio_index] = result;
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   if (temp[i] > mlx5_max_tc(mdev)) {
+   err = ERANGE;
+   goto done;
+   }
+   }
 
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   if (temp[i] == priv->params_ethtool.prio_tc[i])
+   continue;
+   err = -mlx5_set_port_prio_tc(mdev, i, temp[i]);
+   if (err)
+   goto done;
+   /* update cached value */
+   priv->params_ethtool.prio_tc[i] = temp[i];
+   }
 done:
PRIV_UNLOCK(priv);
return (err);
@@ -1135,7 +1141,6 @@ mlx5e_create_diagnostics(struct mlx5e_priv *priv)
 void
 mlx5e_create_ethtool(struct mlx5e_priv *priv)
 {
-   struct mlx5_core_dev *mdev = priv->mdev;
struct sysctl_oid *node, *qos_node;
const char *pnameunit;
unsigned x;
@@ -1262,14 +1267,10 @@ mlx5e_create_ethtool(struct mlx5e_priv *priv)
 
/* Priority to traffic class mapping */
if (mlx5e_get_prio_tc(priv) == 0) {
-   for (i = 0; i <= mlx5_max_tc(mdev); i++) {
-   

svn commit: r347808 - in stable/11/sys/dev: mlx4/mlx4_ib mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:19:03 2019
New Revision: 347808
URL: https://svnweb.freebsd.org/changeset/base/347808

Log:
  MFC r347258:
  Make sure to error out when arming the CQ fails in mlx4ib and mlx5ib.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
  stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
==
--- stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 17:18:29 2019
(r347807)
+++ stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 17:19:03 2019
(r347808)
@@ -878,7 +878,8 @@ int mlx4_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
 
spin_lock_irqsave(&cq->lock, flags);
-   if (mdev->dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR) {
+   if (unlikely(mdev->dev->persist->state &
+MLX4_DEVICE_STATE_INTERNAL_ERROR)) {
mlx4_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -898,11 +899,18 @@ out:
 
 int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
 {
-   mlx4_cq_arm(&to_mcq(ibcq)->mcq,
+   struct mlx4_ib_cq *cq = to_mcq(ibcq);
+   struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
+
+   if (unlikely(mdev->dev->persist->state &
+MLX4_DEVICE_STATE_INTERNAL_ERROR))
+   return -1;
+
+   mlx4_cq_arm(&cq->mcq,
(flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
MLX4_CQ_DB_REQ_NOT_SOL : MLX4_CQ_DB_REQ_NOT,
-   to_mdev(ibcq->device)->uar_map,
-   MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock));
+   mdev->uar_map,
+   MLX4_GET_DOORBELL_LOCK(&mdev->uar_lock));
 
return 0;
 }

Modified: stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
==
--- stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 17:18:29 2019
(r347807)
+++ stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 17:19:03 2019
(r347808)
@@ -673,7 +673,7 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
int npolled;
 
spin_lock_irqsave(&cq->lock, flags);
-   if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
+   if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
mlx5_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -702,6 +702,9 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
unsigned long irq_flags;
int ret = 0;
 
+   if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR))
+   return -1;
+
spin_lock_irqsave(&cq->lock, irq_flags);
if (cq->notify_flags != IB_CQ_NEXT_COMP)
cq->notify_flags = flags & IB_CQ_SOLICITED_MASK;
@@ -715,7 +718,7 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
MLX5_CQ_DB_REQ_NOT_SOL : MLX5_CQ_DB_REQ_NOT,
uar_page,
MLX5_GET_DOORBELL_LOCK(&mdev->priv.cq_uar_lock),
-   to_mcq(ibcq)->mcq.cons_index);
+   cq->mcq.cons_index);
 
return ret;
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347806 - stable/11/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:17:52 2019
New Revision: 347806
URL: https://svnweb.freebsd.org/changeset/base/347806

Log:
  MFC r347256:
  Destroy port stats debug context in correct order in mlx5en(4).
  Destroy children nodes before parent nodes.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 17:17:12 
2019(r347805)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 17:17:52 
2019(r347806)
@@ -1063,6 +1063,10 @@ mlx5e_ethtool_debug_stats(SYSCTL_HANDLER_ARGS)
int error;
 
PRIV_LOCK(priv);
+   if (priv->gone != 0) {
+   error = ENODEV;
+   goto done;
+   }
sys_debug = priv->sysctl_debug;
error = sysctl_handle_int(oidp, &sys_debug, 0, req);
if (error != 0 || !req->newptr)

Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:17:12 
2019(r347805)
+++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 17:17:52 
2019(r347806)
@@ -3779,9 +3779,9 @@ mlx5e_destroy_ifp(struct mlx5_core_dev *mdev, void *vp
/* destroy all remaining sysctl nodes */
sysctl_ctx_free(&priv->stats.vport.ctx);
sysctl_ctx_free(&priv->stats.pport.ctx);
-   sysctl_ctx_free(&priv->sysctl_ctx);
if (priv->sysctl_debug)
sysctl_ctx_free(&priv->stats.port_stats_debug.ctx);
+   sysctl_ctx_free(&priv->sysctl_ctx);
 
mlx5_core_destroy_mkey(priv->mdev, &priv->mr);
mlx5_dealloc_transport_domain(priv->mdev, priv->tdn);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347803 - in stable/11/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:15:41 2019
New Revision: 347803
URL: https://svnweb.freebsd.org/changeset/base/347803

Log:
  MFC r347253:
  Protect from infinite sw-reset loop in mlx5core.
  
  Avoid an infinite software firmware reset loop that may be caused by a
  hardware bug by limiting the maximum number of resets.
  The counter between resets is reset by request for reset, and not by a
  successful reset.
  The interval between two resets can be configured via sysctl:
  hw.mlx5.sw_reset_timeout
  which is global to all mlx5 devices in the system.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/driver.h
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/driver.h
==
--- stable/11/sys/dev/mlx5/driver.h Thu May 16 17:15:00 2019
(r347802)
+++ stable/11/sys/dev/mlx5/driver.h Thu May 16 17:15:41 2019
(r347803)
@@ -534,6 +534,7 @@ struct mlx5_core_health {
unsigned long   flags;
struct work_struct  work;
struct delayed_work recover_work;
+   unsigned intlast_reset_req;
 };
 
 #defineMLX5_CQ_LINEAR_ARRAY_SIZE   1024

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 17:15:00 
2019(r347802)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 17:15:41 
2019(r347803)
@@ -64,6 +64,12 @@ SYSCTL_INT(_hw_mlx5, OID_AUTO, fw_reset_enable, CTLFLA
 &mlx5_fw_reset_enable, 0,
 "Enable firmware reset");
 
+static unsigned int sw_reset_to = 1200;
+SYSCTL_UINT(_hw_mlx5, OID_AUTO, sw_reset_timeout, CTLFLAG_RWTUN,
+&sw_reset_to, 0,
+"Minimum timeout in seconds between two firmware resets");
+
+
 static int lock_sem_sw_reset(struct mlx5_core_dev *dev)
 {
int ret;
@@ -218,6 +224,32 @@ static void reset_fw_if_needed(struct mlx5_core_dev *d
&dev->iseg->cmdq_addr_l_sz);
 }
 
+static bool
+mlx5_health_allow_reset(struct mlx5_core_dev *dev)
+{
+   struct mlx5_core_health *health = &dev->priv.health;
+   unsigned int delta;
+   bool ret;
+
+   if (health->last_reset_req != 0) {
+   delta = ticks - health->last_reset_req;
+   delta /= hz;
+   ret = delta >= sw_reset_to;
+   } else {
+   ret = true;
+   }
+
+   /*
+* In principle, ticks may be 0. Setting it to off by one (-1)
+* to prevent certain reset in next request.
+*/
+   health->last_reset_req = ticks ? : -1;
+   if (!ret)
+   mlx5_core_warn(dev, "Firmware reset elided due to "
+   "auto-reset frequency threshold.\n");
+   return (ret);
+}
+
 #define MLX5_CRDUMP_WAIT_MS6
 #define MLX5_FW_RESET_WAIT_MS  1000
 #define MLX5_NIC_STATE_POLL_MS 5
@@ -243,7 +275,8 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
if (force)
goto err_state_done;
 
-   if (fatal_error == MLX5_SENSOR_FW_SYND_RFR) {
+   if (fatal_error == MLX5_SENSOR_FW_SYND_RFR &&
+   mlx5_health_allow_reset(dev)) {
/* Get cr-dump and reset FW semaphore */
if (mlx5_core_is_pf(dev))
lock = lock_sem_sw_reset(dev);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347802 - in stable/11/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:15:00 2019
New Revision: 347802
URL: https://svnweb.freebsd.org/changeset/base/347802

Log:
  MFC r347252:
  Disable all MSIX interrupts before shutdown in mlx5.
  
  Make sure the interrupt handlers don't race with the fast unload one
  code in the shutdown handler.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/driver.h
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/driver.h
==
--- stable/11/sys/dev/mlx5/driver.h Thu May 16 17:14:08 2019
(r347801)
+++ stable/11/sys/dev/mlx5/driver.h Thu May 16 17:15:00 2019
(r347802)
@@ -583,6 +583,7 @@ struct mlx5_priv {
struct mlx5_irq_info*irq_info;
struct mlx5_uuar_info   uuari;
MLX5_DECLARE_DOORBELL_LOCK(cq_uar_lock);
+   int disable_irqs;
 
struct io_mapping   *bf_mapping;
 

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 17:14:08 2019
(r347801)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 17:15:00 2019
(r347802)
@@ -1143,6 +1143,9 @@ static void mlx5_cmd_change_mod(struct mlx5_core_dev *
struct mlx5_cmd *cmd = &dev->cmd;
int i;
 
+   if (cmd->mode == mode)
+   return;
+
for (i = 0; i < cmd->max_reg_cmds; i++)
down(&cmd->sem);
 

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:14:08 2019
(r347801)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:15:00 2019
(r347802)
@@ -395,7 +395,9 @@ static irqreturn_t mlx5_msix_handler(int irq, void *eq
struct mlx5_eq *eq = eq_ptr;
struct mlx5_core_dev *dev = eq->dev;
 
-   mlx5_eq_int(dev, eq);
+   /* check if IRQs are not disabled */
+   if (likely(dev->priv.disable_irqs == 0))
+   mlx5_eq_int(dev, eq);
 
/* MSI-X vectors always belong to us */
return IRQ_HANDLED;

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 17:14:08 
2019(r347801)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 17:15:00 
2019(r347802)
@@ -35,6 +35,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1425,11 +1426,29 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *
return 0;
 }
 
+static void mlx5_disable_interrupts(struct mlx5_core_dev *mdev)
+{
+   int nvec = mdev->priv.eq_table.num_comp_vectors + MLX5_EQ_VEC_COMP_BASE;
+   int x;
+
+   mdev->priv.disable_irqs = 1;
+
+   /* wait for all IRQ handlers to finish processing */
+   for (x = 0; x != nvec; x++)
+   synchronize_irq(mdev->priv.msix_arr[x].vector);
+}
+
 static void shutdown_one(struct pci_dev *pdev)
 {
struct mlx5_core_dev *dev  = pci_get_drvdata(pdev);
struct mlx5_priv *priv = &dev->priv;
int err;
+
+   /* enter polling mode */
+   mlx5_cmd_use_polling(dev);
+
+   /* disable all interrupts */
+   mlx5_disable_interrupts(dev);
 
err = mlx5_try_fast_unload(dev);
if (err)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347801 - stable/11/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:14:08 2019
New Revision: 347801
URL: https://svnweb.freebsd.org/changeset/base/347801

Log:
  MFC r347251:
  Import Linux code to implement mlx5_ib_disassociate_ucontext() in mlx5ib.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 17:13:21 
2019(r347800)
+++ stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 17:14:08 
2019(r347801)
@@ -1335,6 +1335,70 @@ static int mlx5_ib_set_vma_data(struct vm_area_struct 
return 0;
 }
 
+static void mlx5_ib_disassociate_ucontext(struct ib_ucontext *ibcontext)
+{
+   int ret;
+   struct vm_area_struct *vma;
+   struct mlx5_ib_vma_private_data *vma_private, *n;
+   struct mlx5_ib_ucontext *context = to_mucontext(ibcontext);
+   struct task_struct *owning_process  = NULL;
+   struct mm_struct   *owning_mm   = NULL;
+
+   owning_process = get_pid_task(ibcontext->tgid, PIDTYPE_PID);
+   if (!owning_process)
+   return;
+
+   owning_mm = get_task_mm(owning_process);
+   if (!owning_mm) {
+   pr_info("no mm, disassociate ucontext is pending task 
termination\n");
+   while (1) {
+   put_task_struct(owning_process);
+   usleep_range(1000, 2000);
+   owning_process = get_pid_task(ibcontext->tgid,
+ PIDTYPE_PID);
+   if (!owning_process || owning_process->task_thread->
+   td_proc->p_state == PRS_ZOMBIE) {
+   pr_info("disassociate ucontext done, task was 
terminated\n");
+   /* in case task was dead need to release the
+* task struct.
+*/
+   if (owning_process)
+   put_task_struct(owning_process);
+   return;
+   }
+   }
+   }
+
+   /* need to protect from a race on closing the vma as part of
+* mlx5_ib_vma_close.
+*/
+   down_write(&owning_mm->mmap_sem);
+   list_for_each_entry_safe(vma_private, n, &context->vma_private_list,
+list) {
+   vma = vma_private->vma;
+   ret = zap_vma_ptes(vma, vma->vm_start,
+  PAGE_SIZE);
+   if (ret == -ENOTSUP) {
+   if (bootverbose)
+   WARN_ONCE(
+   "%s: zap_vma_ptes not implemented for unmanaged mappings", __func__);
+   } else {
+   WARN(ret, "%s: zap_vma_ptes failed, error %d",
+   __func__, -ret);
+   }
+   /* context going to be destroyed, should
+* not access ops any more.
+*/
+   /* XXXKIB vma->vm_flags &= ~(VM_SHARED | VM_MAYSHARE); */
+   vma->vm_ops = NULL;
+   list_del(&vma_private->list);
+   kfree(vma_private);
+   }
+   up_write(&owning_mm->mmap_sem);
+   mmput(owning_mm);
+   put_task_struct(owning_process);
+}
+
 static inline char *mmap_cmd2str(enum mlx5_ib_mmap_cmd cmd)
 {
switch (cmd) {
@@ -3084,6 +3148,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
dev->ib_dev.get_vf_stats= mlx5_ib_get_vf_stats;
dev->ib_dev.set_vf_guid = mlx5_ib_set_vf_guid;
}
+
+   dev->ib_dev.disassociate_ucontext = mlx5_ib_disassociate_ucontext;
 
mlx5_ib_internal_fill_odp_caps(dev);
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347794 - stable/11/sys/compat/linuxkpi/common/include/linux

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:04:15 2019
New Revision: 347794
URL: https://svnweb.freebsd.org/changeset/base/347794

Log:
  MFC r347190:
  Use PCIV_INVALID in pci_channel_offline() in the LinuxKPI.
  
  Build tested drm-current-kmod prior to commit.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
==
--- stable/11/sys/compat/linuxkpi/common/include/linux/pci.hThu May 16 
17:03:16 2019(r347793)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/pci.hThu May 16 
17:04:15 2019(r347794)
@@ -603,7 +603,7 @@ static inline int
 pci_channel_offline(struct pci_dev *pdev)
 {
 
-   return (pci_get_vendor(pdev->dev.bsddev) == 0x);
+   return (pci_get_vendor(pdev->dev.bsddev) == PCIV_INVALID);
 }
 
 static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347796 - in stable/11/sys: compat/linuxkpi/common/include/linux conf dev/mlx5/mlx5_en modules/mlx5en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:09:06 2019
New Revision: 347796
URL: https://svnweb.freebsd.org/changeset/base/347796

Log:
  MFC r347246:
  Add support for Dynamic Interrupt Moderation, DIM, in mlx5en(4).
  
  Add support for DIM based on Linux,
  with some minor adaptions specific to FreeBSD.
  
  Linux commit
  f97c3dc3c0e8d23a5c4357d182afeef4c67f5c33
  
  Sponsored by: Mellanox Technologies

Added:
  stable/11/sys/compat/linuxkpi/common/include/linux/net_dim.h
 - copied unchanged from r347246, 
head/sys/compat/linuxkpi/common/include/linux/net_dim.h
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_dim.c
 - copied unchanged from r347246, head/sys/dev/mlx5/mlx5_en/mlx5_en_dim.c
Modified:
  stable/11/sys/conf/files
  stable/11/sys/dev/mlx5/mlx5_en/en.h
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
  stable/11/sys/modules/mlx5en/Makefile
Directory Properties:
  stable/11/   (props changed)

Copied: stable/11/sys/compat/linuxkpi/common/include/linux/net_dim.h (from 
r347246, head/sys/compat/linuxkpi/common/include/linux/net_dim.h)
==
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/net_dim.hThu May 
16 17:09:06 2019(r347796, copy of r347246, 
head/sys/compat/linuxkpi/common/include/linux/net_dim.h)
@@ -0,0 +1,410 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
+ *
+ * Copyright (c) 2016, Mellanox Technologies. All rights reserved.
+ * Copyright (c) 2017-2018, Broadcom Limited. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *  - Redistributions of source code must retain the above
+ *copyright notice, this list of conditions and the following
+ *disclaimer.
+ *
+ *  - Redistributions in binary form must reproduce the above
+ *copyright notice, this list of conditions and the following
+ *disclaimer in the documentation and/or other materials
+ *provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+/* This file implements Dynamic Interrupt Moderation, DIM */
+
+#ifndef NET_DIM_H
+#defineNET_DIM_H
+
+#include 
+
+#include 
+#include 
+
+struct net_dim_cq_moder {
+   u16 usec;
+   u16 pkts;
+   u8  cq_period_mode;
+};
+
+struct net_dim_sample {
+   ktime_t time;
+   u32 pkt_ctr;
+   u32 byte_ctr;
+   u16 event_ctr;
+};
+
+struct net_dim_stats {
+   int ppms;   /* packets per msec */
+   int bpms;   /* bytes per msec */
+   int epms;   /* events per msec */
+};
+
+struct net_dim {   /* Adaptive Moderation */
+   u8  state;
+   struct net_dim_stats prev_stats;
+   struct net_dim_sample start_sample;
+   struct work_struct work;
+   u16 event_ctr;
+   u8  profile_ix;
+   u8  mode;
+   u8  tune_state;
+   u8  steps_right;
+   u8  steps_left;
+   u8  tired;
+};
+
+enum {
+   NET_DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0x0,
+   NET_DIM_CQ_PERIOD_MODE_START_FROM_CQE = 0x1,
+   NET_DIM_CQ_PERIOD_NUM_MODES = 0x2,
+   NET_DIM_CQ_PERIOD_MODE_DISABLED = 0xFF,
+};
+
+/* Adaptive moderation logic */
+enum {
+   NET_DIM_START_MEASURE,
+   NET_DIM_MEASURE_IN_PROGRESS,
+   NET_DIM_APPLY_NEW_PROFILE,
+};
+
+enum {
+   NET_DIM_PARKING_ON_TOP,
+   NET_DIM_PARKING_TIRED,
+   NET_DIM_GOING_RIGHT,
+   NET_DIM_GOING_LEFT,
+};
+
+enum {
+   NET_DIM_STATS_WORSE,
+   NET_DIM_STATS_SAME,
+   NET_DIM_STATS_BETTER,
+};
+
+enum {
+   NET_DIM_STEPPED,
+   NET_DIM_TOO_TIRED,
+   NET_DIM_ON_EDGE,
+};
+
+#defineNET_DIM_PARAMS_NUM_PROFILES 5
+/* Adaptive moderation profiles */
+#defineNET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE 256
+#defineNET_DIM_DEF_PROFILE_CQE 1
+#

svn commit: r347797 - in stable/11/sys/dev/mlx5: . mlx5_fpga mlx5_fpga_tools

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:11:02 2019
New Revision: 347797
URL: https://svnweb.freebsd.org/changeset/base/347797

Log:
  MFC r347247:
  Add MLX5_FPGA_RELOAD IOCTL(2) to mlx5fpga.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_fpga/mlx5_ifc_fpga.h
  stable/11/sys/dev/mlx5/mlx5_fpga/mlx5fpga_sdk.c
  stable/11/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_char.c
  stable/11/sys/dev/mlx5/mlx5io.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_fpga/mlx5_ifc_fpga.h
==
--- stable/11/sys/dev/mlx5/mlx5_fpga/mlx5_ifc_fpga.hThu May 16 17:09:06 
2019(r347796)
+++ stable/11/sys/dev/mlx5/mlx5_fpga/mlx5_ifc_fpga.hThu May 16 17:11:02 
2019(r347797)
@@ -135,6 +135,7 @@ enum {
MLX5_FPGA_CTRL_OPERATION_RESET_SANDBOX   = 0x6,
MLX5_FPGA_CTRL_OPERATION_DISCONNECT  = 0x9,
MLX5_FPGA_CTRL_OPERATION_CONNECT = 0xA,
+   MLX5_FPGA_CTRL_OPERATION_RELOAD  = 0xB,
 };
 
 struct mlx5_ifc_fpga_ctrl_bits {

Modified: stable/11/sys/dev/mlx5/mlx5_fpga/mlx5fpga_sdk.c
==
--- stable/11/sys/dev/mlx5/mlx5_fpga/mlx5fpga_sdk.c Thu May 16 17:09:06 
2019(r347796)
+++ stable/11/sys/dev/mlx5/mlx5_fpga/mlx5fpga_sdk.c Thu May 16 17:11:02 
2019(r347797)
@@ -324,6 +324,45 @@ void mlx5_fpga_device_query(struct mlx5_fpga_device *f
 }
 EXPORT_SYMBOL(mlx5_fpga_device_query);
 
+static int mlx5_fpga_device_reload_cmd(struct mlx5_fpga_device *fdev)
+{
+   struct mlx5_core_dev *mdev = fdev->mdev;
+   unsigned long timeout;
+   unsigned long flags;
+   int err = 0;
+
+   mlx5_fpga_info(fdev, "mlx5/fpga - reload started\n");
+   fdev->fdev_state = MLX5_FDEV_STATE_IN_PROGRESS;
+   reinit_completion(&fdev->load_event);
+   err = mlx5_fpga_ctrl_op(mdev, MLX5_FPGA_CTRL_OPERATION_RELOAD);
+   if (err) {
+   mlx5_fpga_err(fdev, "Failed to request reload: %d\n",
+ err);
+   goto out;
+   }
+   timeout = jiffies + msecs_to_jiffies(MLX5_FPGA_LOAD_TIMEOUT);
+   err = wait_for_completion_timeout(&fdev->load_event,
+ timeout - jiffies);
+   if (err < 0) {
+   mlx5_fpga_err(fdev, "Failed waiting for reload: %d\n", err);
+   fdev->fdev_state = MLX5_FDEV_STATE_FAILURE;
+   goto out;
+   }
+   /* Check device loaded successful */
+   err = mlx5_fpga_device_start(mdev);
+   if (err) {
+   mlx5_fpga_err(fdev, "Failed load check for reload: %d\n", err);
+   fdev->fdev_state = MLX5_FDEV_STATE_FAILURE;
+   goto out;
+   }
+   spin_lock_irqsave(&fdev->state_lock, flags);
+   fdev->fdev_state = MLX5_FDEV_STATE_SUCCESS;
+   spin_unlock_irqrestore(&fdev->state_lock, flags);
+   mlx5_fpga_info(fdev, "mlx5/fpga - reload ended\n");
+out:
+   return err;
+}
+
 int mlx5_fpga_device_reload(struct mlx5_fpga_device *fdev,
enum mlx5_fpga_image image)
 {
@@ -350,6 +389,12 @@ int mlx5_fpga_device_reload(struct mlx5_fpga_device *f
return err;
 
mutex_lock(&mdev->intf_state_mutex);
+
+   if (image == MLX5_FPGA_IMAGE_RELOAD) {
+   err = mlx5_fpga_device_reload_cmd(fdev);
+   goto out;
+   }
+
clear_bit(MLX5_INTERFACE_STATE_UP, &mdev->intf_state);
 
mlx5_unregister_device(mdev);
@@ -359,7 +404,7 @@ int mlx5_fpga_device_reload(struct mlx5_fpga_device *f
fdev->fdev_state = MLX5_FDEV_STATE_IN_PROGRESS;
reinit_completion(&fdev->load_event);
 
-   if (image <= MLX5_FPGA_IMAGE_MAX) {
+   if (image <= MLX5_FPGA_IMAGE_FACTORY) {
mlx5_fpga_info(fdev, "Loading from flash\n");
err = mlx5_fpga_load(mdev, image);
if (err) {
@@ -367,7 +412,7 @@ int mlx5_fpga_device_reload(struct mlx5_fpga_device *f
  err);
goto out;
}
-   } else {
+   } else if (image == MLX5_FPGA_IMAGE_RESET) {
mlx5_fpga_info(fdev, "Resetting\n");
err = mlx5_fpga_ctrl_op(mdev, MLX5_FPGA_CTRL_OPERATION_RESET);
if (err) {
@@ -375,6 +420,10 @@ int mlx5_fpga_device_reload(struct mlx5_fpga_device *f
  err);
goto out;
}
+   } else {
+   mlx5_fpga_err(fdev, "Unknown command: %d\n",
+ image);
+   goto out;
}
 
timeout = jiffies + msecs_to_jiffies(MLX5_FPGA_LOAD_TIMEOUT);

Modified: stable/11/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_char.c
===

svn commit: r347800 - in stable/11/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:13:21 2019
New Revision: 347800
URL: https://svnweb.freebsd.org/changeset/base/347800

Log:
  MFC r347250:
  Add temperature warning event to log in mlx5core.
  
  Temperature warning event is sent by FW to indicate high temperature
  as detected by one of the sensors on the board.
  Add handling of this event by writing the numbers of the alert sensors
  to the kernel log.
  
  Linux commit:
  1865ea9adbfaf341c5cd5d8f7d384f19948b2fe9
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/device.h
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
  stable/11/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/device.h
==
--- stable/11/sys/dev/mlx5/device.h Thu May 16 17:12:38 2019
(r347799)
+++ stable/11/sys/dev/mlx5/device.h Thu May 16 17:13:21 2019
(r347800)
@@ -566,6 +566,11 @@ struct mlx5_eqe_general_notification_event {
u32   rsvd0[6];
 };
 
+struct mlx5_eqe_temp_warning {
+   __be64 sensor_warning_msb;
+   __be64 sensor_warning_lsb;
+} __packed;
+
 union ev_data {
__be32  raw[7];
struct mlx5_eqe_cmd cmd;
@@ -580,6 +585,7 @@ union ev_data {
struct mlx5_eqe_port_module_event port_module_event;
struct mlx5_eqe_vport_changevport_change;
struct mlx5_eqe_general_notification_event general_notifications;
+   struct mlx5_eqe_temp_warningtemp_warning;
 } __packed;
 
 struct mlx5_eqe {

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:12:38 2019
(r347799)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:13:21 2019
(r347800)
@@ -142,6 +142,8 @@ static const char *eqe_type_str(u8 type)
return "MLX5_EVENT_TYPE_GPIO_EVENT";
case MLX5_EVENT_TYPE_CODING_PORT_MODULE_EVENT:
return "MLX5_EVENT_TYPE_PORT_MODULE_EVENT";
+   case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+   return "MLX5_EVENT_TYPE_TEMP_WARN_EVENT";
case MLX5_EVENT_TYPE_REMOTE_CONFIG:
return "MLX5_EVENT_TYPE_REMOTE_CONFIG";
case MLX5_EVENT_TYPE_DB_BF_CONGESTION:
@@ -212,6 +214,16 @@ static void eq_update_ci(struct mlx5_eq *eq, int arm)
mb();
 }
 
+static void
+mlx5_temp_warning_event(struct mlx5_core_dev *dev, struct mlx5_eqe *eqe)
+{
+
+   mlx5_core_warn(dev,
+   "High temperature on sensors with bit set %#jx %#jx",
+   (uintmax_t)be64_to_cpu(eqe->data.temp_warning.sensor_warning_msb),
+   (uintmax_t)be64_to_cpu(eqe->data.temp_warning.sensor_warning_lsb));
+}
+
 static int mlx5_eq_int(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
 {
struct mlx5_eqe *eqe;
@@ -347,6 +359,9 @@ static int mlx5_eq_int(struct mlx5_core_dev *dev, stru
case MLX5_EVENT_TYPE_FPGA_QP_ERROR:
mlx5_fpga_event(dev, eqe->type, &eqe->data.raw);
break;
+   case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+   mlx5_temp_warning_event(dev, eqe);
+   break;
 
default:
mlx5_core_warn(dev, "Unhandled event 0x%x on EQ 0x%x\n",
@@ -540,6 +555,9 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
if (MLX5_CAP_GEN(dev, fpga))
async_event_mask |= (1ull << MLX5_EVENT_TYPE_FPGA_ERROR) |
(1ull << MLX5_EVENT_TYPE_FPGA_QP_ERROR);
+
+   if (MLX5_CAP_GEN(dev, temp_warn_event))
+   async_event_mask |= (1ull << MLX5_EVENT_TYPE_TEMP_WARN_EVENT);
 
err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
 MLX5_NUM_CMD_EQE, 1ull << MLX5_EVENT_TYPE_CMD,

Modified: stable/11/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/11/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 17:12:38 2019
(r347799)
+++ stable/11/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 17:13:21 2019
(r347800)
@@ -50,7 +50,7 @@ enum {
MLX5_EVENT_TYPE_PORT_CHANGE= 0x9,
MLX5_EVENT_TYPE_GPIO_EVENT = 0x15,
MLX5_EVENT_TYPE_CODING_PORT_MODULE_EVENT   = 0x16,
-   MLX5_EVENT_TYPE_CODING_TEMP_WARNING_EVENT  = 0x17,
+   MLX5_EVENT_TYPE_TEMP_WARN_EVENT= 0x17,
MLX5_EVENT_TYPE_REMOTE_CONFIG  = 0x19,
MLX5_EVENT_TYPE_CODING_DCBX_CHANGE_EVENT   = 0x1e,
MLX5_EVENT_TYPE_CODING_PPS_EVENT   = 0x25,
___
svn-src-all@freebsd.org m

svn commit: r347799 - in stable/11/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:12:38 2019
New Revision: 347799
URL: https://svnweb.freebsd.org/changeset/base/347799

Log:
  MFC r347249:
  Correctly define the interface state bits in mlx5en(4).
  
  While at it remove unused interface state bits. This also fixes and issue
  during shutdown:
  
  There is an issue where the firmware fails during mlx5_load_one,
  the health_care timer detects the issue and schedules a health_care call.
  Then the mlx5_load_one detects the issue, cleans up and quits. Then
  the health_care starts and calls mlx5_unload_one to clean up the resources
  that no longer exist and causes kernel panic.
  
  The root cause is that the bit MLX5_INTERFACE_STATE_DOWN is not set
  after mlx5_load_one fails. The solution is removing the bit
  MLX5_INTERFACE_STATE_DOWN and quit mlx5_unload_one if the
  bit MLX5_INTERFACE_STATE_UP is not set. The bit MLX5_INTERFACE_STATE_DOWN
  is redundant and we can use MLX5_INTERFACE_STATE_UP instead.
  
  Linux commit:
  10a8d00707082955b177164d4b4e758ffcbd4017
  b3cb5388499c5e219324bfe7da2e46cbad82bfcf
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/driver.h
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/driver.h
==
--- stable/11/sys/dev/mlx5/driver.h Thu May 16 17:11:45 2019
(r347798)
+++ stable/11/sys/dev/mlx5/driver.h Thu May 16 17:12:38 2019
(r347799)
@@ -636,9 +636,7 @@ enum mlx5_device_state {
 };
 
 enum mlx5_interface_state {
-   MLX5_INTERFACE_STATE_DOWN = BIT(0),
-   MLX5_INTERFACE_STATE_UP = BIT(1),
-   MLX5_INTERFACE_STATE_SHUTDOWN = BIT(2),
+   MLX5_INTERFACE_STATE_UP,
 };
 
 enum mlx5_pci_status {

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 17:11:45 
2019(r347798)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 17:12:38 
2019(r347799)
@@ -1078,7 +1078,6 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, st
goto err_fs;
}
 
-   clear_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
 
 out:
@@ -1141,7 +1140,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, 
mlx5_drain_health_recovery(dev);
 
mutex_lock(&dev->intf_state_mutex);
-   if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
+   if (!test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) {
dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n", 
__func__);
 if (cleanup)
 mlx5_cleanup_once(dev);
@@ -1173,7 +1172,6 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, 
 
 out:
clear_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
-   set_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
mutex_unlock(&dev->intf_state_mutex);
return err;
 }
@@ -1433,7 +1431,6 @@ static void shutdown_one(struct pci_dev *pdev)
struct mlx5_priv *priv = &dev->priv;
int err;
 
-   set_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &dev->intf_state);
err = mlx5_try_fast_unload(dev);
if (err)
mlx5_unload_one(dev, priv, false);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347798 - stable/11/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:11:45 2019
New Revision: 347798
URL: https://svnweb.freebsd.org/changeset/base/347798

Log:
  MFC r347248:
  Enable FPGA and FPGA QP errors for EQ and call the handler in mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:11:02 2019
(r347797)
+++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 17:11:45 2019
(r347798)
@@ -29,6 +29,7 @@
 #include 
 #include 
 #include 
+#include 
 #include "mlx5_core.h"
 
 #include "opt_rss.h"
@@ -153,6 +154,10 @@ static const char *eqe_type_str(u8 type)
return "MLX5_EVENT_TYPE_PAGE_REQUEST";
case MLX5_EVENT_TYPE_NIC_VPORT_CHANGE:
return "MLX5_EVENT_TYPE_NIC_VPORT_CHANGE";
+   case MLX5_EVENT_TYPE_FPGA_ERROR:
+   return "MLX5_EVENT_TYPE_FPGA_ERROR";
+   case MLX5_EVENT_TYPE_FPGA_QP_ERROR:
+   return "MLX5_EVENT_TYPE_FPGA_QP_ERROR";
case MLX5_EVENT_TYPE_CODING_DCBX_CHANGE_EVENT:
return "MLX5_EVENT_TYPE_CODING_DCBX_CHANGE_EVENT";
case MLX5_EVENT_TYPE_CODING_GENERAL_NOTIFICATION_EVENT:
@@ -338,6 +343,11 @@ static int mlx5_eq_int(struct mlx5_core_dev *dev, stru
}
break;
 
+   case MLX5_EVENT_TYPE_FPGA_ERROR:
+   case MLX5_EVENT_TYPE_FPGA_QP_ERROR:
+   mlx5_fpga_event(dev, eqe->type, &eqe->data.raw);
+   break;
+
default:
mlx5_core_warn(dev, "Unhandled event 0x%x on EQ 0x%x\n",
   eqe->type, eq->eqn);
@@ -526,6 +536,10 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
if (MLX5_CAP_GEN(dev, dcbx))
async_event_mask |= (1ull <<
 MLX5_EVENT_TYPE_CODING_DCBX_CHANGE_EVENT);
+
+   if (MLX5_CAP_GEN(dev, fpga))
+   async_event_mask |= (1ull << MLX5_EVENT_TYPE_FPGA_ERROR) |
+   (1ull << MLX5_EVENT_TYPE_FPGA_QP_ERROR);
 
err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
 MLX5_NUM_CMD_EQE, 1ull << MLX5_EVENT_TYPE_CMD,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347793 - stable/11/sys/compat/linuxkpi/common/include/linux

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:03:16 2019
New Revision: 347793
URL: https://svnweb.freebsd.org/changeset/base/347793

Log:
  MFC r347188:
  Disabling a PCI device should only disable busmaster in the LinuxKPI.
  
  As Linux comment for this function point:
  Signal to the system that the PCI device is not in use by the system
  anymore. This only involves disabling PCI bus-mastering, if active.
  
  Build tested drm-current-kmod prior to commit.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
==
--- stable/11/sys/compat/linuxkpi/common/include/linux/pci.hThu May 16 
17:02:31 2019(r347792)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/pci.hThu May 16 
17:03:16 2019(r347793)
@@ -342,8 +342,6 @@ static inline void
 pci_disable_device(struct pci_dev *pdev)
 {
 
-   pci_disable_io(pdev->dev.bsddev, SYS_RES_IOPORT);
-   pci_disable_io(pdev->dev.bsddev, SYS_RES_MEMORY);
pci_disable_busmaster(pdev->dev.bsddev);
 }
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347792 - stable/11/sys/compat/linuxkpi/common/include/linux

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:02:31 2019
New Revision: 347792
URL: https://svnweb.freebsd.org/changeset/base/347792

Log:
  MFC r347187:
  Implement print_hex_dump_debug() function macro in the LinuxKPI.
  
  Build tested drm-current-kmod prior to commit.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/compat/linuxkpi/common/include/linux/printk.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linuxkpi/common/include/linux/printk.h
==
--- stable/11/sys/compat/linuxkpi/common/include/linux/printk.h Thu May 16 
17:01:39 2019(r347791)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/printk.h Thu May 16 
17:02:31 2019(r347792)
@@ -121,6 +121,9 @@ print_hex_dump_bytes(const char *prefix_str, const int
 #definepr_err_ratelimited(fmt, ...) \
printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
 
+#defineprint_hex_dump_debug(...) \
+   print_hex_dump(KERN_DEBUG, ##__VA_ARGS__)
+
 #definepr_info_ratelimited(fmt, ...) \
printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347791 - in stable/11/sys/compat/linuxkpi/common: include/linux src

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 17:01:39 2019
New Revision: 347791
URL: https://svnweb.freebsd.org/changeset/base/347791

Log:
  MFC r347185:
  Allow controlling pr_debug at runtime in the LinuxKPI.
  
  Turning on pr_debug at compile time make it non-optional at runtime.
  This often means that the amount of the debugging is unbearable.
  Allow developer to turn on pr_debug output only when needed.
  
  Build tested drm-current-kmod prior to commit.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/compat/linuxkpi/common/include/linux/kernel.h
  stable/11/sys/compat/linuxkpi/common/src/linux_compat.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linuxkpi/common/include/linux/kernel.h
==
--- stable/11/sys/compat/linuxkpi/common/include/linux/kernel.h Thu May 16 
16:44:40 2019(r347790)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/kernel.h Thu May 16 
17:01:39 2019(r347791)
@@ -177,8 +177,12 @@ scnprintf(char *buf, size_t size, const char *fmt, ...
  * unless DEBUG is defined:
  */
 #ifdef DEBUG
-#define pr_debug(fmt, ...) \
-   log(LOG_DEBUG, fmt, ##__VA_ARGS__)
+extern int linuxkpi_debug;
+#define pr_debug(fmt, ...) \
+   do {\
+   if (linuxkpi_debug) \
+   log(LOG_DEBUG, fmt, ##__VA_ARGS__); \
+   } while (0)
 #define pr_devel(fmt, ...) \
log(LOG_DEBUG, pr_fmt(fmt), ##__VA_ARGS__)
 #else

Modified: stable/11/sys/compat/linuxkpi/common/src/linux_compat.c
==
--- stable/11/sys/compat/linuxkpi/common/src/linux_compat.c Thu May 16 
16:44:40 2019(r347790)
+++ stable/11/sys/compat/linuxkpi/common/src/linux_compat.c Thu May 16 
17:01:39 2019(r347791)
@@ -92,6 +92,10 @@ __FBSDID("$FreeBSD$");
 
 SYSCTL_NODE(_compat, OID_AUTO, linuxkpi, CTLFLAG_RW, 0, "LinuxKPI parameters");
 
+int linuxkpi_debug;
+SYSCTL_INT(_compat_linuxkpi, OID_AUTO, debug, CTLFLAG_RWTUN,
+&linuxkpi_debug, 0, "Set to enable pr_debug() prints. Clear to disable.");
+
 MALLOC_DEFINE(M_KMALLOC, "linux", "Linux kmalloc compat");
 
 #include 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347789 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:43:16 2019
New Revision: 347789
URL: https://svnweb.freebsd.org/changeset/base/347789

Log:
  MFC r347324:
  Make command workqueue persistant in mlx5core.
  
  There is no reason to re-create the command workqueue during healthcare.
  This also fixes an issue where a previous work struct may refer to a
  destroyed workqueue.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:42:40 2019
(r347788)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:43:16 2019
(r347789)
@@ -56,7 +56,6 @@ enum {
 
 enum {
MLX5_CMD_TIMEOUT_MSEC   = 60 * 1000,
-   MLX5_CMD_WQ_MAX_NAME= 32,
 };
 
 enum {
@@ -353,8 +352,6 @@ struct mlx5_cmd {
spinlock_t  token_lock;
u8  token;
unsigned long   bitmask;
-   charwq_name[MLX5_CMD_WQ_MAX_NAME];
-   struct workqueue_struct *wq;
struct semaphore sem;
struct semaphore pages_sem;
enum mlx5_cmd_mode mode;
@@ -516,6 +513,7 @@ struct mlx5_core_health {
struct delayed_work recover_work;
unsigned intlast_reset_req;
struct work_struct  work_cmd_completion;
+   struct workqueue_struct*wq_cmd;
 };
 
 #ifdef RATELIMIT

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:42:40 2019
(r347788)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:43:16 2019
(r347789)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2013-2017, Mellanox Technologies, Ltd.  All rights reserved.
+ * Copyright (c) 2013-2019, Mellanox Technologies, Ltd.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -997,7 +997,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, 
INIT_WORK(&ent->work, cmd_work_handler);
if (page_queue) {
cmd_work_handler(&ent->work);
-   } else if (!queue_work(cmd->wq, &ent->work)) {
+   } else if (!queue_work(dev->priv.health.wq_cmd, &ent->work)) {
mlx5_core_warn(dev, "failed to queue work\n");
err = -ENOMEM;
goto out_free;
@@ -1127,14 +1127,6 @@ mlx5_free_cmd_msg(struct mlx5_core_dev *dev, struct ml
mlx5_fwp_free(msg);
 }
 
-static void set_wqname(struct mlx5_core_dev *dev)
-{
-   struct mlx5_cmd *cmd = &dev->cmd;
-
-   snprintf(cmd->wq_name, sizeof(cmd->wq_name), "mlx5_cmd_%s",
-dev_name(&dev->pdev->dev));
-}
-
 static void clean_debug_files(struct mlx5_core_dev *dev)
 {
 }
@@ -1562,20 +1554,8 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev)
device_printf((&dev->pdev->dev)->bsddev, "ERR: ""failed to 
create command cache\n");
goto err_free_page;
}
-
-   set_wqname(dev);
-   cmd->wq = create_singlethread_workqueue(cmd->wq_name);
-   if (!cmd->wq) {
-   device_printf((&dev->pdev->dev)->bsddev, "ERR: ""failed to 
create command workqueue\n");
-   err = -ENOMEM;
-   goto err_cache;
-   }
-
return 0;
 
-err_cache:
-   destroy_msg_cache(dev);
-
 err_free_page:
free_cmd_page(dev, cmd);
 
@@ -1589,7 +1569,7 @@ void mlx5_cmd_cleanup(struct mlx5_core_dev *dev)
struct mlx5_cmd *cmd = &dev->cmd;
 
clean_debug_files(dev);
-   destroy_workqueue(cmd->wq);
+   flush_workqueue(dev->priv.health.wq_cmd);
destroy_msg_cache(dev);
free_cmd_page(dev, cmd);
 }

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:42:40 
2019(r347788)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:43:16 
2019(r347789)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2013-2017, Mellanox Technologies, Ltd.  All rights reserved.
+ * Copyright (c) 2013-2019, Mellanox Technologies, Ltd.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -280,8 +280,8 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
 * completion handler and then wait for it to
 * complete:
 */
-   queue_work(dev->cmd.wq, &dev->priv.health.work_cmd_completion);
-   flush_workqu

svn commit: r347790 - in stable/12/sys: dev/mlx4/mlx4_core dev/mlx4/mlx4_ib dev/mlx5/mlx5_core dev/mlx5/mlx5_en dev/mlx5/mlx5_ib sys

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:44:40 2019
New Revision: 347790
URL: https://svnweb.freebsd.org/changeset/base/347790

Log:
  MFC r347325:
  Bump the Mellanox driver version numbers and the FreeBSD version number.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx4/mlx4_core/mlx4.h
  stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
  stable/12/sys/sys/param.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx4/mlx4_core/mlx4.h
==
--- stable/12/sys/dev/mlx4/mlx4_core/mlx4.h Thu May 16 16:43:16 2019
(r347789)
+++ stable/12/sys/dev/mlx4/mlx4_core/mlx4.h Thu May 16 16:44:40 2019
(r347790)
@@ -53,8 +53,8 @@
 
 #define DRV_NAME   "mlx4_core"
 #define PFXDRV_NAME ": "
-#define DRV_VERSION"3.5.0"
-#define DRV_RELDATE"November 2018"
+#define DRV_VERSION"3.5.1"
+#define DRV_RELDATE"April 2019"
 
 #define MLX4_FS_UDP_UC_EN  (1 << 1)
 #define MLX4_FS_TCP_UC_EN  (1 << 2)

Modified: stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c
==
--- stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c   Thu May 16 16:43:16 
2019(r347789)
+++ stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c   Thu May 16 16:44:40 
2019(r347790)
@@ -64,9 +64,9 @@
 
 #define DRV_NAME   MLX4_IB_DRV_NAME
 #ifndef DRV_VERSION
-#define DRV_VERSION"3.5.0"
+#define DRV_VERSION"3.5.1"
 #endif
-#define DRV_RELDATE"November 2018"
+#define DRV_RELDATE"April 2019"
 
 #define MLX4_IB_FLOW_MAX_PRIO 0xFFF
 #define MLX4_IB_FLOW_QPN_MASK 0xFF

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:43:16 
2019(r347789)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:44:40 
2019(r347790)
@@ -36,9 +36,9 @@
 
 #define DRIVER_NAME "mlx5_core"
 #ifndef DRIVER_VERSION
-#define DRIVER_VERSION "3.5.0"
+#define DRIVER_VERSION "3.5.1"
 #endif
-#define DRIVER_RELDATE "November 2018"
+#define DRIVER_RELDATE "April 2019"
 
 extern int mlx5_core_debug_mask;
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:43:16 
2019(r347789)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:44:40 
2019(r347790)
@@ -31,9 +31,9 @@
 #include 
 
 #ifndef ETH_DRIVER_VERSION
-#defineETH_DRIVER_VERSION  "3.5.0"
+#defineETH_DRIVER_VERSION  "3.5.1"
 #endif
-#define DRIVER_RELDATE "November 2018"
+#define DRIVER_RELDATE "April 2019"
 
 static const char mlx5e_version[] = "mlx5en: Mellanox Ethernet driver "
ETH_DRIVER_VERSION " (" DRIVER_RELDATE ")\n";

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:43:16 
2019(r347789)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:44:40 
2019(r347790)
@@ -52,9 +52,9 @@
 
 #define DRIVER_NAME "mlx5ib"
 #ifndef DRIVER_VERSION
-#define DRIVER_VERSION "3.5.0"
+#define DRIVER_VERSION "3.5.1"
 #endif
-#define DRIVER_RELDATE "November 2018"
+#define DRIVER_RELDATE "April 2019"
 
 MODULE_DESCRIPTION("Mellanox Connect-IB HCA IB driver");
 MODULE_LICENSE("Dual BSD/GPL");

Modified: stable/12/sys/sys/param.h
==
--- stable/12/sys/sys/param.h   Thu May 16 16:43:16 2019(r347789)
+++ stable/12/sys/sys/param.h   Thu May 16 16:44:40 2019(r347790)
@@ -60,7 +60,7 @@
  * in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1200508  /* Master, propagated to newvers */
+#define __FreeBSD_version 1200509  /* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347784 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:40:12 2019
New Revision: 347784
URL: https://svnweb.freebsd.org/changeset/base/347784

Log:
  MFC r347319:
  Flush command workqueue when command completion is triggered in mlx5core.
  
  Avoid race for command completion when triggering a command completions event.
  Serialize operation by queueing all commands on the same work queue.
  This can happen when healthcare triggers.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:39:37 2019
(r347783)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:40:12 2019
(r347784)
@@ -515,6 +515,7 @@ struct mlx5_core_health {
struct work_struct  work;
struct delayed_work recover_work;
unsigned intlast_reset_req;
+   struct work_struct  work_cmd_completion;
 };
 
 #ifdef RATELIMIT

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:39:37 
2019(r347783)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:40:12 
2019(r347784)
@@ -135,8 +135,10 @@ static bool sensor_fw_synd_rfr(struct mlx5_core_dev *d
return rfr && synd;
 }
 
-static void mlx5_trigger_cmd_completions(struct mlx5_core_dev *dev)
+static void mlx5_trigger_cmd_completions(struct work_struct *work)
 {
+   struct mlx5_core_dev *dev =
+   container_of(work, struct mlx5_core_dev, 
priv.health.work_cmd_completion);
unsigned long flags;
u64 vector;
 
@@ -271,7 +273,15 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
return;
if (!force)
mlx5_core_err(dev, "internal state error detected\n");
-   mlx5_trigger_cmd_completions(dev);
+
+   /*
+* Queue the command completion handler on the command
+* work queue to avoid racing with the real command
+* completion handler and then wait for it to
+* complete:
+*/
+   queue_work(dev->cmd.wq, &dev->priv.health.work_cmd_completion);
+   flush_workqueue(dev->cmd.wq);
}
 
mutex_lock(&dev->intf_state_mutex);
@@ -693,6 +703,7 @@ int mlx5_health_init(struct mlx5_core_dev *dev)
spin_lock_init(&health->wq_lock);
INIT_WORK(&health->work, health_care);
INIT_WORK(&health->work_watchdog, health_watchdog);
+   INIT_WORK(&health->work_cmd_completion, mlx5_trigger_cmd_completions);
INIT_DELAYED_WORK(&health->recover_work, health_recover);
 
return 0;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347788 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:42:40 2019
New Revision: 347788
URL: https://svnweb.freebsd.org/changeset/base/347788

Log:
  MFC r347323:
  Fix race between driver unload and dumping firmware in mlx5core.
  
  Present code uses lock-less accesses to the dump data to prevent top
  level ioctls from blocking bottom-level call to dump.  Unfortunately, this
  depends on the type stability of the dump data structure, which makes it
  non-functional during driver teardown.
  
  Switch to the mutex locking scheme where top levels use the mutex in the
  bound regions, while copyouts and drain for completion utilize condvars.
  The mutex lifetime is guaranteed to be strictly larger than the time
  interval where driver can initiate dump, and most of the control fields
  of the old struct mlx5_dump_data are directly embedded into struct
  mlx5_core_dev.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:41:54 2019
(r347787)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:42:40 2019
(r347788)
@@ -664,7 +664,6 @@ struct mlx5_special_contexts {
 };
 
 struct mlx5_flow_root_namespace;
-struct mlx5_dump_data;
 struct mlx5_core_dev {
struct pci_dev *pdev;
/* sync pci state */
@@ -704,7 +703,12 @@ struct mlx5_core_dev {
struct mlx5_flow_root_namespace *sniffer_rx_root_ns;
struct mlx5_flow_root_namespace *sniffer_tx_root_ns;
u32 num_q_counter_allocated[MLX5_INTERFACE_NUMBER];
-   struct mlx5_dump_data   *dump_data;
+   const struct mlx5_crspace_regmap *dump_rege;
+   uint32_t *dump_data;
+   unsigned dump_size;
+   bool dump_valid;
+   bool dump_copyout;
+   struct mtx dump_lock;
 
struct sysctl_ctx_list  sysctl_ctx;
int msix_eqvec;

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:41:54 
2019(r347787)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:42:40 
2019(r347788)
@@ -39,14 +39,6 @@ extern const struct mlx5_crspace_regmap mlx5_crspace_r
 extern const struct mlx5_crspace_regmap mlx5_crspace_regmap_mt4115[];
 extern const struct mlx5_crspace_regmap mlx5_crspace_regmap_connectx5[];
 
-struct mlx5_dump_data {
-   const struct mlx5_crspace_regmap *rege;
-   uint32_t *dump;
-   unsigned dump_size;
-   int dump_valid;
-   struct mtx dump_lock;
-};
-
 static MALLOC_DEFINE(M_MLX5_DUMP, "MLX5DUMP", "MLX5 Firmware dump");
 
 static unsigned
@@ -61,20 +53,20 @@ mlx5_fwdump_getsize(const struct mlx5_crspace_regmap *
 }
 
 static void
-mlx5_fwdump_destroy_dd(struct mlx5_dump_data *dd)
+mlx5_fwdump_destroy_dd(struct mlx5_core_dev *mdev)
 {
 
-   mtx_destroy(&dd->dump_lock);
-   free(dd->dump, M_MLX5_DUMP);
-   free(dd, M_MLX5_DUMP);
+   mtx_assert(&mdev->dump_lock, MA_OWNED);
+   free(mdev->dump_data, M_MLX5_DUMP);
+   mdev->dump_data = NULL;
 }
 
 void
 mlx5_fwdump_prep(struct mlx5_core_dev *mdev)
 {
-   struct mlx5_dump_data *dd;
int error;
 
+   mdev->dump_data = NULL;
error = mlx5_vsc_find_cap(mdev);
if (error != 0) {
/* Inability to create a firmware dump is not fatal. */
@@ -82,47 +74,39 @@ mlx5_fwdump_prep(struct mlx5_core_dev *mdev)
"mlx5_fwdump_prep failed %d\n", error);
return;
}
-   dd = malloc(sizeof(struct mlx5_dump_data), M_MLX5_DUMP, M_WAITOK);
switch (pci_get_device(mdev->pdev->dev.bsddev)) {
case 0x1013:
-   dd->rege = mlx5_crspace_regmap_mt4115;
+   mdev->dump_rege = mlx5_crspace_regmap_mt4115;
break;
case 0x1015:
-   dd->rege = mlx5_crspace_regmap_mt4117;
+   mdev->dump_rege = mlx5_crspace_regmap_mt4117;
break;
case 0x1017:
case 0x1019:
-   dd->rege = mlx5_crspace_regmap_connectx5;
+   mdev->dump_rege = mlx5_crspace_regmap_connectx5;
break;
default:
-   free(dd, M_MLX5_DUMP);
return; /* silently fail, do not prevent driver attach */
}
-   dd->dump_size = mlx5_fwdump_getsize(dd->rege);
-   dd->dump = malloc(dd->dump_size * sizeof(uint32_t), M_MLX5_DUMP,
-   M_WAITOK | M_ZERO);
-   dd->dump_valid = 0;
-   mtx_init(&dd->dump_lock, "mlx5dmp", NULL, MTX_DEF | MTX_NEW);
-   if (atomic_cmpset_rel_ptr((uintptr_t *)&mdev->dump_data, 0,
-   (uintptr

svn commit: r347787 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:41:54 2019
New Revision: 347787
URL: https://svnweb.freebsd.org/changeset/base/347787

Log:
  MFC r347322:
  Ensure the flowtable rules are not freed twice in mlx5en(4).
  This can happen when re-loading the driver.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:41:21 
2019(r347786)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:41:54 
2019(r347787)
@@ -131,6 +131,9 @@ mlx5e_del_eth_addr_from_flow_table(struct mlx5e_priv *
 
if (ai->tt_vec & (1 << MLX5E_TT_ANY))
mlx5_del_flow_rule(ai->ft_rule[MLX5E_TT_ANY]);
+
+   /* ensure the rules are not freed again */
+   ai->tt_vec = 0;
 }
 
 static int
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347786 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:41:21 2019
New Revision: 347786
URL: https://svnweb.freebsd.org/changeset/base/347786

Log:
  MFC r347321:
  Undo previous steps upon returning failure in mlx5en(4).
  
  Else flowtable resources may not be properly freed.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:40:47 
2019(r347785)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:41:21 
2019(r347786)
@@ -633,7 +633,11 @@ mlx5e_add_any_vid_rules(struct mlx5e_priv *priv)
if (err)
return (err);
 
-   return (mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_STAG_VID, 
0));
+   err = mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_STAG_VID, 0);
+   if (err)
+   mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_CTAG_VID, 0);
+
+   return (err);
 }
 
 void
@@ -701,19 +705,22 @@ mlx5e_add_all_vlan_rules(struct mlx5e_priv *priv)
err = mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_VID,
  i);
if (err)
-   return (err);
+   goto error;
}
 
err = mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_UNTAGGED, 0);
if (err)
-   return (err);
+   goto error;
 
if (priv->vlan.filter_disabled) {
err = mlx5e_add_any_vid_rules(priv);
if (err)
-   return (err);
+   goto error;
}
return (0);
+error:
+   mlx5e_del_all_vlan_rules(priv);
+   return (err);
 }
 
 void
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347785 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:40:47 2019
New Revision: 347785
URL: https://svnweb.freebsd.org/changeset/base/347785

Log:
  MFC r347320:
  Make sure the flow destination structure does not use values off the stack
  in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:40:12 
2019(r347784)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Thu May 16 16:40:47 
2019(r347785)
@@ -227,7 +227,7 @@ mlx5e_add_eth_addr_rule_sub(struct mlx5e_priv *priv,
 struct mlx5e_eth_addr_info *ai, int type,
 u32 *mc, u32 *mv)
 {
-   struct mlx5_flow_destination dest;
+   struct mlx5_flow_destination dest = {};
u8 mc_enable = 0;
struct mlx5_flow_rule **rule_p;
struct mlx5_flow_table *ft = priv->fts.main.t;
@@ -507,7 +507,7 @@ mlx5e_add_vlan_rule_sub(struct mlx5e_priv *priv,
 u32 *mc, u32 *mv)
 {
struct mlx5_flow_table *ft = priv->fts.vlan.t;
-   struct mlx5_flow_destination dest;
+   struct mlx5_flow_destination dest = {};
u8 mc_enable = 0;
struct mlx5_flow_rule **rule_p;
int err = 0;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347783 - stable/12/sys/dev/mlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:39:37 2019
New Revision: 347783
URL: https://svnweb.freebsd.org/changeset/base/347783

Log:
  MFC r347318:
  Make command timeout way shorter in mlx5core.
  
  The command timeout is terribly long, whole two hours. Make it 60s so if
  things do go wrong, the user gets feedback in relatively short time, so
  they can take corrective actions and/or investigate using tools and such.
  
  Linux commit:
  6b6c07bdcdc97ccac2596063bfc32a5faddfe884
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:39:02 2019
(r347782)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:39:37 2019
(r347783)
@@ -55,7 +55,7 @@ enum {
 };
 
 enum {
-   MLX5_CMD_TIMEOUT_MSEC   = 8 * 60 * 1000,
+   MLX5_CMD_TIMEOUT_MSEC   = 60 * 1000,
MLX5_CMD_WQ_MAX_NAME= 32,
 };
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347782 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:39:02 2019
New Revision: 347782
URL: https://svnweb.freebsd.org/changeset/base/347782

Log:
  MFC r347317:
  Remove non-functional MLX5E_MAX_RX_SEGS macro in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:38:19 2019
(r347781)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:39:02 2019
(r347782)
@@ -88,19 +88,13 @@
 
 #defineMLX5E_MAX_BUSDMA_RX_SEGS 15
 
-#defineMLX5E_MAX_RX_SEGS 7
-
 #ifndef MLX5E_MAX_RX_BYTES
 #defineMLX5E_MAX_RX_BYTES MCLBYTES
 #endif
 
-#if (MLX5E_MAX_RX_SEGS == 1)
-/* FreeBSD HW LRO is limited by 16KB - the size of max mbuf */
-#defineMLX5E_PARAMS_DEFAULT_LRO_WQE_SZ MJUM16BYTES
-#else
 #defineMLX5E_PARAMS_DEFAULT_LRO_WQE_SZ \
-MIN(65535, MLX5E_MAX_RX_SEGS * MLX5E_MAX_RX_BYTES)
-#endif
+MIN(65535, 7 * MLX5E_MAX_RX_BYTES)
+
 #defineMLX5E_DIM_DEFAULT_PROFILE 3
 #defineMLX5E_DIM_MAX_RX_CQ_MODERATION_PKTS_WITH_LRO16
 #defineMLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_USEC  0x10

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:38:19 
2019(r347781)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:39:02 
2019(r347782)
@@ -1253,11 +1253,7 @@ mlx5e_create_rq(struct mlx5e_channel *c,
rq->mbuf = malloc(wq_sz * sizeof(rq->mbuf[0]), M_MLX5EN, M_WAITOK | 
M_ZERO);
for (i = 0; i != wq_sz; i++) {
struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(&rq->wq, i);
-#if (MLX5E_MAX_RX_SEGS == 1)
-   uint32_t byte_count = rq->wqe_sz - MLX5E_NET_IP_ALIGN;
-#else
int j;
-#endif
 
err = -bus_dmamap_create(rq->dma_tag, 0, &rq->mbuf[i].dma_map);
if (err != 0) {
@@ -1267,13 +1263,8 @@ mlx5e_create_rq(struct mlx5e_channel *c,
}
 
/* set value for constant fields */
-#if (MLX5E_MAX_RX_SEGS == 1)
-   wqe->data[0].lkey = c->mkey_be;
-   wqe->data[0].byte_count = cpu_to_be32(byte_count | 
MLX5_HW_START_PADDING);
-#else
for (j = 0; j < rq->nsegs; j++)
wqe->data[j].lkey = c->mkey_be;
-#endif
}
 
INIT_WORK(&rq->dim.work, mlx5e_dim_work);

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:38:19 2019
(r347781)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:39:02 2019
(r347782)
@@ -36,20 +36,12 @@ mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
struct mbuf *mb;
int nsegs;
int err;
-#if (MLX5E_MAX_RX_SEGS != 1)
struct mbuf *mb_head;
int i;
-#endif
+
if (rq->mbuf[ix].mbuf != NULL)
return (0);
 
-#if (MLX5E_MAX_RX_SEGS == 1)
-   mb = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, rq->wqe_sz);
-   if (unlikely(!mb))
-   return (-ENOMEM);
-
-   mb->m_pkthdr.len = mb->m_len = rq->wqe_sz;
-#else
mb_head = mb = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR,
MLX5E_MAX_RX_BYTES);
if (unlikely(mb == NULL))
@@ -72,7 +64,7 @@ mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
}
/* rewind to first mbuf in chain */
mb = mb_head;
-#endif
+
/* get IP header aligned */
m_adj(mb, MLX5E_NET_IP_ALIGN);
 
@@ -85,10 +77,7 @@ mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
err = -ENOMEM;
goto err_free_mbuf;
}
-#if (MLX5E_MAX_RX_SEGS == 1)
wqe->data[0].addr = cpu_to_be64(segs[0].ds_addr);
-#else
-   wqe->data[0].addr = cpu_to_be64(segs[0].ds_addr);
wqe->data[0].byte_count = cpu_to_be32(segs[0].ds_len |
MLX5_HW_START_PADDING);
for (i = 1; i != nsegs; i++) {
@@ -99,7 +88,6 @@ mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
wqe->data[i].addr = 0;
wqe->data[i].byte_count = 0;
}
-#endif
 
rq->mbuf[ix].mbuf = mb;
rq->mbuf[ix].data = mb->m_data;
@@ -257,9 +245,7 @@ mlx5e_build_rx_mbuf(struct mlx5_cqe64 *cqe,
 {
struct ifnet *ifp = rq->ifp;
struct mlx5e_channel *c;
-#if (MLX5E_MAX_RX_SEGS != 1)
struct mbuf *mb_head;
-#endif
int lro_num_seg;/* HW LRO session aggregated packets counter */
uint64_t tstmp;
 
@@ -270,9 +256,6 @@ mlx5e_build_rx_mbuf(struct mlx5_cqe64 *cqe,
rq->stats.lro_byte

svn commit: r347781 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:38:19 2019
New Revision: 347781
URL: https://svnweb.freebsd.org/changeset/base/347781

Log:
  MFC r347316:
  Fix for compilation warning in mlx5en(4).
  
  Function 'mlx5e_alloc_rx_wqe' can never be inlined because it uses alloca
  (override using the always_inline attribute)
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:37:36 2019
(r347780)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:38:19 2019
(r347781)
@@ -86,6 +86,8 @@
 #defineMLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE0xa
 #defineMLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE0xe
 
+#defineMLX5E_MAX_BUSDMA_RX_SEGS 15
+
 #defineMLX5E_MAX_RX_SEGS 7
 
 #ifndef MLX5E_MAX_RX_BYTES

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:37:36 
2019(r347780)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:38:19 
2019(r347781)
@@ -2243,6 +2243,9 @@ mlx5e_get_wqe_sz(struct mlx5e_priv *priv, u32 *wqe_sz,
for (n = howmany(r, MLX5E_MAX_RX_BYTES); !powerof2(n + 1); n++)
;
 
+   if (n > MLX5E_MAX_BUSDMA_RX_SEGS)
+   return (-ENOMEM);
+
*wqe_sz = r;
*nsegs = n;
return (0);

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:37:36 2019
(r347780)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:38:19 2019
(r347781)
@@ -32,7 +32,7 @@ static inline int
 mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
 struct mlx5e_rx_wqe *wqe, u16 ix)
 {
-   bus_dma_segment_t segs[rq->nsegs];
+   bus_dma_segment_t segs[MLX5E_MAX_BUSDMA_RX_SEGS];
struct mbuf *mb;
int nsegs;
int err;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347780 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:37:36 2019
New Revision: 347780
URL: https://svnweb.freebsd.org/changeset/base/347780

Log:
  MFC r347315:
  Rename functions from mlx5_fwdump to mlx5_ctl in mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:37:00 
2019(r347779)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:37:36 
2019(r347780)
@@ -104,8 +104,8 @@ void mlx5e_cleanup(void);
 
 int mlx5_rename_eq(struct mlx5_core_dev *dev, int eq_ix, char *name);
 
-int mlx5_fwdump_init(void);
-void mlx5_fwdump_fini(void);
+int mlx5_ctl_init(void);
+void mlx5_ctl_fini(void);
 void mlx5_fwdump_prep(struct mlx5_core_dev *mdev);
 void mlx5_fwdump(struct mlx5_core_dev *mdev);
 void mlx5_fwdump_clean(struct mlx5_core_dev *mdev);

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:37:00 
2019(r347779)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:37:36 
2019(r347780)
@@ -244,7 +244,7 @@ mlx5_fw_reset(struct mlx5_core_dev *mdev)
 }
 
 static int
-mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
+mlx5_ctl_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
 struct thread *td)
 {
struct mlx5_core_dev *mdev;
@@ -343,34 +343,34 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
return (error);
 }
 
-static struct cdevsw mlx5_fwdump_devsw = {
+static struct cdevsw mlx5_ctl_devsw = {
.d_version =D_VERSION,
-   .d_ioctl =  mlx5_fwdump_ioctl,
+   .d_ioctl =  mlx5_ctl_ioctl,
 };
 
-static struct cdev *mlx5_fwdump_dev;
+static struct cdev *mlx5_ctl_dev;
 
 int
-mlx5_fwdump_init(void)
+mlx5_ctl_init(void)
 {
struct make_dev_args mda;
int error;
 
make_dev_args_init(&mda);
mda.mda_flags = MAKEDEV_WAITOK | MAKEDEV_CHECKNAME;
-   mda.mda_devsw = &mlx5_fwdump_devsw;
+   mda.mda_devsw = &mlx5_ctl_devsw;
mda.mda_uid = UID_ROOT;
mda.mda_gid = GID_OPERATOR;
mda.mda_mode = 0640;
-   error = make_dev_s(&mda, &mlx5_fwdump_dev, "mlx5ctl");
+   error = make_dev_s(&mda, &mlx5_ctl_dev, "mlx5ctl");
return (-error);
 }
 
 void
-mlx5_fwdump_fini(void)
+mlx5_ctl_fini(void)
 {
 
-   if (mlx5_fwdump_dev != NULL)
-   destroy_dev(mlx5_fwdump_dev);
+   if (mlx5_ctl_dev != NULL)
+   destroy_dev(mlx5_ctl_dev);
 
 }

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:37:00 
2019(r347779)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:37:36 
2019(r347780)
@@ -1608,13 +1608,13 @@ static int __init init(void)
if (err)
goto err_debug;
 
-   err = mlx5_fwdump_init();
+   err = mlx5_ctl_init();
if (err)
-   goto err_fwdump;
+   goto err_ctl;
  
return 0;
  
-err_fwdump:
+err_ctl:
pci_unregister_driver(&mlx5_core_driver);
 
 err_debug:
@@ -1623,7 +1623,7 @@ err_debug:
 
 static void __exit cleanup(void)
 {
-   mlx5_fwdump_fini();
+   mlx5_ctl_fini();
pci_unregister_driver(&mlx5_core_driver);
 }
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347779 - stable/12/usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:37:00 2019
New Revision: 347779
URL: https://svnweb.freebsd.org/changeset/base/347779

Log:
  MFC r347314:
  Ensure that only one command is specified at a time in mlx5tool(8).
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/usr.sbin/mlx5tool/mlx5tool.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.c
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:36:10 2019
(r347778)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:37:00 2019
(r347779)
@@ -244,22 +244,32 @@ main(int argc, char *argv[])
addrstr = optarg;
break;
case 'w':
+   if (act != ACTION_NONE)
+   usage();
act = ACTION_DUMP_GET;
break;
case 'e':
+   if (act != ACTION_NONE)
+   usage();
act = ACTION_DUMP_FORCE;
break;
case 'o':
dumpname = optarg;
break;
case 'r':
+   if (act != ACTION_NONE)
+   usage();
act = ACTION_DUMP_RESET;
break;
case 'f':
+   if (act != ACTION_NONE)
+   usage();
act = ACTION_FW_UPDATE;
img_fw_path = optarg;
break;
case 'z':
+   if (act != ACTION_NONE)
+   usage();
act = ACTION_FW_RESET;
break;
case 'h':
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347778 - in stable/12: share/man/man4 sys/dev/mlx5 sys/dev/mlx5/mlx5_core usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:36:10 2019
New Revision: 347778
URL: https://svnweb.freebsd.org/changeset/base/347778

Log:
  MFC r347313:
  Implement firmware reset from userspace in mlx5tool(8).
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/share/man/man4/mlx5io.4
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
  stable/12/sys/dev/mlx5/mlx5io.h
  stable/12/usr.sbin/mlx5tool/mlx5tool.8
  stable/12/usr.sbin/mlx5tool/mlx5tool.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/share/man/man4/mlx5io.4
==
--- stable/12/share/man/man4/mlx5io.4   Thu May 16 16:35:27 2019
(r34)
+++ stable/12/share/man/man4/mlx5io.4   Thu May 16 16:36:10 2019
(r347778)
@@ -142,6 +142,11 @@ Image address in memory is passed in
 the length of the image is specified in
 .Dv img_fw_data_len
 field.
+.It Dv MLX5_FW_RESET
+Requests PCIe link-level reset on the device.
+The address of the device is specified by the
+.Vt struct mlx5_tool_addr
+structure, which should be passed as an argument.
 .El
 .Sh FILES
 The

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:35:27 
2019(r34)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:36:10 
2019(r347778)
@@ -226,6 +226,24 @@ out:
 }
 
 static int
+mlx5_fw_reset(struct mlx5_core_dev *mdev)
+{
+   device_t dev, bus;
+   int error;
+
+   error = -mlx5_set_mfrl_reg(mdev, MLX5_FRL_LEVEL3);
+   if (error == 0) {
+   dev = mdev->pdev->dev.bsddev;
+   mtx_lock(&Giant);
+   bus = device_get_parent(dev);
+   error = BUS_RESET_CHILD(device_get_parent(bus), bus,
+   DEVF_RESET_DETACH);
+   mtx_unlock(&Giant);
+   }
+   return (error);
+}
+
+static int
 mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
 struct thread *td)
 {
@@ -306,6 +324,17 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
if (error == 0)
error = -mlx5_firmware_flash(mdev, &fake_fw);
kmem_free((vm_offset_t)fake_fw.data, fu->img_fw_data_len);
+   break;
+   case MLX5_FW_RESET:
+   if ((fflag & FWRITE) == 0) {
+   error = EBADF;
+   break;
+   }
+   devaddr = (struct mlx5_tool_addr *)data;
+   error = mlx5_dbsf_to_core(devaddr, &mdev);
+   if (error != 0)
+   break;
+   error = mlx5_fw_reset(mdev);
break;
default:
error = ENOTTY;

Modified: stable/12/sys/dev/mlx5/mlx5io.h
==
--- stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:35:27 2019
(r34)
+++ stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:36:10 2019
(r347778)
@@ -59,6 +59,7 @@ struct mlx5_fw_update {
 #defineMLX5_FWDUMP_RESET   _IOW('m', 2, struct mlx5_tool_addr)
 #defineMLX5_FWDUMP_FORCE   _IOW('m', 3, struct mlx5_tool_addr)
 #defineMLX5_FW_UPDATE  _IOW('m', 4, struct mlx5_fw_update)
+#defineMLX5_FW_RESET   _IOW('m', 5, struct mlx5_tool_addr)
 
 #ifndef _KERNEL
 #defineMLX5_DEV_PATH   _PATH_DEV"mlx5ctl"

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.8
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:35:27 2019
(r34)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:36:10 2019
(r347778)
@@ -45,6 +45,9 @@
 .Nm
 .Fl d Ar domain:bus:slot:func
 .Fl f Ar file.mfa2
+.Nm
+.Fl d Ar domain:bus:slot:func
+.Fl z
 .Sh DESCRIPTION
 The
 .Nm
@@ -91,6 +94,14 @@ Flashes the firmware image
 to the specified adapter.
 Image must be in MFA2 pack format and contain a component suitable
 for the adapter hardware.
+.Pp
+Typically, PCIe link-level reset is required to activate the
+newly flashed image, which can be performed by the system reboot
+or using the
+.Fl z
+option.
+.It Fl z
+Performs PCIe link-level reset on the specified device.
 .El
 .Sh FILES
 The

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.c
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:35:27 2019
(r34)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:36:10 2019
(r347778)
@@ -189,17 +189,29 @@ close_fd:
return (res);
 }
 
+static int
+mlx5tool_fw_reset(int ctldev, const struct mlx5_tool_addr *addr)
+{
+
+   if (ioctl(ctldev, MLX5_FW_RESET, addr) == -1) {
+   warn("MLX5_FW_RESET")

svn commit: r347777 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:35:27 2019
New Revision: 34
URL: https://svnweb.freebsd.org/changeset/base/34

Log:
  MFC r347312:
  Add Firmware Reset Level, MFRL, register accessors in mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 16:34:48 2019
(r347776)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 16:35:27 2019
(r34)
@@ -1218,6 +1218,11 @@ enum {
MLX5_GEN_EVENT_SUBTYPE_PCI_POWER_CHANGE_EVENT = 0x5,
 };
 
+enum {
+   MLX5_FRL_LEVEL3 = 0x8,
+   MLX5_FRL_LEVEL6 = 0x40,
+};
+
 /* 8 regular priorities + 1 for multicast */
 #define MLX5_NUM_BYPASS_FTS9
 

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:34:48 2019
(r347776)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:35:27 2019
(r34)
@@ -154,6 +154,7 @@ enum {
MLX5_REG_HOST_ENDIANNESS = 0x7004,
MLX5_REG_MTMP= 0x900a,
MLX5_REG_MCIA= 0x9014,
+   MLX5_REG_MFRL= 0x9028,
MLX5_REG_MPCNT   = 0x9051,
MLX5_REG_MCQI= 0x9061,
MLX5_REG_MCC = 0x9062,

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:34:48 
2019(r347776)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:35:27 
2019(r34)
@@ -82,6 +82,8 @@ int mlx5_query_pcam_reg(struct mlx5_core_dev *dev, u32
u8 feature_group, u8 access_reg_group);
 int mlx5_query_mcam_reg(struct mlx5_core_dev *dev, u32 *mcap,
u8 feature_group, u8 access_reg_group);
+int mlx5_query_mfrl_reg(struct mlx5_core_dev *mdev, u8 *reset_level);
+int mlx5_set_mfrl_reg(struct mlx5_core_dev *mdev, u8 reset_level);
 int mlx5_cmd_init_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_teardown_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_force_teardown_hca(struct mlx5_core_dev *dev);

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 16:34:48 
2019(r347776)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 16:35:27 
2019(r34)
@@ -1210,3 +1210,29 @@ int mlx5_query_pddr_range_info(struct mlx5_core_dev *m
return (0);
 }
 EXPORT_SYMBOL_GPL(mlx5_query_pddr_range_info);
+
+int
+mlx5_query_mfrl_reg(struct mlx5_core_dev *mdev, u8 *reset_level)
+{
+   u32 mfrl[MLX5_ST_SZ_DW(mfrl_reg)] = {};
+   int sz = MLX5_ST_SZ_BYTES(mfrl_reg);
+   int err;
+
+   err = mlx5_core_access_reg(mdev, mfrl, sz, mfrl, sz, MLX5_REG_MFRL,
+   0, 0);
+   if (err == 0)
+   *reset_level = MLX5_GET(mfrl_reg, mfrl, reset_level);
+   return (err);
+}
+
+int
+mlx5_set_mfrl_reg(struct mlx5_core_dev *mdev, u8 reset_level)
+{
+   u32 mfrl[MLX5_ST_SZ_DW(mfrl_reg)] = {};
+   int sz = MLX5_ST_SZ_BYTES(mfrl_reg);
+
+   MLX5_SET(mfrl_reg, mfrl, reset_level, reset_level);
+
+   return (mlx5_core_access_reg(mdev, mfrl, sz, mfrl, sz, MLX5_REG_MFRL,
+   0, 1));
+}

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:34:48 2019
(r347776)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:35:27 2019
(r34)
@@ -10409,4 +10409,9 @@ struct mlx5_ifc_qpts_reg_bits {
u8 trust_state[0x3];
 };
 
+struct mlx5_ifc_mfrl_reg_bits {
+   u8 reserved_at_0[0x38];
+   u8 reset_level[0x8];
+};
+
 #endif /* MLX5_IFC_H */
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347776 - stable/12/contrib/ofed/libmlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:34:48 2019
New Revision: 347776
URL: https://svnweb.freebsd.org/changeset/base/347776

Log:
  MFC r347311:
  Add ConnectX-6 DX HCA ID to libmlx5.
  
  In addition, add "ConnectX family mlx5Gen Virtual Function" device ID.
  Every new HCA VF will be identified with this device ID.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/contrib/ofed/libmlx5/mlx5.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/contrib/ofed/libmlx5/mlx5.c
==
--- stable/12/contrib/ofed/libmlx5/mlx5.c   Thu May 16 16:34:11 2019
(r347775)
+++ stable/12/contrib/ofed/libmlx5/mlx5.c   Thu May 16 16:34:48 2019
(r347776)
@@ -79,6 +79,8 @@ static struct {
HCA(MELLANOX, 4122),/* ConnectX-5 Ex VF */
HCA(MELLANOX, 4123),/* ConnectX-6 */
HCA(MELLANOX, 4124),/* ConnectX-6 VF */
+   HCA(MELLANOX, 4125),/* ConnectX-6 DX */
+   HCA(MELLANOX, 4126),/* ConnectX family mlx5Gen Virtual Function */
HCA(MELLANOX, 41682),   /* BlueField integrated ConnectX-5 network 
controller */
HCA(MELLANOX, 41683),   /* BlueField integrated ConnectX-5 network 
controller VF */
 };
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347775 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:34:11 2019
New Revision: 347775
URL: https://svnweb.freebsd.org/changeset/base/347775

Log:
  MFC r347310:
  Expose per-lane counters before correction mechanism in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:33:35 2019
(r347774)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:34:11 2019
(r347775)
@@ -280,6 +280,24 @@ struct mlx5e_vport_stats {
   m(+1, u64, tx_stat_p4096to8191octets, "tx_stat_p4096to8191octets", "Bytes")  
\
   m(+1, u64, tx_stat_p8192to10239octets, "tx_stat_p8192to10239octets", "Bytes")
 
+#defineMLX5E_PPORT_STATISTICAL_DEBUG(m)
\
+  m(+1, u64, phy_time_since_last_clear, "phy_time_since_last_clear",   \
+"Time since last clear in milliseconds")   \
+  m(+1, u64, phy_received_bits, "phy_received_bits",   \
+"Total amount of traffic received in bits before error correction")
\
+  m(+1, u64, phy_symbol_errors, "phy_symbol_errors",   \
+"Total number of symbol errors before error correction")   \
+  m(+1, u64, phy_corrected_bits, "phy_corrected_bits", \
+"Total number of corrected bits ") \
+  m(+1, u64, phy_corrected_bits_lane0, "phy_corrected_bits_lane0", \
+"Total number of corrected bits for lane 0")   \
+  m(+1, u64, phy_corrected_bits_lane1, "phy_corrected_bits_lane1", \
+"Total number of corrected bits for lane 1")   \
+  m(+1, u64, phy_corrected_bits_lane2, "phy_corrected_bits_lane2", \
+"Total number of corrected bits for lane 2")   \
+  m(+1, u64, phy_corrected_bits_lane3, "phy_corrected_bits_lane3", \
+"Total number of corrected bits for lane 3")
+
 #defineMLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)   
\
   m(+1, u64, time_since_last_clear, "time_since_last_clear",   \
 "Time since the last counters clear event (msec)") \
@@ -522,6 +540,7 @@ struct mlx5e_vport_stats {
   MLX5E_PPORT_RFC2863_STATS_DEBUG(m)   \
   MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)\
   MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(m) \
+  MLX5E_PPORT_STATISTICAL_DEBUG(m) \
   MLX5E_PCIE_PERFORMANCE_COUNTERS_64(m) \
   MLX5E_PCIE_PERFORMANCE_COUNTERS_32(m) \
   MLX5E_PCIE_TIMERS_AND_STATES_COUNTERS_32(m) \
@@ -544,6 +563,8 @@ struct mlx5e_vport_stats {
   (0 MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM \
   (0 MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(MLX5E_STATS_COUNT))
+#defineMLX5E_PPORT_STATISTICAL_DEBUG_NUM \
+  (0 MLX5E_PPORT_STATISTICAL_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PORT_STATS_DEBUG_NUM \
   (0 MLX5E_PORT_STATS_DEBUG(MLX5E_STATS_COUNT))
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:33:35 
2019(r347774)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:34:11 
2019(r347775)
@@ -769,6 +769,18 @@ mlx5e_update_pport_counters(struct mlx5e_priv *priv)
for (x = 0; x != MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM; x++, 
y++)
s_debug->arg[y] = be64toh(ptr[x]);
 
+   /* read Extended Statistical Group */
+   if (MLX5_CAP_GEN(mdev, pcam_reg) &&
+   MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group) &&
+   MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters)) {
+   /* read Extended Statistical counter group using predefined 
counter layout */
+   MLX5_SET(ppcnt_reg, in, grp, 
MLX5_PHYSICAL_LAYER_STATISTICAL_GROUP);
+   mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 
0);
+
+   for (x = 0; x != MLX5E_PPORT_STATISTICAL_DEBUG_NUM; x++, y++)
+   s_debug->arg[y] = be64toh(ptr[x]);
+   }
+
/* read PCIE counters */
mlx5e_update_pcie_counters(priv);
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347774 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:33:35 2019
New Revision: 347774
URL: https://svnweb.freebsd.org/changeset/base/347774

Log:
  MFC r347309:
  Add support for extended PCIe counters in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:32:59 2019
(r347773)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:33:35 2019
(r347774)
@@ -363,6 +363,151 @@ struct mlx5e_vport_stats {
   MLX5E_PPORT_PER_PRIO_STATS_SUB(MLX5E_PPORT_PER_PRIO_STATS_PREFIX,m,6) \
   MLX5E_PPORT_PER_PRIO_STATS_SUB(MLX5E_PPORT_PER_PRIO_STATS_PREFIX,m,7)
 
+#defineMLX5E_PCIE_PERFORMANCE_COUNTERS_64(m)   
\
+  m(+1, u64, life_time_counter_high, "life_time_counter",  \
+"Life time counter.", pcie_perf_counters)  \
+  m(+1, u64, tx_overflow_buffer_pkt, "tx_overflow_buffer_pkt", \
+"The number of packets dropped due to lack of PCIe buffers "   \
+"in receive path from NIC port toward the hosts.", \
+pcie_perf_counters)
\
+  m(+1, u64, tx_overflow_buffer_marked_pkt,\
+"tx_overflow_buffer_marked_pkt",   \
+"The number of packets marked due to lack of PCIe buffers "
\
+"in receive path from NIC port toward the hosts.", \
+pcie_perf_counters)
+
+#defineMLX5E_PCIE_PERFORMANCE_COUNTERS_32(m)   
\
+  m(+1, u64, rx_errors, "rx_errors",   \
+"Number of transitions to recovery due to Framing "
\
+"errors and CRC errors.", pcie_perf_counters)  \
+  m(+1, u64, tx_errors, "tx_errors", "Number of transitions "  \
+"to recovery due to EIEOS and TS errors.", pcie_perf_counters) \
+  m(+1, u64, l0_to_recovery_eieos, "l0_to_recovery_eieos", "Number of "
\
+"transitions to recovery due to getting EIEOS.", pcie_perf_counters)\
+  m(+1, u64, l0_to_recovery_ts, "l0_to_recovery_ts", "Number of "  \
+"transitions to recovery due to getting TS.", pcie_perf_counters)  \
+  m(+1, u64, l0_to_recovery_framing, "l0_to_recovery_framing", "Number "\
+"of transitions to recovery due to identifying framing "   \
+"errors at gen3/4.", pcie_perf_counters)   \
+  m(+1, u64, l0_to_recovery_retrain, "l0_to_recovery_retrain", \
+"Number of transitions to recovery due to link retrain request "   \
+"from data link.", pcie_perf_counters) \
+  m(+1, u64, crc_error_dllp, "crc_error_dllp", "Number of transitions "
\
+"to recovery due to identifying CRC DLLP errors.", \
+pcie_perf_counters)
\
+  m(+1, u64, crc_error_tlp, "crc_error_tlp", "Number of transitions to "\
+"recovery due to identifying CRC TLP errors.", pcie_perf_counters) \
+  m(+1, u64, outbound_stalled_reads, "outbound_stalled_reads", \
+"The percentage of time within the last second that the NIC had "  \
+"outbound non-posted read requests but could not perform the " \
+"operation due to insufficient non-posted credits.",   \
+pcie_perf_counters)
\
+  m(+1, u64, outbound_stalled_writes, "outbound_stalled_writes",   \
+"The percentage of time within the last second that the NIC had "  \
+"outbound posted writes requests but could not perform the "   \
+"operation due to insufficient posted credits.",   \
+pcie_perf_counters)
\
+  m(+1, u64, outbound_stalled_reads_events,\
+"outbound_stalled_reads_events", "The number of events where " \
+"outbound_stalled_reads was above a threshold.",   \
+pcie_perf_counters)
\
+  m(+1, u64, outbound_stalled_writes_events,   \
+"outbound_stalled_writes_events",  \
+"The number of events where outbound_stalled_writes was above "\
+"a threshold.", pcie_perf_counters)
+
+#defineMLX5E_PCIE_TIMERS_AND_STATES_COUNTERS_32(m) 
\
+  m(+1, u64, time_to_boot_image_start, "time_to_boot_image_start", \
+"Time from start until FW boot image starts running in usec.", \
+pcie_timers_states)
\
+  m(+

svn commit: r347773 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:32:59 2019
New Revision: 347773
URL: https://svnweb.freebsd.org/changeset/base/347773

Log:
  MFC r347308:
  Extend the counters framework in mlx5en(4).
  
  Allow more macro arguments and split the variable type and name into
  separate arguments. This allows simple and powerful copy and extraction
  of values from IFC based structures into SYSCTLs with the use of a single
  macro.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/en_rl.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:32:22 2019
(r347772)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:32:59 2019
(r347773)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2015-2018 Mellanox Technologies. All rights reserved.
+ * Copyright (c) 2015-2019 Mellanox Technologies. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -146,48 +146,48 @@ struct mlx5e_cq;
 
 typedef void (mlx5e_cq_comp_t)(struct mlx5_core_cq *);
 
-#defineMLX5E_STATS_COUNT(a,b,c,d) a
-#defineMLX5E_STATS_VAR(a,b,c,d) b;
-#defineMLX5E_STATS_DESC(a,b,c,d) c, d,
+#defineMLX5E_STATS_COUNT(a, ...) a
+#defineMLX5E_STATS_VAR(a, b, c, ...) b c;
+#defineMLX5E_STATS_DESC(a, b, c, d, e, ...) d, e,
 
 #defineMLX5E_VPORT_STATS(m)
\
   /* HW counters */\
-  m(+1, u64 rx_packets, "rx_packets", "Received packets")  \
-  m(+1, u64 rx_bytes, "rx_bytes", "Received bytes")\
-  m(+1, u64 tx_packets, "tx_packets", "Transmitted packets")   \
-  m(+1, u64 tx_bytes, "tx_bytes", "Transmitted bytes") \
-  m(+1, u64 rx_error_packets, "rx_error_packets", "Received error packets") \
-  m(+1, u64 rx_error_bytes, "rx_error_bytes", "Received error bytes")  \
-  m(+1, u64 tx_error_packets, "tx_error_packets", "Transmitted error packets") 
\
-  m(+1, u64 tx_error_bytes, "tx_error_bytes", "Transmitted error bytes") \
-  m(+1, u64 rx_unicast_packets, "rx_unicast_packets", "Received unicast 
packets") \
-  m(+1, u64 rx_unicast_bytes, "rx_unicast_bytes", "Received unicast bytes") \
-  m(+1, u64 tx_unicast_packets, "tx_unicast_packets", "Transmitted unicast 
packets") \
-  m(+1, u64 tx_unicast_bytes, "tx_unicast_bytes", "Transmitted unicast bytes") 
\
-  m(+1, u64 rx_multicast_packets, "rx_multicast_packets", "Received multicast 
packets") \
-  m(+1, u64 rx_multicast_bytes, "rx_multicast_bytes", "Received multicast 
bytes") \
-  m(+1, u64 tx_multicast_packets, "tx_multicast_packets", "Transmitted 
multicast packets") \
-  m(+1, u64 tx_multicast_bytes, "tx_multicast_bytes", "Transmitted multicast 
bytes") \
-  m(+1, u64 rx_broadcast_packets, "rx_broadcast_packets", "Received broadcast 
packets") \
-  m(+1, u64 rx_broadcast_bytes, "rx_broadcast_bytes", "Received broadcast 
bytes") \
-  m(+1, u64 tx_broadcast_packets, "tx_broadcast_packets", "Transmitted 
broadcast packets") \
-  m(+1, u64 tx_broadcast_bytes, "tx_broadcast_bytes", "Transmitted broadcast 
bytes") \
-  m(+1, u64 rx_out_of_buffer, "rx_out_of_buffer", "Receive out of buffer, no 
recv wqes events") \
+  m(+1, u64, rx_packets, "rx_packets", "Received packets") \
+  m(+1, u64, rx_bytes, "rx_bytes", "Received bytes")   \
+  m(+1, u64, tx_packets, "tx_packets", "Transmitted packets")  \
+  m(+1, u64, tx_bytes, "tx_bytes", "Transmitted bytes")
\
+  m(+1, u64, rx_error_packets, "rx_error_packets", "Received error packets") \
+  m(+1, u64, rx_error_bytes, "rx_error_bytes", "Received error bytes") \
+  m(+1, u64, tx_error_packets, "tx_error_packets", "Transmitted error 
packets") \
+  m(+1, u64, tx_error_bytes, "tx_error_bytes", "Transmitted error bytes") \
+  m(+1, u64, rx_unicast_packets, "rx_unicast_packets", "Received unicast 
packets") \
+  m(+1, u64, rx_unicast_bytes, "rx_unicast_bytes", "Received unicast bytes") \
+  m(+1, u64, tx_unicast_packets, "tx_unicast_packets", "Transmitted unicast 
packets") \
+  m(+1, u64, tx_unicast_bytes, "tx_unicast_bytes", "Transmitted unicast 
bytes") \
+  m(+1, u64, rx_multicast_packets, "rx_multicast_packets", "Received multicast 
packets") \
+  m(+1, u64, rx_multicast_bytes, "rx_multicast_bytes", "Received multicast 
bytes") \
+  m(+1, u64, tx_multicast_packets, "tx_multicast_packets", "Transmitted 
multicast packets") \
+  m(+1, u64, tx_multicast_bytes, "tx_multicast_bytes", "Transmitted multicast 
bytes") \
+  m(+1, u64, rx_broadcast_packets, "rx_broadcast_packets", "Received broadcast 
packets") \
+  m(+1, u64, rx_broadcast_bytes, "rx_broadcast_byt

svn commit: r347772 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:32:22 2019
New Revision: 347772
URL: https://svnweb.freebsd.org/changeset/base/347772

Log:
  MFC r347307:
  Update performance counter bits in mlx5core.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_diagnostics.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_diagnostics.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_diagnostics.c Thu May 16 16:31:39 
2019(r347771)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_diagnostics.c Thu May 16 16:32:22 
2019(r347772)
@@ -231,13 +231,13 @@ int mlx5_core_get_diagnostics_full(struct mlx5_core_de
   MLX5_REG_MPCNT, 0, 0);
if (err == 0) {
void *pcounters = MLX5_ADDR_OF(mpcnt_reg, out,
-   counter_set.pcie_performance_counters_data_layout);
+   counter_set.pcie_perf_counters);
 
pdiag->counter.rx_pci_errors =
-   MLX5_GET(pcie_performance_counters_data_layout,
+   MLX5_GET(pcie_perf_counters,
 pcounters, rx_errors);
pdiag->counter.tx_pci_errors =
-   MLX5_GET(pcie_performance_counters_data_layout,
+   MLX5_GET(pcie_perf_counters,
 pcounters, tx_errors);
}
MLX5_SET(mpcnt_reg, in, grp,
@@ -247,13 +247,13 @@ int mlx5_core_get_diagnostics_full(struct mlx5_core_de
MLX5_REG_MPCNT, 0, 0);
if (err == 0) {
void *pcounters = MLX5_ADDR_OF(mpcnt_reg, out,
-   counter_set.pcie_timers_and_states_data_layout);
+   counter_set.pcie_timers_states);
 
pdiag->counter.tx_pci_non_fatal_errors =
-   MLX5_GET(pcie_timers_and_states_data_layout,
+   MLX5_GET(pcie_timers_states,
 pcounters, non_fatal_err_msg_sent);
pdiag->counter.tx_pci_fatal_errors =
-   MLX5_GET(pcie_timers_and_states_data_layout,
+   MLX5_GET(pcie_timers_states,
 pcounters, fatal_err_msg_sent);
}
kvfree(in);

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:31:39 2019
(r347771)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:32:22 2019
(r347772)
@@ -9868,11 +9868,89 @@ struct mlx5_ifc_ppcnt_reg_bits {
union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits counter_set;
 };
 
-struct mlx5_ifc_pcie_performance_counters_data_layout_bits {
+struct mlx5_ifc_pcie_lanes_counters_bits {
u8 life_time_counter_high[0x20];
 
u8 life_time_counter_low[0x20];
 
+   u8 error_counter_lane0[0x20];
+
+   u8 error_counter_lane1[0x20];
+
+   u8 error_counter_lane2[0x20];
+
+   u8 error_counter_lane3[0x20];
+
+   u8 error_counter_lane4[0x20];
+
+   u8 error_counter_lane5[0x20];
+
+   u8 error_counter_lane6[0x20];
+
+   u8 error_counter_lane7[0x20];
+
+   u8 error_counter_lane8[0x20];
+
+   u8 error_counter_lane9[0x20];
+
+   u8 error_counter_lane10[0x20];
+
+   u8 error_counter_lane11[0x20];
+
+   u8 error_counter_lane12[0x20];
+
+   u8 error_counter_lane13[0x20];
+
+   u8 error_counter_lane14[0x20];
+
+   u8 error_counter_lane15[0x20];
+
+   u8 reserved_at_240[0x580];
+};
+
+struct mlx5_ifc_pcie_lanes_counters_ext_bits {
+   u8 reserved_at_0[0x40];
+
+   u8 error_counter_lane0[0x20];
+
+   u8 error_counter_lane1[0x20];
+
+   u8 error_counter_lane2[0x20];
+
+   u8 error_counter_lane3[0x20];
+
+   u8 error_counter_lane4[0x20];
+
+   u8 error_counter_lane5[0x20];
+
+   u8 error_counter_lane6[0x20];
+
+   u8 error_counter_lane7[0x20];
+
+   u8 error_counter_lane8[0x20];
+
+   u8 error_counter_lane9[0x20];
+
+   u8 error_counter_lane10[0x20];
+
+   u8 error_counter_lane11[0x20];
+
+   u8 error_counter_lane12[0x20];
+
+   u8 error_counter_lane13[0x20];
+
+   u8 error_counter_lane14[0x20];
+
+   u8 error_counter_lane15[0x20];
+
+   u8 reserved_at_240[0x580];
+};
+
+struct mlx5_ifc_pci

svn commit: r347771 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:31:39 2019
New Revision: 347771
URL: https://svnweb.freebsd.org/changeset/base/347771

Log:
  MFC r347306:
  Implement reading PCI power status in mlx5core.
  
  Implement a watchdog as part of the healtcare subsystem which
  reads the PCI power status during startup and upon the PCI
  power status change event and store it into the core device
  structure. This value is then exported to user-space via a
  read-only SYSCTL. A dmesg print has been added to inform
  the admin about the PCI power status.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 16:31:03 2019
(r347770)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 16:31:39 2019
(r347771)
@@ -1215,6 +1215,7 @@ static inline int mlx5_get_cqe_format(const struct mlx
 
 enum {
MLX5_GEN_EVENT_SUBTYPE_DELAY_DROP_TIMEOUT = 0x1,
+   MLX5_GEN_EVENT_SUBTYPE_PCI_POWER_CHANGE_EVENT = 0x5,
 };
 
 /* 8 regular priorities + 1 for multicast */

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:31:03 2019
(r347770)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:31:39 2019
(r347771)
@@ -506,6 +506,7 @@ struct mlx5_core_health {
int miss_counter;
u32 fatal_error;
struct workqueue_struct*wq_watchdog;
+   struct work_struct  work_watchdog;
/* wq spinlock to synchronize draining */
spinlock_t  wq_lock;
struct workqueue_struct*wq;
@@ -705,6 +706,8 @@ struct mlx5_core_dev {
 
struct sysctl_ctx_list  sysctl_ctx;
int msix_eqvec;
+   int pwr_status;
+   int pwr_value;
 
struct {
struct mlx5_rsvd_gids   reserved_gids;
@@ -955,6 +958,7 @@ void mlx5_stop_health_poll(struct mlx5_core_dev *dev, 
 void mlx5_drain_health_wq(struct mlx5_core_dev *dev);
 void mlx5_drain_health_recovery(struct mlx5_core_dev *dev);
 void mlx5_trigger_health_work(struct mlx5_core_dev *dev);
+void mlx5_trigger_health_watchdog(struct mlx5_core_dev *dev);
 
 #definemlx5_buf_alloc_node(dev, size, direct, buf, node) \
mlx5_buf_alloc(dev, size, direct, buf)
@@ -1089,6 +1093,8 @@ int mlx5_vsc_write(struct mlx5_core_dev *mdev, u32 add
 int mlx5_vsc_read(struct mlx5_core_dev *mdev, u32 addr, u32 *data);
 int mlx5_vsc_lock_addr_space(struct mlx5_core_dev *mdev, u32 addr);
 int mlx5_vsc_unlock_addr_space(struct mlx5_core_dev *mdev, u32 addr);
+int mlx5_pci_read_power_status(struct mlx5_core_dev *mdev,
+  u16 *p_power, u8 *p_status);
 
 static inline u32 mlx5_mkey_to_idx(u32 mkey)
 {

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 16:31:03 2019
(r347770)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 16:31:39 2019
(r347771)
@@ -561,6 +561,11 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
if (MLX5_CAP_GEN(dev, temp_warn_event))
async_event_mask |= (1ull << MLX5_EVENT_TYPE_TEMP_WARN_EVENT);
 
+   if (MLX5_CAP_GEN(dev, general_notification_event)) {
+   async_event_mask |= (1ull <<
+   MLX5_EVENT_TYPE_CODING_GENERAL_NOTIFICATION_EVENT);
+   }
+
err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
 MLX5_NUM_CMD_EQE, 1ull << MLX5_EVENT_TYPE_CMD,
 "mlx5_cmd_eq", &dev->priv.uuari.uars[0]);
@@ -716,14 +721,17 @@ static void mlx5_port_general_notification_event(struc
 struct mlx5_eqe *eqe)
 {
u8 port = (eqe->data.port.port >> 4) & 0xf;
-   u32 rqn = 0;
-   struct mlx5_eqe_general_notification_event *general_event = NULL;
+   u32 rqn;
+   struct mlx5_eqe_general_notification_event *general_event;
 
switch (eqe->sub_type) {
case MLX5_GEN_EVENT_SUBTYPE_DELAY_DROP_TIMEOUT:
general_event = &eqe->data.general_notifications;
rqn = be32_to_cpu(general_event->rq_user_index_delay_drop) &
  0xff;
+   break;
+   case MLX5_GEN_EVENT_SUBTYPE_PCI_POWER_CHANGE_EVENT:
+   mlx5_trig

svn commit: r347770 - in stable/12/sys/dev/mlx5: . mlx5_core mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:31:03 2019
New Revision: 347770
URL: https://svnweb.freebsd.org/changeset/base/347770

Log:
  MFC r347305:
  Move workqueue from mlx5en(4) to mlx5core.
  
  This avoids creating more workqueues in mlx5core to do
  simple firmware command polling tasks.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:30:25 2019
(r347769)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:31:03 2019
(r347770)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2013-2017, Mellanox Technologies, Ltd.  All rights reserved.
+ * Copyright (c) 2013-2019, Mellanox Technologies, Ltd.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -505,6 +505,7 @@ struct mlx5_core_health {
u32 prev;
int miss_counter;
u32 fatal_error;
+   struct workqueue_struct*wq_watchdog;
/* wq spinlock to synchronize draining */
spinlock_t  wq_lock;
struct workqueue_struct*wq;

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:30:25 
2019(r347769)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 16:31:03 
2019(r347770)
@@ -604,26 +604,27 @@ void mlx5_health_cleanup(struct mlx5_core_dev *dev)
struct mlx5_core_health *health = &dev->priv.health;
 
destroy_workqueue(health->wq);
+   destroy_workqueue(health->wq_watchdog);
 }
 
-#define HEALTH_NAME "mlx5_health"
 int mlx5_health_init(struct mlx5_core_dev *dev)
 {
struct mlx5_core_health *health;
-   char *name;
-   int len;
+   char name[64];
 
health = &dev->priv.health;
-   len = strlen(HEALTH_NAME) + strlen(dev_name(&dev->pdev->dev));
-   name = kmalloc(len + 1, GFP_KERNEL);
-   if (!name)
-   return -ENOMEM;
 
-   snprintf(name, len, "%s:%s", HEALTH_NAME, dev_name(&dev->pdev->dev));
+   snprintf(name, sizeof(name), "%s-rec", dev_name(&dev->pdev->dev));
health->wq = create_singlethread_workqueue(name);
-   kfree(name);
if (!health->wq)
return -ENOMEM;
+
+   snprintf(name, sizeof(name), "%s-wdg", dev_name(&dev->pdev->dev));
+   health->wq_watchdog = create_singlethread_workqueue(name);
+   if (!health->wq_watchdog) {
+   destroy_workqueue(health->wq);
+   return -ENOMEM;
+   }
 
spin_lock_init(&health->wq_lock);
INIT_WORK(&health->work, health_care);

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:30:25 
2019(r347769)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:31:03 
2019(r347770)
@@ -4133,13 +4133,8 @@ mlx5e_create_ifp(struct mlx5_core_dev *mdev)
goto err_free_sysctl;
}
 
-   snprintf(unit, sizeof(unit), "mce%u_wq",
-   device_get_unit(mdev->pdev->dev.bsddev));
-   priv->wq = alloc_workqueue(unit, 0, 1);
-   if (priv->wq == NULL) {
-   if_printf(ifp, "%s: alloc_workqueue failed\n", __func__);
-   goto err_free_sysctl;
-   }
+   /* reuse mlx5core's watchdog workqueue */
+   priv->wq = mdev->priv.health.wq_watchdog;
 
err = mlx5_alloc_map_uar(mdev, &priv->cq_uar);
if (err) {
@@ -4290,7 +4285,7 @@ err_unmap_free_uar:
mlx5_unmap_free_uar(mdev, &priv->cq_uar);
 
 err_free_wq:
-   destroy_workqueue(priv->wq);
+   flush_workqueue(priv->wq);
 
 err_free_sysctl:
sysctl_ctx_free(&priv->sysctl_ctx);
@@ -4370,7 +4365,7 @@ mlx5e_destroy_ifp(struct mlx5_core_dev *mdev, void *vp
mlx5_core_dealloc_pd(priv->mdev, priv->pdn);
mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar);
mlx5e_disable_async_events(priv);
-   destroy_workqueue(priv->wq);
+   flush_workqueue(priv->wq);
mlx5e_priv_mtx_destroy(priv);
free(priv, M_MLX5EN);
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347769 - stable/12/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:30:25 2019
New Revision: 347769
URL: https://svnweb.freebsd.org/changeset/base/347769

Log:
  MFC r347304:
  Always return success for RoCE modify port in mlx5ib.
  
  CM layer calls ib_modify_port() regardless of the link layer.
  
  For the Ethernet ports, qkey violation and Port capabilities
  are meaningless. Therefore, always return success for ib_modify_port
  calls on the Ethernet ports.
  
  Linux Commit:
  ec2558796d25e6024071b6bcb8e11392538d57bf
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:29:48 
2019(r347768)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:30:25 
2019(r347769)
@@ -1078,6 +1078,14 @@ static int mlx5_ib_modify_port(struct ib_device *ibdev
u32 tmp;
int err;
 
+   /*
+* CM layer calls ib_modify_port() regardless of the link
+* layer. For Ethernet ports, qkey violation and Port
+* capabilities are meaningless.
+*/
+   if (mlx5_ib_port_link_layer(ibdev, port) == IB_LINK_LAYER_ETHERNET)
+   return 0;
+
mutex_lock(&dev->cap_mask_mutex);
 
err = mlx5_ib_query_port(ibdev, port, &attr);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347768 - stable/12/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:29:48 2019
New Revision: 347768
URL: https://svnweb.freebsd.org/changeset/base/347768

Log:
  MFC r347303:
  Add support for new rates to mlx5ib.
  
  Submitted by: slavash@
  Sponsored by:   Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_qp.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:29:12 
2019(r347767)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 16:29:48 
2019(r347768)
@@ -223,14 +223,70 @@ static int translate_eth_proto_oper(u32 eth_proto_oper
return 0;
 }
 
+static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u8 *active_speed,
+   u8 *active_width)
+{
+   switch (eth_proto_oper) {
+   case MLX5E_PROT_MASK(MLX5E_SGMII_100M):
+   case MLX5E_PROT_MASK(MLX5E_1000BASE_X_SGMII):
+   *active_width = IB_WIDTH_1X;
+   *active_speed = IB_SPEED_SDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_5GBASE_R):
+   *active_width = IB_WIDTH_1X;
+   *active_speed = IB_SPEED_DDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_10GBASE_XFI_XAUI_1):
+   *active_width = IB_WIDTH_1X;
+   *active_speed = IB_SPEED_QDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_40GBASE_XLAUI_4_XLPPI_4):
+   *active_width = IB_WIDTH_4X;
+   *active_speed = IB_SPEED_QDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_25GAUI_1_25GBASE_CR_KR):
+   *active_width = IB_WIDTH_1X;
+   *active_speed = IB_SPEED_EDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_50GAUI_2_LAUI_2_50GBASE_CR2_KR2):
+   *active_width = IB_WIDTH_2X;
+   *active_speed = IB_SPEED_EDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_50GAUI_1_LAUI_1_50GBASE_CR_KR):
+   *active_width = IB_WIDTH_1X;
+   *active_speed = IB_SPEED_HDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_CAUI_4_100GBASE_CR4_KR4):
+   *active_width = IB_WIDTH_4X;
+   *active_speed = IB_SPEED_EDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_100GAUI_2_100GBASE_CR2_KR2):
+   *active_width = IB_WIDTH_2X;
+   *active_speed = IB_SPEED_HDR;
+   break;
+   case MLX5E_PROT_MASK(MLX5E_200GAUI_4_200GBASE_CR4_KR4):
+   *active_width = IB_WIDTH_4X;
+   *active_speed = IB_SPEED_HDR;
+   break;
+   default:
+   *active_width = IB_WIDTH_4X;
+   *active_speed = IB_SPEED_QDR;
+   return -EINVAL;
+   }
+
+   return 0;
+}
+
 static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
struct ib_port_attr *props)
 {
struct mlx5_ib_dev *dev = to_mdev(device);
+   u32 out[MLX5_ST_SZ_DW(ptys_reg)] = {};
struct net_device *ndev;
enum ib_mtu ndev_ib_mtu;
u16 qkey_viol_cntr;
u32 eth_prot_oper;
+   bool ext;
int err;
 
memset(props, 0, sizeof(*props));
@@ -238,13 +294,21 @@ static int mlx5_query_port_roce(struct ib_device *devi
/* Possible bad flows are checked before filling out props so in case
 * of an error it will still be zeroed out.
 */
-   err = mlx5_query_port_eth_proto_oper(dev->mdev, ð_prot_oper, 
port_num);
+   err = mlx5_query_port_ptys(dev->mdev, out, sizeof(out), MLX5_PTYS_EN,
+   port_num);
if (err)
return err;
 
-   translate_eth_proto_oper(eth_prot_oper, &props->active_speed,
-&props->active_width);
+   ext = MLX5_CAP_PCAM_FEATURE(dev->mdev, ptys_extended_ethernet);
+   eth_prot_oper = MLX5_GET_ETH_PROTO(ptys_reg, out, ext, eth_proto_oper);
 
+   if (ext)
+   translate_eth_ext_proto_oper(eth_prot_oper, 
&props->active_speed,
+   &props->active_width);
+   else
+   translate_eth_proto_oper(eth_prot_oper, &props->active_speed,
+   &props->active_width);
+
props->port_cap_flags  |= IB_PORT_CM_SUP;
props->port_cap_flags  |= IB_PORT_IP_BASED_GIDS;
 
@@ -772,9 +836,7 @@ static int translate_active_width(struct ib_device *ib
if (active_width & MLX5_IB_WIDTH_1X) {
*ib_width = IB_WIDTH_1X;
} else if (active_width & MLX5_IB_WIDTH_2X) {
-   mlx5_ib_dbg(dev, "active_width %d is not supported by IB 
spec\n",
-   (int)active_width);
-   err = -EINVAL;
+   *ib_width = IB_WIDTH_2X;
} else if (active_width & MLX5_IB_WIDTH_

svn commit: r347767 - in stable/12/contrib/ofed/libibverbs: . examples

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:29:12 2019
New Revision: 347767
URL: https://svnweb.freebsd.org/changeset/base/347767

Log:
  MFC r347302:
  Add support for 200Gbit speeds to libibverbs.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/contrib/ofed/libibverbs/examples/devinfo.c
  stable/12/contrib/ofed/libibverbs/verbs.c
  stable/12/contrib/ofed/libibverbs/verbs.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/contrib/ofed/libibverbs/examples/devinfo.c
==
--- stable/12/contrib/ofed/libibverbs/examples/devinfo.cThu May 16 
16:27:21 2019(r347766)
+++ stable/12/contrib/ofed/libibverbs/examples/devinfo.cThu May 16 
16:29:12 2019(r347767)
@@ -128,6 +128,7 @@ static const char *width_str(uint8_t width)
case 2:  return "4";
case 4:  return "8";
case 8:  return "12";
+   case 16:  return "2";
default: return "invalid width";
}
 }
@@ -143,6 +144,7 @@ static const char *speed_str(uint8_t speed)
 
case 16: return "14.0 Gbps";
case 32: return "25.0 Gbps";
+   case 64: return "50.0 Gbps";
default: return "invalid speed";
}
 }

Modified: stable/12/contrib/ofed/libibverbs/verbs.c
==
--- stable/12/contrib/ofed/libibverbs/verbs.c   Thu May 16 16:27:21 2019
(r347766)
+++ stable/12/contrib/ofed/libibverbs/verbs.c   Thu May 16 16:29:12 2019
(r347767)
@@ -111,6 +111,10 @@ int __attribute__((const)) ibv_rate_to_mult(enum ibv_r
case IBV_RATE_60_GBPS:  return 24;
case IBV_RATE_80_GBPS:  return 32;
case IBV_RATE_120_GBPS: return 48;
+   case IBV_RATE_28_GBPS:  return 11;
+   case IBV_RATE_50_GBPS:  return 20;
+   case IBV_RATE_400_GBPS: return 160;
+   case IBV_RATE_600_GBPS: return 240;
default:   return -1;
}
 }
@@ -127,6 +131,10 @@ enum ibv_rate __attribute__((const)) mult_to_ibv_rate(
case 24: return IBV_RATE_60_GBPS;
case 32: return IBV_RATE_80_GBPS;
case 48: return IBV_RATE_120_GBPS;
+   case 11: return IBV_RATE_28_GBPS;
+   case 20: return IBV_RATE_50_GBPS;
+   case 160: return IBV_RATE_400_GBPS;
+   case 240: return IBV_RATE_600_GBPS;
default: return IBV_RATE_MAX;
}
 }
@@ -151,6 +159,10 @@ int  __attribute__((const)) ibv_rate_to_mbps(enum ibv_
case IBV_RATE_100_GBPS: return 103125;
case IBV_RATE_200_GBPS: return 206250;
case IBV_RATE_300_GBPS: return 309375;
+   case IBV_RATE_28_GBPS:  return 28125;
+   case IBV_RATE_50_GBPS:  return 53125;
+   case IBV_RATE_400_GBPS: return 425000;
+   case IBV_RATE_600_GBPS: return 637500;
default:   return -1;
}
 }
@@ -175,6 +187,10 @@ enum ibv_rate __attribute__((const)) mbps_to_ibv_rate(
case 103125: return IBV_RATE_100_GBPS;
case 206250: return IBV_RATE_200_GBPS;
case 309375: return IBV_RATE_300_GBPS;
+   case 28125:  return IBV_RATE_28_GBPS;
+   case 53125:  return IBV_RATE_50_GBPS;
+   case 425000: return IBV_RATE_400_GBPS;
+   case 637500: return IBV_RATE_600_GBPS;
default: return IBV_RATE_MAX;
}
 }

Modified: stable/12/contrib/ofed/libibverbs/verbs.h
==
--- stable/12/contrib/ofed/libibverbs/verbs.h   Thu May 16 16:27:21 2019
(r347766)
+++ stable/12/contrib/ofed/libibverbs/verbs.h   Thu May 16 16:29:12 2019
(r347767)
@@ -590,7 +590,11 @@ enum ibv_rate {
IBV_RATE_25_GBPS  = 15,
IBV_RATE_100_GBPS = 16,
IBV_RATE_200_GBPS = 17,
-   IBV_RATE_300_GBPS = 18
+   IBV_RATE_300_GBPS = 18,
+   IBV_RATE_28_GBPS  = 19,
+   IBV_RATE_50_GBPS  = 20,
+   IBV_RATE_400_GBPS = 21,
+   IBV_RATE_600_GBPS = 22,
 };
 
 /**
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347766 - in stable/12/sys/ofed: drivers/infiniband/core include/rdma

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:27:21 2019
New Revision: 347766
URL: https://svnweb.freebsd.org/changeset/base/347766

Log:
  MFC r347301:
  Add new rates to ibcore.
  
  Add the new rates that were added to the Infiniband specification as part of
  HDR and 2x support.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/ofed/drivers/infiniband/core/ib_verbs.c
  stable/12/sys/ofed/include/rdma/ib_verbs.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/ofed/drivers/infiniband/core/ib_verbs.c
==
--- stable/12/sys/ofed/drivers/infiniband/core/ib_verbs.c   Thu May 16 
16:26:46 2019(r347765)
+++ stable/12/sys/ofed/drivers/infiniband/core/ib_verbs.c   Thu May 16 
16:27:21 2019(r347766)
@@ -136,6 +136,10 @@ __attribute_const__ int ib_rate_to_mult(enum ib_rate r
case IB_RATE_60_GBPS:  return 24;
case IB_RATE_80_GBPS:  return 32;
case IB_RATE_120_GBPS: return 48;
+   case IB_RATE_28_GBPS:  return  11;
+   case IB_RATE_50_GBPS:  return  20;
+   case IB_RATE_400_GBPS: return 160;
+   case IB_RATE_600_GBPS: return 240;
default:   return -1;
}
 }
@@ -153,6 +157,18 @@ __attribute_const__ enum ib_rate mult_to_ib_rate(int m
case 24: return IB_RATE_60_GBPS;
case 32: return IB_RATE_80_GBPS;
case 48: return IB_RATE_120_GBPS;
+   case 6:   return IB_RATE_14_GBPS;
+   case 22:  return IB_RATE_56_GBPS;
+   case 45:  return IB_RATE_112_GBPS;
+   case 67:  return IB_RATE_168_GBPS;
+   case 10:  return IB_RATE_25_GBPS;
+   case 40:  return IB_RATE_100_GBPS;
+   case 80:  return IB_RATE_200_GBPS;
+   case 120: return IB_RATE_300_GBPS;
+   case 11:  return IB_RATE_28_GBPS;
+   case 20:  return IB_RATE_50_GBPS;
+   case 160: return IB_RATE_400_GBPS;
+   case 240: return IB_RATE_600_GBPS;
default: return IB_RATE_PORT_CURRENT;
}
 }
@@ -178,6 +194,10 @@ __attribute_const__ int ib_rate_to_mbps(enum ib_rate r
case IB_RATE_100_GBPS: return 103125;
case IB_RATE_200_GBPS: return 206250;
case IB_RATE_300_GBPS: return 309375;
+   case IB_RATE_28_GBPS:  return 28125;
+   case IB_RATE_50_GBPS:  return 53125;
+   case IB_RATE_400_GBPS: return 425000;
+   case IB_RATE_600_GBPS: return 637500;
default:   return -1;
}
 }

Modified: stable/12/sys/ofed/include/rdma/ib_verbs.h
==
--- stable/12/sys/ofed/include/rdma/ib_verbs.h  Thu May 16 16:26:46 2019
(r347765)
+++ stable/12/sys/ofed/include/rdma/ib_verbs.h  Thu May 16 16:27:21 2019
(r347766)
@@ -398,6 +398,7 @@ enum ib_port_cap_flags {
 
 enum ib_port_width {
IB_WIDTH_1X = 1,
+   IB_WIDTH_2X = 16,
IB_WIDTH_4X = 2,
IB_WIDTH_8X = 4,
IB_WIDTH_12X= 8
@@ -407,6 +408,7 @@ static inline int ib_width_enum_to_int(enum ib_port_wi
 {
switch (width) {
case IB_WIDTH_1X:  return  1;
+   case IB_WIDTH_2X:  return  2;
case IB_WIDTH_4X:  return  4;
case IB_WIDTH_8X:  return  8;
case IB_WIDTH_12X: return 12;
@@ -672,7 +674,11 @@ enum ib_rate {
IB_RATE_25_GBPS  = 15,
IB_RATE_100_GBPS = 16,
IB_RATE_200_GBPS = 17,
-   IB_RATE_300_GBPS = 18
+   IB_RATE_300_GBPS = 18,
+   IB_RATE_28_GBPS  = 19,
+   IB_RATE_50_GBPS  = 20,
+   IB_RATE_400_GBPS = 21,
+   IB_RATE_600_GBPS = 22,
 };
 
 /**
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347765 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:26:46 2019
New Revision: 347765
URL: https://svnweb.freebsd.org/changeset/base/347765

Log:
  MFC r347300:
  Do not add IFM_10G_LR and IFM_40G_ER4 to supported media types by default in
  mlx5en(4).
  
  IFM_10G_LR and IFM_40G_ER4 media should be added only if the device
  has the needed capability bit set for it.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:26:09 
2019(r347764)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:26:46 
2019(r347765)
@@ -4231,17 +4231,6 @@ mlx5e_create_ifp(struct mlx5_core_dev *mdev)
}
}
 
-   /* Additional supported medias */
-   ifmedia_add(&priv->media, IFM_10G_LR | IFM_ETHER, 0, NULL);
-   ifmedia_add(&priv->media, IFM_10G_LR |
-   IFM_ETHER | IFM_FDX |
-   IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE, 0, NULL);
-
-   ifmedia_add(&priv->media, IFM_40G_ER4 | IFM_ETHER, 0, NULL);
-   ifmedia_add(&priv->media, IFM_40G_ER4 |
-   IFM_ETHER | IFM_FDX |
-   IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE, 0, NULL);
-
ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL);
ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO | IFM_FDX |
IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE, 0, NULL);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347764 - in stable/12/sys/dev/mlx5: . mlx5_core mlx5_en mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:26:09 2019
New Revision: 347764
URL: https://svnweb.freebsd.org/changeset/base/347764

Log:
  MFC r347299:
  Add support for 200Gb ethernet speeds to mlx5core.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
  stable/12/sys/dev/mlx5/port.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:25:09 2019
(r347763)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:26:09 2019
(r347764)
@@ -221,6 +221,12 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
return err;
}
 
+   if (MLX5_CAP_GEN(dev, pcam_reg)) {
+   err = mlx5_get_pcam_reg(dev);
+   if (err)
+   return err;
+   }
+
err = mlx5_core_query_special_contexts(dev);
if (err)
return err;

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 16:25:09 
2019(r347763)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 16:26:09 
2019(r347764)
@@ -260,7 +260,7 @@ int mlx5_query_port_eth_proto_oper(struct mlx5_core_de
 EXPORT_SYMBOL(mlx5_query_port_eth_proto_oper);
 
 int mlx5_set_port_proto(struct mlx5_core_dev *dev, u32 proto_admin,
-   int proto_mask)
+   int proto_mask, bool ext)
 {
u32 in[MLX5_ST_SZ_DW(ptys_reg)] = {0};
u32 out[MLX5_ST_SZ_DW(ptys_reg)] = {0};
@@ -268,10 +268,14 @@ int mlx5_set_port_proto(struct mlx5_core_dev *dev, u32
 
MLX5_SET(ptys_reg, in, local_port, 1);
MLX5_SET(ptys_reg, in, proto_mask, proto_mask);
-   if (proto_mask == MLX5_PTYS_EN)
-   MLX5_SET(ptys_reg, in, eth_proto_admin, proto_admin);
-   else
+   if (proto_mask == MLX5_PTYS_EN) {
+   if (ext)
+   MLX5_SET(ptys_reg, in, ext_eth_proto_admin, 
proto_admin);
+   else
+   MLX5_SET(ptys_reg, in, eth_proto_admin, proto_admin);
+   } else {
MLX5_SET(ptys_reg, in, ib_proto_admin, proto_admin);
+   }
 
err = mlx5_core_access_reg(dev, in, sizeof(in), out,
   sizeof(out), MLX5_REG_PTYS, 0, 1);

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:25:09 
2019(r347763)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:26:09 
2019(r347764)
@@ -47,117 +47,355 @@ struct mlx5e_channel_param {
struct mlx5e_cq_param tx_cq;
 };
 
-static const struct {
+struct media {
u32 subtype;
u64 baudrate;
-}  mlx5e_mode_table[MLX5E_LINK_MODES_NUMBER] = {
+};
 
-   [MLX5E_1000BASE_CX_SGMII] = {
+static const struct media 
mlx5e_mode_table[MLX5E_LINK_SPEEDS_NUMBER][MLX5E_LINK_MODES_NUMBER] = {
+
+   [MLX5E_1000BASE_CX_SGMII][MLX5E_SGMII] = {
.subtype = IFM_1000_CX_SGMII,
.baudrate = IF_Mbps(1000ULL),
},
-   [MLX5E_1000BASE_KX] = {
+   [MLX5E_1000BASE_KX][MLX5E_KX] = {
.subtype = IFM_1000_KX,
.baudrate = IF_Mbps(1000ULL),
},
-   [MLX5E_10GBASE_CX4] = {
+   [MLX5E_10GBASE_CX4][MLX5E_CX4] = {
.subtype = IFM_10G_CX4,
.baudrate = IF_Gbps(10ULL),
},
-   [MLX5E_10GBASE_KX4] = {
+   [MLX5E_10GBASE_KX4][MLX5E_KX4] = {
.subtype = IFM_10G_KX4,
.baudrate = IF_Gbps(10ULL),
},
-   [MLX5E_10GBASE_KR] = {
+   [MLX5E_10GBASE_KR][MLX5E_KR] = {
.subtype = IFM_10G_KR,
.baudrate = IF_Gbps(10ULL),
},
-   [MLX5E_20GBASE_KR2] = {
+   [MLX5E_20GBASE_KR2][MLX5E_KR2] = {
.subtype = IFM_20G_KR2,
.baudrate = IF_Gbps(20ULL),
},
-   [MLX5E_40GBASE_CR4] = {
+   [MLX5E_40GBASE_CR4][MLX5E_CR4] = {
.subtype = IFM_40G_CR4,
.baudrate = IF_Gbps(40ULL),
},
-   [MLX5E_40GBASE_KR4] = {
+   [MLX5E_40GBASE_KR4][MLX5E_KR4] = {
.subtype = IFM_40G_KR4,
.baudrate = IF_Gbps(40ULL),
},
-   [MLX5E_56GBASE_R4] = {
+   [MLX5E_56GBASE_R4][MLX5E_R] = {
.subtype = IFM_56G_R4,
.baudrate = IF_Gbps(56ULL),
},

svn commit: r347763 - stable/12/sys/dev/mlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:25:09 2019
New Revision: 347763
URL: https://svnweb.freebsd.org/changeset/base/347763

Log:
  MFC r347298:
  Remove unused speed enums in mlx5core.
  
  Submitted by: slavash@
  Sponsored by:   Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:24:34 2019
(r347762)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:25:09 2019
(r347763)
@@ -207,36 +207,6 @@ enum mlx5_port_status {
MLX5_PORT_DOWN  = 1 << 1,
 };
 
-enum mlx5_link_mode {
-   MLX5_1000BASE_CX_SGMII  = 0,
-   MLX5_1000BASE_KX= 1,
-   MLX5_10GBASE_CX4= 2,
-   MLX5_10GBASE_KX4= 3,
-   MLX5_10GBASE_KR = 4,
-   MLX5_20GBASE_KR2= 5,
-   MLX5_40GBASE_CR4= 6,
-   MLX5_40GBASE_KR4= 7,
-   MLX5_56GBASE_R4 = 8,
-   MLX5_10GBASE_CR = 12,
-   MLX5_10GBASE_SR = 13,
-   MLX5_10GBASE_ER = 14,
-   MLX5_40GBASE_SR4= 15,
-   MLX5_40GBASE_LR4= 16,
-   MLX5_100GBASE_CR4   = 20,
-   MLX5_100GBASE_SR4   = 21,
-   MLX5_100GBASE_KR4   = 22,
-   MLX5_100GBASE_LR4   = 23,
-   MLX5_100BASE_TX = 24,
-   MLX5_1000BASE_T = 25,
-   MLX5_10GBASE_T  = 26,
-   MLX5_25GBASE_CR = 27,
-   MLX5_25GBASE_KR = 28,
-   MLX5_25GBASE_SR = 29,
-   MLX5_50GBASE_CR2= 30,
-   MLX5_50GBASE_KR2= 31,
-   MLX5_LINK_MODES_NUMBER,
-};
-
 enum {
MLX5_VSC_SPACE_SUPPORTED = 0x1,
MLX5_VSC_SPACE_OFFSET= 0x4,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347762 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:24:34 2019
New Revision: 347762
URL: https://svnweb.freebsd.org/changeset/base/347762

Log:
  MFC r347297:
  Control automatic update of firmware on driver load with a tunable in 
mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:23:58 
2019(r347761)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:24:34 
2019(r347762)
@@ -821,12 +821,19 @@ void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev
 }
 EXPORT_SYMBOL(mlx5_get_protocol_dev);
 
+static int mlx5_auto_fw_update;
+SYSCTL_INT(_hw_mlx5, OID_AUTO, auto_fw_update, CTLFLAG_RDTUN | CTLFLAG_NOFETCH,
+&mlx5_auto_fw_update, 0,
+"Allow automatic firmware update on driver start");
 static int
 mlx5_firmware_update(struct mlx5_core_dev *dev)
 {
const struct firmware *fw;
int err;
 
+   TUNABLE_INT_FETCH("hw.mlx5.auto_fw_update", &mlx5_auto_fw_update);
+   if (!mlx5_auto_fw_update)
+   return (0);
fw = firmware_get("mlx5fw_mfa");
if (fw) {
err = mlx5_firmware_flash(dev, fw);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347761 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:23:58 2019
New Revision: 347761
URL: https://svnweb.freebsd.org/changeset/base/347761

Log:
  MFC r347296:
  Correct check for the calibration generation in mlx5en(4).
  
  If generation is cleared due to hardware clock failure, check for it before
  the divisor is used.  Actually clear generation when failure occurs.
  
  While there, stop doing the calculations inside the generation loop.  Since
  all members of mlx5e_clbr_point are used for calculations, get the
  local copy of the structure and use it after generation stabilized.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:21:32 
2019(r347760)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:23:58 
2019(r347761)
@@ -833,11 +833,15 @@ mlx5e_calibration_callout(void *arg)
next->clbr_hw_prev = curr->clbr_hw_curr;
 
next->clbr_hw_curr = mlx5e_hw_clock(priv);
-   if (((next->clbr_hw_curr - curr->clbr_hw_prev) >> MLX5E_TSTMP_PREC) ==
+   if (((next->clbr_hw_curr - curr->clbr_hw_curr) >> MLX5E_TSTMP_PREC) ==
0) {
-   if_printf(priv->ifp, "HW failed tstmp frozen %#jx %#jx,"
-   "disabling\n", next->clbr_hw_curr, curr->clbr_hw_prev);
-   priv->clbr_done = 0;
+   if (priv->clbr_done != 0) {
+   if_printf(priv->ifp, "HW failed tstmp frozen %#jx %#jx,"
+   "disabling\n",
+next->clbr_hw_curr, curr->clbr_hw_prev);
+   priv->clbr_done = 0;
+   }
+   atomic_store_rel_int(&curr->clbr_gen, 0);
return;
}
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:21:32 2019
(r347760)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 16:23:58 2019
(r347761)
@@ -222,28 +222,31 @@ mlx5e_lro_update_hdr(struct mbuf *mb, struct mlx5_cqe6
 static uint64_t
 mlx5e_mbuf_tstmp(struct mlx5e_priv *priv, uint64_t hw_tstmp)
 {
-   struct mlx5e_clbr_point *cp;
+   struct mlx5e_clbr_point *cp, dcp;
uint64_t a1, a2, res;
u_int gen;
 
do {
cp = &priv->clbr_points[priv->clbr_curr];
gen = atomic_load_acq_int(&cp->clbr_gen);
-   a1 = (hw_tstmp - cp->clbr_hw_prev) >> MLX5E_TSTMP_PREC;
-   a2 = (cp->base_curr - cp->base_prev) >> MLX5E_TSTMP_PREC;
-   res = (a1 * a2) << MLX5E_TSTMP_PREC;
+   if (gen == 0)
+   return (0);
+   dcp = *cp;
+   atomic_thread_fence_acq();
+   } while (gen != cp->clbr_gen);
 
-   /*
-* Divisor cannot be zero because calibration callback
-* checks for the condition and disables timestamping
-* if clock halted.
-*/
-   res /= (cp->clbr_hw_curr - cp->clbr_hw_prev) >>
-   MLX5E_TSTMP_PREC;
+   a1 = (hw_tstmp - dcp.clbr_hw_prev) >> MLX5E_TSTMP_PREC;
+   a2 = (dcp.base_curr - dcp.base_prev) >> MLX5E_TSTMP_PREC;
+   res = (a1 * a2) << MLX5E_TSTMP_PREC;
 
-   res += cp->base_prev;
-   atomic_thread_fence_acq();
-   } while (gen == 0 || gen != cp->clbr_gen);
+   /*
+* Divisor cannot be zero because calibration callback
+* checks for the condition and disables timestamping
+* if clock halted.
+*/
+   res /= (dcp.clbr_hw_curr - dcp.clbr_hw_prev) >> MLX5E_TSTMP_PREC;
+
+   res += dcp.base_prev;
return (res);
 }
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


Re: svn commit: r347758 - in stable/12/sys/dev/mlx5: . mlx5_core mlx5_en

2019-05-16 Thread Hans Petter Selasky

On 2019-05-16 18:15, Hans Petter Selasky wrote:

Author: hselasky
Date: Thu May 16 16:15:20 2019
New Revision: 347758
URL: https://svnweb.freebsd.org/changeset/base/347758

Log:
   MFC r347295:
   Add vnic steering drop statistics in mlx5en(4).


^^^ should be MFC r347294, like in the mergeinfo.

--HPS

___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347760 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:21:32 2019
New Revision: 347760
URL: https://svnweb.freebsd.org/changeset/base/347760

Log:
  MFC r347295:
  Let rx_out_of_buffer be a 32-bit counter in mlx5en(4).
  
  This fixes counting issues when the firmware resets the counter during
  allocation of the counter set where the counter belongs.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:15:41 2019
(r347759)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:21:32 2019
(r347760)
@@ -195,7 +195,6 @@ struct mlx5e_vport_stats {
struct  sysctl_ctx_list ctx;
u64 arg [0];
MLX5E_VPORT_STATS(MLX5E_STATS_VAR)
-   u32 rx_out_of_buffer_prev;
 };
 
 #defineMLX5E_PPORT_IEEE802_3_STATS(m)  
\

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:15:41 
2019(r347759)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:21:32 
2019(r347760)
@@ -593,10 +593,7 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
if (test_bit(MLX5E_STATE_OPENED, &priv->state) != 0 &&
mlx5_vport_query_out_of_rx_buffer(mdev, priv->counter_set_id,
&rx_out_of_buffer) == 0) {
-   /* accumulate difference into a 64-bit counter */
-   s->rx_out_of_buffer += (u64)(u32)(rx_out_of_buffer -
-   s->rx_out_of_buffer_prev);
-   s->rx_out_of_buffer_prev = rx_out_of_buffer;
+   s->rx_out_of_buffer = rx_out_of_buffer;
}
 
/* get port statistics */
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347758 - in stable/12/sys/dev/mlx5: . mlx5_core mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:15:20 2019
New Revision: 347758
URL: https://svnweb.freebsd.org/changeset/base/347758

Log:
  MFC r347295:
  Add vnic steering drop statistics in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:14:43 2019
(r347757)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:15:20 2019
(r347758)
@@ -412,6 +412,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_cor
case MLX5_CMD_OP_MODIFY_HCA_VPORT_CONTEXT:
case MLX5_CMD_OP_QUERY_HCA_VPORT_GID:
case MLX5_CMD_OP_QUERY_HCA_VPORT_PKEY:
+   case MLX5_CMD_OP_QUERY_VNIC_ENV:
case MLX5_CMD_OP_QUERY_VPORT_COUNTER:
case MLX5_CMD_OP_ALLOC_Q_COUNTER:
case MLX5_CMD_OP_QUERY_Q_COUNTER:
@@ -537,6 +538,7 @@ const char *mlx5_command_str(int command)
MLX5_COMMAND_STR_CASE(MODIFY_HCA_VPORT_CONTEXT);
MLX5_COMMAND_STR_CASE(QUERY_HCA_VPORT_GID);
MLX5_COMMAND_STR_CASE(QUERY_HCA_VPORT_PKEY);
+   MLX5_COMMAND_STR_CASE(QUERY_VNIC_ENV);
MLX5_COMMAND_STR_CASE(QUERY_VPORT_COUNTER);
MLX5_COMMAND_STR_CASE(SET_WOL_ROL);
MLX5_COMMAND_STR_CASE(QUERY_WOL_ROL);

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:14:43 2019
(r347757)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 16:15:20 2019
(r347758)
@@ -186,7 +186,8 @@ typedef void (mlx5e_cq_comp_t)(struct mlx5_core_cq *);
   m(+1, u64 tx_queue_dropped, "tx_queue_dropped", "Transmit queue dropped") \
   m(+1, u64 tx_defragged, "tx_defragged", "Transmit queue defragged") \
   m(+1, u64 rx_wqe_err, "rx_wqe_err", "Receive WQE errors") \
-  m(+1, u64 tx_jumbo_packets, "tx_jumbo_packets", "TX packets greater than 
1518 octets")
+  m(+1, u64 tx_jumbo_packets, "tx_jumbo_packets", "TX packets greater than 
1518 octets") \
+  m(+1, u64 rx_steer_missed_packets, "rx_steer_missed_packets", "RX packets 
dropped by steering rule(s)")
 
 #defineMLX5E_VPORT_STATS_NUM (0 MLX5E_VPORT_STATS(MLX5E_STATS_COUNT))
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:14:43 
2019(r347757)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:15:20 
2019(r347758)
@@ -468,6 +468,28 @@ free_out:
kvfree(out);
 }
 
+static void
+mlx5e_grp_vnic_env_update_stats(struct mlx5e_priv *priv)
+{
+   u32 out[MLX5_ST_SZ_DW(query_vnic_env_out)] = {};
+   u32 in[MLX5_ST_SZ_DW(query_vnic_env_in)] = {};
+
+   if (!MLX5_CAP_GEN(priv->mdev, nic_receive_steering_discard))
+   return;
+
+   MLX5_SET(query_vnic_env_in, in, opcode,
+   MLX5_CMD_OP_QUERY_VNIC_ENV);
+   MLX5_SET(query_vnic_env_in, in, op_mod, 0);
+   MLX5_SET(query_vnic_env_in, in, other_vport, 0);
+
+   if (mlx5_cmd_exec(priv->mdev, in, sizeof(in), out, sizeof(out)) != 0)
+   return;
+
+   priv->stats.vport.rx_steer_missed_packets =
+   MLX5_GET64(query_vnic_env_out, out,
+   vport_env.nic_receive_steering_discard);
+}
+
 /*
  * This function is called regularly to collect all statistics
  * counters from the firmware. The values can be viewed through the
@@ -554,6 +576,8 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
s->rx_wqe_err = rx_wqe_err;
s->rx_packets = rx_packets;
s->rx_bytes = rx_bytes;
+
+   mlx5e_grp_vnic_env_update_stats(priv);
 
/* HW counters */
memset(in, 0, sizeof(in));

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:14:43 2019
(r347757)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:15:20 2019
(r347758)
@@ -151,6 +151,7 @@ enum {
MLX5_CMD_OP_MODIFY_HCA_VPORT_CONTEXT  = 0x763,
MLX5_CMD_OP_QUERY_HCA_VPORT_GID   = 0x764,
MLX5_CMD_OP_QUERY_HCA_VPORT_PKEY  = 0x765,
+   MLX5_CMD_OP_QUERY_VNIC_ENV= 0x76f,
MLX5_CMD_OP_QUERY_VPORT_COUNTER   = 0x770,
MLX5_CMD_OP_ALLOC_Q_COUNTER   = 0x771,
MLX5_CMD_OP_DEALLOC_Q_COUNTER = 0x772,
@@ -1222,7 +1223,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
u8 reserved_44[0xb];
u8 log_max_xrcd[0x5];
 
-   u8 reserved_45[0

svn commit: r347757 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:14:43 2019
New Revision: 347757
URL: https://svnweb.freebsd.org/changeset/base/347757

Log:
  MFC r347293:
  Use software counters for rx_packets and rx_bytes in mlx5en(4).
  
  The physical- and virtual- port counters might not reflect the amount
  of data received after address filtering. Use the software counters
  instead for rx_packets and rx_bytes to know exactly how much data
  was received.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:14:03 
2019(r347756)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:14:43 
2019(r347757)
@@ -499,6 +499,8 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
u64 sw_lro_flushed = 0;
u64 rx_csum_none = 0;
u64 rx_wqe_err = 0;
+   u64 rx_packets = 0;
+   u64 rx_bytes = 0;
u32 rx_out_of_buffer = 0;
int i;
int j;
@@ -522,6 +524,8 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
lro_bytes += rq_stats->lro_bytes;
rx_csum_none += rq_stats->csum_none;
rx_wqe_err += rq_stats->wqe_err;
+   rx_packets += rq_stats->packets;
+   rx_bytes += rq_stats->bytes;
 
for (j = 0; j < priv->num_tc; j++) {
sq_stats = &pch->sq[j].stats;
@@ -548,6 +552,8 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
s->sw_lro_flushed = sw_lro_flushed;
s->rx_csum_none = rx_csum_none;
s->rx_wqe_err = rx_wqe_err;
+   s->rx_packets = rx_packets;
+   s->rx_bytes = rx_bytes;
 
/* HW counters */
memset(in, 0, sizeof(in));
@@ -610,11 +616,6 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
s->tx_broadcast_bytes =
MLX5_GET_CTR(out, transmitted_eth_broadcast.octets);
 
-   s->rx_packets = s->rx_unicast_packets +
-   s->rx_multicast_packets + s->rx_broadcast_packets -
-   s->rx_out_of_buffer;
-   s->rx_bytes = s->rx_unicast_bytes + s->rx_multicast_bytes +
-   s->rx_broadcast_bytes;
s->tx_packets = s->tx_unicast_packets +
s->tx_multicast_packets + s->tx_broadcast_packets;
s->tx_bytes = s->tx_unicast_bytes + s->tx_multicast_bytes +
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347756 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:14:03 2019
New Revision: 347756
URL: https://svnweb.freebsd.org/changeset/base/347756

Log:
  MFC r347292:
  Add mlx5_firmware_update() in mlx5core.
  Add support for upgrading firmware on mlx5 module load.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:13:29 
2019(r347755)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:14:03 
2019(r347756)
@@ -52,6 +52,7 @@ MODULE_DESCRIPTION("Mellanox Connect-IB, ConnectX-4 co
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_DEPEND(mlx5, linuxkpi, 1, 1, 1);
 MODULE_DEPEND(mlx5, mlxfw, 1, 1, 1);
+MODULE_DEPEND(mlx5, firmware, 1, 1, 1);
 MODULE_VERSION(mlx5, 1);
 
 SYSCTL_NODE(_hw, OID_AUTO, mlx5, CTLFLAG_RW, 0, "mlx5 hardware controls");
@@ -820,6 +821,23 @@ void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev
 }
 EXPORT_SYMBOL(mlx5_get_protocol_dev);
 
+static int
+mlx5_firmware_update(struct mlx5_core_dev *dev)
+{
+   const struct firmware *fw;
+   int err;
+
+   fw = firmware_get("mlx5fw_mfa");
+   if (fw) {
+   err = mlx5_firmware_flash(dev, fw);
+   firmware_put(fw, FIRMWARE_UNLOAD);
+   }
+   else
+   return (-ENOENT);
+
+   return err;
+}
+
 static int mlx5_pci_init(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
 {
struct pci_dev *pdev = dev->pdev;
@@ -1274,6 +1292,8 @@ static int init_one(struct pci_dev *pdev,
}
 
mlx5_fwdump_prep(dev);
+
+   mlx5_firmware_update(dev);
 
pci_save_state(bsddev);
return 0;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347754 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:12:51 2019
New Revision: 347754
URL: https://svnweb.freebsd.org/changeset/base/347754

Log:
  MFC r347290:
  Fix for double bus master disable in mlx5core.
  
  mlx5_pci_disable_device is calling pci_disable_device which disables
  bus master. No need to explicitly call pci_clear_master.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:12:17 
2019(r347753)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:12:51 
2019(r347754)
@@ -866,7 +866,6 @@ static int mlx5_pci_init(struct mlx5_core_dev *dev, st
return 0;
 
 err_clr_master:
-   pci_clear_master(dev->pdev);
release_bar(dev->pdev);
 err_disable:
mlx5_pci_disable_device(dev);
@@ -877,7 +876,6 @@ err_dbg:
 static void mlx5_pci_close(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
 {
iounmap(dev->iseg);
-   pci_clear_master(dev->pdev);
release_bar(dev->pdev);
mlx5_pci_disable_device(dev);
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347755 - stable/12/sys/ofed/drivers/infiniband/ulp/ipoib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:13:29 2019
New Revision: 347755
URL: https://svnweb.freebsd.org/changeset/base/347755

Log:
  MFC r347291:
  Handle IB_EVENT_DEVICE_FATAL event in ipoib.
  Perform flush if IB_EVENT_DEVICE_FATAL was received.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
==
--- stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c   Thu May 
16 16:12:51 2019(r347754)
+++ stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c   Thu May 
16 16:13:29 2019(r347755)
@@ -282,7 +282,8 @@ void ipoib_event(struct ib_event_handler *handler,
queue_work(ipoib_workqueue, &priv->flush_light);
} else if (record->event == IB_EVENT_PORT_ERR ||
   record->event == IB_EVENT_PORT_ACTIVE ||
-  record->event == IB_EVENT_LID_CHANGE) {
+  record->event == IB_EVENT_LID_CHANGE ||
+  record->event == IB_EVENT_DEVICE_FATAL) {
queue_work(ipoib_workqueue, &priv->flush_normal);
} else if (record->event == IB_EVENT_PKEY_CHANGE) {
queue_work(ipoib_workqueue, &priv->flush_heavy);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347753 - in stable/12: share/man/man4 usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:12:17 2019
New Revision: 347753
URL: https://svnweb.freebsd.org/changeset/base/347753

Log:
  MFC r347289:
  Document userspace firmware flash in mlx5tool(8) and mlx5io(4).
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/share/man/man4/mlx5io.4
  stable/12/usr.sbin/mlx5tool/mlx5tool.8
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/share/man/man4/mlx5io.4
==
--- stable/12/share/man/man4/mlx5io.4   Thu May 16 16:11:42 2019
(r347752)
+++ stable/12/share/man/man4/mlx5io.4   Thu May 16 16:12:17 2019
(r347753)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2018 Mellanox Technologies
+.\" Copyright (c) 2018, 2019 Mellanox Technologies
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -121,6 +121,27 @@ struct mlx5_fwdump_reg {
uint32_t val;
 };
 .Ed
+.It Dv MLX5_FW_UPDATE
+Requests firmware update (flash) on the adapter specified by the
+.Dv devaddr
+using the firmware image in
+.Dv MFA2
+format.
+The argument for the ioctl command is the
+.Vt struct mlx5_fw_update
+with the following definition.
+.Bd -literal
+struct mlx5_fw_update {
+   struct mlx5_tool_addr devaddr;
+   void *img_fw_data;
+   size_t img_fw_data_len;
+};
+.Ed
+Image address in memory is passed in
+.Dv img_fw_data ,
+the length of the image is specified in
+.Dv img_fw_data_len
+field.
 .El
 .Sh FILES
 The

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.8
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:11:42 2019
(r347752)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:12:17 2019
(r347753)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2018 Mellanox Technologies
+.\" Copyright (c) 2018, 2019 Mellanox Technologies
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -37,11 +37,14 @@
 .Fl e
 .Nm
 .Fl d Ar domain:bus:slot:func
-.Fl r
+.Fl rn
 .Nm
 .Fl d Ar domain:bus:slot:func
 .Fl o Ar file
 .Fl w
+.Nm
+.Fl d Ar domain:bus:slot:func
+.Fl f Ar file.mfa2
 .Sh DESCRIPTION
 The
 .Nm
@@ -82,6 +85,12 @@ Fetches the stored firmware dump and writes it into th
 by the
 .Fl o
 option argument.
+.It Fl f
+Flashes the firmware image
+.Fa file.mfa2
+to the specified adapter.
+Image must be in MFA2 pack format and contain a component suitable
+for the adapter hardware.
 .El
 .Sh FILES
 The
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347752 - in stable/12: sys/dev/mlx5 sys/dev/mlx5/mlx5_core usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:11:42 2019
New Revision: 347752
URL: https://svnweb.freebsd.org/changeset/base/347752

Log:
  MFC r347288:
  Implement userspace firmware update for ConnectX-4/5/6.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
  stable/12/sys/dev/mlx5/mlx5io.h
  stable/12/usr.sbin/mlx5tool/mlx5tool.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:11:03 
2019(r347751)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:11:42 
2019(r347752)
@@ -233,6 +233,8 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
struct mlx5_fwdump_get *fwg;
struct mlx5_tool_addr *devaddr;
struct mlx5_dump_data *dd;
+   struct mlx5_fw_update *fu;
+   struct firmware fake_fw;
int error;
 
error = 0;
@@ -274,6 +276,36 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
if (error != 0)
break;
mlx5_fwdump(mdev);
+   break;
+   case MLX5_FW_UPDATE:
+   if ((fflag & FWRITE) == 0) {
+   error = EBADF;
+   break;
+   }
+   fu = (struct mlx5_fw_update *)data;
+   if (fu->img_fw_data_len > 10 * 1024 * 1024) {
+   error = EINVAL;
+   break;
+   }
+   devaddr = &fu->devaddr;
+   error = mlx5_dbsf_to_core(devaddr, &mdev);
+   if (error != 0)
+   break;
+   bzero(&fake_fw, sizeof(fake_fw));
+   fake_fw.name = "umlx_fw_up";
+   fake_fw.datasize = fu->img_fw_data_len;
+   fake_fw.version = 1;
+   fake_fw.data = (void *)kmem_malloc(fu->img_fw_data_len,
+   M_WAITOK);
+   if (fake_fw.data == NULL) {
+   error = ENOMEM;
+   break;
+   }
+   error = copyin(fu->img_fw_data, __DECONST(void *, fake_fw.data),
+   fu->img_fw_data_len);
+   if (error == 0)
+   error = -mlx5_firmware_flash(mdev, &fake_fw);
+   kmem_free((vm_offset_t)fake_fw.data, fu->img_fw_data_len);
break;
default:
error = ENOTTY;

Modified: stable/12/sys/dev/mlx5/mlx5io.h
==
--- stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:11:03 2019
(r347751)
+++ stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:11:42 2019
(r347752)
@@ -49,9 +49,16 @@ struct mlx5_fwdump_get {
size_t reg_filled; /* out */
 };
 
+struct mlx5_fw_update {
+   struct mlx5_tool_addr devaddr;
+   void *img_fw_data;
+   size_t img_fw_data_len;
+};
+
 #defineMLX5_FWDUMP_GET _IOWR('m', 1, struct mlx5_fwdump_get)
 #defineMLX5_FWDUMP_RESET   _IOW('m', 2, struct mlx5_tool_addr)
 #defineMLX5_FWDUMP_FORCE   _IOW('m', 3, struct mlx5_tool_addr)
+#defineMLX5_FW_UPDATE  _IOW('m', 4, struct mlx5_fw_update)
 
 #ifndef _KERNEL
 #defineMLX5_DEV_PATH   _PATH_DEV"mlx5ctl"

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.c
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:11:03 2019
(r347751)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:11:42 2019
(r347752)
@@ -28,6 +28,8 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include 
@@ -144,15 +146,60 @@ mlx5tool_dump_force(int ctldev, const struct mlx5_tool
return (0);
 }
 
+static int
+mlx5tool_fw_update(int ctldev, const struct mlx5_tool_addr *addr,
+const char *img_fw_path)
+{
+   struct stat st;
+   struct mlx5_fw_update fwup;
+   int error, fd, res;
+
+   res = 0;
+   fd = open(img_fw_path, O_RDONLY);
+   if (fd == -1) {
+   warn("Unable to open %s", img_fw_path);
+   res = 1;
+   goto close_fd;
+   }
+   error = fstat(fd, &st);
+   if (error != 0) {
+   warn("Unable to stat %s", img_fw_path);
+   res = 1;
+   goto close_fd;
+   }
+   memset(&fwup, 0, sizeof(fwup));
+   memcpy(&fwup.devaddr, addr, sizeof(fwup.devaddr));
+   fwup.img_fw_data = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE,
+   fd, 0);
+   if (fwup.img_fw_data == MAP_FAILED) {
+   warn("Unable to mmap %s", img_fw_path);
+   res = 1;
+   goto close_fd;
+   }
+   fwup.img_fw_data_len = st.st

svn commit: r347751 - in stable/12: share/man/man4 sys/dev/mlx5 sys/dev/mlx5/mlx5_core usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:11:03 2019
New Revision: 347751
URL: https://svnweb.freebsd.org/changeset/base/347751

Log:
  MFC r347287:
  Rename mlx5_fwdump_addr to more neutral mlx5_tool_addr in mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/share/man/man4/mlx5io.4
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
  stable/12/sys/dev/mlx5/mlx5io.h
  stable/12/usr.sbin/mlx5tool/mlx5tool.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/share/man/man4/mlx5io.4
==
--- stable/12/share/man/man4/mlx5io.4   Thu May 16 16:10:24 2019
(r347750)
+++ stable/12/share/man/man4/mlx5io.4   Thu May 16 16:11:03 2019
(r347751)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 20, 2018
+.Dd May 7, 2019
 .Dt mlx5io 4
 .Os
 .Sh NAME
@@ -55,10 +55,10 @@ far, or existing dump cleared with the
 .Dv MLX5_FWDUMP_RESET
 command for the specified device.
 The argument for the command should point to the
-.Vt struct mlx5_fwdump_addr
+.Vt struct mlx5_tool_addr
 structure, containing the PCIe bus address of the device.
 .Bd -literal
-struct mlx5_fwdump_addr {
+struct mlx5_tool_addr {
uint32_t domain;
uint8_t bus;
uint8_t slot;
@@ -69,7 +69,7 @@ struct mlx5_fwdump_addr {
 Clear the stored firmware dump, preparing the kernel buffer for
 the next dump.
 The argument for the command should point to the
-.Vt struct mlx5_fwdump_addr
+.Vt struct mlx5_tool_addr
 structure, containing the PCIe bus address of the device.
 .It Dv MLX5_FWDUMP_GET
 Fetch the stored firmware dump into the user memory.
@@ -88,7 +88,7 @@ in the
 field.
 .Bd -literal
 struct mlx5_fwdump_get {
-   struct mlx5_fwdump_addr devaddr;
+   struct mlx5_tool_addr devaddr;
struct mlx5_fwdump_reg *buf;
size_t reg_cnt;
size_t reg_filled; /* out */

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:10:24 
2019(r347750)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fwdump.c  Thu May 16 16:11:03 
2019(r347751)
@@ -170,7 +170,7 @@ mlx5_fwdump_clean(struct mlx5_core_dev *mdev)
 }
 
 static int
-mlx5_dbsf_to_core(const struct mlx5_fwdump_addr *devaddr,
+mlx5_dbsf_to_core(const struct mlx5_tool_addr *devaddr,
 struct mlx5_core_dev **mdev)
 {
device_t dev;
@@ -231,7 +231,7 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
 {
struct mlx5_core_dev *mdev;
struct mlx5_fwdump_get *fwg;
-   struct mlx5_fwdump_addr *devaddr;
+   struct mlx5_tool_addr *devaddr;
struct mlx5_dump_data *dd;
int error;
 
@@ -254,7 +254,7 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
error = EBADF;
break;
}
-   devaddr = (struct mlx5_fwdump_addr *)data;
+   devaddr = (struct mlx5_tool_addr *)data;
error = mlx5_dbsf_to_core(devaddr, &mdev);
if (error != 0)
break;
@@ -269,7 +269,7 @@ mlx5_fwdump_ioctl(struct cdev *dev, u_long cmd, caddr_
error = EBADF;
break;
}
-   devaddr = (struct mlx5_fwdump_addr *)data;
+   devaddr = (struct mlx5_tool_addr *)data;
error = mlx5_dbsf_to_core(devaddr, &mdev);
if (error != 0)
break;

Modified: stable/12/sys/dev/mlx5/mlx5io.h
==
--- stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:10:24 2019
(r347750)
+++ stable/12/sys/dev/mlx5/mlx5io.h Thu May 16 16:11:03 2019
(r347751)
@@ -35,7 +35,7 @@ struct mlx5_fwdump_reg {
uint32_t val;
 };
 
-struct mlx5_fwdump_addr {
+struct mlx5_tool_addr {
uint32_t domain;
uint8_t bus;
uint8_t slot;
@@ -43,15 +43,15 @@ struct mlx5_fwdump_addr {
 };
 
 struct mlx5_fwdump_get {
-   struct mlx5_fwdump_addr devaddr;
+   struct mlx5_tool_addr devaddr;
struct mlx5_fwdump_reg *buf;
size_t reg_cnt;
size_t reg_filled; /* out */
 };
 
 #defineMLX5_FWDUMP_GET _IOWR('m', 1, struct mlx5_fwdump_get)
-#defineMLX5_FWDUMP_RESET   _IOW('m', 2, struct mlx5_fwdump_addr)
-#defineMLX5_FWDUMP_FORCE   _IOW('m', 3, struct mlx5_fwdump_addr)
+#defineMLX5_FWDUMP_RESET   _IOW('m', 2, struct mlx5_tool_addr)
+#defineMLX5_FWDUMP_FORCE   _IOW('m', 3, struct mlx5_tool_addr)
 
 #ifndef _KERNEL
 #defineMLX5_DEV_PATH   _PATH_DEV"mlx5ctl"

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.c
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu 

svn commit: r347750 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:10:24 2019
New Revision: 347750
URL: https://svnweb.freebsd.org/changeset/base/347750

Log:
  MFC r347286:
  Add mlxfw callbacks in mlx5core.
  
  Add mlx5 implementation for the ones defined by the mlxfw
  shared module to be used while flashing the device firmware.
  
  The callbacks do their job through the MCQI, MCC and MCDA registers.
  
  Linux commit:
  62bd22cf326dc4ac5be673c11cef4602dc1f5e47
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:09:16 
2019(r347749)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:10:24 
2019(r347750)
@@ -32,6 +32,8 @@
 #include 
 #include 
 
+#include 
+
 #define DRIVER_NAME "mlx5_core"
 #ifndef DRIVER_VERSION
 #define DRIVER_VERSION "3.5.0"
@@ -92,6 +94,8 @@ void mlx5_recover_device(struct mlx5_core_dev *dev);
 
 int mlx5_register_device(struct mlx5_core_dev *dev);
 void mlx5_unregister_device(struct mlx5_core_dev *dev);
+
+int mlx5_firmware_flash(struct mlx5_core_dev *dev, const struct firmware *fw);
 
 void mlx5e_init(void);
 void mlx5e_cleanup(void);

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:09:16 2019
(r347749)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:10:24 2019
(r347750)
@@ -455,3 +455,156 @@ static int mlx5_reg_mcqi_query(struct mlx5_core_dev *d
 out:
return err;
 }
+
+struct mlx5_mlxfw_dev {
+   struct mlxfw_dev mlxfw_dev;
+   struct mlx5_core_dev *mlx5_core_dev;
+};
+
+static int mlx5_component_query(struct mlxfw_dev *mlxfw_dev,
+   u16 component_index, u32 *p_max_size,
+   u8 *p_align_bits, u16 *p_max_write_size)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+
+   return mlx5_reg_mcqi_query(dev, component_index, p_max_size,
+  p_align_bits, p_max_write_size);
+}
+
+static int mlx5_fsm_lock(struct mlxfw_dev *mlxfw_dev, u32 *fwhandle)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+   u8 control_state, error_code;
+   int err;
+
+   *fwhandle = 0;
+   err = mlx5_reg_mcc_query(dev, fwhandle, &error_code, &control_state);
+   if (err)
+   return err;
+
+   if (control_state != MLXFW_FSM_STATE_IDLE)
+   return -EBUSY;
+
+   return mlx5_reg_mcc_set(dev, 
MLX5_REG_MCC_INSTRUCTION_LOCK_UPDATE_HANDLE,
+   0, *fwhandle, 0);
+}
+
+static int mlx5_fsm_component_update(struct mlxfw_dev *mlxfw_dev, u32 fwhandle,
+u16 component_index, u32 component_size)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+
+   return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_UPDATE_COMPONENT,
+   component_index, fwhandle, component_size);
+}
+
+static int mlx5_fsm_block_download(struct mlxfw_dev *mlxfw_dev, u32 fwhandle,
+  u8 *data, u16 size, u32 offset)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+
+   return mlx5_reg_mcda_set(dev, fwhandle, offset, size, data);
+}
+
+static int mlx5_fsm_component_verify(struct mlxfw_dev *mlxfw_dev, u32 fwhandle,
+u16 component_index)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+
+   return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_VERIFY_COMPONENT,
+   component_index, fwhandle, 0);
+}
+
+static int mlx5_fsm_activate(struct mlxfw_dev *mlxfw_dev, u32 fwhandle)
+{
+   struct mlx5_mlxfw_dev *mlx5_mlxfw_dev =
+   container_of(mlxfw_dev, struct mlx5_mlxfw_dev, mlxfw_dev);
+   struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev;
+
+   return mlx5_reg_mcc_set(dev, MLX5_REG_

svn commit: r347749 - in stable/12: share/man/man4 sys/conf sys/dev/mlxfw sys/modules sys/modules/mlxfw

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:09:16 2019
New Revision: 347749
URL: https://svnweb.freebsd.org/changeset/base/347749

Log:
  MFC r347285 and r347327:
  Initial version of Mellanox in-kernel firmware upgrade support.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Added:
  stable/12/sys/dev/mlxfw/
 - copied from r347285, head/sys/dev/mlxfw/
  stable/12/sys/modules/mlxfw/
 - copied from r347285, head/sys/modules/mlxfw/
Modified:
  stable/12/share/man/man4/mlx5en.4
  stable/12/sys/conf/NOTES
  stable/12/sys/conf/files
  stable/12/sys/conf/kern.pre.mk
  stable/12/sys/modules/Makefile
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/share/man/man4/mlx5en.4
==
--- stable/12/share/man/man4/mlx5en.4   Thu May 16 16:08:01 2019
(r347748)
+++ stable/12/share/man/man4/mlx5en.4   Thu May 16 16:09:16 2019
(r347749)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 29, 2018
+.Dd May 8, 2019
 .Dt MLX5EN 4
 .Os
 .Sh NAME
@@ -37,6 +37,9 @@ kernel configuration file:
 .Bd -ragged -offset indent
 .Cd "options COMPAT_LINUXKPI"
 .Cd "options RATELIMIT"
+.Cd "device xz"
+.Cd "device mlxfw"
+.Cd "device firmware"
 .Cd "device mlx5"
 .Cd "device mlx5en"
 .Ed

Modified: stable/12/sys/conf/NOTES
==
--- stable/12/sys/conf/NOTESThu May 16 16:08:01 2019(r347748)
+++ stable/12/sys/conf/NOTESThu May 16 16:09:16 2019(r347749)
@@ -2005,6 +2005,7 @@ devicexmphy   # XaQti XMAC II
 #  Yukon II Gigabit controllers, including 88E8021, 88E8022, 88E8061,
 #  88E8062, 88E8035, 88E8036, 88E8038, 88E8050, 88E8052, 88E8053,
 #  88E8055, 88E8056 and D-Link 560T/550SX.
+# mlxfw: Mellanox firmware update module.
 # mlx5:Mellanox ConnectX-4 and ConnectX-4 LX IB and Eth shared code 
module.
 # mlx5en:Mellanox ConnectX-4 and ConnectX-4 LX PCIe Ethernet adapters.
 # my:  Myson Fast Ethernet (MTD80X, MTD89X)
@@ -2118,6 +2119,7 @@ devicegem # Apple GMAC/Sun 
ERI/Sun GEM
 device hme # Sun HME (Happy Meal Ethernet)
 device jme # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
 device lge # Level 1 LXT1001 gigabit Ethernet
+device mlxfw   # Mellanox firmware update module
 device mlx5# Shared code module between IB and Ethernet
 device mlx5en  # Mellanox ConnectX-4 and ConnectX-4 LX
 device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet

Modified: stable/12/sys/conf/files
==
--- stable/12/sys/conf/filesThu May 16 16:08:01 2019(r347748)
+++ stable/12/sys/conf/filesThu May 16 16:09:16 2019(r347749)
@@ -2440,6 +2440,12 @@ dev/mii/ukphy_subr.c optional miibus | mii
 dev/mii/vscphy.c   optional miibus | vscphy
 dev/mii/xmphy.coptional miibus | xmphy
 dev/mk48txx/mk48txx.c  optional mk48txx
+dev/mlxfw/mlxfw_fsm.c  optional mlxfw \
+   compile-with "${MLXFW_C}"
+dev/mlxfw/mlxfw_mfa2.c optional mlxfw \
+   compile-with "${MLXFW_C}"
+dev/mlxfw/mlxfw_mfa2_tlv_multi.c   optional mlxfw \
+   compile-with "${MLXFW_C}"
 dev/mlx/mlx.c  optional mlx
 dev/mlx/mlx_disk.c optional mlx
 dev/mlx/mlx_pci.c  optional mlx pci

Modified: stable/12/sys/conf/kern.pre.mk
==
--- stable/12/sys/conf/kern.pre.mk  Thu May 16 16:08:01 2019
(r347748)
+++ stable/12/sys/conf/kern.pre.mk  Thu May 16 16:09:16 2019
(r347749)
@@ -203,6 +203,12 @@ OFEDCFLAGS=${CFLAGS:N-I*} 
-DCONFIG_INFINIBAND_USER_ME
 OFED_C_NOIMP=  ${CC} -c -o ${.TARGET} ${OFEDCFLAGS} ${WERROR} ${PROF}
 OFED_C=${OFED_C_NOIMP} ${.IMPSRC}
 
+# mlxfw C flags.
+MLXFW_C=   ${OFED_C_NOIMP} \
+   -I${SRCTOP}/sys/contrib/xz-embedded/freebsd \
+   -I${SRCTOP}/sys/contrib/xz-embedded/linux/lib/xz \
+   ${.IMPSRC}
+
 GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
 SYSTEM_CFILES= config.c env.c hints.c vnode_if.c
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}

Modified: stable/12/sys/modules/Makefile
==
--- stable/12/sys/modules/Makefile  Thu May 16 16:08:01 2019
(r347748)
+++ stable/12/sys/modules/Makefile  Thu May 16 16:09:16 2019
(r347749)
@@ -246,6 +246,7 @@ SUBDIR= \
mfi \
mii \
mlx \
+   mlxfw \
${_mlx4} \
${_mlx4ib} \
${_mlx4en} \
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/li

svn commit: r347747 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:07:26 2019
New Revision: 347747
URL: https://svnweb.freebsd.org/changeset/base/347747

Log:
  MFC r347283:
  Remove redundant line of code in mlx5core.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:06:52 2019
(r347746)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:07:26 2019
(r347747)
@@ -1215,7 +1215,7 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, 
ent->ret = verify_signature(ent);
else
ent->ret = 0;
-   ent->status = ent->lay->status_own >> 1;
+
if (triggered)
ent->status = MLX5_DRIVER_STATUS_ABORTED;
else
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347748 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:08:01 2019
New Revision: 347748
URL: https://svnweb.freebsd.org/changeset/base/347748

Log:
  MFC r347284:
  Convert remaining module parameters into SYSCTLs in mlx5core.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:07:26 
2019(r347747)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 16:08:01 
2019(r347748)
@@ -25,8 +25,6 @@
  * $FreeBSD$
  */
 
-#defineLINUXKPI_PARAM_PREFIX mlx5_
-
 #include 
 #include 
 #include 
@@ -57,17 +55,19 @@ MODULE_DEPEND(mlx5, linuxkpi, 1, 1, 1);
 #endif
 MODULE_VERSION(mlx5, 1);
 
+SYSCTL_NODE(_hw, OID_AUTO, mlx5, CTLFLAG_RW, 0, "mlx5 hardware controls");
+
 int mlx5_core_debug_mask;
-module_param_named(debug_mask, mlx5_core_debug_mask, int, 0644);
-MODULE_PARM_DESC(debug_mask, "debug mask: 1 = dump cmd data, 2 = dump cmd exec 
time, 3 = both. Default=0");
+SYSCTL_INT(_hw_mlx5, OID_AUTO, debug_mask, CTLFLAG_RWTUN,
+&mlx5_core_debug_mask, 0,
+"debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. 
Default=0");
 
 #define MLX5_DEFAULT_PROF  2
-static int prof_sel = MLX5_DEFAULT_PROF;
-module_param_named(prof_sel, prof_sel, int, 0444);
-MODULE_PARM_DESC(prof_sel, "profile selector. Valid range 0 - 2");
+static int mlx5_prof_sel = MLX5_DEFAULT_PROF;
+SYSCTL_INT(_hw_mlx5, OID_AUTO, prof_sel, CTLFLAG_RWTUN,
+&mlx5_prof_sel, 0,
+"profile selector. Valid range 0 - 2");
 
-SYSCTL_NODE(_hw, OID_AUTO, mlx5, CTLFLAG_RW, 0, "mlx5 HW controls");
-
 static int mlx5_fast_unload_enabled = 1;
 SYSCTL_INT(_hw_mlx5, OID_AUTO, fast_unload_enabled, CTLFLAG_RWTUN,
 &mlx5_fast_unload_enabled, 0,
@@ -1235,11 +1235,11 @@ static int init_one(struct pci_dev *pdev,
if (id)
priv->pci_dev_data = id->driver_data;
 
-   if (prof_sel < 0 || prof_sel >= ARRAY_SIZE(profiles)) {
+   if (mlx5_prof_sel < 0 || mlx5_prof_sel >= ARRAY_SIZE(profiles)) {
device_printf(bsddev, "WARN: selected profile out of range, 
selecting default (%d)\n", MLX5_DEFAULT_PROF);
-   prof_sel = MLX5_DEFAULT_PROF;
+   mlx5_prof_sel = MLX5_DEFAULT_PROF;
}
-   dev->profile = &profiles[prof_sel];
+   dev->profile = &profiles[mlx5_prof_sel];
dev->pdev = pdev;
dev->event = mlx5_core_event;
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347746 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:06:52 2019
New Revision: 347746
URL: https://svnweb.freebsd.org/changeset/base/347746

Log:
  MFC r347282:
  Change implicit and probably erronous EPERM to EIO on command status error
  in mlx5core.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:06:18 2019
(r347745)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 16:06:52 2019
(r347746)
@@ -1235,7 +1235,7 @@ EXPORT_SYMBOL(mlx5_cmd_comp_handler);
 
 static int status_to_err(u8 status)
 {
-   return status ? -1 : 0; /* TBD more meaningful codes */
+   return status ? -EIO : 0; /* TBD more meaningful codes */
 }
 
 static struct mlx5_cmd_msg *alloc_msg(struct mlx5_core_dev *dev, int in_size,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347745 - stable/12/usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:06:18 2019
New Revision: 347745
URL: https://svnweb.freebsd.org/changeset/base/347745

Log:
  MFC r347281:
  Fix typo.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/usr.sbin/mlx5tool/mlx5tool.8
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.8
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:05:42 2019
(r347744)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.8  Thu May 16 16:06:18 2019
(r347745)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 8, 2018
+.Dd May 7, 2019
 .Dt mlx5tool 8
 .Os
 .Sh NAME
@@ -78,7 +78,7 @@ command for the specified device.
 Clear the stored firmware dump, preparing the kernel buffer for
 the next dump.
 .It Fl w
-Fetche the stored firmware dump and writes it into the file specified
+Fetches the stored firmware dump and writes it into the file specified
 by the
 .Fl o
 option argument.
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347744 - stable/12/usr.sbin/mlx5tool

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:05:42 2019
New Revision: 347744
URL: https://svnweb.freebsd.org/changeset/base/347744

Log:
  MFC r347280:
  Fix style.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/usr.sbin/mlx5tool/mlx5tool.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/mlx5tool/mlx5tool.c
==
--- stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:05:07 2019
(r347743)
+++ stable/12/usr.sbin/mlx5tool/mlx5tool.c  Thu May 16 16:05:42 2019
(r347744)
@@ -184,7 +184,7 @@ main(int argc, char *argv[])
act = ACTION_DUMP_GET;
break;
case 'e':
-   act= ACTION_DUMP_FORCE;
+   act = ACTION_DUMP_FORCE;
break;
case 'o':
dumpname = optarg;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347743 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:05:07 2019
New Revision: 347743
URL: https://svnweb.freebsd.org/changeset/base/347743

Log:
  MFC r347279:
  Fix netstat counters mapping in mlx5en(4).
  
  The current mapping of driver counters to netstat counters is wrong.
  For example, a single jabber packet, will cause the Ierrs counter to
  count three times.
  
  The work for mapping the hardware and software counters to their right
  place in netstat counters were already done in Linux, take that as is
  to the FreeBSD driver.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:04:23 
2019(r347742)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:05:07 
2019(r347743)
@@ -637,22 +637,14 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv)
 #if (__FreeBSD_version < 110)
/* no get_counters interface in fbsd 10 */
ifp->if_ipackets = s->rx_packets;
-   ifp->if_ierrors = s->rx_error_packets +
-   priv->stats.pport.alignment_err +
-   priv->stats.pport.check_seq_err +
-   priv->stats.pport.crc_align_errors +
-   priv->stats.pport.in_range_len_errors +
-   priv->stats.pport.jabbers +
+   ifp->if_ierrors = priv->stats.pport.in_range_len_errors +
priv->stats.pport.out_of_range_len +
-   priv->stats.pport.oversize_pkts +
-   priv->stats.pport.symbol_err +
priv->stats.pport.too_long_errors +
-   priv->stats.pport.undersize_pkts +
-   priv->stats.pport.unsupported_op_rx;
-   ifp->if_iqdrops = s->rx_out_of_buffer +
-   priv->stats.pport.drop_events;
+   priv->stats.pport.check_seq_err +
+   priv->stats.pport.alignment_err;
+   ifp->if_iqdrops = s->rx_out_of_buffer;
ifp->if_opackets = s->tx_packets;
-   ifp->if_oerrors = s->tx_error_packets;
+   ifp->if_oerrors = priv->stats.port_stats_debug.out_discards;
ifp->if_snd.ifq_drops = s->tx_queue_dropped;
ifp->if_ibytes = s->rx_bytes;
ifp->if_obytes = s->tx_bytes;
@@ -2769,28 +2761,20 @@ mlx5e_get_counter(struct ifnet *ifp, ift_counter cnt)
retval = priv->stats.vport.rx_packets;
break;
case IFCOUNTER_IERRORS:
-   retval = priv->stats.vport.rx_error_packets +
-   priv->stats.pport.alignment_err +
-   priv->stats.pport.check_seq_err +
-   priv->stats.pport.crc_align_errors +
-   priv->stats.pport.in_range_len_errors +
-   priv->stats.pport.jabbers +
+   retval = priv->stats.pport.in_range_len_errors +
priv->stats.pport.out_of_range_len +
-   priv->stats.pport.oversize_pkts +
-   priv->stats.pport.symbol_err +
priv->stats.pport.too_long_errors +
-   priv->stats.pport.undersize_pkts +
-   priv->stats.pport.unsupported_op_rx;
+   priv->stats.pport.check_seq_err +
+   priv->stats.pport.alignment_err;
break;
case IFCOUNTER_IQDROPS:
-   retval = priv->stats.vport.rx_out_of_buffer +
-   priv->stats.pport.drop_events;
+   retval = priv->stats.vport.rx_out_of_buffer;
break;
case IFCOUNTER_OPACKETS:
retval = priv->stats.vport.tx_packets;
break;
case IFCOUNTER_OERRORS:
-   retval = priv->stats.vport.tx_error_packets;
+   retval = priv->stats.port_stats_debug.out_discards;
break;
case IFCOUNTER_IBYTES:
retval = priv->stats.vport.rx_bytes;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347742 - stable/12/sys/ofed/drivers/infiniband/ulp/ipoib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:04:23 2019
New Revision: 347742
URL: https://svnweb.freebsd.org/changeset/base/347742

Log:
  MFC r347278:
  Fix endless loop in ipoib_poll().
  
  ib_req_notify_cq may return negative value which will indicate a
  failure. In the case of uncorrectable error, we will end up in an
  endless loop. Fix that, by going to another loop with poll_more
  only if there is anything left to poll.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
==
--- stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c  Thu May 16 
16:03:46 2019(r347741)
+++ stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c  Thu May 16 
16:04:23 2019(r347742)
@@ -409,7 +409,7 @@ poll_more:
spin_unlock(&priv->drain_lock);
 
if (ib_req_notify_cq(priv->recv_cq,
-   IB_CQ_NEXT_COMP | IB_CQ_REPORT_MISSED_EVENTS))
+   IB_CQ_NEXT_COMP | IB_CQ_REPORT_MISSED_EVENTS) > 0)
goto poll_more;
 }
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347741 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:03:46 2019
New Revision: 347741
URL: https://svnweb.freebsd.org/changeset/base/347741

Log:
  MFC r347277:
  Avoid leaking send queue mbufs during error recovery in mlx5en(4).
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:03:02 
2019(r347740)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 16:03:46 
2019(r347741)
@@ -1147,8 +1147,13 @@ mlx5e_free_sq_db(struct mlx5e_sq *sq)
int wq_sz = mlx5_wq_cyc_get_size(&sq->wq);
int x;
 
-   for (x = 0; x != wq_sz; x++)
+   for (x = 0; x != wq_sz; x++) {
+   if (sq->mbuf[x].mbuf != NULL) {
+   bus_dmamap_unload(sq->dma_tag, sq->mbuf[x].dma_map);
+   m_freem(sq->mbuf[x].mbuf);
+   }
bus_dmamap_destroy(sq->dma_tag, sq->mbuf[x].dma_map);
+   }
free(sq->mbuf, M_MLX5EN);
 }
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Thu May 16 16:03:02 2019
(r347740)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Thu May 16 16:03:46 2019
(r347741)
@@ -537,7 +537,7 @@ mlx5e_poll_tx_cq(struct mlx5e_sq *sq, int budget)
for (x = 0; x != sq->cev_factor; x++) {
ci = sqcc & sq->wq.sz_m1;
mb = sq->mbuf[ci].mbuf;
-   sq->mbuf[ci].mbuf = NULL;   /* Safety clear */
+   sq->mbuf[ci].mbuf = NULL;
 
if (mb == NULL) {
if (sq->mbuf[ci].num_bytes == 0) {
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347740 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:03:02 2019
New Revision: 347740
URL: https://svnweb.freebsd.org/changeset/base/347740

Log:
  MFC r347276:
  Add helper functions to set/query MCC/MCDA/MCQI registers in mlx5core.
  
  To be used by the mlx5 callbacks exposed to the mlxfw module.
  
  Linux commit:
  d2ad488b0073bd1a2c3f5d2ea50a7eb632103e5d
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:02:19 2019
(r347739)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:03:02 2019
(r347740)
@@ -341,3 +341,117 @@ int mlx5_core_set_dc_cnak_trace(struct mlx5_core_dev *
 
return mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out));
 }
+
+enum mlxsw_reg_mcc_instruction {
+   MLX5_REG_MCC_INSTRUCTION_LOCK_UPDATE_HANDLE = 0x01,
+   MLX5_REG_MCC_INSTRUCTION_RELEASE_UPDATE_HANDLE = 0x02,
+   MLX5_REG_MCC_INSTRUCTION_UPDATE_COMPONENT = 0x03,
+   MLX5_REG_MCC_INSTRUCTION_VERIFY_COMPONENT = 0x04,
+   MLX5_REG_MCC_INSTRUCTION_ACTIVATE = 0x06,
+   MLX5_REG_MCC_INSTRUCTION_CANCEL = 0x08,
+};
+
+static int mlx5_reg_mcc_set(struct mlx5_core_dev *dev,
+   enum mlxsw_reg_mcc_instruction instr,
+   u16 component_index, u32 update_handle,
+   u32 component_size)
+{
+   u32 out[MLX5_ST_SZ_DW(mcc_reg)];
+   u32 in[MLX5_ST_SZ_DW(mcc_reg)];
+
+   memset(in, 0, sizeof(in));
+
+   MLX5_SET(mcc_reg, in, instruction, instr);
+   MLX5_SET(mcc_reg, in, component_index, component_index);
+   MLX5_SET(mcc_reg, in, update_handle, update_handle);
+   MLX5_SET(mcc_reg, in, component_size, component_size);
+
+   return mlx5_core_access_reg(dev, in, sizeof(in), out,
+   sizeof(out), MLX5_REG_MCC, 0, 1);
+}
+
+static int mlx5_reg_mcc_query(struct mlx5_core_dev *dev,
+ u32 *update_handle, u8 *error_code,
+ u8 *control_state)
+{
+   u32 out[MLX5_ST_SZ_DW(mcc_reg)];
+   u32 in[MLX5_ST_SZ_DW(mcc_reg)];
+   int err;
+
+   memset(in, 0, sizeof(in));
+   memset(out, 0, sizeof(out));
+   MLX5_SET(mcc_reg, in, update_handle, *update_handle);
+
+   err = mlx5_core_access_reg(dev, in, sizeof(in), out,
+  sizeof(out), MLX5_REG_MCC, 0, 0);
+   if (err)
+   goto out;
+
+   *update_handle = MLX5_GET(mcc_reg, out, update_handle);
+   *error_code = MLX5_GET(mcc_reg, out, error_code);
+   *control_state = MLX5_GET(mcc_reg, out, control_state);
+
+out:
+   return err;
+}
+
+static int mlx5_reg_mcda_set(struct mlx5_core_dev *dev,
+u32 update_handle,
+u32 offset, u16 size,
+u8 *data)
+{
+   int err, in_size = MLX5_ST_SZ_BYTES(mcda_reg) + size;
+   u32 out[MLX5_ST_SZ_DW(mcda_reg)];
+   int i, j, dw_size = size >> 2;
+   __be32 data_element;
+   u32 *in;
+
+   in = kzalloc(in_size, GFP_KERNEL);
+   if (!in)
+   return -ENOMEM;
+
+   MLX5_SET(mcda_reg, in, update_handle, update_handle);
+   MLX5_SET(mcda_reg, in, offset, offset);
+   MLX5_SET(mcda_reg, in, size, size);
+
+   for (i = 0; i < dw_size; i++) {
+   j = i * 4;
+   data_element = htonl(*(u32 *)&data[j]);
+   memcpy(MLX5_ADDR_OF(mcda_reg, in, data) + j, &data_element, 4);
+   }
+
+   err = mlx5_core_access_reg(dev, in, in_size, out,
+  sizeof(out), MLX5_REG_MCDA, 0, 1);
+   kfree(in);
+   return err;
+}
+
+static int mlx5_reg_mcqi_query(struct mlx5_core_dev *dev,
+  u16 component_index,
+  u32 *max_component_size,
+  u8 *log_mcda_word_size,
+  u16 *mcda_max_write_size)
+{
+   u32 out[MLX5_ST_SZ_DW(mcqi_reg) + MLX5_ST_SZ_DW(mcqi_cap)];
+   int offset = MLX5_ST_SZ_DW(mcqi_reg);
+   u32 in[MLX5_ST_SZ_DW(mcqi_reg)];
+   int err;
+
+   memset(in, 0, sizeof(in));
+   memset(out, 0, sizeof(out));
+
+   MLX5_SET(mcqi_reg, in, component_index, component_index);
+   MLX5_SET(mcqi_reg, in, data_size, MLX5_ST_SZ_BYTES(mcqi_cap));
+
+   err = mlx5_core_access_reg(dev, in, sizeof(in), out,
+  sizeof(out), MLX5_REG_MCQI, 0, 0);
+   if (err)
+   goto out;
+
+   *max_component_size = MLX5_GET(mcqi_cap, out + offset, 
max_component_size);
+   *log_mcda_word_size = MLX5_GET(mcqi_cap, out + offset, 
log_mcda_word_size);
+   *mcda_max_write_size = MLX5_GET(mcqi

svn commit: r347739 - stable/12/sys/dev/mlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:02:19 2019
New Revision: 347739
URL: https://svnweb.freebsd.org/changeset/base/347739

Log:
  MFC r347275:
  Enhance MCAM reg to allow query on access reg support in mlx5core.
  
  Enhance MCAM to allow the driver to query which access regs are
  supported. For now, expose the regs needed for FW flashing.
  
  Linux commit:
  0ab87743cc8c5bcd482daf71961ed5fc45349e01
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 16:01:45 2019
(r347738)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 16:02:19 2019
(r347739)
@@ -1056,6 +1056,9 @@ enum mlx5_mcam_feature_groups {
 #define MLX5_CAP_MCAM_FEATURE(mdev, fld) \
MLX5_GET(mcam_reg, (mdev)->caps.mcam, 
mng_feature_cap_mask.enhanced_features.fld)
 
+#defineMLX5_CAP_MCAM_REG(mdev, reg) \
+   MLX5_GET(mcam_reg, (mdev)->caps.mcam, 
mng_access_reg_cap_mask.access_regs.reg)
+
 #defineMLX5_CAP_QCAM_REG(mdev, fld) \
MLX5_GET(qcam_reg, (mdev)->caps.qcam, 
qos_access_reg_cap_mask.reg_cap.fld)
 

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:01:45 2019
(r347738)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:02:19 2019
(r347739)
@@ -8585,6 +8585,18 @@ struct mlx5_ifc_mcam_enhanced_features_bits {
u8 pcie_performance_group[0x1];
 };
 
+struct mlx5_ifc_mcam_access_reg_bits {
+   u8 reserved_at_0[0x1c];
+   u8 mcda[0x1];
+   u8 mcc[0x1];
+   u8 mcqi[0x1];
+   u8 reserved_at_1f[0x1];
+
+   u8 regs_95_to_64[0x20];
+   u8 regs_63_to_32[0x20];
+   u8 regs_31_to_0[0x20];
+};
+
 struct mlx5_ifc_mcam_reg_bits {
u8 reserved_at_0[0x8];
u8 feature_group[0x8];
@@ -8594,6 +8606,7 @@ struct mlx5_ifc_mcam_reg_bits {
u8 reserved_at_20[0x20];
 
union {
+   struct mlx5_ifc_mcam_access_reg_bits access_regs;
u8 reserved_at_0[0x80];
} mng_access_reg_cap_mask;
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347738 - stable/12/sys/dev/mlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:01:45 2019
New Revision: 347738
URL: https://svnweb.freebsd.org/changeset/base/347738

Log:
  MFC r347274:
  Add MCC (Management Component Control) register definitions in mlx5core.
  
  MCC (Management Component Control) allows to control a firmware
  component update.
  
  MCDA (Management Component Data Access) allows to read and write
  a firmware component.
  
  MCQI (Management Component Query Information) allows to query
  information about firmware components.
  
  Linux commit:
  4717628938423fcba0aa8fa889e9fed4eb6a655f
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:01:11 2019
(r347737)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:01:45 2019
(r347738)
@@ -155,6 +155,9 @@ enum {
MLX5_REG_MTMP= 0x900a,
MLX5_REG_MCIA= 0x9014,
MLX5_REG_MPCNT   = 0x9051,
+   MLX5_REG_MCQI= 0x9061,
+   MLX5_REG_MCC = 0x9062,
+   MLX5_REG_MCDA= 0x9063,
MLX5_REG_MCAM= 0x907f,
 };
 

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:01:11 2019
(r347737)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 16:01:45 2019
(r347738)
@@ -9927,6 +9927,85 @@ struct mlx5_ifc_mpcnt_reg_bits {
union mlx5_ifc_mpcnt_cntrs_grp_data_layout_bits counter_set;
 };
 
+struct mlx5_ifc_mcqi_cap_bits {
+   u8 supported_info_bitmask[0x20];
+
+   u8 component_size[0x20];
+
+   u8 max_component_size[0x20];
+
+   u8 log_mcda_word_size[0x4];
+   u8 reserved_at_64[0xc];
+   u8 mcda_max_write_size[0x10];
+
+   u8 rd_en[0x1];
+   u8 reserved_at_81[0x1];
+   u8 match_chip_id[0x1];
+   u8 match_psid[0x1];
+   u8 check_user_timestamp[0x1];
+   u8 match_base_guid_mac[0x1];
+   u8 reserved_at_86[0x1a];
+};
+
+struct mlx5_ifc_mcqi_reg_bits {
+   u8 read_pending_component[0x1];
+   u8 reserved_at_1[0xf];
+   u8 component_index[0x10];
+
+   u8 reserved_at_20[0x20];
+
+   u8 reserved_at_40[0x1b];
+   u8 info_type[0x5];
+
+   u8 info_size[0x20];
+
+   u8 offset[0x20];
+
+   u8 reserved_at_a0[0x10];
+   u8 data_size[0x10];
+
+   u8 data[0][0x20];
+};
+
+struct mlx5_ifc_mcc_reg_bits {
+   u8 reserved_at_0[0x4];
+   u8 time_elapsed_since_last_cmd[0xc];
+   u8 reserved_at_10[0x8];
+   u8 instruction[0x8];
+
+   u8 reserved_at_20[0x10];
+   u8 component_index[0x10];
+
+   u8 reserved_at_40[0x8];
+   u8 update_handle[0x18];
+
+   u8 handle_owner_type[0x4];
+   u8 handle_owner_host_id[0x4];
+   u8 reserved_at_68[0x1];
+   u8 control_progress[0x7];
+   u8 error_code[0x8];
+   u8 reserved_at_78[0x4];
+   u8 control_state[0x4];
+
+   u8 component_size[0x20];
+
+   u8 reserved_at_a0[0x60];
+};
+
+struct mlx5_ifc_mcda_reg_bits {
+   u8 reserved_at_0[0x8];
+   u8 update_handle[0x18];
+
+   u8 offset[0x20];
+
+   u8 reserved_at_40[0x10];
+   u8 size[0x10];
+
+   u8 reserved_at_60[0x20];
+
+   u8 data[0][0x20];
+};
+
 union mlx5_ifc_ports_control_registers_document_bits {
struct mlx5_ifc_ib_portcntrs_attribute_grp_data_bits 
ib_portcntrs_attribute_grp_data;
struct mlx5_ifc_bufferx_reg_bits bufferx_reg;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347737 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:01:11 2019
New Revision: 347737
URL: https://svnweb.freebsd.org/changeset/base/347737

Log:
  MFC r347273:
  Add reading the mcam_reg in mlx5core.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:00:37 2019
(r347736)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:01:11 2019
(r347737)
@@ -215,6 +215,12 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
return err;
}
 
+   if (MLX5_CAP_GEN(dev, mcam_reg)) {
+   err = mlx5_get_mcam_reg(dev);
+   if (err)
+   return err;
+   }
+
err = mlx5_core_query_special_contexts(dev);
if (err)
return err;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347735 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:00:00 2019
New Revision: 347735
URL: https://svnweb.freebsd.org/changeset/base/347735

Log:
  MFC r347271:
  Implement PCAM, MCAM access register commands in mlx5core.
  
  Introduced registers will expose capabilities of new registers and
  features related to port/management.
  Driver will query MCAM and PCAM in order to avoid failing on old
  firmwares with lack of support.
  
  Linux commit:
  c835ad64683bd3e2d1b31ed2cb1ff4366932edb1
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 15:59:23 
2019(r347734)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 16:00:00 
2019(r347735)
@@ -76,6 +76,10 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev);
 int mlx5_query_board_id(struct mlx5_core_dev *dev);
 int mlx5_query_qcam_reg(struct mlx5_core_dev *mdev, u32 *qcam,
u8 feature_group, u8 access_reg_group);
+int mlx5_query_pcam_reg(struct mlx5_core_dev *dev, u32 *pcam,
+   u8 feature_group, u8 access_reg_group);
+int mlx5_query_mcam_reg(struct mlx5_core_dev *dev, u32 *mcap,
+   u8 feature_group, u8 access_reg_group);
 int mlx5_cmd_init_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_teardown_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_force_teardown_hca(struct mlx5_core_dev *dev);

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 15:59:23 
2019(r347734)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_port.cThu May 16 16:00:00 
2019(r347735)
@@ -79,6 +79,30 @@ int mlx5_query_qcam_reg(struct mlx5_core_dev *mdev, u3
 }
 EXPORT_SYMBOL_GPL(mlx5_query_qcam_reg);
 
+int mlx5_query_pcam_reg(struct mlx5_core_dev *dev, u32 *pcam, u8 feature_group,
+   u8 access_reg_group)
+{
+   u32 in[MLX5_ST_SZ_DW(pcam_reg)] = {};
+   int sz = MLX5_ST_SZ_BYTES(pcam_reg);
+
+   MLX5_SET(pcam_reg, in, feature_group, feature_group);
+   MLX5_SET(pcam_reg, in, access_reg_group, access_reg_group);
+
+   return mlx5_core_access_reg(dev, in, sz, pcam, sz, MLX5_REG_PCAM, 0, 0);
+}
+
+int mlx5_query_mcam_reg(struct mlx5_core_dev *dev, u32 *mcam, u8 feature_group,
+   u8 access_reg_group)
+{
+   u32 in[MLX5_ST_SZ_DW(mcam_reg)] = {};
+   int sz = MLX5_ST_SZ_BYTES(mcam_reg);
+
+   MLX5_SET(mcam_reg, in, feature_group, feature_group);
+   MLX5_SET(mcam_reg, in, access_reg_group, access_reg_group);
+
+   return mlx5_core_access_reg(dev, in, sz, mcam, sz, MLX5_REG_MCAM, 0, 0);
+}
+
 struct mlx5_reg_pcap {
u8  rsvd0;
u8  port_num;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347736 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 16:00:37 2019
New Revision: 347736
URL: https://svnweb.freebsd.org/changeset/base/347736

Log:
  MFC r347272:
  Query and cache PCAM, MCAM registers on initialization in mlx5core.
  
  On load_one, we now cache our capabilities registers internally, similar
  to QUERY_HCA_CAP. Capabilities can later be queried using macros
  introduced in this patch.
  
  Linux commit:
  71862561f3a62015a11de16d1c306481e8415c08
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 16:00:00 2019
(r347735)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 16:00:37 2019
(r347736)
@@ -1050,6 +1050,12 @@ enum mlx5_mcam_feature_groups {
MLX5_GET(qos_cap,\
 mdev->hca_caps_max[MLX5_CAP_QOS], cap)
 
+#define MLX5_CAP_PCAM_FEATURE(mdev, fld) \
+   MLX5_GET(pcam_reg, (mdev)->caps.pcam, 
feature_cap_mask.enhanced_features.fld)
+
+#define MLX5_CAP_MCAM_FEATURE(mdev, fld) \
+   MLX5_GET(mcam_reg, (mdev)->caps.mcam, 
mng_feature_cap_mask.enhanced_features.fld)
+
 #defineMLX5_CAP_QCAM_REG(mdev, fld) \
MLX5_GET(qcam_reg, (mdev)->caps.qcam, 
qos_access_reg_cap_mask.reg_cap.fld)
 

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 16:00:00 2019
(r347735)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 16:00:37 2019
(r347736)
@@ -699,6 +699,8 @@ struct mlx5_core_dev {
u32 hca_caps_cur[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];
u32 hca_caps_max[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];
struct {
+   u32 pcam[MLX5_ST_SZ_DW(pcam_reg)];
+   u32 mcam[MLX5_ST_SZ_DW(mcam_reg)];
u32 qcam[MLX5_ST_SZ_DW(qcam_reg)];
u32 fpga[MLX5_ST_SZ_DW(fpga_cap)];
} caps;

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:00:00 2019
(r347735)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 16:00:37 2019
(r347736)
@@ -117,6 +117,20 @@ static int mlx5_get_qcam_reg(struct mlx5_core_dev *dev
   MLX5_QCAM_REGS_FIRST_128);
 }
 
+static int mlx5_get_pcam_reg(struct mlx5_core_dev *dev)
+{
+   return mlx5_query_pcam_reg(dev, dev->caps.pcam,
+  MLX5_PCAM_FEATURE_ENHANCED_FEATURES,
+  MLX5_PCAM_REGS_5000_TO_507F);
+}
+
+static int mlx5_get_mcam_reg(struct mlx5_core_dev *dev)
+{
+   return mlx5_query_mcam_reg(dev, dev->caps.mcam,
+  MLX5_MCAM_FEATURE_ENHANCED_FEATURES,
+  MLX5_MCAM_REGS_FIRST_128);
+}
+
 int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
 {
int err;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347734 - stable/12/sys/dev/mlx5

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:59:23 2019
New Revision: 347734
URL: https://svnweb.freebsd.org/changeset/base/347734

Log:
  MFC r347270:
  Expose PCAM, MCAM registers infrastructure in mlx5core.
  
  PCAM: Ports capabilities mask register.
  MCAM: Management capabilities mask register.
  
  PCAM and MCAM registers will provide information regarding firmware
  support for different features, in order to avoid cases where new driver
  combined with old firmware results in syndromes (for ex. PCIe counters
  before this patchset).
  
  Linux commit:
  cfdcbceaeffc669b70d904d80a2df9c86c232566
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 15:58:37 2019
(r347733)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 15:59:23 2019
(r347734)
@@ -929,6 +929,22 @@ enum mlx5_qcam_feature_groups {
MLX5_QCAM_FEATURE_ENHANCED_FEATURES = 0x0,
 };
 
+enum mlx5_pcam_reg_groups {
+   MLX5_PCAM_REGS_5000_TO_507F = 0x0,
+};
+
+enum mlx5_pcam_feature_groups {
+   MLX5_PCAM_FEATURE_ENHANCED_FEATURES = 0x0,
+};
+
+enum mlx5_mcam_reg_groups {
+   MLX5_MCAM_REGS_FIRST_128 = 0x0,
+};
+
+enum mlx5_mcam_feature_groups {
+   MLX5_MCAM_FEATURE_ENHANCED_FEATURES = 0x0,
+};
+
 /* GET Dev Caps macros */
 #define MLX5_CAP_GEN(mdev, cap) \
MLX5_GET(cmd_hca_cap, mdev->hca_caps_cur[MLX5_CAP_GENERAL], cap)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 15:58:37 2019
(r347733)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 15:59:23 2019
(r347734)
@@ -149,11 +149,13 @@ enum {
MLX5_REG_PELC= 0x500e,
MLX5_REG_PVLC= 0x500f,
MLX5_REG_PMLP= 0x5002,
+   MLX5_REG_PCAM= 0x507f,
MLX5_REG_NODE_DESC   = 0x6001,
MLX5_REG_HOST_ENDIANNESS = 0x7004,
MLX5_REG_MTMP= 0x900a,
MLX5_REG_MCIA= 0x9014,
MLX5_REG_MPCNT   = 0x9051,
+   MLX5_REG_MCAM= 0x907f,
 };
 
 enum dbg_rsc_type {

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 15:58:37 2019
(r347733)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 15:59:23 2019
(r347734)
@@ -1103,7 +1103,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
u8 ets[0x1];
u8 nic_flow_table[0x1];
u8 eswitch_flow_table[0x1];
-   u8 reserved_18[0x3];
+   u8 reserved_18[0x1];
+   u8 mcam_reg[0x1];
+   u8 pcam_reg[0x1];
u8 local_ca_ack_delay[0x5];
u8 port_module_event[0x1];
u8 reserved_19[0x5];
@@ -8544,6 +8546,63 @@ struct mlx5_ifc_qcam_reg_bits {
struct mlx5_ifc_qcam_qos_feature_cap_mask feature_cap;
u8  reserved_at_0[0x80];
} qos_feature_cap_mask;
+
+   u8 reserved_at_1c0[0x80];
+};
+
+struct mlx5_ifc_pcam_enhanced_features_bits {
+   u8 reserved_at_0[0x7e];
+
+   u8 ppcnt_discard_group[0x1];
+   u8 ppcnt_statistical_group[0x1];
+};
+
+struct mlx5_ifc_pcam_reg_bits {
+   u8 reserved_at_0[0x8];
+   u8 feature_group[0x8];
+   u8 reserved_at_10[0x8];
+   u8 access_reg_group[0x8];
+
+   u8 reserved_at_20[0x20];
+
+   union {
+   u8 reserved_at_0[0x80];
+   } port_access_reg_cap_mask;
+
+   u8 reserved_at_c0[0x80];
+
+   union {
+   struct mlx5_ifc_pcam_enhanced_features_bits enhanced_features;
+   u8 reserved_at_0[0x80];
+   } feature_cap_mask;
+
+   u8 reserved_at_1c0[0xc0];
+};
+
+struct mlx5_ifc_mcam_enhanced_features_bits {
+   u8 reserved_at_0[0x7f];
+
+   u8 pcie_performance_group[0x1];
+};
+
+struct mlx5_ifc_mcam_reg_bits {
+   u8 reserved_at_0[0x8];
+   u8 feature_group[0x8];
+   u8 reserved_at_10[0x8];
+   u8 access_reg_group[0x8];
+
+   u8 reserved_at_20[0x20];
+
+   union {
+   u8 reserved_at_0[0x80];
+   } mng_access_reg_cap_mask;
+
+   u8 reserved_at_c0[0x80];
+
+   union {
+   struct mlx5_ifc_mcam_enhanced_features_bits enhanced_features;
+   u8 reserved_at_0[0x80];
+   } mng_feature_cap_mask;
 
u8 reserved_at_1c0[0x80];
 };
___

svn commit: r347732 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:57:59 2019
New Revision: 347732
URL: https://svnweb.freebsd.org/changeset/base/347732

Log:
  MFC r347268:
  Add Fast teardown support to mlx5core.
  
  Today mlx5 devices support two teardown modes:
  1- Regular teardown
  2- Force teardown
  
  This change introduces the enhanced version of the "Force teardown" that
  allows SW to perform teardown in a faster way without the need to reclaim
  all the pages.
  
  Fast teardown provides the following advantages:
  1- Fix a FW race condition that could cause command timeout
  2- Avoid moving to polling mode
  3- Close the vport to prevent PCI ACK to be sent without been
 scattered to memory
  
  Linux commit:
  fcd29ad17c6ff885dfae58f557e9323941e63ba2
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 15:57:14 
2019(r347731)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 15:57:59 
2019(r347732)
@@ -79,6 +79,7 @@ int mlx5_query_qcam_reg(struct mlx5_core_dev *mdev, u3
 int mlx5_cmd_init_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_teardown_hca(struct mlx5_core_dev *dev);
 int mlx5_cmd_force_teardown_hca(struct mlx5_core_dev *dev);
+int mlx5_cmd_fast_teardown_hca(struct mlx5_core_dev *dev);
 void mlx5_core_event(struct mlx5_core_dev *dev, enum mlx5_dev_event event,
 unsigned long param);
 void mlx5_enter_error_state(struct mlx5_core_dev *dev, bool force);

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 15:57:14 2019
(r347731)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_fw.c  Thu May 16 15:57:59 2019
(r347732)
@@ -249,12 +249,59 @@ int mlx5_cmd_force_teardown_hca(struct mlx5_core_dev *
if (ret)
return ret;
 
-   force_state = MLX5_GET(teardown_hca_out, out, force_state);
+   force_state = MLX5_GET(teardown_hca_out, out, state);
if (force_state == MLX5_TEARDOWN_HCA_OUT_FORCE_STATE_FAIL)  {
mlx5_core_err(dev, "teardown with force mode failed\n");
return -EIO;
}
 
+   return 0;
+}
+
+#defineMLX5_FAST_TEARDOWN_WAIT_MS 3000
+int mlx5_cmd_fast_teardown_hca(struct mlx5_core_dev *dev)
+{
+   int end, delay_ms = MLX5_FAST_TEARDOWN_WAIT_MS;
+   u32 out[MLX5_ST_SZ_DW(teardown_hca_out)] = {};
+   u32 in[MLX5_ST_SZ_DW(teardown_hca_in)] = {};
+   int state;
+   int ret;
+
+   if (!MLX5_CAP_GEN(dev, fast_teardown)) {
+   mlx5_core_dbg(dev, "fast teardown is not supported in the 
firmware\n");
+   return -EOPNOTSUPP;
+   }
+
+   MLX5_SET(teardown_hca_in, in, opcode, MLX5_CMD_OP_TEARDOWN_HCA);
+   MLX5_SET(teardown_hca_in, in, profile,
+MLX5_TEARDOWN_HCA_IN_PROFILE_PREPARE_FAST_TEARDOWN);
+
+   ret = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
+   if (ret)
+   return ret;
+
+   state = MLX5_GET(teardown_hca_out, out, state);
+   if (state == MLX5_TEARDOWN_HCA_OUT_FORCE_STATE_FAIL) {
+   mlx5_core_warn(dev, "teardown with fast mode failed\n");
+   return -EIO;
+   }
+
+   mlx5_set_nic_state(dev, MLX5_NIC_IFC_DISABLED);
+
+   /* Loop until device state turns to disable */
+   end = jiffies + msecs_to_jiffies(delay_ms);
+   do {
+   if (mlx5_get_nic_state(dev) == MLX5_NIC_IFC_DISABLED)
+   break;
+
+   pause("W", 1);
+   } while (!time_after(jiffies, end));
+
+   if (mlx5_get_nic_state(dev) != MLX5_NIC_IFC_DISABLED) {
+   dev_err(&dev->pdev->dev, "NIC IFC still %d after %ums.\n",
+   mlx5_get_nic_state(dev), delay_ms);
+   return -EIO;
+   }
return 0;
 }
 

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:57:14 
2019(r347731)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:57:59 
2019(r347732)
@@ -1415,12 +1415,17 @@ static const struct pci_error_handlers mlx5_err_handle
 
 static int mlx5_try_fast_unload(struct mlx5_core_dev *dev)
 {
+   bool fast_teardown, force_teardown;
int err;
 
-   if (!MLX5_CAP_GEN(dev, force_teardown)) {
-   mlx5_core_dbg(dev, "force teardown is not supported in the 
firmware\n");
+   fast_teardown = MLX5_CAP_

svn commit: r347733 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:58:37 2019
New Revision: 347733
URL: https://svnweb.freebsd.org/changeset/base/347733

Log:
  MFC r347269:
  Add sysctl(8) to control fast unload support in mlx5core.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:57:59 
2019(r347732)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:58:37 
2019(r347733)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2013-2017, Mellanox Technologies, Ltd.  All rights reserved.
+ * Copyright (c) 2013-2019, Mellanox Technologies, Ltd.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -68,6 +68,11 @@ MODULE_PARM_DESC(prof_sel, "profile selector. Valid ra
 
 SYSCTL_NODE(_hw, OID_AUTO, mlx5, CTLFLAG_RW, 0, "mlx5 HW controls");
 
+static int mlx5_fast_unload_enabled = 1;
+SYSCTL_INT(_hw_mlx5, OID_AUTO, fast_unload_enabled, CTLFLAG_RWTUN,
+&mlx5_fast_unload_enabled, 0,
+"Set to enable fast unload. Clear to disable.");
+
 #define NUMA_NO_NODE   -1
 
 static LIST_HEAD(intf_list);
@@ -1417,6 +1422,11 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *
 {
bool fast_teardown, force_teardown;
int err;
+
+   if (!mlx5_fast_unload_enabled) {
+   mlx5_core_dbg(dev, "fast unload is disabled by user\n");
+   return -EOPNOTSUPP;
+   }
 
fast_teardown = MLX5_CAP_GEN(dev, fast_teardown);
force_teardown = MLX5_CAP_GEN(dev, force_teardown);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347731 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:57:14 2019
New Revision: 347731
URL: https://svnweb.freebsd.org/changeset/base/347731

Log:
  MFC r347267:
  Make sure the running variable is properly set for ratelimited SQs in 
mlx5en(4).
  
  Else the SQs won't be properly released when closing rate-limited connections
  leading to wrong state transitions on the SQ.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c Thu May 16 15:56:30 2019
(r347730)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c Thu May 16 15:57:14 2019
(r347731)
@@ -176,6 +176,8 @@ mlx5e_rl_open_sq(struct mlx5e_priv *priv, struct mlx5e
if (err)
goto err_disable_sq;
 
+   WRITE_ONCE(sq->running, 1);
+
return (0);
 
 err_disable_sq:
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347729 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:55:54 2019
New Revision: 347729
URL: https://svnweb.freebsd.org/changeset/base/347729

Log:
  MFC r347265:
  Ticks are integer type in FreeBSD.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:55:08 
2019(r347728)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:55:54 
2019(r347729)
@@ -255,7 +255,7 @@ mlx5_health_allow_reset(struct mlx5_core_dev *dev)
 #define MLX5_NIC_STATE_POLL_MS 5
 void mlx5_enter_error_state(struct mlx5_core_dev *dev, bool force)
 {
-   unsigned long end, delay_ms = MLX5_CRDUMP_WAIT_MS;
+   int end, delay_ms = MLX5_CRDUMP_WAIT_MS;
u32 fatal_error;
int lock = -EBUSY;
 
@@ -299,7 +299,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
} while (!time_after(jiffies, end));
 
if (!sensor_nic_disabled(dev)) {
-   dev_err(&dev->pdev->dev, "NIC IFC still %d after %lums.\n",
+   dev_err(&dev->pdev->dev, "NIC IFC still %d after %ums.\n",
get_nic_mode(dev), delay_ms);
}
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347730 - stable/12/sys/dev/mlx5/mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:56:30 2019
New Revision: 347730
URL: https://svnweb.freebsd.org/changeset/base/347730

Log:
  MFC r347266:
  Implement get and set nic state as global functions in mlx5core.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.h
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 15:55:54 
2019(r347729)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_core.hThu May 16 15:56:30 
2019(r347730)
@@ -108,4 +108,15 @@ extern struct pci_driver mlx5_core_driver;
 
 SYSCTL_DECL(_hw_mlx5);
 
+enum {
+   MLX5_NIC_IFC_FULL   = 0,
+   MLX5_NIC_IFC_DISABLED   = 1,
+   MLX5_NIC_IFC_NO_DRAM_NIC= 2,
+   MLX5_NIC_IFC_INVALID= 3,
+   MLX5_NIC_IFC_SW_RESET   = 7,
+};
+
+u8 mlx5_get_nic_state(struct mlx5_core_dev *dev);
+void mlx5_set_nic_state(struct mlx5_core_dev *dev, u8 state);
+
 #endif /* __MLX5_CORE_H__ */

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:55:54 
2019(r347729)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:56:30 
2019(r347730)
@@ -39,13 +39,6 @@
 #defineMAX_MISSES  3
 
 enum {
-   MLX5_NIC_IFC_FULL   = 0,
-   MLX5_NIC_IFC_DISABLED   = 1,
-   MLX5_NIC_IFC_NO_DRAM_NIC= 2,
-   MLX5_NIC_IFC_SW_RESET   = 7,
-};
-
-enum {
MLX5_DROP_NEW_HEALTH_WORK,
MLX5_DROP_NEW_RECOVERY_WORK,
 };
@@ -114,11 +107,21 @@ static int unlock_sem_sw_reset(struct mlx5_core_dev *d
return ret;
 }
 
-static u8 get_nic_mode(struct mlx5_core_dev *dev)
+u8 mlx5_get_nic_state(struct mlx5_core_dev *dev)
 {
return (ioread32be(&dev->iseg->cmdq_addr_l_sz) >> 8) & 7;
 }
 
+void mlx5_set_nic_state(struct mlx5_core_dev *dev, u8 state)
+{
+   u32 cur_cmdq_addr_l_sz;
+
+   cur_cmdq_addr_l_sz = ioread32be(&dev->iseg->cmdq_addr_l_sz);
+   iowrite32be((cur_cmdq_addr_l_sz & 0xF000) |
+   state << MLX5_NIC_IFC_OFFSET,
+   &dev->iseg->cmdq_addr_l_sz);
+}
+
 static bool sensor_fw_synd_rfr(struct mlx5_core_dev *dev)
 {
struct mlx5_core_health *health = &dev->priv.health;
@@ -165,12 +168,12 @@ static bool sensor_pci_no_comm(struct mlx5_core_dev *d
 
 static bool sensor_nic_disabled(struct mlx5_core_dev *dev)
 {
-   return get_nic_mode(dev) == MLX5_NIC_IFC_DISABLED;
+   return mlx5_get_nic_state(dev) == MLX5_NIC_IFC_DISABLED;
 }
 
 static bool sensor_nic_sw_reset(struct mlx5_core_dev *dev)
 {
-   return get_nic_mode(dev) == MLX5_NIC_IFC_SW_RESET;
+   return mlx5_get_nic_state(dev) == MLX5_NIC_IFC_SW_RESET;
 }
 
 static u32 check_fatal_sensors(struct mlx5_core_dev *dev)
@@ -300,7 +303,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
 
if (!sensor_nic_disabled(dev)) {
dev_err(&dev->pdev->dev, "NIC IFC still %d after %ums.\n",
-   get_nic_mode(dev), delay_ms);
+   mlx5_get_nic_state(dev), delay_ms);
}
 
/* Release FW semaphore if you are the lock owner */
@@ -316,7 +319,7 @@ err_state_done:
 
 static void mlx5_handle_bad_state(struct mlx5_core_dev *dev)
 {
-   u8 nic_mode = get_nic_mode(dev);
+   u8 nic_mode = mlx5_get_nic_state(dev);
 
if (nic_mode == MLX5_NIC_IFC_SW_RESET) {
/* The IFC mode field is 3 bits, so it will read 0x7 in two 
cases:
@@ -362,11 +365,11 @@ static void health_recover(struct work_struct *work)
recover = false;
}
 
-   nic_mode = get_nic_mode(dev);
+   nic_mode = mlx5_get_nic_state(dev);
while (nic_mode != MLX5_NIC_IFC_DISABLED &&
   !time_after(jiffies, end)) {
msleep(MLX5_NIC_STATE_POLL_MS);
-   nic_mode = get_nic_mode(dev);
+   nic_mode = mlx5_get_nic_state(dev);
}
 
if (nic_mode != MLX5_NIC_IFC_DISABLED) {
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347728 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:55:08 2019
New Revision: 347728
URL: https://svnweb.freebsd.org/changeset/base/347728

Log:
  MFC r347264:
  Configure firmware to use RX hash format in mini CQE in mlx5en(4).
  
  When using CQE zipping, one can choose between RX hash and Checksum.
  This will indicate the parameter on which a zipping session should be
  stopped.
  
  While porting the Linux code, Checksum was chosen. However, the value
  of Checksum is not being used anywhere.
  For the FreeBSD driver, we prefer to use the RX hash format which will
  guarantee the RX hash value for all the mini CQEs.
  While at it, make sure to initialize the Checksum value in the
  decompressed CQE.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:53:48 
2019(r347727)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:55:08 
2019(r347728)
@@ -1955,13 +1955,15 @@ mlx5e_build_rx_cq_param(struct mlx5e_priv *priv,
struct net_dim_cq_moder curr;
void *cqc = param->cqc;
 
-
/*
-* TODO The sysctl to control on/off is a bool value for now, which 
means
-* we only support CSUM, once HASH is implemnted we'll need to address 
that.
+* We use MLX5_CQE_FORMAT_HASH because the RX hash mini CQE
+* format is more beneficial for FreeBSD use case.
+*
+* Adding support for MLX5_CQE_FORMAT_CSUM will require changes
+* in mlx5e_decompress_cqe.
 */
if (priv->params.cqe_zipping_en) {
-   MLX5_SET(cqc, cqc, mini_cqe_res_format, MLX5_CQE_FORMAT_CSUM);
+   MLX5_SET(cqc, cqc, mini_cqe_res_format, MLX5_CQE_FORMAT_HASH);
MLX5_SET(cqc, cqc, cqe_compression_en, 1);
}
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 15:53:48 2019
(r347727)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c Thu May 16 15:55:08 2019
(r347728)
@@ -385,7 +385,12 @@ mlx5e_decompress_cqe(struct mlx5e_cq *cq, struct mlx5_
 */
title->byte_cnt = mini->byte_cnt;
title->wqe_counter = cpu_to_be16((wqe_counter + i) & cq->wq.sz_m1);
-   title->check_sum = mini->checksum;
+   title->rss_hash_result = mini->rx_hash_result;
+   /*
+* Since we use MLX5_CQE_FORMAT_HASH when creating the RX CQ,
+* the value of the checksum should be ignored.
+*/
+   title->check_sum = 0;
title->op_own = (title->op_own & 0xf0) |
(((cq->wq.cc + i) >> cq->wq.log_sz) & 1);
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347726 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:53:12 2019
New Revision: 347726
URL: https://svnweb.freebsd.org/changeset/base/347726

Log:
  MFC r347262:
  Split mlx5e_update_stats_work() in mlx5en(4).
  
  Split the function into the mlx5e_update_stats_locked() core and make
  mlx5e_update_stats_work() call the _locked helper, similar to many other
  places in the kernel. This improves the code structure, making the
  locking clean.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:52:18 
2019(r347725)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:53:12 
2019(r347726)
@@ -475,10 +475,8 @@ free_out:
  * configuration lock.
  */
 static void
-mlx5e_update_stats_work(struct work_struct *work)
+mlx5e_update_stats_locked(struct mlx5e_priv *priv)
 {
-   struct mlx5e_priv *priv = container_of(work, struct mlx5e_priv,
-   update_stats_work);
struct mlx5_core_dev *mdev = priv->mdev;
struct mlx5e_vport_stats *s = &priv->stats.vport;
struct mlx5e_sq_stats *sq_stats;
@@ -505,12 +503,9 @@ mlx5e_update_stats_work(struct work_struct *work)
int i;
int j;
 
-   PRIV_LOCK(priv);
out = mlx5_vzalloc(outlen);
if (out == NULL)
goto free_out;
-   if (test_bit(MLX5E_STATE_OPENED, &priv->state) == 0)
-   goto free_out;
 
/* Collect firts the SW counters and then HW for consistency */
for (i = 0; i < priv->params.num_channels; i++) {
@@ -565,78 +560,70 @@ mlx5e_update_stats_work(struct work_struct *work)
memset(out, 0, outlen);
 
/* get number of out-of-buffer drops first */
-   if (mlx5_vport_query_out_of_rx_buffer(mdev, priv->counter_set_id,
-   &rx_out_of_buffer))
-   goto free_out;
+   if (test_bit(MLX5E_STATE_OPENED, &priv->state) != 0 &&
+   mlx5_vport_query_out_of_rx_buffer(mdev, priv->counter_set_id,
+   &rx_out_of_buffer) == 0) {
+   /* accumulate difference into a 64-bit counter */
+   s->rx_out_of_buffer += (u64)(u32)(rx_out_of_buffer -
+   s->rx_out_of_buffer_prev);
+   s->rx_out_of_buffer_prev = rx_out_of_buffer;
+   }
 
-   /* accumulate difference into a 64-bit counter */
-   s->rx_out_of_buffer += (u64)(u32)(rx_out_of_buffer - 
s->rx_out_of_buffer_prev);
-   s->rx_out_of_buffer_prev = rx_out_of_buffer;
-
/* get port statistics */
-   if (mlx5_cmd_exec(mdev, in, sizeof(in), out, outlen))
-   goto free_out;
-
+   if (mlx5_cmd_exec(mdev, in, sizeof(in), out, outlen) == 0) {
 #defineMLX5_GET_CTR(out, x) \
MLX5_GET64(query_vport_counter_out, out, x)
 
-   s->rx_error_packets =
-   MLX5_GET_CTR(out, received_errors.packets);
-   s->rx_error_bytes =
-   MLX5_GET_CTR(out, received_errors.octets);
-   s->tx_error_packets =
-   MLX5_GET_CTR(out, transmit_errors.packets);
-   s->tx_error_bytes =
-   MLX5_GET_CTR(out, transmit_errors.octets);
+   s->rx_error_packets =
+   MLX5_GET_CTR(out, received_errors.packets);
+   s->rx_error_bytes =
+   MLX5_GET_CTR(out, received_errors.octets);
+   s->tx_error_packets =
+   MLX5_GET_CTR(out, transmit_errors.packets);
+   s->tx_error_bytes =
+   MLX5_GET_CTR(out, transmit_errors.octets);
 
-   s->rx_unicast_packets =
-   MLX5_GET_CTR(out, received_eth_unicast.packets);
-   s->rx_unicast_bytes =
-   MLX5_GET_CTR(out, received_eth_unicast.octets);
-   s->tx_unicast_packets =
-   MLX5_GET_CTR(out, transmitted_eth_unicast.packets);
-   s->tx_unicast_bytes =
-   MLX5_GET_CTR(out, transmitted_eth_unicast.octets);
+   s->rx_unicast_packets =
+   MLX5_GET_CTR(out, received_eth_unicast.packets);
+   s->rx_unicast_bytes =
+   MLX5_GET_CTR(out, received_eth_unicast.octets);
+   s->tx_unicast_packets =
+   MLX5_GET_CTR(out, transmitted_eth_unicast.packets);
+   s->tx_unicast_bytes =
+   MLX5_GET_CTR(out, transmitted_eth_unicast.octets);
 
-   s->rx_multicast_packets =
-   MLX5_GET_CTR(out, received_eth_multicast.packets);
-   s->rx_multicast_bytes =
-   MLX5_GET_CTR(out, received_eth_multicast.octets);
-   s->tx_multicast_packets =
-   MLX5_GET_CTR(out, transmitted_eth_multicast.packets);
-   s->tx_multicast_bytes =
-   MLX5_GET_CTR(out, transmitted_eth_multicast.octets);
+   s->rx_multi

svn commit: r347727 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:53:48 2019
New Revision: 347727
URL: https://svnweb.freebsd.org/changeset/base/347727

Log:
  MFC r347263:
  Disable CQE zipping by default in mlx5en(4).
  
  After doing performance measurements, it seems like CQE zipping doesn't
  have any significant benefit.
  Moreover, we know that this feature is disabled by default on other
  operating systems (Linux for example).
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:53:12 
2019(r347726)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:53:48 
2019(r347727)
@@ -3175,7 +3175,12 @@ mlx5e_build_ifp_priv(struct mlx5_core_dev *mdev,
priv->params.hw_lro_en = false;
priv->params.lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
 
-   priv->params.cqe_zipping_en = !!MLX5_CAP_GEN(mdev, cqe_compression);
+   /*
+* CQE zipping is currently defaulted to off. when it won't
+* anymore we will consider the HW capability:
+* "!!MLX5_CAP_GEN(mdev, cqe_compression)"
+*/
+   priv->params.cqe_zipping_en = false;
 
priv->mdev = mdev;
priv->params.num_channels = num_comp_vectors;
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347725 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:52:18 2019
New Revision: 347725
URL: https://svnweb.freebsd.org/changeset/base/347725

Log:
  MFC r347261:
  Implement fast close of RX channel in mlx5en(4).
  
  Instead of waiting for all jobs to be cancelled, simply close the completion
  queue to prevent more completion events and let mlx5e_destroy_rq() cleanup
  the remaining mbufs.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:51:28 
2019(r347724)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:52:18 
2019(r347725)
@@ -1136,17 +1136,10 @@ mlx5e_close_rq(struct mlx5e_rq *rq)
 static void
 mlx5e_close_rq_wait(struct mlx5e_rq *rq)
 {
-   struct mlx5_core_dev *mdev = rq->channel->priv->mdev;
 
-   /* wait till RQ is empty */
-   while (!mlx5_wq_ll_is_empty(&rq->wq) &&
-  (mdev->state != MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
-   msleep(4);
-   rq->cq.mcq.comp(&rq->cq.mcq);
-   }
-
-   cancel_work_sync(&rq->dim.work);
mlx5e_disable_rq(rq);
+   mlx5e_close_cq(&rq->cq);
+   cancel_work_sync(&rq->dim.work);
mlx5e_destroy_rq(rq);
 }
 
@@ -1861,7 +1854,6 @@ mlx5e_close_channel_wait(struct mlx5e_channel *c)
 {
mlx5e_close_rq_wait(&c->rq);
mlx5e_close_sqs_wait(c);
-   mlx5e_close_cq(&c->rq.cq);
mlx5e_close_tx_cqs(c);
/* destroy mutexes */
mlx5e_chan_mtx_destroy(c);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347724 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:51:28 2019
New Revision: 347724
URL: https://svnweb.freebsd.org/changeset/base/347724

Log:
  MFC r347260 and r347326:
  Correct number of elements for priority to traffic class mappings in 
mlx5en(4).
  
  The number of priorities is always 8, while the number of traffic classes
  supported can vary. While at it convert the sysctl node into an array.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 15:50:11 2019
(r347723)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 15:51:28 2019
(r347724)
@@ -73,6 +73,9 @@
 #include 
 #include 
 
+#defineMLX5E_MAX_PRIORITY 8
+
+/* IEEE 802.1Qaz standard supported values */
 #defineIEEE_8021QAZ_MAX_TCS8
 
 #defineMLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE0x7
@@ -482,10 +485,10 @@ struct mlx5e_params {
u16 rx_hash_log_tbl_sz;
u32 tx_pauseframe_control __aligned(4);
u32 rx_pauseframe_control __aligned(4);
-   u32 tx_priority_flow_control __aligned(4);
-   u32 rx_priority_flow_control __aligned(4);
u16 tx_max_inline;
u8  tx_min_inline_mode;
+   u8  tx_priority_flow_control;
+   u8  rx_priority_flow_control;
u8  channels_rsss;
 };
 
@@ -524,7 +527,7 @@ struct mlx5e_params_ethtool {
MLX5E_PARAMS(MLX5E_STATS_VAR)
u64 max_bw_value[IEEE_8021QAZ_MAX_TCS];
u8  max_bw_share[IEEE_8021QAZ_MAX_TCS];
-   u8  prio_tc[IEEE_8021QAZ_MAX_TCS];
+   u8  prio_tc[MLX5E_MAX_PRIORITY];
u8  dscp2prio[MLX5_MAX_SUPPORTED_DSCP];
u8  trust_state;
 };

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 15:50:11 
2019(r347723)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 15:51:28 
2019(r347724)
@@ -298,8 +298,8 @@ mlx5e_get_prio_tc(struct mlx5e_priv *priv)
return (EOPNOTSUPP);
}
 
-   for (i = 0; i <= mlx5_max_tc(priv->mdev); i++) {
-   err = -mlx5_query_port_prio_tc(mdev, i, 
&(priv->params_ethtool.prio_tc[i]));
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   err = -mlx5_query_port_prio_tc(mdev, i, 
priv->params_ethtool.prio_tc + i);
if (err)
break;
}
@@ -311,29 +311,35 @@ static int
 mlx5e_prio_to_tc_handler(SYSCTL_HANDLER_ARGS)
 {
struct mlx5e_priv *priv = arg1;
-   int prio_index = arg2;
struct mlx5_core_dev *mdev = priv->mdev;
+   uint8_t temp[MLX5E_MAX_PRIORITY];
int err;
-   uint8_t result;
+   int i;
 
PRIV_LOCK(priv);
-   result = priv->params_ethtool.prio_tc[prio_index];
-   err = sysctl_handle_8(oidp, &result, 0, req);
-   if (err || !req->newptr ||
-   result == priv->params_ethtool.prio_tc[prio_index])
+   err = SYSCTL_OUT(req, priv->params_ethtool.prio_tc, MLX5E_MAX_PRIORITY);
+   if (err || !req->newptr)
goto done;
-
-   if (result > mlx5_max_tc(mdev)) {
-   err = ERANGE;
-   goto done;
-   }
-
-   err = -mlx5_set_port_prio_tc(mdev, prio_index, result);
+   err = SYSCTL_IN(req, temp, MLX5E_MAX_PRIORITY);
if (err)
goto done;
 
-   priv->params_ethtool.prio_tc[prio_index] = result;
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   if (temp[i] > mlx5_max_tc(mdev)) {
+   err = ERANGE;
+   goto done;
+   }
+   }
 
+   for (i = 0; i != MLX5E_MAX_PRIORITY; i++) {
+   if (temp[i] == priv->params_ethtool.prio_tc[i])
+   continue;
+   err = -mlx5_set_port_prio_tc(mdev, i, temp[i]);
+   if (err)
+   goto done;
+   /* update cached value */
+   priv->params_ethtool.prio_tc[i] = temp[i];
+   }
 done:
PRIV_UNLOCK(priv);
return (err);
@@ -1135,7 +1141,6 @@ mlx5e_create_diagnostics(struct mlx5e_priv *priv)
 void
 mlx5e_create_ethtool(struct mlx5e_priv *priv)
 {
-   struct mlx5_core_dev *mdev = priv->mdev;
struct sysctl_oid *node, *qos_node;
const char *pnameunit;
unsigned x;
@@ -1262,14 +1267,10 @@ mlx5e_create_ethtool(struct mlx5e_priv *priv)
 
/* Priority to traffic class mapping */
if (mlx5e_get_prio_tc(priv) == 0) {
-   for (i = 0; i <= mlx5_max_tc(mdev); i++) {
-   

svn commit: r347723 - stable/12/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:50:11 2019
New Revision: 347723
URL: https://svnweb.freebsd.org/changeset/base/347723

Log:
  MFC r347259:
  Remove unused module parameter in mlx5ib.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 15:49:35 
2019(r347722)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 15:50:11 
2019(r347723)
@@ -63,10 +63,6 @@ MODULE_DEPEND(mlx5ib, mlx5, 1, 1, 1);
 MODULE_DEPEND(mlx5ib, ibcore, 1, 1, 1);
 MODULE_VERSION(mlx5ib, 1);
 
-static int deprecated_prof_sel = 2;
-module_param_named(prof_sel, deprecated_prof_sel, int, 0444);
-MODULE_PARM_DESC(prof_sel, "profile selector. Deprecated here. Moved to module 
mlx5_core");
-
 static const char mlx5_version[] =
DRIVER_NAME ": Mellanox Connect-IB Infiniband driver "
DRIVER_VERSION " (" DRIVER_RELDATE ")\n";
@@ -3300,9 +3296,6 @@ static struct mlx5_interface mlx5_ib_interface = {
 static int __init mlx5_ib_init(void)
 {
int err;
-
-   if (deprecated_prof_sel != 2)
-   pr_warn("prof_sel is deprecated for mlx5_ib, set it for 
mlx5_core\n");
 
err = mlx5_ib_odp_init();
if (err)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347722 - in stable/12/sys/dev: mlx4/mlx4_ib mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:49:35 2019
New Revision: 347722
URL: https://svnweb.freebsd.org/changeset/base/347722

Log:
  MFC r347258:
  Make sure to error out when arming the CQ fails in mlx4ib and mlx5ib.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
==
--- stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 15:48:56 2019
(r347721)
+++ stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 15:49:35 2019
(r347722)
@@ -878,7 +878,8 @@ int mlx4_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
 
spin_lock_irqsave(&cq->lock, flags);
-   if (mdev->dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR) {
+   if (unlikely(mdev->dev->persist->state &
+MLX4_DEVICE_STATE_INTERNAL_ERROR)) {
mlx4_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -898,11 +899,18 @@ out:
 
 int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
 {
-   mlx4_cq_arm(&to_mcq(ibcq)->mcq,
+   struct mlx4_ib_cq *cq = to_mcq(ibcq);
+   struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
+
+   if (unlikely(mdev->dev->persist->state &
+MLX4_DEVICE_STATE_INTERNAL_ERROR))
+   return -1;
+
+   mlx4_cq_arm(&cq->mcq,
(flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
MLX4_CQ_DB_REQ_NOT_SOL : MLX4_CQ_DB_REQ_NOT,
-   to_mdev(ibcq->device)->uar_map,
-   MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock));
+   mdev->uar_map,
+   MLX4_GET_DOORBELL_LOCK(&mdev->uar_lock));
 
return 0;
 }

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 15:48:56 2019
(r347721)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 15:49:35 2019
(r347722)
@@ -673,7 +673,7 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
int npolled;
 
spin_lock_irqsave(&cq->lock, flags);
-   if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
+   if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
mlx5_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -702,6 +702,9 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
unsigned long irq_flags;
int ret = 0;
 
+   if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR))
+   return -1;
+
spin_lock_irqsave(&cq->lock, irq_flags);
if (cq->notify_flags != IB_CQ_NEXT_COMP)
cq->notify_flags = flags & IB_CQ_SOLICITED_MASK;
@@ -715,7 +718,7 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
MLX5_CQ_DB_REQ_NOT_SOL : MLX5_CQ_DB_REQ_NOT,
uar_page,
MLX5_GET_DOORBELL_LOCK(&mdev->priv.cq_uar_lock),
-   to_mcq(ibcq)->mcq.cons_index);
+   cq->mcq.cons_index);
 
return ret;
 }
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347721 - stable/12/sys/ofed/drivers/infiniband/core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:48:56 2019
New Revision: 347721
URL: https://svnweb.freebsd.org/changeset/base/347721

Log:
  MFC r347257:
  Make sure to error out when arming the CQ fails in ibcore.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c
==
--- stable/12/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c  Thu May 16 
15:48:19 2019(r347720)
+++ stable/12/sys/ofed/drivers/infiniband/core/ib_uverbs_cmd.c  Thu May 16 
15:48:56 2019(r347721)
@@ -1692,6 +1692,7 @@ ssize_t ib_uverbs_req_notify_cq(struct ib_uverbs_file 
 {
struct ib_uverbs_req_notify_cq cmd;
struct ib_cq  *cq;
+   int retval;
 
if (copy_from_user(&cmd, buf, sizeof cmd))
return -EFAULT;
@@ -1700,12 +1701,15 @@ ssize_t ib_uverbs_req_notify_cq(struct ib_uverbs_file 
if (!cq)
return -EINVAL;
 
-   ib_req_notify_cq(cq, cmd.solicited_only ?
-IB_CQ_SOLICITED : IB_CQ_NEXT_COMP);
+   if (ib_req_notify_cq(cq, cmd.solicited_only ?
+IB_CQ_SOLICITED : IB_CQ_NEXT_COMP) < 0)
+   retval = -ENXIO;
+   else
+   retval = in_len;
 
put_cq_read(cq);
 
-   return in_len;
+   return retval;
 }
 
 ssize_t ib_uverbs_destroy_cq(struct ib_uverbs_file *file,
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347720 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:48:19 2019
New Revision: 347720
URL: https://svnweb.freebsd.org/changeset/base/347720

Log:
  MFC r347256:
  Destroy port stats debug context in correct order in mlx5en(4).
  Destroy children nodes before parent nodes.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 15:47:33 
2019(r347719)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.cThu May 16 15:48:19 
2019(r347720)
@@ -1063,6 +1063,10 @@ mlx5e_ethtool_debug_stats(SYSCTL_HANDLER_ARGS)
int error;
 
PRIV_LOCK(priv);
+   if (priv->gone != 0) {
+   error = ENODEV;
+   goto done;
+   }
sys_debug = priv->sysctl_debug;
error = sysctl_handle_int(oidp, &sys_debug, 0, req);
if (error != 0 || !req->newptr)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:47:33 
2019(r347719)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:48:19 
2019(r347720)
@@ -4076,9 +4076,9 @@ mlx5e_destroy_ifp(struct mlx5_core_dev *mdev, void *vp
/* destroy all remaining sysctl nodes */
sysctl_ctx_free(&priv->stats.vport.ctx);
sysctl_ctx_free(&priv->stats.pport.ctx);
-   sysctl_ctx_free(&priv->sysctl_ctx);
if (priv->sysctl_debug)
sysctl_ctx_free(&priv->stats.port_stats_debug.ctx);
+   sysctl_ctx_free(&priv->sysctl_ctx);
 
mlx5_core_destroy_mkey(priv->mdev, &priv->mr);
mlx5_dealloc_transport_domain(priv->mdev, priv->tdn);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347719 - stable/12/sys/dev/mlx5/mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:47:33 2019
New Revision: 347719
URL: https://svnweb.freebsd.org/changeset/base/347719

Log:
  MFC r347255:
  Fix tx_jumbo_packets counter in mlx5en(4).
  
  Instead of reading Ethernet RFC 2819 pXtoYoctets counters from
  hardware which counts RX octets, count tx_stat_pXtoYoctets from
  Ethernet extended counters which counts TX octets.
  
  TX jumbo counters should be accumulated only after the PPCNT
  counters were fetched from hardware with their latest value.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:46:50 
2019(r347718)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:47:33 
2019(r347719)
@@ -540,12 +540,6 @@ mlx5e_update_stats_work(struct work_struct *work)
}
}
 
-   s->tx_jumbo_packets =
-   priv->stats.port_stats_debug.p1519to2047octets +
-   priv->stats.port_stats_debug.p2048to4095octets +
-   priv->stats.port_stats_debug.p4096to8191octets +
-   priv->stats.port_stats_debug.p8192to10239octets;
-
/* update counters */
s->tso_packets = tso_packets;
s->tso_bytes = tso_bytes;
@@ -644,6 +638,12 @@ mlx5e_update_stats_work(struct work_struct *work)
 
/* Get physical port counters */
mlx5e_update_pport_counters(priv);
+
+   s->tx_jumbo_packets =
+   priv->stats.port_stats_debug.tx_stat_p1519to2047octets +
+   priv->stats.port_stats_debug.tx_stat_p2048to4095octets +
+   priv->stats.port_stats_debug.tx_stat_p4096to8191octets +
+   priv->stats.port_stats_debug.tx_stat_p8192to10239octets;
 
 #if (__FreeBSD_version < 110)
/* no get_counters interface in fbsd 10 */
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347718 - in stable/12/sys/dev/mlx5: . mlx5_en

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:46:50 2019
New Revision: 347718
URL: https://svnweb.freebsd.org/changeset/base/347718

Log:
  MFC r347254:
  Update Ethernet extended counters in mlx5en(4).
  
  Expose all Ethernet extended counters those counters via debug_stats
  sysctl:
  dev.mce.X.debug_stats
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_en/en.h
  stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h
==
--- stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 15:46:04 2019
(r347717)
+++ stable/12/sys/dev/mlx5/mlx5_en/en.h Thu May 16 15:46:50 2019
(r347718)
@@ -255,6 +255,28 @@ struct mlx5e_vport_stats {
   m(+1, u64 out_multicast_pkts, "out_multicast_pkts", "Out multicast packets") 
\
   m(+1, u64 out_broadcast_pkts, "out_broadcast_pkts", "Out broadcast packets")
 
+#defineMLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(m)
\
+  m(+1, u64 port_transmit_wait_high, "port_transmit_wait_high", "Port transmit 
wait high") \
+  m(+1, u64 ecn_marked, "ecn_marked", "ECN marked")\
+  m(+1, u64 no_buffer_discard_mc, "no_buffer_discard_mc", "No buffer discard 
mc") \
+  m(+1, u64 rx_ebp, "rx_ebp", "RX EBP")
\
+  m(+1, u64 tx_ebp, "tx_ebp", "TX EBP")
\
+  m(+1, u64 rx_buffer_almost_full, "rx_buffer_almost_full", "RX buffer almost 
full") \
+  m(+1, u64 rx_buffer_full, "rx_buffer_full", "RX buffer full")\
+  m(+1, u64 rx_icrc_encapsulated, "rx_icrc_encapsulated", "RX ICRC 
encapsulated") \
+  m(+1, u64 ex_reserved_0, "ex_reserved_0", "Reserved") \
+  m(+1, u64 ex_reserved_1, "ex_reserved_1", "Reserved") \
+  m(+1, u64 tx_stat_p64octets, "tx_stat_p64octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p65to127octets, "tx_stat_p65to127octets", "Bytes") 
\
+  m(+1, u64 tx_stat_p128to255octets, "tx_stat_p128to255octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p256to511octets, "tx_stat_p256to511octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p512to1023octets, "tx_stat_p512to1023octets", "Bytes") 
\
+  m(+1, u64 tx_stat_p1024to1518octets, "tx_stat_p1024to1518octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p1519to2047octets, "tx_stat_p1519to2047octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p2048to4095octets, "tx_stat_p2048to4095octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p4096to8191octets, "tx_stat_p4096to8191octets", "Bytes")   
\
+  m(+1, u64 tx_stat_p8192to10239octets, "tx_stat_p8192to10239octets", "Bytes")
+
 #defineMLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)   
\
   m(+1, u64 time_since_last_clear, "time_since_last_clear",
\
"Time since the last counters clear event (msec)")  
\
@@ -349,7 +371,8 @@ struct mlx5e_vport_stats {
 #defineMLX5E_PORT_STATS_DEBUG(m)   \
   MLX5E_PPORT_RFC2819_STATS_DEBUG(m)   \
   MLX5E_PPORT_RFC2863_STATS_DEBUG(m)   \
-  MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)
+  MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(m)\
+  MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(m)
 
 #defineMLX5E_PPORT_IEEE802_3_STATS_NUM \
   (0 MLX5E_PPORT_IEEE802_3_STATS(MLX5E_STATS_COUNT))
@@ -366,6 +389,8 @@ struct mlx5e_vport_stats {
   (0 MLX5E_PPORT_RFC2863_STATS_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG_NUM \
   (0 MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG(MLX5E_STATS_COUNT))
+#defineMLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM \
+  (0 MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG(MLX5E_STATS_COUNT))
 #defineMLX5E_PORT_STATS_DEBUG_NUM \
   (0 MLX5E_PORT_STATS_DEBUG(MLX5E_STATS_COUNT))
 

Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:46:04 
2019(r347717)
+++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c   Thu May 16 15:46:50 
2019(r347718)
@@ -440,6 +440,12 @@ mlx5e_update_pport_counters(struct mlx5e_priv *priv)
for (x = 0; x != MLX5E_PPORT_PHYSICAL_LAYER_STATS_DEBUG_NUM; x++, y++)
s_debug->arg[y] = be64toh(ptr[x]);
 
+   /* read Extended Ethernet counter group using predefined counter layout 
*/
+   MLX5_SET(ppcnt_reg, in, grp, MLX5_ETHERNET_EXTENDED_COUNTERS_GROUP);
+   mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
+   for (x = 0; x != MLX5E_PPORT_ETHERNET_EXTENDED_STATS_DEBUG_NUM; x++, 
y++)
+   s_debug->arg[y] = be64toh(ptr[x]);
+
/* read per-priority counters */
MLX5_SET(ppcnt_reg, in, grp, MLX5_PER_PRIORITY_COUNTERS_GROUP);
 
@@ 

svn commit: r347717 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:46:04 2019
New Revision: 347717
URL: https://svnweb.freebsd.org/changeset/base/347717

Log:
  MFC r347253:
  Protect from infinite sw-reset loop in mlx5core.
  
  Avoid an infinite software firmware reset loop that may be caused by a
  hardware bug by limiting the maximum number of resets.
  The counter between resets is reset by request for reset, and not by a
  successful reset.
  The interval between two resets can be configured via sysctl:
  hw.mlx5.sw_reset_timeout
  which is global to all mlx5 devices in the system.
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 15:45:10 2019
(r347716)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 15:46:04 2019
(r347717)
@@ -536,6 +536,7 @@ struct mlx5_core_health {
unsigned long   flags;
struct work_struct  work;
struct delayed_work recover_work;
+   unsigned intlast_reset_req;
 };
 
 #ifdef RATELIMIT

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:45:10 
2019(r347716)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_health.c  Thu May 16 15:46:04 
2019(r347717)
@@ -64,6 +64,12 @@ SYSCTL_INT(_hw_mlx5, OID_AUTO, fw_reset_enable, CTLFLA
 &mlx5_fw_reset_enable, 0,
 "Enable firmware reset");
 
+static unsigned int sw_reset_to = 1200;
+SYSCTL_UINT(_hw_mlx5, OID_AUTO, sw_reset_timeout, CTLFLAG_RWTUN,
+&sw_reset_to, 0,
+"Minimum timeout in seconds between two firmware resets");
+
+
 static int lock_sem_sw_reset(struct mlx5_core_dev *dev)
 {
int ret;
@@ -218,6 +224,32 @@ static void reset_fw_if_needed(struct mlx5_core_dev *d
&dev->iseg->cmdq_addr_l_sz);
 }
 
+static bool
+mlx5_health_allow_reset(struct mlx5_core_dev *dev)
+{
+   struct mlx5_core_health *health = &dev->priv.health;
+   unsigned int delta;
+   bool ret;
+
+   if (health->last_reset_req != 0) {
+   delta = ticks - health->last_reset_req;
+   delta /= hz;
+   ret = delta >= sw_reset_to;
+   } else {
+   ret = true;
+   }
+
+   /*
+* In principle, ticks may be 0. Setting it to off by one (-1)
+* to prevent certain reset in next request.
+*/
+   health->last_reset_req = ticks ? : -1;
+   if (!ret)
+   mlx5_core_warn(dev, "Firmware reset elided due to "
+   "auto-reset frequency threshold.\n");
+   return (ret);
+}
+
 #define MLX5_CRDUMP_WAIT_MS6
 #define MLX5_FW_RESET_WAIT_MS  1000
 #define MLX5_NIC_STATE_POLL_MS 5
@@ -243,7 +275,8 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
if (force)
goto err_state_done;
 
-   if (fatal_error == MLX5_SENSOR_FW_SYND_RFR) {
+   if (fatal_error == MLX5_SENSOR_FW_SYND_RFR &&
+   mlx5_health_allow_reset(dev)) {
/* Get cr-dump and reset FW semaphore */
if (mlx5_core_is_pf(dev))
lock = lock_sem_sw_reset(dev);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347716 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:45:10 2019
New Revision: 347716
URL: https://svnweb.freebsd.org/changeset/base/347716

Log:
  MFC r347252:
  Disable all MSIX interrupts before shutdown in mlx5.
  
  Make sure the interrupt handlers don't race with the fast unload one
  code in the shutdown handler.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/driver.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/driver.h
==
--- stable/12/sys/dev/mlx5/driver.h Thu May 16 15:44:27 2019
(r347715)
+++ stable/12/sys/dev/mlx5/driver.h Thu May 16 15:45:10 2019
(r347716)
@@ -606,6 +606,7 @@ struct mlx5_priv {
struct mlx5_irq_info*irq_info;
struct mlx5_uuar_info   uuari;
MLX5_DECLARE_DOORBELL_LOCK(cq_uar_lock);
+   int disable_irqs;
 
struct io_mapping   *bf_mapping;
 

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 15:44:27 2019
(r347715)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_cmd.c Thu May 16 15:45:10 2019
(r347716)
@@ -1143,6 +1143,9 @@ static void mlx5_cmd_change_mod(struct mlx5_core_dev *
struct mlx5_cmd *cmd = &dev->cmd;
int i;
 
+   if (cmd->mode == mode)
+   return;
+
for (i = 0; i < cmd->max_reg_cmds; i++)
down(&cmd->sem);
 

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 15:44:27 2019
(r347715)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 15:45:10 2019
(r347716)
@@ -395,7 +395,9 @@ static irqreturn_t mlx5_msix_handler(int irq, void *eq
struct mlx5_eq *eq = eq_ptr;
struct mlx5_core_dev *dev = eq->dev;
 
-   mlx5_eq_int(dev, eq);
+   /* check if IRQs are not disabled */
+   if (likely(dev->priv.disable_irqs == 0))
+   mlx5_eq_int(dev, eq);
 
/* MSI-X vectors always belong to us */
return IRQ_HANDLED;

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:44:27 
2019(r347715)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_main.cThu May 16 15:45:10 
2019(r347716)
@@ -35,6 +35,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1443,11 +1444,29 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *
return 0;
 }
 
+static void mlx5_disable_interrupts(struct mlx5_core_dev *mdev)
+{
+   int nvec = mdev->priv.eq_table.num_comp_vectors + MLX5_EQ_VEC_COMP_BASE;
+   int x;
+
+   mdev->priv.disable_irqs = 1;
+
+   /* wait for all IRQ handlers to finish processing */
+   for (x = 0; x != nvec; x++)
+   synchronize_irq(mdev->priv.msix_arr[x].vector);
+}
+
 static void shutdown_one(struct pci_dev *pdev)
 {
struct mlx5_core_dev *dev  = pci_get_drvdata(pdev);
struct mlx5_priv *priv = &dev->priv;
int err;
+
+   /* enter polling mode */
+   mlx5_cmd_use_polling(dev);
+
+   /* disable all interrupts */
+   mlx5_disable_interrupts(dev);
 
err = mlx5_try_fast_unload(dev);
if (err)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347715 - stable/12/sys/dev/mlx5/mlx5_ib

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:44:27 2019
New Revision: 347715
URL: https://svnweb.freebsd.org/changeset/base/347715

Log:
  MFC r347251:
  Import Linux code to implement mlx5_ib_disassociate_ucontext() in mlx5ib.
  
  Submitted by: kib@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 15:43:34 
2019(r347714)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c   Thu May 16 15:44:27 
2019(r347715)
@@ -1335,6 +1335,70 @@ static int mlx5_ib_set_vma_data(struct vm_area_struct 
return 0;
 }
 
+static void mlx5_ib_disassociate_ucontext(struct ib_ucontext *ibcontext)
+{
+   int ret;
+   struct vm_area_struct *vma;
+   struct mlx5_ib_vma_private_data *vma_private, *n;
+   struct mlx5_ib_ucontext *context = to_mucontext(ibcontext);
+   struct task_struct *owning_process  = NULL;
+   struct mm_struct   *owning_mm   = NULL;
+
+   owning_process = get_pid_task(ibcontext->tgid, PIDTYPE_PID);
+   if (!owning_process)
+   return;
+
+   owning_mm = get_task_mm(owning_process);
+   if (!owning_mm) {
+   pr_info("no mm, disassociate ucontext is pending task 
termination\n");
+   while (1) {
+   put_task_struct(owning_process);
+   usleep_range(1000, 2000);
+   owning_process = get_pid_task(ibcontext->tgid,
+ PIDTYPE_PID);
+   if (!owning_process || owning_process->task_thread->
+   td_proc->p_state == PRS_ZOMBIE) {
+   pr_info("disassociate ucontext done, task was 
terminated\n");
+   /* in case task was dead need to release the
+* task struct.
+*/
+   if (owning_process)
+   put_task_struct(owning_process);
+   return;
+   }
+   }
+   }
+
+   /* need to protect from a race on closing the vma as part of
+* mlx5_ib_vma_close.
+*/
+   down_write(&owning_mm->mmap_sem);
+   list_for_each_entry_safe(vma_private, n, &context->vma_private_list,
+list) {
+   vma = vma_private->vma;
+   ret = zap_vma_ptes(vma, vma->vm_start,
+  PAGE_SIZE);
+   if (ret == -ENOTSUP) {
+   if (bootverbose)
+   WARN_ONCE(
+   "%s: zap_vma_ptes not implemented for unmanaged mappings", __func__);
+   } else {
+   WARN(ret, "%s: zap_vma_ptes failed, error %d",
+   __func__, -ret);
+   }
+   /* context going to be destroyed, should
+* not access ops any more.
+*/
+   /* XXXKIB vma->vm_flags &= ~(VM_SHARED | VM_MAYSHARE); */
+   vma->vm_ops = NULL;
+   list_del(&vma_private->list);
+   kfree(vma_private);
+   }
+   up_write(&owning_mm->mmap_sem);
+   mmput(owning_mm);
+   put_task_struct(owning_process);
+}
+
 static inline char *mmap_cmd2str(enum mlx5_ib_mmap_cmd cmd)
 {
switch (cmd) {
@@ -3083,6 +3147,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
dev->ib_dev.get_vf_stats= mlx5_ib_get_vf_stats;
dev->ib_dev.set_vf_guid = mlx5_ib_set_vf_guid;
}
+
+   dev->ib_dev.disassociate_ucontext = mlx5_ib_disassociate_ucontext;
 
mlx5_ib_internal_fill_odp_caps(dev);
 
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r347714 - in stable/12/sys/dev/mlx5: . mlx5_core

2019-05-16 Thread Hans Petter Selasky
Author: hselasky
Date: Thu May 16 15:43:34 2019
New Revision: 347714
URL: https://svnweb.freebsd.org/changeset/base/347714

Log:
  MFC r347250:
  Add temperature warning event to log in mlx5core.
  
  Temperature warning event is sent by FW to indicate high temperature
  as detected by one of the sensors on the board.
  Add handling of this event by writing the numbers of the alert sensors
  to the kernel log.
  
  Linux commit:
  1865ea9adbfaf341c5cd5d8f7d384f19948b2fe9
  
  Submitted by: slavash@
  Sponsored by: Mellanox Technologies

Modified:
  stable/12/sys/dev/mlx5/device.h
  stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
  stable/12/sys/dev/mlx5/mlx5_ifc.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/mlx5/device.h
==
--- stable/12/sys/dev/mlx5/device.h Thu May 16 15:42:47 2019
(r347713)
+++ stable/12/sys/dev/mlx5/device.h Thu May 16 15:43:34 2019
(r347714)
@@ -566,6 +566,11 @@ struct mlx5_eqe_general_notification_event {
u32   rsvd0[6];
 };
 
+struct mlx5_eqe_temp_warning {
+   __be64 sensor_warning_msb;
+   __be64 sensor_warning_lsb;
+} __packed;
+
 union ev_data {
__be32  raw[7];
struct mlx5_eqe_cmd cmd;
@@ -580,6 +585,7 @@ union ev_data {
struct mlx5_eqe_port_module_event port_module_event;
struct mlx5_eqe_vport_changevport_change;
struct mlx5_eqe_general_notification_event general_notifications;
+   struct mlx5_eqe_temp_warningtemp_warning;
 } __packed;
 
 struct mlx5_eqe {

Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c
==
--- stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 15:42:47 2019
(r347713)
+++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c  Thu May 16 15:43:34 2019
(r347714)
@@ -142,6 +142,8 @@ static const char *eqe_type_str(u8 type)
return "MLX5_EVENT_TYPE_GPIO_EVENT";
case MLX5_EVENT_TYPE_CODING_PORT_MODULE_EVENT:
return "MLX5_EVENT_TYPE_PORT_MODULE_EVENT";
+   case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+   return "MLX5_EVENT_TYPE_TEMP_WARN_EVENT";
case MLX5_EVENT_TYPE_REMOTE_CONFIG:
return "MLX5_EVENT_TYPE_REMOTE_CONFIG";
case MLX5_EVENT_TYPE_DB_BF_CONGESTION:
@@ -212,6 +214,16 @@ static void eq_update_ci(struct mlx5_eq *eq, int arm)
mb();
 }
 
+static void
+mlx5_temp_warning_event(struct mlx5_core_dev *dev, struct mlx5_eqe *eqe)
+{
+
+   mlx5_core_warn(dev,
+   "High temperature on sensors with bit set %#jx %#jx",
+   (uintmax_t)be64_to_cpu(eqe->data.temp_warning.sensor_warning_msb),
+   (uintmax_t)be64_to_cpu(eqe->data.temp_warning.sensor_warning_lsb));
+}
+
 static int mlx5_eq_int(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
 {
struct mlx5_eqe *eqe;
@@ -347,6 +359,9 @@ static int mlx5_eq_int(struct mlx5_core_dev *dev, stru
case MLX5_EVENT_TYPE_FPGA_QP_ERROR:
mlx5_fpga_event(dev, eqe->type, &eqe->data.raw);
break;
+   case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+   mlx5_temp_warning_event(dev, eqe);
+   break;
 
default:
mlx5_core_warn(dev, "Unhandled event 0x%x on EQ 0x%x\n",
@@ -540,6 +555,9 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
if (MLX5_CAP_GEN(dev, fpga))
async_event_mask |= (1ull << MLX5_EVENT_TYPE_FPGA_ERROR) |
(1ull << MLX5_EVENT_TYPE_FPGA_QP_ERROR);
+
+   if (MLX5_CAP_GEN(dev, temp_warn_event))
+   async_event_mask |= (1ull << MLX5_EVENT_TYPE_TEMP_WARN_EVENT);
 
err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
 MLX5_NUM_CMD_EQE, 1ull << MLX5_EVENT_TYPE_CMD,

Modified: stable/12/sys/dev/mlx5/mlx5_ifc.h
==
--- stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 15:42:47 2019
(r347713)
+++ stable/12/sys/dev/mlx5/mlx5_ifc.h   Thu May 16 15:43:34 2019
(r347714)
@@ -50,7 +50,7 @@ enum {
MLX5_EVENT_TYPE_PORT_CHANGE= 0x9,
MLX5_EVENT_TYPE_GPIO_EVENT = 0x15,
MLX5_EVENT_TYPE_CODING_PORT_MODULE_EVENT   = 0x16,
-   MLX5_EVENT_TYPE_CODING_TEMP_WARNING_EVENT  = 0x17,
+   MLX5_EVENT_TYPE_TEMP_WARN_EVENT= 0x17,
MLX5_EVENT_TYPE_REMOTE_CONFIG  = 0x19,
MLX5_EVENT_TYPE_CODING_DCBX_CHANGE_EVENT   = 0x1e,
MLX5_EVENT_TYPE_CODING_PPS_EVENT   = 0x25,
___
svn-src-all@freebsd.org m

<    7   8   9   10   11   12   13   14   15   16   >