forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Socket-Direct API with empty/minimal implementation. We fill-in the implementation gradually in downstream patches. Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Gal Pressman <gal@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
- Loading branch information
Tariq Toukan
authored and
Saeed Mahameed
committed
Dec 21, 2023
1 parent
e04984a
commit 4a04a31
Showing
4 changed files
with
110 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB | ||
/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ | ||
|
||
#include "lib/sd.h" | ||
#include "mlx5_core.h" | ||
|
||
#define sd_info(__dev, format, ...) \ | ||
dev_info((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__) | ||
#define sd_warn(__dev, format, ...) \ | ||
dev_warn((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__) | ||
|
||
struct mlx5_sd { | ||
}; | ||
|
||
static int mlx5_sd_get_host_buses(struct mlx5_core_dev *dev) | ||
{ | ||
return 1; | ||
} | ||
|
||
struct mlx5_core_dev * | ||
mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx) | ||
{ | ||
if (idx == 0) | ||
return primary; | ||
|
||
return NULL; | ||
} | ||
|
||
int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix) | ||
{ | ||
return ch_ix % mlx5_sd_get_host_buses(dev); | ||
} | ||
|
||
int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix) | ||
{ | ||
return ch_ix / mlx5_sd_get_host_buses(dev); | ||
} | ||
|
||
struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix) | ||
{ | ||
int mdev_idx = mlx5_sd_ch_ix_get_dev_ix(primary, ch_ix); | ||
|
||
return mlx5_sd_primary_get_peer(primary, mdev_idx); | ||
} | ||
|
||
int mlx5_sd_init(struct mlx5_core_dev *dev) | ||
{ | ||
return 0; | ||
} | ||
|
||
void mlx5_sd_cleanup(struct mlx5_core_dev *dev) | ||
{ | ||
} | ||
|
||
struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev, | ||
struct auxiliary_device *adev, | ||
int idx) | ||
{ | ||
return adev; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ | ||
/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ | ||
|
||
#ifndef __MLX5_LIB_SD_H__ | ||
#define __MLX5_LIB_SD_H__ | ||
|
||
#define MLX5_SD_MAX_GROUP_SZ 2 | ||
|
||
struct mlx5_sd; | ||
|
||
struct mlx5_core_dev *mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx); | ||
int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix); | ||
int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix); | ||
struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix); | ||
struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev, | ||
struct auxiliary_device *adev, | ||
int idx); | ||
|
||
int mlx5_sd_init(struct mlx5_core_dev *dev); | ||
void mlx5_sd_cleanup(struct mlx5_core_dev *dev); | ||
|
||
#define mlx5_sd_for_each_dev_from_to(i, primary, ix_from, to, pos) \ | ||
for (i = ix_from; \ | ||
(pos = mlx5_sd_primary_get_peer(primary, i)) && pos != (to); i++) | ||
|
||
#define mlx5_sd_for_each_dev(i, primary, pos) \ | ||
mlx5_sd_for_each_dev_from_to(i, primary, 0, NULL, pos) | ||
|
||
#define mlx5_sd_for_each_dev_to(i, primary, to, pos) \ | ||
mlx5_sd_for_each_dev_from_to(i, primary, 0, to, pos) | ||
|
||
#define mlx5_sd_for_each_secondary(i, primary, pos) \ | ||
mlx5_sd_for_each_dev_from_to(i, primary, 1, NULL, pos) | ||
|
||
#define mlx5_sd_for_each_secondary_to(i, primary, to, pos) \ | ||
mlx5_sd_for_each_dev_from_to(i, primary, 1, to, pos) | ||
|
||
#endif /* __MLX5_LIB_SD_H__ */ |