All of lore.kernel.org
 help / color / mirror / Atom feed
* [mellanox:queue-next 2/2] drivers/vdpa/mlx5/net/mlx5_vnet.c:46:35: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
@ 2020-10-25 13:10 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-10-25 13:10 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 58885 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git queue-next
head:   37eaca87fa33a2fc664f665575c3ea9d4eba4cbc
commit: 37eaca87fa33a2fc664f665575c3ea9d4eba4cbc [2/2] Merge branch 'testing/rdma-next' into queue-next
config: i386-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/commit/?id=37eaca87fa33a2fc664f665575c3ea9d4eba4cbc
        git remote add mellanox https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git
        git fetch --no-tags mellanox queue-next
        git checkout 37eaca87fa33a2fc664f665575c3ea9d4eba4cbc
        # save the attached .config to linux build tree
        make W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   In file included from include/linux/bits.h:6,
                    from include/linux/bitops.h:5,
                    from include/linux/kernel.h:12,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from drivers/vdpa/mlx5/net/mlx5_vnet.c:4:
   include/vdso/bits.h:7:26: warning: left shift count >= width of type [-Wshift-count-overflow]
       7 | #define BIT(nr)   (UL(1) << (nr))
         |                          ^~
   include/linux/mlx5/mlx5_ifc.h:10666:46: note: in expansion of macro 'BIT'
   10666 |  MLX5_HCA_CAP_GENERAL_OBJECT_TYPES_SAMPLER = BIT(0x20),
         |                                              ^~~
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:46:35: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
      46 | static void free_resources(struct mlx5_vdpa_net *ndev);
         |                                   ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:47:30: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
      47 | static void init_mvqs(struct mlx5_vdpa_net *ndev);
         |                              ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:48:32: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
      48 | static int setup_driver(struct mlx5_vdpa_net *ndev);
         |                                ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:49:36: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
      49 | static void teardown_driver(struct mlx5_vdpa_net *ndev);
         |                                    ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:142:30: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     142 | static int create_tis(struct mlx5_vdpa_net *ndev)
         |                              ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'create_tis':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:144:37: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     144 |  struct mlx5_vdpa_dev *mvdev = &ndev->mvdev;
         |                                     ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:158:32: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     158 | static void destroy_tis(struct mlx5_vdpa_net *ndev)
         |                                ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'destroy_tis':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:160:29: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     160 |  mlx5_vdpa_destroy_tis(&ndev->mvdev, ndev->res.tisn);
         |                             ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:166:65: warning: 'struct mlx5_vdpa_cq_buf' declared inside parameter list will not be visible outside of this definition or declaration
     166 | static int cq_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf, int nent)
         |                                                                 ^~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:166:37: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     166 | static int cq_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf, int nent)
         |                                     ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'cq_frag_buf_alloc':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:168:39: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq_buf'
     168 |  struct mlx5_frag_buf *frag_buf = &buf->frag_buf;
         |                                       ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:173:37: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     173 |  err = mlx5_frag_buf_alloc_node(ndev->mvdev.mdev, nent * MLX5_VDPA_CQE_SIZE, frag_buf,
         |                                     ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:186:67: warning: 'struct mlx5_vdpa_umem' declared inside parameter list will not be visible outside of this definition or declaration
     186 | static int umem_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem, int size)
         |                                                                   ^~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:186:39: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     186 | static int umem_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem, int size)
         |                                       ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'umem_frag_buf_alloc':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:188:40: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_umem'
     188 |  struct mlx5_frag_buf *frag_buf = &umem->frag_buf;
         |                                        ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:190:38: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     190 |  return mlx5_frag_buf_alloc_node(ndev->mvdev.mdev, size, frag_buf,
         |                                      ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:194:65: warning: 'struct mlx5_vdpa_cq_buf' declared inside parameter list will not be visible outside of this definition or declaration
     194 | static void cq_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf)
         |                                                                 ^~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:194:37: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     194 | static void cq_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf)
         |                                     ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'cq_frag_buf_free':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:196:25: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     196 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &buf->frag_buf);
         |                         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:196:43: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq_buf'
     196 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &buf->frag_buf);
         |                                           ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:199:29: warning: 'struct mlx5_vdpa_cq' declared inside parameter list will not be visible outside of this definition or declaration
     199 | static void *get_cqe(struct mlx5_vdpa_cq *vcq, int n)
         |                             ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'get_cqe':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:201:35: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq'
     201 |  return mlx5_frag_buf_get_wqe(&vcq->buf.fbc, n);
         |                                   ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:204:63: warning: 'struct mlx5_vdpa_cq_buf' declared inside parameter list will not be visible outside of this definition or declaration
     204 | static void cq_frag_buf_init(struct mlx5_vdpa_cq *vcq, struct mlx5_vdpa_cq_buf *buf)
         |                                                               ^~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:204:37: warning: 'struct mlx5_vdpa_cq' declared inside parameter list will not be visible outside of this definition or declaration
     204 | static void cq_frag_buf_init(struct mlx5_vdpa_cq *vcq, struct mlx5_vdpa_cq_buf *buf)
         |                                     ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'cq_frag_buf_init':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:210:21: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq_buf'
     210 |  for (i = 0; i < buf->nent; i++) {
         |                     ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:211:17: error: passing argument 1 of 'get_cqe' from incompatible pointer type [-Werror=incompatible-pointer-types]
     211 |   cqe = get_cqe(vcq, i);
         |                 ^~~
         |                 |
         |                 struct mlx5_vdpa_cq *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:199:43: note: expected 'struct mlx5_vdpa_cq *' but argument is of type 'struct mlx5_vdpa_cq *'
     199 | static void *get_cqe(struct mlx5_vdpa_cq *vcq, int n)
         |                      ~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:217:32: warning: 'struct mlx5_vdpa_cq' declared inside parameter list will not be visible outside of this definition or declaration
     217 | static void *get_sw_cqe(struct mlx5_vdpa_cq *cq, int n)
         |                                ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'get_sw_cqe':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:219:48: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq'
     219 |  struct mlx5_cqe64 *cqe64 = get_cqe(cq, n & (cq->cqe - 1));
         |                                                ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:219:37: error: passing argument 1 of 'get_cqe' from incompatible pointer type [-Werror=incompatible-pointer-types]
     219 |  struct mlx5_cqe64 *cqe64 = get_cqe(cq, n & (cq->cqe - 1));
         |                                     ^~
         |                                     |
         |                                     struct mlx5_vdpa_cq *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:199:43: note: expected 'struct mlx5_vdpa_cq *' but argument is of type 'struct mlx5_vdpa_cq *'
     199 | static void *get_cqe(struct mlx5_vdpa_cq *vcq, int n)
         |                      ~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:228:28: warning: 'struct mlx5_vdpa_qp' declared inside parameter list will not be visible outside of this definition or declaration
     228 | static void rx_post(struct mlx5_vdpa_qp *vqp, int n)
         |                            ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'rx_post':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:230:5: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_qp'
     230 |  vqp->head += n;
         |     ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:235:17: warning: 'struct mlx5_vdpa_virtqueue' declared inside parameter list will not be visible outside of this definition or declaration
     235 |          struct mlx5_vdpa_virtqueue *mvq, u32 num_ent)
         |                 ^~~~~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:234:31: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     234 | static void qp_prepare(struct mlx5_vdpa_net *ndev, bool fw, void *in,
         |                               ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'qp_prepare':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:241:17: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     241 |  vqp = fw ? &mvq->fwqp : &mvq->vqqp;
         |                 ^~
   In file included from include/linux/mlx5/driver.h:53,
                    from include/linux/mlx5/cq.h:36,
                    from drivers/vdpa/mlx5/net/mlx5_vnet.c:11:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:242:38: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     242 |  MLX5_SET(create_qp_in, in, uid, ndev->mvdev.res.uid);
         |                                      ^~
   include/linux/mlx5/device.h:74:11: note: in definition of macro 'MLX5_SET'
      74 |  u32 _v = v; \
         |           ^
   drivers/vdpa/mlx5/net/mlx5_vnet.c:244:9: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_qp'
     244 |  if (vqp->fw) {
         |         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:268:60: warning: 'struct mlx5_vdpa_qp' declared inside parameter list will not be visible outside of this definition or declaration
     268 | static int rq_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp, u32 num_ent)
         |                                                            ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:268:32: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     268 | static int rq_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp, u32 num_ent)
         |                                ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'rq_buf_alloc':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:270:38: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     270 |  return mlx5_frag_buf_alloc_node(ndev->mvdev.mdev,
         |                                      ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:271:54: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_qp'
     271 |      num_ent * sizeof(struct mlx5_wqe_data_seg), &vqp->frag_buf,
         |                                                      ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:275:60: warning: 'struct mlx5_vdpa_qp' declared inside parameter list will not be visible outside of this definition or declaration
     275 | static void rq_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp)
         |                                                            ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:275:32: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     275 | static void rq_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp)
         |                                ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'rq_buf_free':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:277:25: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     277 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &vqp->frag_buf);
         |                         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:277:43: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_qp'
     277 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &vqp->frag_buf);
         |                                           ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:281:15: warning: 'struct mlx5_vdpa_qp' declared inside parameter list will not be visible outside of this definition or declaration
     281 |        struct mlx5_vdpa_qp *vqp)
         |               ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:280:57: warning: 'struct mlx5_vdpa_virtqueue' declared inside parameter list will not be visible outside of this definition or declaration
     280 | static int qp_create(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq,
         |                                                         ^~~~~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:280:29: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     280 | static int qp_create(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq,
         |                             ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'qp_create':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:283:35: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     283 |  struct mlx5_core_dev *mdev = ndev->mvdev.mdev;
         |                                   ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:290:10: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_qp'
     290 |  if (!vqp->fw) {
         |          ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:291:13: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     291 |   vqp = &mvq->vqqp;
         |             ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:292:22: error: passing argument 1 of 'rq_buf_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
     292 |   err = rq_buf_alloc(ndev, vqp, mvq->num_ent);
         |                      ^~~~
         |                      |
         |                      struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:268:47: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     268 | static int rq_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp, u32 num_ent)
         |                         ~~~~~~~~~~~~~~~~~~~~~~^~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:292:28: error: passing argument 2 of 'rq_buf_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
     292 |   err = rq_buf_alloc(ndev, vqp, mvq->num_ent);
         |                            ^~~
         |                            |
         |                            struct mlx5_vdpa_qp *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:268:74: note: expected 'struct mlx5_vdpa_qp *' but argument is of type 'struct mlx5_vdpa_qp *'
     268 | static int rq_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_qp *vqp, u32 num_ent)
         |                                                     ~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:308:13: error: passing argument 1 of 'qp_prepare' from incompatible pointer type [-Werror=incompatible-pointer-types]
     308 |  qp_prepare(ndev, vqp->fw, in, mvq, mvq->num_ent);
         |             ^~~~
         |             |
         |             struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:234:46: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     234 | static void qp_prepare(struct mlx5_vdpa_net *ndev, bool fw, void *in,
         |                        ~~~~~~~~~~~~~~~~~~~~~~^~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:308:32: error: passing argument 4 of 'qp_prepare' from incompatible pointer type [-Werror=incompatible-pointer-types]
     308 |  qp_prepare(ndev, vqp->fw, in, mvq, mvq->num_ent);
         |                                ^~~
         |                                |
         |                                struct mlx5_vdpa_virtqueue *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:235:38: note: expected 'struct mlx5_vdpa_virtqueue *' but argument is of type 'struct mlx5_vdpa_virtqueue *'
     235 |          struct mlx5_vdpa_virtqueue *mvq, u32 num_ent)
--
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:372:49: warning: 'struct mlx5_vdpa_virtqueue' declared inside parameter list will not be visible outside of this definition or declaration
     372 | static void mlx5_vdpa_handle_completions(struct mlx5_vdpa_virtqueue *mvq, int num)
         |                                                 ^~~~~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'mlx5_vdpa_handle_completions':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:374:21: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     374 |  mlx5_cq_set_ci(&mvq->cq.mcq);
         |                     ^~
   In file included from <command-line>:
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'mlx5_vdpa_cq_comp':
   include/linux/kernel.h:853:51: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     853 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
         |                                                   ^~
   include/linux/compiler_types.h:299:9: note: in definition of macro '__compiletime_assert'
     299 |   if (!(condition))     \
         |         ^~~~~~~~~
   include/linux/compiler_types.h:319:2: note: in expansion of macro '_compiletime_assert'
     319 |  _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         |  ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
      39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
         |                                     ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:853:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     853 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
         |  ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:853:20: note: in expansion of macro '__same_type'
     853 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
         |                    ^~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:382:36: note: in expansion of macro 'container_of'
     382 |  struct mlx5_vdpa_virtqueue *mvq = container_of(mcq, struct mlx5_vdpa_virtqueue, cq.mcq);
         |                                    ^~~~~~~~~~~~
   include/linux/compiler_types.h:135:35: error: invalid use of undefined type 'struct mlx5_vdpa_virtqueue'
     135 | #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
         |                                   ^~~~~~~~~~~~~~~~~~
   include/linux/stddef.h:17:32: note: in expansion of macro '__compiler_offsetof'
      17 | #define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
         |                                ^~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:856:21: note: in expansion of macro 'offsetof'
     856 |  ((type *)(__mptr - offsetof(type, member))); })
         |                     ^~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:382:36: note: in expansion of macro 'container_of'
     382 |  struct mlx5_vdpa_virtqueue *mvq = container_of(mcq, struct mlx5_vdpa_virtqueue, cq.mcq);
         |                                    ^~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:384:31: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     384 |  void __iomem *uar_page = ndev->mvdev.res.uar->map;
         |                               ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:396:33: error: passing argument 1 of 'mlx5_vdpa_handle_completions' from incompatible pointer type [-Werror=incompatible-pointer-types]
     396 |    mlx5_vdpa_handle_completions(mvq, num);
         |                                 ^~~
         |                                 |
         |                                 struct mlx5_vdpa_virtqueue *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:372:70: note: expected 'struct mlx5_vdpa_virtqueue *' but argument is of type 'struct mlx5_vdpa_virtqueue *'
     372 | static void mlx5_vdpa_handle_completions(struct mlx5_vdpa_virtqueue *mvq, int num)
         |                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:402:32: error: passing argument 1 of 'mlx5_vdpa_handle_completions' from incompatible pointer type [-Werror=incompatible-pointer-types]
     402 |   mlx5_vdpa_handle_completions(mvq, num);
         |                                ^~~
         |                                |
         |                                struct mlx5_vdpa_virtqueue *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:372:70: note: expected 'struct mlx5_vdpa_virtqueue *' but argument is of type 'struct mlx5_vdpa_virtqueue *'
     372 | static void mlx5_vdpa_handle_completions(struct mlx5_vdpa_virtqueue *mvq, int num)
         |                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:407:29: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     407 | static int cq_create(struct mlx5_vdpa_net *ndev, u16 idx, u32 num_ent)
         |                             ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'cq_create':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:409:41: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     409 |  struct mlx5_vdpa_virtqueue *mvq = &ndev->vqs[idx];
         |                                         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:413:33: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     413 |  struct mlx5_vdpa_cq *vcq = &mvq->cq;
         |                                 ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:422:32: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq'
     422 |  err = mlx5_db_alloc(mdev, &vcq->db);
         |                                ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:430:26: error: passing argument 1 of 'cq_frag_buf_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
     430 |  err = cq_frag_buf_alloc(ndev, &vcq->buf, num_ent);
         |                          ^~~~
         |                          |
         |                          struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:166:52: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     166 | static int cq_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf, int nent)
         |                              ~~~~~~~~~~~~~~~~~~~~~~^~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:434:19: error: passing argument 1 of 'cq_frag_buf_init' from incompatible pointer type [-Werror=incompatible-pointer-types]
     434 |  cq_frag_buf_init(vcq, &vcq->buf);
         |                   ^~~
         |                   |
         |                   struct mlx5_vdpa_cq *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:204:51: note: expected 'struct mlx5_vdpa_cq *' but argument is of type 'struct mlx5_vdpa_cq *'
     204 | static void cq_frag_buf_init(struct mlx5_vdpa_cq *vcq, struct mlx5_vdpa_cq_buf *buf)
         |                              ~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:479:19: error: passing argument 1 of 'cq_frag_buf_free' from incompatible pointer type [-Werror=incompatible-pointer-types]
     479 |  cq_frag_buf_free(ndev, &vcq->buf);
         |                   ^~~~
         |                   |
         |                   struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:194:52: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     194 | static void cq_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf)
         |                              ~~~~~~~~~~~~~~~~~~~~~~^~~~
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:407:54: warning: parameter 'idx' set but not used [-Wunused-but-set-parameter]
     407 | static int cq_create(struct mlx5_vdpa_net *ndev, u16 idx, u32 num_ent)
         |                                                  ~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:485:31: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     485 | static void cq_destroy(struct mlx5_vdpa_net *ndev, u16 idx)
         |                               ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'cq_destroy':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:487:41: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     487 |  struct mlx5_vdpa_virtqueue *mvq = &ndev->vqs[idx];
         |                                         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:489:33: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     489 |  struct mlx5_vdpa_cq *vcq = &mvq->cq;
         |                                 ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:491:37: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_cq'
     491 |  if (mlx5_core_destroy_cq(mdev, &vcq->mcq)) {
         |                                     ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:495:19: error: passing argument 1 of 'cq_frag_buf_free' from incompatible pointer type [-Werror=incompatible-pointer-types]
     495 |  cq_frag_buf_free(ndev, &vcq->buf);
         |                   ^~~~
         |                   |
         |                   struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:194:52: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     194 | static void cq_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf)
         |                              ~~~~~~~~~~~~~~~~~~~~~~^~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:485:56: warning: parameter 'idx' set but not used [-Wunused-but-set-parameter]
     485 | static void cq_destroy(struct mlx5_vdpa_net *ndev, u16 idx)
         |                                                    ~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:500:15: warning: 'struct mlx5_vdpa_umem' declared inside parameter list will not be visible outside of this definition or declaration
     500 |        struct mlx5_vdpa_umem **umemp)
         |               ^~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:499:57: warning: 'struct mlx5_vdpa_virtqueue' declared inside parameter list will not be visible outside of this definition or declaration
     499 | static int umem_size(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num,
         |                                                         ^~~~~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:499:29: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     499 | static int umem_size(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num,
         |                             ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'umem_size':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:502:35: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     502 |  struct mlx5_core_dev *mdev = ndev->mvdev.mdev;
         |                                   ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:510:16: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_virtqueue'
     510 |   *umemp = &mvq->umem1;
         |                ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:526:67: warning: 'struct mlx5_vdpa_umem' declared inside parameter list will not be visible outside of this definition or declaration
     526 | static void umem_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem)
         |                                                                   ^~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:526:39: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     526 | static void umem_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem)
         |                                       ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'umem_frag_buf_free':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:528:25: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_net'
     528 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &umem->frag_buf);
         |                         ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:528:44: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_umem'
     528 |  mlx5_frag_buf_free(ndev->mvdev.mdev, &umem->frag_buf);
         |                                            ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: At top level:
   drivers/vdpa/mlx5/net/mlx5_vnet.c:531:59: warning: 'struct mlx5_vdpa_virtqueue' declared inside parameter list will not be visible outside of this definition or declaration
     531 | static int create_umem(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num)
         |                                                           ^~~~~~~~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:531:31: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration
     531 | static int create_umem(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num)
         |                               ^~~~~~~~~~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c: In function 'create_umem':
   drivers/vdpa/mlx5/net/mlx5_vnet.c:542:19: error: passing argument 1 of 'umem_size' from incompatible pointer type [-Werror=incompatible-pointer-types]
     542 |  size = umem_size(ndev, mvq, num, &umem);
         |                   ^~~~
         |                   |
         |                   struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:499:44: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     499 | static int umem_size(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num,
         |                      ~~~~~~~~~~~~~~~~~~~~~~^~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:542:25: error: passing argument 2 of 'umem_size' from incompatible pointer type [-Werror=incompatible-pointer-types]
     542 |  size = umem_size(ndev, mvq, num, &umem);
         |                         ^~~
         |                         |
         |                         struct mlx5_vdpa_virtqueue *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:499:78: note: expected 'struct mlx5_vdpa_virtqueue *' but argument is of type 'struct mlx5_vdpa_virtqueue *'
     499 | static int umem_size(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq, int num,
         |                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:542:35: error: passing argument 4 of 'umem_size' from incompatible pointer type [-Werror=incompatible-pointer-types]
     542 |  size = umem_size(ndev, mvq, num, &umem);
         |                                   ^~~~~
         |                                   |
         |                                   struct mlx5_vdpa_umem **
   drivers/vdpa/mlx5/net/mlx5_vnet.c:500:32: note: expected 'struct mlx5_vdpa_umem **' but argument is of type 'struct mlx5_vdpa_umem **'
     500 |        struct mlx5_vdpa_umem **umemp)
         |        ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:546:6: error: dereferencing pointer to incomplete type 'struct mlx5_vdpa_umem'
     546 |  umem->size = size;
         |      ^~
   drivers/vdpa/mlx5/net/mlx5_vnet.c:547:28: error: passing argument 1 of 'umem_frag_buf_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
     547 |  err = umem_frag_buf_alloc(ndev, umem, size);
         |                            ^~~~
         |                            |
         |                            struct mlx5_vdpa_net *
   drivers/vdpa/mlx5/net/mlx5_vnet.c:186:54: note: expected 'struct mlx5_vdpa_net *' but argument is of type 'struct mlx5_vdpa_net *'
     186 | static int umem_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem, int size)
