tipc: Reduce footprint by un-inlining tipc_msg_* routines
Convert tipc_msg_* inline routines that are more than one line into standard functions, thereby eliminating some repeated code. Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3032cca4d5
commit
23461e835b
|
@ -40,6 +40,100 @@
|
|||
#include "msg.h"
|
||||
#include "bearer.h"
|
||||
|
||||
u32 tipc_msg_tot_importance(struct tipc_msg *m)
|
||||
{
|
||||
if (likely(msg_isdata(m))) {
|
||||
if (likely(msg_orignode(m) == tipc_own_addr))
|
||||
return msg_importance(m);
|
||||
return msg_importance(m) + 4;
|
||||
}
|
||||
if ((msg_user(m) == MSG_FRAGMENTER) &&
|
||||
(msg_type(m) == FIRST_FRAGMENT))
|
||||
return msg_importance(msg_get_wrapped(m));
|
||||
return msg_importance(m);
|
||||
}
|
||||
|
||||
|
||||
void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type,
|
||||
u32 hsize, u32 destnode)
|
||||
{
|
||||
memset(m, 0, hsize);
|
||||
msg_set_version(m);
|
||||
msg_set_user(m, user);
|
||||
msg_set_hdr_sz(m, hsize);
|
||||
msg_set_size(m, hsize);
|
||||
msg_set_prevnode(m, tipc_own_addr);
|
||||
msg_set_type(m, type);
|
||||
if (!msg_short(m)) {
|
||||
msg_set_orignode(m, tipc_own_addr);
|
||||
msg_set_destnode(m, destnode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* tipc_msg_calc_data_size - determine total data size for message
|
||||
*/
|
||||
|
||||
int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect)
|
||||
{
|
||||
int dsz = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_sect; i++)
|
||||
dsz += msg_sect[i].iov_len;
|
||||
return dsz;
|
||||
}
|
||||
|
||||
/**
|
||||
* tipc_msg_build - create message using specified header and data
|
||||
*
|
||||
* Note: Caller must not hold any locks in case copy_from_user() is interrupted!
|
||||
*
|
||||
* Returns message data size or errno
|
||||
*/
|
||||
|
||||
int tipc_msg_build(struct tipc_msg *hdr,
|
||||
struct iovec const *msg_sect, u32 num_sect,
|
||||
int max_size, int usrmem, struct sk_buff** buf)
|
||||
{
|
||||
int dsz, sz, hsz, pos, res, cnt;
|
||||
|
||||
dsz = tipc_msg_calc_data_size(msg_sect, num_sect);
|
||||
if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) {
|
||||
*buf = NULL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pos = hsz = msg_hdr_sz(hdr);
|
||||
sz = hsz + dsz;
|
||||
msg_set_size(hdr, sz);
|
||||
if (unlikely(sz > max_size)) {
|
||||
*buf = NULL;
|
||||
return dsz;
|
||||
}
|
||||
|
||||
*buf = buf_acquire(sz);
|
||||
if (!(*buf))
|
||||
return -ENOMEM;
|
||||
skb_copy_to_linear_data(*buf, hdr, hsz);
|
||||
for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) {
|
||||
if (likely(usrmem))
|
||||
res = !copy_from_user((*buf)->data + pos,
|
||||
msg_sect[cnt].iov_base,
|
||||
msg_sect[cnt].iov_len);
|
||||
else
|
||||
skb_copy_to_linear_data_offset(*buf, pos,
|
||||
msg_sect[cnt].iov_base,
|
||||
msg_sect[cnt].iov_len);
|
||||
pos += msg_sect[cnt].iov_len;
|
||||
}
|
||||
if (likely(res))
|
||||
return dsz;
|
||||
|
||||
buf_discard(*buf);
|
||||
*buf = NULL;
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TIPC_DEBUG
|
||||
|
||||
|
|
|
@ -708,100 +708,13 @@ static inline void msg_set_dataoctet(struct tipc_msg *m, u32 pos)
|
|||
#define DSC_REQ_MSG 0
|
||||
#define DSC_RESP_MSG 1
|
||||
|
||||
static inline u32 tipc_msg_tot_importance(struct tipc_msg *m)
|
||||
{
|
||||
if (likely(msg_isdata(m))) {
|
||||
if (likely(msg_orignode(m) == tipc_own_addr))
|
||||
return msg_importance(m);
|
||||
return msg_importance(m) + 4;
|
||||
}
|
||||
if ((msg_user(m) == MSG_FRAGMENTER) &&
|
||||
(msg_type(m) == FIRST_FRAGMENT))
|
||||
return msg_importance(msg_get_wrapped(m));
|
||||
return msg_importance(m);
|
||||
}
|
||||
|
||||
|
||||
static inline void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type,
|
||||
u32 hsize, u32 destnode)
|
||||
{
|
||||
memset(m, 0, hsize);
|
||||
msg_set_version(m);
|
||||
msg_set_user(m, user);
|
||||
msg_set_hdr_sz(m, hsize);
|
||||
msg_set_size(m, hsize);
|
||||
msg_set_prevnode(m, tipc_own_addr);
|
||||
msg_set_type(m, type);
|
||||
if (!msg_short(m)) {
|
||||
msg_set_orignode(m, tipc_own_addr);
|
||||
msg_set_destnode(m, destnode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* tipc_msg_calc_data_size - determine total data size for message
|
||||
*/
|
||||
|
||||
static inline int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect)
|
||||
{
|
||||
int dsz = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_sect; i++)
|
||||
dsz += msg_sect[i].iov_len;
|
||||
return dsz;
|
||||
}
|
||||
|
||||
/**
|
||||
* tipc_msg_build - create message using specified header and data
|
||||
*
|
||||
* Note: Caller must not hold any locks in case copy_from_user() is interrupted!
|
||||
*
|
||||
* Returns message data size or errno
|
||||
*/
|
||||
|
||||
static inline int tipc_msg_build(struct tipc_msg *hdr,
|
||||
u32 tipc_msg_tot_importance(struct tipc_msg *m);
|
||||
void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type,
|
||||
u32 hsize, u32 destnode);
|
||||
int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect);
|
||||
int tipc_msg_build(struct tipc_msg *hdr,
|
||||
struct iovec const *msg_sect, u32 num_sect,
|
||||
int max_size, int usrmem, struct sk_buff** buf)
|
||||
{
|
||||
int dsz, sz, hsz, pos, res, cnt;
|
||||
|
||||
dsz = tipc_msg_calc_data_size(msg_sect, num_sect);
|
||||
if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) {
|
||||
*buf = NULL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pos = hsz = msg_hdr_sz(hdr);
|
||||
sz = hsz + dsz;
|
||||
msg_set_size(hdr, sz);
|
||||
if (unlikely(sz > max_size)) {
|
||||
*buf = NULL;
|
||||
return dsz;
|
||||
}
|
||||
|
||||
*buf = buf_acquire(sz);
|
||||
if (!(*buf))
|
||||
return -ENOMEM;
|
||||
skb_copy_to_linear_data(*buf, hdr, hsz);
|
||||
for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) {
|
||||
if (likely(usrmem))
|
||||
res = !copy_from_user((*buf)->data + pos,
|
||||
msg_sect[cnt].iov_base,
|
||||
msg_sect[cnt].iov_len);
|
||||
else
|
||||
skb_copy_to_linear_data_offset(*buf, pos,
|
||||
msg_sect[cnt].iov_base,
|
||||
msg_sect[cnt].iov_len);
|
||||
pos += msg_sect[cnt].iov_len;
|
||||
}
|
||||
if (likely(res))
|
||||
return dsz;
|
||||
|
||||
buf_discard(*buf);
|
||||
*buf = NULL;
|
||||
return -EFAULT;
|
||||
}
|
||||
int max_size, int usrmem, struct sk_buff** buf);
|
||||
|
||||
static inline void msg_set_media_addr(struct tipc_msg *m, struct tipc_media_addr *a)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user