Commit 56dc8bce authored by Santosh Shilimkar's avatar Santosh Shilimkar

rds: add transport specific tos_map hook

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: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: default avatarSantosh Shilimkar <santosh.shilimkar@oracle.com>
[yanjun.zhu@oracle.com: Adapted original patch with ipv6 changes]
Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@oracle.com>
parent 3eb45036
...@@ -255,16 +255,18 @@ static __poll_t rds_poll(struct file *file, struct socket *sock, ...@@ -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) static int rds_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{ {
struct rds_sock *rs = rds_sk_to_rs(sock->sk); struct rds_sock *rs = rds_sk_to_rs(sock->sk);
rds_tos_t tos; rds_tos_t utos, tos = 0;
switch (cmd) { switch (cmd) {
case SIOCRDSSETTOS: case SIOCRDSSETTOS:
if (get_user(tos, (rds_tos_t __user *)arg)) if (get_user(utos, (rds_tos_t __user *)arg))
return -EFAULT; return -EFAULT;
if (rs->rs_transport && if (rs->rs_transport &&
rs->rs_transport->t_type == RDS_TRANS_TCP) rs->rs_transport->get_tos_map)
tos = 0; tos = rs->rs_transport->get_tos_map(utos);
else
return -ENOIOCTLCMD;
spin_lock_bh(&rds_sock_lock); spin_lock_bh(&rds_sock_lock);
if (rs->rs_tos || rs->rs_conn) { if (rs->rs_tos || rs->rs_conn) {
......
...@@ -515,6 +515,15 @@ void rds_ib_exit(void) ...@@ -515,6 +515,15 @@ void rds_ib_exit(void)
rds_ib_mr_exit(); 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 = { struct rds_transport rds_ib_transport = {
.laddr_check = rds_ib_laddr_check, .laddr_check = rds_ib_laddr_check,
.xmit_path_complete = rds_ib_xmit_path_complete, .xmit_path_complete = rds_ib_xmit_path_complete,
...@@ -537,6 +546,7 @@ struct rds_transport rds_ib_transport = { ...@@ -537,6 +546,7 @@ struct rds_transport rds_ib_transport = {
.sync_mr = rds_ib_sync_mr, .sync_mr = rds_ib_sync_mr,
.free_mr = rds_ib_free_mr, .free_mr = rds_ib_free_mr,
.flush_mrs = rds_ib_flush_mrs, .flush_mrs = rds_ib_flush_mrs,
.get_tos_map = rds_ib_get_tos_map,
.t_owner = THIS_MODULE, .t_owner = THIS_MODULE,
.t_name = "infiniband", .t_name = "infiniband",
.t_unloading = rds_ib_is_unloading, .t_unloading = rds_ib_is_unloading,
......
...@@ -574,6 +574,7 @@ struct rds_transport { ...@@ -574,6 +574,7 @@ struct rds_transport {
void (*free_mr)(void *trans_private, int invalidate); void (*free_mr)(void *trans_private, int invalidate);
void (*flush_mrs)(void); void (*flush_mrs)(void);
bool (*t_unloading)(struct rds_connection *conn); 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 /* Bind hash table key length. It is the sum of the size of a struct
......
...@@ -453,6 +453,12 @@ static void rds_tcp_destroy_conns(void) ...@@ -453,6 +453,12 @@ static void rds_tcp_destroy_conns(void)
static void rds_tcp_exit(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 = { struct rds_transport rds_tcp_transport = {
.laddr_check = rds_tcp_laddr_check, .laddr_check = rds_tcp_laddr_check,
.xmit_path_prepare = rds_tcp_xmit_path_prepare, .xmit_path_prepare = rds_tcp_xmit_path_prepare,
...@@ -467,6 +473,7 @@ struct rds_transport rds_tcp_transport = { ...@@ -467,6 +473,7 @@ struct rds_transport rds_tcp_transport = {
.inc_free = rds_tcp_inc_free, .inc_free = rds_tcp_inc_free,
.stats_info_copy = rds_tcp_stats_info_copy, .stats_info_copy = rds_tcp_stats_info_copy,
.exit = rds_tcp_exit, .exit = rds_tcp_exit,
.get_tos_map = rds_tcp_get_tos_map,
.t_owner = THIS_MODULE, .t_owner = THIS_MODULE,
.t_name = "tcp", .t_name = "tcp",
.t_type = RDS_TRANS_TCP, .t_type = RDS_TRANS_TCP,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment