forked from luck/tmp_suning_uos_patched
net/smc: move smc_core specific code from smc.h to smc_core
SMC connection and buffer handling belong to smc_core. So, this patch moves this code from smc.h to smc_core. Signed-off-by: Hans Wippel <hwippel@linux.ibm.com> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
95d8d26306
commit
2f6becaf79
|
@ -220,41 +220,6 @@ static inline u32 ntoh24(u8 *net)
|
|||
return be32_to_cpu(t);
|
||||
}
|
||||
|
||||
#define SMC_BUF_MIN_SIZE 16384 /* minimum size of an RMB */
|
||||
|
||||
#define SMC_RMBE_SIZES 16 /* number of distinct sizes for an RMBE */
|
||||
/* theoretically, the RFC states that largest size would be 512K,
|
||||
* i.e. compressed 5 and thus 6 sizes (0..5), despite
|
||||
* struct smc_clc_msg_accept_confirm.rmbe_size being a 4 bit value (0..15)
|
||||
*/
|
||||
|
||||
/* convert the RMB size into the compressed notation - minimum 16K.
|
||||
* In contrast to plain ilog2, this rounds towards the next power of 2,
|
||||
* so the socket application gets at least its desired sndbuf / rcvbuf size.
|
||||
*/
|
||||
static inline u8 smc_compress_bufsize(int size)
|
||||
{
|
||||
u8 compressed;
|
||||
|
||||
if (size <= SMC_BUF_MIN_SIZE)
|
||||
return 0;
|
||||
|
||||
size = (size - 1) >> 14;
|
||||
compressed = ilog2(size) + 1;
|
||||
if (compressed >= SMC_RMBE_SIZES)
|
||||
compressed = SMC_RMBE_SIZES - 1;
|
||||
return compressed;
|
||||
}
|
||||
|
||||
/* convert the RMB size from compressed notation into integer */
|
||||
static inline int smc_uncompress_bufsize(u8 compressed)
|
||||
{
|
||||
u32 size;
|
||||
|
||||
size = 0x00000001 << (((int)compressed) + 14);
|
||||
return (int)size;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_XFRM
|
||||
static inline bool using_ipsec(struct smc_sock *smc)
|
||||
{
|
||||
|
@ -268,12 +233,6 @@ static inline bool using_ipsec(struct smc_sock *smc)
|
|||
}
|
||||
#endif
|
||||
|
||||
struct smc_clc_msg_local;
|
||||
|
||||
void smc_conn_free(struct smc_connection *conn);
|
||||
int smc_conn_create(struct smc_sock *smc,
|
||||
struct smc_ib_device *smcibdev, u8 ibport,
|
||||
struct smc_clc_msg_local *lcl, int srv_first_contact);
|
||||
struct sock *smc_accept_dequeue(struct sock *parent, struct socket *new_sock);
|
||||
void smc_close_non_accepted(struct sock *sk);
|
||||
|
||||
|
|
|
@ -543,6 +543,33 @@ int smc_conn_create(struct smc_sock *smc,
|
|||
return rc ? rc : local_contact;
|
||||
}
|
||||
|
||||
/* convert the RMB size into the compressed notation - minimum 16K.
|
||||
* In contrast to plain ilog2, this rounds towards the next power of 2,
|
||||
* so the socket application gets at least its desired sndbuf / rcvbuf size.
|
||||
*/
|
||||
static u8 smc_compress_bufsize(int size)
|
||||
{
|
||||
u8 compressed;
|
||||
|
||||
if (size <= SMC_BUF_MIN_SIZE)
|
||||
return 0;
|
||||
|
||||
size = (size - 1) >> 14;
|
||||
compressed = ilog2(size) + 1;
|
||||
if (compressed >= SMC_RMBE_SIZES)
|
||||
compressed = SMC_RMBE_SIZES - 1;
|
||||
return compressed;
|
||||
}
|
||||
|
||||
/* convert the RMB size from compressed notation into integer */
|
||||
int smc_uncompress_bufsize(u8 compressed)
|
||||
{
|
||||
u32 size;
|
||||
|
||||
size = 0x00000001 << (((int)compressed) + 14);
|
||||
return (int)size;
|
||||
}
|
||||
|
||||
/* try to reuse a sndbuf or rmb description slot for a certain
|
||||
* buffer size; if not available, return NULL
|
||||
*/
|
||||
|
|
|
@ -141,6 +141,12 @@ struct smc_rtoken { /* address/key of remote RMB */
|
|||
};
|
||||
|
||||
#define SMC_LGR_ID_SIZE 4
|
||||
#define SMC_BUF_MIN_SIZE 16384 /* minimum size of an RMB */
|
||||
#define SMC_RMBE_SIZES 16 /* number of distinct RMBE sizes */
|
||||
/* theoretically, the RFC states that largest size would be 512K,
|
||||
* i.e. compressed 5 and thus 6 sizes (0..5), despite
|
||||
* struct smc_clc_msg_accept_confirm.rmbe_size being a 4 bit value (0..15)
|
||||
*/
|
||||
|
||||
struct smc_link_group {
|
||||
struct list_head list;
|
||||
|
@ -205,12 +211,14 @@ static inline struct smc_connection *smc_lgr_find_conn(
|
|||
|
||||
struct smc_sock;
|
||||
struct smc_clc_msg_accept_confirm;
|
||||
struct smc_clc_msg_local;
|
||||
|
||||
void smc_lgr_free(struct smc_link_group *lgr);
|
||||
void smc_lgr_forget(struct smc_link_group *lgr);
|
||||
void smc_lgr_terminate(struct smc_link_group *lgr);
|
||||
void smc_port_terminate(struct smc_ib_device *smcibdev, u8 ibport);
|
||||
int smc_buf_create(struct smc_sock *smc);
|
||||
int smc_uncompress_bufsize(u8 compressed);
|
||||
int smc_rmb_rtoken_handling(struct smc_connection *conn,
|
||||
struct smc_clc_msg_accept_confirm *clc);
|
||||
int smc_rtoken_add(struct smc_link_group *lgr, __be64 nw_vaddr, __be32 nw_rkey);
|
||||
|
@ -219,5 +227,9 @@ void smc_sndbuf_sync_sg_for_cpu(struct smc_connection *conn);
|
|||
void smc_sndbuf_sync_sg_for_device(struct smc_connection *conn);
|
||||
void smc_rmb_sync_sg_for_cpu(struct smc_connection *conn);
|
||||
void smc_rmb_sync_sg_for_device(struct smc_connection *conn);
|
||||
void smc_conn_free(struct smc_connection *conn);
|
||||
int smc_conn_create(struct smc_sock *smc,
|
||||
struct smc_ib_device *smcibdev, u8 ibport,
|
||||
struct smc_clc_msg_local *lcl, int srv_first_contact);
|
||||
void smc_core_exit(void);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user