Jakub Kicinski c9448e828d mlx5-updates-2020-11-03
This series includes updates to mlx5 software steering component.
 
 1) Few improvements in the DR area, such as removing unneeded checks,
   renaming to better general names, refactor in some places, etc.
 
 2) Software steering (DR) Memory management improvements
 
 This patch series contains SW Steering memory management improvements:
 using buddy allocator instead of an existing bucket allocator, and
 several other optimizations.
 
 The buddy system is a memory allocation and management algorithm
 that manages memory in power of two increments.
 
 The algorithm is well-known and well-described, such as here:
 https://en.wikipedia.org/wiki/Buddy_memory_allocation
 
 Linux uses this algorithm for managing and allocating physical pages,
 as described here:
 https://www.kernel.org/doc/gorman/html/understand/understand009.html
 
 In our case, although the algorithm in principal is similar to the
 Linux physical page allocator, the "building blocks" and the circumstances
 are different: in SW steering, buddy allocator doesn't really allocates
 a memory, but rather manages ICM (Interconnect Context Memory) that was
 previously allocated and registered.
 
 The ICM memory that is used in SW steering is always power
 of 2 (order), so buddy system is a good fit for this.
 
 Patches in this series:
 
 [PATH 4] net/mlx5: DR, Add buddy allocator utilities
   This patch adds a modified implementation of a well-known buddy allocator,
   adjusted for SW steering needs: the algorithm in principal is similar to
   the Linux physical page allocator, but in our case buddy allocator doesn't
   really allocate a memory, but rather manages ICM memory that was previously
   allocated and registered.
 
 [PATH 5] net/mlx5: DR, Handle ICM memory via buddy allocation instead of bucket management
   This patch changes ICM management of SW steering to use buddy-system mechanism
   Instead of the previous bucket management.
 
 [PATH 6] net/mlx5: DR, Sync chunks only during free
   This patch makes syncing happen only when freeing memory chunks.
 
 [PATH 7] net/mlx5: DR, ICM memory pools sync optimization
   This patch adds tracking of pool's "hot" memory and makes the
   check whether steering sync is required much shorter and faster.
 
 [PATH 8] net/mlx5: DR, Free buddy ICM memory if it is unused
   This patch adds tracking buddy's used ICM memory,
   and frees the buddy if all its memory becomes unused.
 
 3) Misc code cleanups
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEGhZs6bAKwk/OTgTpSD+KveBX+j4FAl+kW/sACgkQSD+KveBX
 +j7pRwf+KH6vIkwKlt0I2cYUmUINAkz0o1E82wXGx5Q81iMJLeIeMPKiatai6/0r
 BIYD8t8oagOVw5OU+H9DbVIR47wz6pB90bkQIrIJk0S3ocVcDfLlN0ssbwCdEDlH
 jj56SB6jjVVj1LlTXSVfUrXEKJ2FBjTxPbNtVL/NLW0GQkoJM5RaYjK++ZB58o+O
 YI1Gb2w+FT5vVHdRVxs/2a/NTy71VQOrYctkhql4/8P0SsstPvhgOD/oRU26l8Il
 Qpl68H/0N9KM04SlOlD91AwaWhPEIBP1qFSgRnfStmqxAfQlAfqajOoSntK8Vkz0
 0yRF7pVLELhzxx+IR/W9Vpdf7uzjeA==
 =rQcg
 -----END PGP SIGNATURE-----

Merge tag 'mlx5-updates-2020-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mahameed says:

====================
mlx5-updates-2020-11-03

This series includes updates to mlx5 software steering component.

1) Few improvements in the DR area, such as removing unneeded checks,
  renaming to better general names, refactor in some places, etc.

2) Software steering (DR) Memory management improvements

This patch series contains SW Steering memory management improvements:
using buddy allocator instead of an existing bucket allocator, and
several other optimizations.

The buddy system is a memory allocation and management algorithm
that manages memory in power of two increments.

The algorithm is well-known and well-described, such as here:
https://en.wikipedia.org/wiki/Buddy_memory_allocation

Linux uses this algorithm for managing and allocating physical pages,
as described here:
https://www.kernel.org/doc/gorman/html/understand/understand009.html

In our case, although the algorithm in principal is similar to the
Linux physical page allocator, the "building blocks" and the circumstances
are different: in SW steering, buddy allocator doesn't really allocates
a memory, but rather manages ICM (Interconnect Context Memory) that was
previously allocated and registered.

The ICM memory that is used in SW steering is always power
of 2 (order), so buddy system is a good fit for this.

Patches in this series:

[PATH 4] net/mlx5: DR, Add buddy allocator utilities
  This patch adds a modified implementation of a well-known buddy allocator,
  adjusted for SW steering needs: the algorithm in principal is similar to
  the Linux physical page allocator, but in our case buddy allocator doesn't
  really allocate a memory, but rather manages ICM memory that was previously
  allocated and registered.

[PATH 5] net/mlx5: DR, Handle ICM memory via buddy allocation instead of bucket management
  This patch changes ICM management of SW steering to use buddy-system mechanism
  Instead of the previous bucket management.

[PATH 6] net/mlx5: DR, Sync chunks only during free
  This patch makes syncing happen only when freeing memory chunks.

[PATH 7] net/mlx5: DR, ICM memory pools sync optimization
  This patch adds tracking of pool's "hot" memory and makes the
  check whether steering sync is required much shorter and faster.

[PATH 8] net/mlx5: DR, Free buddy ICM memory if it is unused
  This patch adds tracking buddy's used ICM memory,
  and frees the buddy if all its memory becomes unused.

3) Misc code cleanups

* tag 'mlx5-updates-2020-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux:
  net: mlx5: Replace in_irq() usage
  net/mlx5: Cleanup kernel-doc warnings
  net/mlx4: Cleanup kernel-doc warnings
  net/mlx5e: Validate stop_room size upon user input
  net/mlx5: DR, Free unused buddy ICM memory
  net/mlx5: DR, ICM memory pools sync optimization
  net/mlx5: DR, Sync chunks only during free
  net/mlx5: DR, Handle ICM memory via buddy allocation instead of buckets
  net/mlx5: DR, Add buddy allocator utilities
  net/mlx5: DR, Rename matcher functions to be more HW agnostic
  net/mlx5: DR, Rename builders HW specific names
  net/mlx5: DR, Remove unused member of action struct
====================

Link: https://lore.kernel.org/r/20201105201242.21716-1-saeedm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-11-05 18:01:31 -08:00
..
2020-10-23 16:38:36 -07:00
2020-10-25 10:55:35 -07:00
2020-10-24 10:39:22 -07:00
2020-10-16 12:21:15 -07:00
2020-10-19 14:28:30 -07:00
2020-10-24 10:39:22 -07:00
2020-10-15 14:43:29 -07:00
2020-10-12 13:26:49 -07:00
2020-10-24 10:39:22 -07:00
2020-10-14 15:56:58 -07:00
2020-10-24 10:39:22 -07:00
2020-10-24 10:33:08 -07:00
2020-10-13 12:12:44 -07:00
2020-10-23 10:54:13 -07:00
2020-10-20 09:35:06 -07:00
2020-10-16 12:21:15 -07:00
2020-10-24 10:39:22 -07:00
2020-10-15 14:43:29 -07:00
2020-10-24 10:39:22 -07:00
2020-10-14 15:15:35 -07:00
2020-10-14 15:56:58 -07:00
2020-10-22 12:41:00 -07:00
2020-10-24 10:33:08 -07:00
2020-11-05 18:01:31 -08:00
2020-10-20 10:36:41 -07:00
2020-10-25 11:12:31 -07:00
2020-10-28 09:14:49 -03:00
2020-10-22 13:00:44 -07:00
2020-10-22 12:41:00 -07:00
2020-10-24 10:33:08 -07:00
2020-10-24 10:33:08 -07:00
2020-10-22 12:56:33 -07:00
2020-10-24 10:39:22 -07:00
2020-10-22 12:58:21 -07:00
2020-10-21 11:22:08 -07:00
2020-10-26 16:29:14 -07:00
2020-10-24 10:33:08 -07:00
2020-10-29 19:27:45 +01:00
2020-10-23 16:19:02 -07:00
2020-10-24 10:33:08 -07:00
2020-10-24 10:33:08 -07:00
2020-10-23 11:00:57 -07:00
2020-10-22 13:00:44 -07:00
2020-10-23 11:00:57 -07:00
2020-10-24 10:33:08 -07:00
2020-10-25 10:55:35 -07:00