..

vim +46 drivers/vdpa/mlx5/net/mlx5_vnet.c

1a86b377aa2147a Eli Cohen         2020-08-04   26  
1a86b377aa2147a Eli Cohen         2020-08-04   27  #define VALID_FEATURES_MASK                                                                        \
cbb523594eb7189 Nathan Chancellor 2020-08-21   28  	(BIT_ULL(VIRTIO_NET_F_CSUM) | BIT_ULL(VIRTIO_NET_F_GUEST_CSUM) |                                   \
cbb523594eb7189 Nathan Chancellor 2020-08-21   29  	 BIT_ULL(VIRTIO_NET_F_CTRL_GUEST_OFFLOADS) | BIT_ULL(VIRTIO_NET_F_MTU) | BIT_ULL(VIRTIO_NET_F_MAC) |   \
cbb523594eb7189 Nathan Chancellor 2020-08-21   30  	 BIT_ULL(VIRTIO_NET_F_GUEST_TSO4) | BIT_ULL(VIRTIO_NET_F_GUEST_TSO6) |                             \
cbb523594eb7189 Nathan Chancellor 2020-08-21   31  	 BIT_ULL(VIRTIO_NET_F_GUEST_ECN) | BIT_ULL(VIRTIO_NET_F_GUEST_UFO) | BIT_ULL(VIRTIO_NET_F_HOST_TSO4) | \
cbb523594eb7189 Nathan Chancellor 2020-08-21   32  	 BIT_ULL(VIRTIO_NET_F_HOST_TSO6) | BIT_ULL(VIRTIO_NET_F_HOST_ECN) | BIT_ULL(VIRTIO_NET_F_HOST_UFO) |   \
cbb523594eb7189 Nathan Chancellor 2020-08-21   33  	 BIT_ULL(VIRTIO_NET_F_MRG_RXBUF) | BIT_ULL(VIRTIO_NET_F_STATUS) | BIT_ULL(VIRTIO_NET_F_CTRL_VQ) |      \
cbb523594eb7189 Nathan Chancellor 2020-08-21   34  	 BIT_ULL(VIRTIO_NET_F_CTRL_RX) | BIT_ULL(VIRTIO_NET_F_CTRL_VLAN) |                                 \
cbb523594eb7189 Nathan Chancellor 2020-08-21   35  	 BIT_ULL(VIRTIO_NET_F_CTRL_RX_EXTRA) | BIT_ULL(VIRTIO_NET_F_GUEST_ANNOUNCE) |                      \
cbb523594eb7189 Nathan Chancellor 2020-08-21   36  	 BIT_ULL(VIRTIO_NET_F_MQ) | BIT_ULL(VIRTIO_NET_F_CTRL_MAC_ADDR) | BIT_ULL(VIRTIO_NET_F_HASH_REPORT) |  \
cbb523594eb7189 Nathan Chancellor 2020-08-21   37  	 BIT_ULL(VIRTIO_NET_F_RSS) | BIT_ULL(VIRTIO_NET_F_RSC_EXT) | BIT_ULL(VIRTIO_NET_F_STANDBY) |           \
cbb523594eb7189 Nathan Chancellor 2020-08-21   38  	 BIT_ULL(VIRTIO_NET_F_SPEED_DUPLEX) | BIT_ULL(VIRTIO_F_NOTIFY_ON_EMPTY) |                          \
cbb523594eb7189 Nathan Chancellor 2020-08-21   39  	 BIT_ULL(VIRTIO_F_ANY_LAYOUT) | BIT_ULL(VIRTIO_F_VERSION_1) | BIT_ULL(VIRTIO_F_ACCESS_PLATFORM) |      \
cbb523594eb7189 Nathan Chancellor 2020-08-21   40  	 BIT_ULL(VIRTIO_F_RING_PACKED) | BIT_ULL(VIRTIO_F_ORDER_PLATFORM) | BIT_ULL(VIRTIO_F_SR_IOV))
1a86b377aa2147a Eli Cohen         2020-08-04   41  
1a86b377aa2147a Eli Cohen         2020-08-04   42  #define VALID_STATUS_MASK                                                                          \
1a86b377aa2147a Eli Cohen         2020-08-04   43  	(VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK |        \
1a86b377aa2147a Eli Cohen         2020-08-04   44  	 VIRTIO_CONFIG_S_FEATURES_OK | VIRTIO_CONFIG_S_NEEDS_RESET | VIRTIO_CONFIG_S_FAILED)
1a86b377aa2147a Eli Cohen         2020-08-04   45  
1a86b377aa2147a Eli Cohen         2020-08-04  @46  static void free_resources(struct mlx5_vdpa_net *ndev);
1a86b377aa2147a Eli Cohen         2020-08-04  @47  static void init_mvqs(struct mlx5_vdpa_net *ndev);
1a86b377aa2147a Eli Cohen         2020-08-04  @48  static int setup_driver(struct mlx5_vdpa_net *ndev);
1a86b377aa2147a Eli Cohen         2020-08-04  @49  static void teardown_driver(struct mlx5_vdpa_net *ndev);
1a86b377aa2147a Eli Cohen         2020-08-04   50  
1a86b377aa2147a Eli Cohen         2020-08-04   51  static bool mlx5_vdpa_debug;
1a86b377aa2147a Eli Cohen         2020-08-04   52  
1a86b377aa2147a Eli Cohen         2020-08-04   53  #define MLX5_LOG_VIO_FLAG(_feature)                                                                \
1a86b377aa2147a Eli Cohen         2020-08-04   54  	do {                                                                                       \
cbb523594eb7189 Nathan Chancellor 2020-08-21   55  		if (features & BIT_ULL(_feature))                                                  \
1a86b377aa2147a Eli Cohen         2020-08-04   56  			mlx5_vdpa_info(mvdev, "%s\n", #_feature);                                  \
1a86b377aa2147a Eli Cohen         2020-08-04   57  	} while (0)
1a86b377aa2147a Eli Cohen         2020-08-04   58  
1a86b377aa2147a Eli Cohen         2020-08-04   59  #define MLX5_LOG_VIO_STAT(_status)                                                                 \
1a86b377aa2147a Eli Cohen         2020-08-04   60  	do {                                                                                       \
1a86b377aa2147a Eli Cohen         2020-08-04   61  		if (status & (_status))                                                            \
1a86b377aa2147a Eli Cohen         2020-08-04   62  			mlx5_vdpa_info(mvdev, "%s\n", #_status);                                   \
1a86b377aa2147a Eli Cohen         2020-08-04   63  	} while (0)
1a86b377aa2147a Eli Cohen         2020-08-04   64  
a98a6bc96f057a8 Leon Romanovsky   2020-10-04   65  static inline u32 mlx5_vdpa_max_qps(int max_vqs)
a98a6bc96f057a8 Leon Romanovsky   2020-10-04   66  {
a98a6bc96f057a8 Leon Romanovsky   2020-10-04   67  	return max_vqs / 2;
a98a6bc96f057a8 Leon Romanovsky   2020-10-04   68  }
a98a6bc96f057a8 Leon Romanovsky   2020-10-04   69  
1a86b377aa2147a Eli Cohen         2020-08-04   70  static void print_status(struct mlx5_vdpa_dev *mvdev, u8 status, bool set)
1a86b377aa2147a Eli Cohen         2020-08-04   71  {
1a86b377aa2147a Eli Cohen         2020-08-04   72  	if (status & ~VALID_STATUS_MASK)
1a86b377aa2147a Eli Cohen         2020-08-04   73  		mlx5_vdpa_warn(mvdev, "Warning: there are invalid status bits 0x%x\n",
1a86b377aa2147a Eli Cohen         2020-08-04   74  			       status & ~VALID_STATUS_MASK);
1a86b377aa2147a Eli Cohen         2020-08-04   75  
1a86b377aa2147a Eli Cohen         2020-08-04   76  	if (!mlx5_vdpa_debug)
1a86b377aa2147a Eli Cohen         2020-08-04   77  		return;
1a86b377aa2147a Eli Cohen         2020-08-04   78  
1a86b377aa2147a Eli Cohen         2020-08-04   79  	mlx5_vdpa_info(mvdev, "driver status %s", set ? "set" : "get");
1a86b377aa2147a Eli Cohen         2020-08-04   80  	if (set && !status) {
1a86b377aa2147a Eli Cohen         2020-08-04   81  		mlx5_vdpa_info(mvdev, "driver resets the device\n");
1a86b377aa2147a Eli Cohen         2020-08-04   82  		return;
1a86b377aa2147a Eli Cohen         2020-08-04   83  	}
1a86b377aa2147a Eli Cohen         2020-08-04   84  
1a86b377aa2147a Eli Cohen         2020-08-04   85  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_ACKNOWLEDGE);
1a86b377aa2147a Eli Cohen         2020-08-04   86  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_DRIVER);
1a86b377aa2147a Eli Cohen         2020-08-04   87  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_DRIVER_OK);
1a86b377aa2147a Eli Cohen         2020-08-04   88  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_FEATURES_OK);
1a86b377aa2147a Eli Cohen         2020-08-04   89  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_NEEDS_RESET);
1a86b377aa2147a Eli Cohen         2020-08-04   90  	MLX5_LOG_VIO_STAT(VIRTIO_CONFIG_S_FAILED);
1a86b377aa2147a Eli Cohen         2020-08-04   91  }
1a86b377aa2147a Eli Cohen         2020-08-04   92  
1a86b377aa2147a Eli Cohen         2020-08-04   93  static void print_features(struct mlx5_vdpa_dev *mvdev, u64 features, bool set)
1a86b377aa2147a Eli Cohen         2020-08-04   94  {
1a86b377aa2147a Eli Cohen         2020-08-04   95  	if (features & ~VALID_FEATURES_MASK)
1a86b377aa2147a Eli Cohen         2020-08-04   96  		mlx5_vdpa_warn(mvdev, "There are invalid feature bits 0x%llx\n",
1a86b377aa2147a Eli Cohen         2020-08-04   97  			       features & ~VALID_FEATURES_MASK);
1a86b377aa2147a Eli Cohen         2020-08-04   98  
1a86b377aa2147a Eli Cohen         2020-08-04   99  	if (!mlx5_vdpa_debug)
1a86b377aa2147a Eli Cohen         2020-08-04  100  		return;
1a86b377aa2147a Eli Cohen         2020-08-04  101  
1a86b377aa2147a Eli Cohen         2020-08-04  102  	mlx5_vdpa_info(mvdev, "driver %s feature bits:\n", set ? "sets" : "reads");
1a86b377aa2147a Eli Cohen         2020-08-04  103  	if (!features)
1a86b377aa2147a Eli Cohen         2020-08-04  104  		mlx5_vdpa_info(mvdev, "all feature bits are cleared\n");
1a86b377aa2147a Eli Cohen         2020-08-04  105  
1a86b377aa2147a Eli Cohen         2020-08-04  106  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CSUM);
1a86b377aa2147a Eli Cohen         2020-08-04  107  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_CSUM);
1a86b377aa2147a Eli Cohen         2020-08-04  108  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_GUEST_OFFLOADS);
1a86b377aa2147a Eli Cohen         2020-08-04  109  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_MTU);
1a86b377aa2147a Eli Cohen         2020-08-04  110  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_MAC);
1a86b377aa2147a Eli Cohen         2020-08-04  111  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_TSO4);
1a86b377aa2147a Eli Cohen         2020-08-04  112  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_TSO6);
1a86b377aa2147a Eli Cohen         2020-08-04  113  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_ECN);
1a86b377aa2147a Eli Cohen         2020-08-04  114  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_UFO);
1a86b377aa2147a Eli Cohen         2020-08-04  115  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_HOST_TSO4);
1a86b377aa2147a Eli Cohen         2020-08-04  116  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_HOST_TSO6);
1a86b377aa2147a Eli Cohen         2020-08-04  117  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_HOST_ECN);
1a86b377aa2147a Eli Cohen         2020-08-04  118  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_HOST_UFO);
1a86b377aa2147a Eli Cohen         2020-08-04  119  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_MRG_RXBUF);
1a86b377aa2147a Eli Cohen         2020-08-04  120  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_STATUS);
1a86b377aa2147a Eli Cohen         2020-08-04  121  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_VQ);
1a86b377aa2147a Eli Cohen         2020-08-04  122  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_RX);
1a86b377aa2147a Eli Cohen         2020-08-04  123  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_VLAN);
1a86b377aa2147a Eli Cohen         2020-08-04  124  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_RX_EXTRA);
1a86b377aa2147a Eli Cohen         2020-08-04  125  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_GUEST_ANNOUNCE);
1a86b377aa2147a Eli Cohen         2020-08-04  126  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_MQ);
1a86b377aa2147a Eli Cohen         2020-08-04  127  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_CTRL_MAC_ADDR);
1a86b377aa2147a Eli Cohen         2020-08-04  128  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_HASH_REPORT);
1a86b377aa2147a Eli Cohen         2020-08-04  129  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_RSS);
1a86b377aa2147a Eli Cohen         2020-08-04  130  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_RSC_EXT);
1a86b377aa2147a Eli Cohen         2020-08-04  131  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_STANDBY);
1a86b377aa2147a Eli Cohen         2020-08-04  132  	MLX5_LOG_VIO_FLAG(VIRTIO_NET_F_SPEED_DUPLEX);
1a86b377aa2147a Eli Cohen         2020-08-04  133  	MLX5_LOG_VIO_FLAG(VIRTIO_F_NOTIFY_ON_EMPTY);
1a86b377aa2147a Eli Cohen         2020-08-04  134  	MLX5_LOG_VIO_FLAG(VIRTIO_F_ANY_LAYOUT);
1a86b377aa2147a Eli Cohen         2020-08-04  135  	MLX5_LOG_VIO_FLAG(VIRTIO_F_VERSION_1);
1a86b377aa2147a Eli Cohen         2020-08-04  136  	MLX5_LOG_VIO_FLAG(VIRTIO_F_ACCESS_PLATFORM);
1a86b377aa2147a Eli Cohen         2020-08-04  137  	MLX5_LOG_VIO_FLAG(VIRTIO_F_RING_PACKED);
1a86b377aa2147a Eli Cohen         2020-08-04  138  	MLX5_LOG_VIO_FLAG(VIRTIO_F_ORDER_PLATFORM);
1a86b377aa2147a Eli Cohen         2020-08-04  139  	MLX5_LOG_VIO_FLAG(VIRTIO_F_SR_IOV);
1a86b377aa2147a Eli Cohen         2020-08-04  140  }
1a86b377aa2147a Eli Cohen         2020-08-04  141  
1a86b377aa2147a Eli Cohen         2020-08-04  142  static int create_tis(struct mlx5_vdpa_net *ndev)
1a86b377aa2147a Eli Cohen         2020-08-04  143  {
1a86b377aa2147a Eli Cohen         2020-08-04  144  	struct mlx5_vdpa_dev *mvdev = &ndev->mvdev;
1a86b377aa2147a Eli Cohen         2020-08-04  145  	u32 in[MLX5_ST_SZ_DW(create_tis_in)] = {};
1a86b377aa2147a Eli Cohen         2020-08-04  146  	void *tisc;
1a86b377aa2147a Eli Cohen         2020-08-04  147  	int err;
1a86b377aa2147a Eli Cohen         2020-08-04  148  
1a86b377aa2147a Eli Cohen         2020-08-04  149  	tisc = MLX5_ADDR_OF(create_tis_in, in, ctx);
1a86b377aa2147a Eli Cohen         2020-08-04  150  	MLX5_SET(tisc, tisc, transport_domain, ndev->res.tdn);
1a86b377aa2147a Eli Cohen         2020-08-04  151  	err = mlx5_vdpa_create_tis(mvdev, in, &ndev->res.tisn);
1a86b377aa2147a Eli Cohen         2020-08-04  152  	if (err)
1a86b377aa2147a Eli Cohen         2020-08-04  153  		mlx5_vdpa_warn(mvdev, "create TIS (%d)\n", err);
1a86b377aa2147a Eli Cohen         2020-08-04  154  
1a86b377aa2147a Eli Cohen         2020-08-04  155  	return err;
1a86b377aa2147a Eli Cohen         2020-08-04  156  }
1a86b377aa2147a Eli Cohen         2020-08-04  157  
1a86b377aa2147a Eli Cohen         2020-08-04  158  static void destroy_tis(struct mlx5_vdpa_net *ndev)
1a86b377aa2147a Eli Cohen         2020-08-04  159  {
1a86b377aa2147a Eli Cohen         2020-08-04  160  	mlx5_vdpa_destroy_tis(&ndev->mvdev, ndev->res.tisn);
1a86b377aa2147a Eli Cohen         2020-08-04  161  }
1a86b377aa2147a Eli Cohen         2020-08-04  162  
1a86b377aa2147a Eli Cohen         2020-08-04  163  #define MLX5_VDPA_CQE_SIZE 64
1a86b377aa2147a Eli Cohen         2020-08-04  164  #define MLX5_VDPA_LOG_CQE_SIZE ilog2(MLX5_VDPA_CQE_SIZE)
1a86b377aa2147a Eli Cohen         2020-08-04  165  
1a86b377aa2147a Eli Cohen         2020-08-04 @166  static int cq_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf, int nent)
1a86b377aa2147a Eli Cohen         2020-08-04  167  {
1a86b377aa2147a Eli Cohen         2020-08-04  168  	struct mlx5_frag_buf *frag_buf = &buf->frag_buf;
1a86b377aa2147a Eli Cohen         2020-08-04  169  	u8 log_wq_stride = MLX5_VDPA_LOG_CQE_SIZE;
1a86b377aa2147a Eli Cohen         2020-08-04  170  	u8 log_wq_sz = MLX5_VDPA_LOG_CQE_SIZE;
1a86b377aa2147a Eli Cohen         2020-08-04  171  	int err;
1a86b377aa2147a Eli Cohen         2020-08-04  172  
1a86b377aa2147a Eli Cohen         2020-08-04  173  	err = mlx5_frag_buf_alloc_node(ndev->mvdev.mdev, nent * MLX5_VDPA_CQE_SIZE, frag_buf,
1a86b377aa2147a Eli Cohen         2020-08-04  174  				       ndev->mvdev.mdev->priv.numa_node);
1a86b377aa2147a Eli Cohen         2020-08-04  175  	if (err)
1a86b377aa2147a Eli Cohen         2020-08-04  176  		return err;
1a86b377aa2147a Eli Cohen         2020-08-04  177  
1a86b377aa2147a Eli Cohen         2020-08-04  178  	mlx5_init_fbc(frag_buf->frags, log_wq_stride, log_wq_sz, &buf->fbc);
1a86b377aa2147a Eli Cohen         2020-08-04  179  
1a86b377aa2147a Eli Cohen         2020-08-04  180  	buf->cqe_size = MLX5_VDPA_CQE_SIZE;
1a86b377aa2147a Eli Cohen         2020-08-04  181  	buf->nent = nent;
1a86b377aa2147a Eli Cohen         2020-08-04  182  
1a86b377aa2147a Eli Cohen         2020-08-04  183  	return 0;
1a86b377aa2147a Eli Cohen         2020-08-04  184  }
1a86b377aa2147a Eli Cohen         2020-08-04  185  
1a86b377aa2147a Eli Cohen         2020-08-04 @186  static int umem_frag_buf_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_umem *umem, int size)
1a86b377aa2147a Eli Cohen         2020-08-04  187  {
1a86b377aa2147a Eli Cohen         2020-08-04  188  	struct mlx5_frag_buf *frag_buf = &umem->frag_buf;
1a86b377aa2147a Eli Cohen         2020-08-04  189  
1a86b377aa2147a Eli Cohen         2020-08-04  190  	return mlx5_frag_buf_alloc_node(ndev->mvdev.mdev, size, frag_buf,
1a86b377aa2147a Eli Cohen         2020-08-04  191  					ndev->mvdev.mdev->priv.numa_node);
1a86b377aa2147a Eli Cohen         2020-08-04  192  }
1a86b377aa2147a Eli Cohen         2020-08-04  193  
1a86b377aa2147a Eli Cohen         2020-08-04  194  static void cq_frag_buf_free(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_cq_buf *buf)
1a86b377aa2147a Eli Cohen         2020-08-04  195  {
1a86b377aa2147a Eli Cohen         2020-08-04  196  	mlx5_frag_buf_free(ndev->mvdev.mdev, &buf->frag_buf);
1a86b377aa2147a Eli Cohen         2020-08-04  197  }
1a86b377aa2147a Eli Cohen         2020-08-04  198  
1a86b377aa2147a Eli Cohen         2020-08-04 @199  static void *get_cqe(struct mlx5_vdpa_cq *vcq, int n)
1a86b377aa2147a Eli Cohen         2020-08-04  200  {
1a86b377aa2147a Eli Cohen         2020-08-04  201  	return mlx5_frag_buf_get_wqe(&vcq->buf.fbc, n);
1a86b377aa2147a Eli Cohen         2020-08-04  202  }
1a86b377aa2147a Eli Cohen         2020-08-04  203  
1a86b377aa2147a Eli Cohen         2020-08-04  204  static void cq_frag_buf_init(struct mlx5_vdpa_cq *vcq, struct mlx5_vdpa_cq_buf *buf)
1a86b377aa2147a Eli Cohen         2020-08-04  205  {
1a86b377aa2147a Eli Cohen         2020-08-04  206  	struct mlx5_cqe64 *cqe64;
1a86b377aa2147a Eli Cohen         2020-08-04  207  	void *cqe;
1a86b377aa2147a Eli Cohen         2020-08-04  208  	int i;
1a86b377aa2147a Eli Cohen         2020-08-04  209  
1a86b377aa2147a Eli Cohen         2020-08-04  210  	for (i = 0; i < buf->nent; i++) {
1a86b377aa2147a Eli Cohen         2020-08-04  211  		cqe = get_cqe(vcq, i);
1a86b377aa2147a Eli Cohen         2020-08-04  212  		cqe64 = cqe;
1a86b377aa2147a Eli Cohen         2020-08-04  213  		cqe64->op_own = MLX5_CQE_INVALID << 4;
1a86b377aa2147a Eli Cohen         2020-08-04  214  	}
1a86b377aa2147a Eli Cohen         2020-08-04  215  }
1a86b377aa2147a Eli Cohen         2020-08-04  216  
1a86b377aa2147a Eli Cohen         2020-08-04  217  static void *get_sw_cqe(struct mlx5_vdpa_cq *cq, int n)
1a86b377aa2147a Eli Cohen         2020-08-04  218  {
1a86b377aa2147a Eli Cohen         2020-08-04  219  	struct mlx5_cqe64 *cqe64 = get_cqe(cq, n & (cq->cqe - 1));
1a86b377aa2147a Eli Cohen         2020-08-04  220  
1a86b377aa2147a Eli Cohen         2020-08-04  221  	if (likely(get_cqe_opcode(cqe64) != MLX5_CQE_INVALID) &&
1a86b377aa2147a Eli Cohen         2020-08-04  222  	    !((cqe64->op_own & MLX5_CQE_OWNER_MASK) ^ !!(n & cq->cqe)))
1a86b377aa2147a Eli Cohen         2020-08-04  223  		return cqe64;
1a86b377aa2147a Eli Cohen         2020-08-04  224  
1a86b377aa2147a Eli Cohen         2020-08-04  225  	return NULL;
1a86b377aa2147a Eli Cohen         2020-08-04  226  }
1a86b377aa2147a Eli Cohen         2020-08-04  227  
1a86b377aa2147a Eli Cohen         2020-08-04 @228  static void rx_post(struct mlx5_vdpa_qp *vqp, int n)
1a86b377aa2147a Eli Cohen         2020-08-04  229  {
1a86b377aa2147a Eli Cohen         2020-08-04  230  	vqp->head += n;
1a86b377aa2147a Eli Cohen         2020-08-04  231  	vqp->db.db[0] = cpu_to_be32(vqp->head);
1a86b377aa2147a Eli Cohen         2020-08-04  232  }
1a86b377aa2147a Eli Cohen         2020-08-04  233  
1a86b377aa2147a Eli Cohen         2020-08-04  234  static void qp_prepare(struct mlx5_vdpa_net *ndev, bool fw, void *in,
1a86b377aa2147a Eli Cohen         2020-08-04 @235  		       struct mlx5_vdpa_virtqueue *mvq, u32 num_ent)
1a86b377aa2147a Eli Cohen         2020-08-04  236  {
1a86b377aa2147a Eli Cohen         2020-08-04  237  	struct mlx5_vdpa_qp *vqp;
1a86b377aa2147a Eli Cohen         2020-08-04  238  	__be64 *pas;
1a86b377aa2147a Eli Cohen         2020-08-04  239  	void *qpc;
1a86b377aa2147a Eli Cohen         2020-08-04  240  
1a86b377aa2147a Eli Cohen         2020-08-04  241  	vqp = fw ? &mvq->fwqp : &mvq->vqqp;
1a86b377aa2147a Eli Cohen         2020-08-04  242  	MLX5_SET(create_qp_in, in, uid, ndev->mvdev.res.uid);
1a86b377aa2147a Eli Cohen         2020-08-04  243  	qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
1a86b377aa2147a Eli Cohen         2020-08-04  244  	if (vqp->fw) {
1a86b377aa2147a Eli Cohen         2020-08-04  245  		/* Firmware QP is allocated by the driver for the firmware's
1a86b377aa2147a Eli Cohen         2020-08-04  246  		 * use so we can skip part of the params as they will be chosen by firmware
1a86b377aa2147a Eli Cohen         2020-08-04  247  		 */
1a86b377aa2147a Eli Cohen         2020-08-04  248  		qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
1a86b377aa2147a Eli Cohen         2020-08-04  249  		MLX5_SET(qpc, qpc, rq_type, MLX5_ZERO_LEN_RQ);
1a86b377aa2147a Eli Cohen         2020-08-04  250  		MLX5_SET(qpc, qpc, no_sq, 1);
1a86b377aa2147a Eli Cohen         2020-08-04  251  		return;
1a86b377aa2147a Eli Cohen         2020-08-04  252  	}
1a86b377aa2147a Eli Cohen         2020-08-04  253  
1a86b377aa2147a Eli Cohen         2020-08-04  254  	MLX5_SET(qpc, qpc, st, MLX5_QP_ST_RC);
1a86b377aa2147a Eli Cohen         2020-08-04  255  	MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
1a86b377aa2147a Eli Cohen         2020-08-04  256  	MLX5_SET(qpc, qpc, pd, ndev->mvdev.res.pdn);
1a86b377aa2147a Eli Cohen         2020-08-04  257  	MLX5_SET(qpc, qpc, mtu, MLX5_QPC_MTU_256_BYTES);
1a86b377aa2147a Eli Cohen         2020-08-04  258  	MLX5_SET(qpc, qpc, uar_page, ndev->mvdev.res.uar->index);
1a86b377aa2147a Eli Cohen         2020-08-04  259  	MLX5_SET(qpc, qpc, log_page_size, vqp->frag_buf.page_shift - MLX5_ADAPTER_PAGE_SHIFT);
1a86b377aa2147a Eli Cohen         2020-08-04  260  	MLX5_SET(qpc, qpc, no_sq, 1);
1a86b377aa2147a Eli Cohen         2020-08-04  261  	MLX5_SET(qpc, qpc, cqn_rcv, mvq->cq.mcq.cqn);
1a86b377aa2147a Eli Cohen         2020-08-04  262  	MLX5_SET(qpc, qpc, log_rq_size, ilog2(num_ent));
1a86b377aa2147a Eli Cohen         2020-08-04  263  	MLX5_SET(qpc, qpc, rq_type, MLX5_NON_ZERO_RQ);
1a86b377aa2147a Eli Cohen         2020-08-04  264  	pas = (__be64 *)MLX5_ADDR_OF(create_qp_in, in, pas);
1a86b377aa2147a Eli Cohen         2020-08-04  265  	mlx5_fill_page_frag_array(&vqp->frag_buf, pas);
1a86b377aa2147a Eli Cohen         2020-08-04  266  }
1a86b377aa2147a Eli Cohen         2020-08-04  267  

:::::: The code at line 46 was first introduced by commit
:::::: 1a86b377aa2147a7c866b03142e848c18e5f3cb8 vdpa/mlx5: Add VDPA driver for supported mlx5 devices

:::::: TO: Eli Cohen <eli@mellanox.com>
:::::: CC: Michael S. Tsirkin <mst@redhat.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 75925 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-10-25 13:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-25 13:10 [mellanox:queue-next 2/2] drivers/vdpa/mlx5/net/mlx5_vnet.c:46:35: warning: 'struct mlx5_vdpa_net' declared inside parameter list will not be visible outside of this definition or declaration kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.