1. 10 May, 2020 2 commits
    • Kevin Hao's avatar
      octeontx2-pf: Use the napi_alloc_frag() to alloc the pool buffers · 7a36e491
      Kevin Hao authored
      In the current codes, the octeontx2 uses its own method to allocate
      the pool buffers, but there are some issues in this implementation.
      1. We have to run the otx2_get_page() for each allocation cycle and
         this is pretty error prone. As I can see there is no invocation
         of the otx2_get_page() in otx2_pool_refill_task(), this will leave
         the allocated pages have the wrong refcount and may be freed wrongly.
      2. It wastes memory. For example, if we only receive one packet in a
         NAPI RX cycle, and then allocate a 2K buffer with otx2_alloc_rbuf()
         to refill the pool buffers and leave the remain area of the allocated
         page wasted. On a kernel with 64K page, 62K area is wasted.
      
      IMHO it is really unnecessary to implement our own method for the
      buffers allocate, we can reuse the napi_alloc_frag() to simplify
      our code.
      Signed-off-by: default avatarKevin Hao <haokexin@gmail.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      7a36e491
    • Gustavo A. R. Silva's avatar
      IB/mlx4: Replace zero-length array with flexible-array · e7bb7ece
      Gustavo A. R. Silva authored
      The current codebase makes use of the zero-length array language
      extension to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning
      in case the flexible array does not occur last in the structure, which
      will help us prevent some kind of undefined behavior bugs from being
      inadvertently introduced[3] to the codebase from now on.
      
      Also, notice that, dynamic memory allocations won't be affected by
      this change:
      
      "Flexible array members have incomplete type, and so the sizeof operator
      may not be applied. As a quirk of the original implementation of
      zero-length arrays, sizeof evaluates to zero."[1]
      
      sizeof(flexible-array-member) triggers a warning because flexible array
      members have incomplete type[1]. There are some instances of code in
      which the sizeof operator is being incorrectly/erroneously applied to
      zero-length arrays and the result is zero. Such instances may be hiding
      some bugs. So, this work (flexible-array member conversions) will also
      help to get completely rid of those sorts of issues.
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732 ("cxgb3/l2t: Fix undefined behaviour")
      Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e7bb7ece
  2. 09 May, 2020 38 commits