Skip to content

Commit

Permalink
rds: add transport specific tos_map hook
Browse files Browse the repository at this point in the history
RDMA transport maps user tos to underline virtual lanes(VL)
for IB or DSCP values. RDMA CM transport abstract thats for
RDS. TCP transport makes use of default priority 0 and maps
all user tos values to it.

Reviewed-by: Sowmini Varadhan <[email protected]>
Signed-off-by: Santosh Shilimkar <[email protected]>
[[email protected]: Adapted original patch with ipv6 changes]
Signed-off-by: Zhu Yanjun <[email protected]>
  • Loading branch information
SantoshShilimkar committed Feb 4, 2019
1 parent 3eb4503 commit 56dc8bc
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
10 changes: 6 additions & 4 deletions net/rds/af_rds.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,16 +255,18 @@ static __poll_t rds_poll(struct file *file, struct socket *sock,
static int rds_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
struct rds_sock *rs = rds_sk_to_rs(sock->sk);
rds_tos_t tos;
rds_tos_t utos, tos = 0;

switch (cmd) {
case SIOCRDSSETTOS:
if (get_user(tos, (rds_tos_t __user *)arg))
if (get_user(utos, (rds_tos_t __user *)arg))
return -EFAULT;

if (rs->rs_transport &&
rs->rs_transport->t_type == RDS_TRANS_TCP)
tos = 0;
rs->rs_transport->get_tos_map)
tos = rs->rs_transport->get_tos_map(utos);
else
return -ENOIOCTLCMD;

spin_lock_bh(&rds_sock_lock);
if (rs->rs_tos || rs->rs_conn) {
Expand Down
10 changes: 10 additions & 0 deletions net/rds/ib.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,15 @@ void rds_ib_exit(void)
rds_ib_mr_exit();
}

static u8 rds_ib_get_tos_map(u8 tos)
{
/* 1:1 user to transport map for RDMA transport.
* In future, if custom map is desired, hook can export
* user configurable map.
*/
return tos;
}

struct rds_transport rds_ib_transport = {
.laddr_check = rds_ib_laddr_check,
.xmit_path_complete = rds_ib_xmit_path_complete,
Expand All @@ -537,6 +546,7 @@ struct rds_transport rds_ib_transport = {
.sync_mr = rds_ib_sync_mr,
.free_mr = rds_ib_free_mr,
.flush_mrs = rds_ib_flush_mrs,
.get_tos_map = rds_ib_get_tos_map,
.t_owner = THIS_MODULE,
.t_name = "infiniband",
.t_unloading = rds_ib_is_unloading,
Expand Down
1 change: 1 addition & 0 deletions net/rds/rds.h
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ struct rds_transport {
void (*free_mr)(void *trans_private, int invalidate);
void (*flush_mrs)(void);
bool (*t_unloading)(struct rds_connection *conn);
u8 (*get_tos_map)(u8 tos);
};

/* Bind hash table key length. It is the sum of the size of a struct
Expand Down
7 changes: 7 additions & 0 deletions net/rds/tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,12 @@ static void rds_tcp_destroy_conns(void)

static void rds_tcp_exit(void);

static u8 rds_tcp_get_tos_map(u8 tos)
{
/* all user tos mapped to default 0 for TCP transport */
return 0;
}

struct rds_transport rds_tcp_transport = {
.laddr_check = rds_tcp_laddr_check,
.xmit_path_prepare = rds_tcp_xmit_path_prepare,
Expand All @@ -467,6 +473,7 @@ struct rds_transport rds_tcp_transport = {
.inc_free = rds_tcp_inc_free,
.stats_info_copy = rds_tcp_stats_info_copy,
.exit = rds_tcp_exit,
.get_tos_map = rds_tcp_get_tos_map,
.t_owner = THIS_MODULE,
.t_name = "tcp",
.t_type = RDS_TRANS_TCP,
Expand Down

0 comments on commit 56dc8bc

Please sign in to comment.