mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branches 'uaccess.alpha', 'uaccess.arc', 'uaccess.arm', 'uaccess.arm64', 'uaccess.avr32', 'uaccess.bfin', 'uaccess.c6x', 'uaccess.cris', 'uaccess.frv', 'uaccess.h8300', 'uaccess.hexagon', 'uaccess.ia64', 'uaccess.m32r', 'uaccess.m68k', 'uaccess.metag', 'uaccess.microblaze', 'uaccess.mips', 'uaccess.mn10300', 'uaccess.nios2', 'uaccess.openrisc', 'uaccess.parisc', 'uaccess.powerpc', 'uaccess.s390', 'uaccess.score', 'uaccess.sh', 'uaccess.sparc', 'uaccess.tile', 'uaccess.um', 'uaccess.unicore32', 'uaccess.x86' and 'uaccess.xtensa' into work.uaccess
This commit is contained in:
parent
bf7af0cea8
ec022681a4
e13909a4ac
4de5b63e76
92430dab36
e5c1540030
50e9ab915a
86944ee158
0c7e9a870e
48f666c986
33ab2da801
ac4691fac8
b3622d3217
9a677341cd
29be02eb6f
840db3f938
d491afb865
2260ea86c0
19dbf70c5a
de51d6cc2c
ab89866be3
f64fd180ec
3448890c32
37096003c8
dc14253523
f98f48ee7c
31af2f36d5
23504bae7f
a668ce3a00
2ef59f2856
beba3a20bf
7d4914db8f
commit
eea86b637a
1311 changed files with 18197 additions and 12582 deletions
|
|
@ -429,6 +429,7 @@ void rds_conn_destroy(struct rds_connection *conn)
|
|||
*/
|
||||
rds_cong_remove_conn(conn);
|
||||
|
||||
put_net(conn->c_net);
|
||||
kmem_cache_free(rds_conn_slab, conn);
|
||||
|
||||
spin_lock_irqsave(&rds_conn_lock, flags);
|
||||
|
|
|
|||
|
|
@ -442,7 +442,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
ic->i_send_cq = NULL;
|
||||
ibdev_put_vector(rds_ibdev, ic->i_scq_vector);
|
||||
rdsdebug("ib_create_cq send failed: %d\n", ret);
|
||||
goto out;
|
||||
goto rds_ibdev_out;
|
||||
}
|
||||
|
||||
ic->i_rcq_vector = ibdev_get_unused_vector(rds_ibdev);
|
||||
|
|
@ -456,19 +456,19 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
ic->i_recv_cq = NULL;
|
||||
ibdev_put_vector(rds_ibdev, ic->i_rcq_vector);
|
||||
rdsdebug("ib_create_cq recv failed: %d\n", ret);
|
||||
goto out;
|
||||
goto send_cq_out;
|
||||
}
|
||||
|
||||
ret = ib_req_notify_cq(ic->i_send_cq, IB_CQ_NEXT_COMP);
|
||||
if (ret) {
|
||||
rdsdebug("ib_req_notify_cq send failed: %d\n", ret);
|
||||
goto out;
|
||||
goto recv_cq_out;
|
||||
}
|
||||
|
||||
ret = ib_req_notify_cq(ic->i_recv_cq, IB_CQ_SOLICITED);
|
||||
if (ret) {
|
||||
rdsdebug("ib_req_notify_cq recv failed: %d\n", ret);
|
||||
goto out;
|
||||
goto recv_cq_out;
|
||||
}
|
||||
|
||||
/* XXX negotiate max send/recv with remote? */
|
||||
|
|
@ -494,7 +494,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
ret = rdma_create_qp(ic->i_cm_id, ic->i_pd, &attr);
|
||||
if (ret) {
|
||||
rdsdebug("rdma_create_qp failed: %d\n", ret);
|
||||
goto out;
|
||||
goto recv_cq_out;
|
||||
}
|
||||
|
||||
ic->i_send_hdrs = ib_dma_alloc_coherent(dev,
|
||||
|
|
@ -504,7 +504,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
if (!ic->i_send_hdrs) {
|
||||
ret = -ENOMEM;
|
||||
rdsdebug("ib_dma_alloc_coherent send failed\n");
|
||||
goto out;
|
||||
goto qp_out;
|
||||
}
|
||||
|
||||
ic->i_recv_hdrs = ib_dma_alloc_coherent(dev,
|
||||
|
|
@ -514,7 +514,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
if (!ic->i_recv_hdrs) {
|
||||
ret = -ENOMEM;
|
||||
rdsdebug("ib_dma_alloc_coherent recv failed\n");
|
||||
goto out;
|
||||
goto send_hdrs_dma_out;
|
||||
}
|
||||
|
||||
ic->i_ack = ib_dma_alloc_coherent(dev, sizeof(struct rds_header),
|
||||
|
|
@ -522,7 +522,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
if (!ic->i_ack) {
|
||||
ret = -ENOMEM;
|
||||
rdsdebug("ib_dma_alloc_coherent ack failed\n");
|
||||
goto out;
|
||||
goto recv_hdrs_dma_out;
|
||||
}
|
||||
|
||||
ic->i_sends = vzalloc_node(ic->i_send_ring.w_nr * sizeof(struct rds_ib_send_work),
|
||||
|
|
@ -530,7 +530,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
if (!ic->i_sends) {
|
||||
ret = -ENOMEM;
|
||||
rdsdebug("send allocation failed\n");
|
||||
goto out;
|
||||
goto ack_dma_out;
|
||||
}
|
||||
|
||||
ic->i_recvs = vzalloc_node(ic->i_recv_ring.w_nr * sizeof(struct rds_ib_recv_work),
|
||||
|
|
@ -538,7 +538,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
if (!ic->i_recvs) {
|
||||
ret = -ENOMEM;
|
||||
rdsdebug("recv allocation failed\n");
|
||||
goto out;
|
||||
goto sends_out;
|
||||
}
|
||||
|
||||
rds_ib_recv_init_ack(ic);
|
||||
|
|
@ -546,8 +546,33 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
rdsdebug("conn %p pd %p cq %p %p\n", conn, ic->i_pd,
|
||||
ic->i_send_cq, ic->i_recv_cq);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
|
||||
sends_out:
|
||||
vfree(ic->i_sends);
|
||||
ack_dma_out:
|
||||
ib_dma_free_coherent(dev, sizeof(struct rds_header),
|
||||
ic->i_ack, ic->i_ack_dma);
|
||||
recv_hdrs_dma_out:
|
||||
ib_dma_free_coherent(dev, ic->i_recv_ring.w_nr *
|
||||
sizeof(struct rds_header),
|
||||
ic->i_recv_hdrs, ic->i_recv_hdrs_dma);
|
||||
send_hdrs_dma_out:
|
||||
ib_dma_free_coherent(dev, ic->i_send_ring.w_nr *
|
||||
sizeof(struct rds_header),
|
||||
ic->i_send_hdrs, ic->i_send_hdrs_dma);
|
||||
qp_out:
|
||||
rdma_destroy_qp(ic->i_cm_id);
|
||||
recv_cq_out:
|
||||
if (!ib_destroy_cq(ic->i_recv_cq))
|
||||
ic->i_recv_cq = NULL;
|
||||
send_cq_out:
|
||||
if (!ib_destroy_cq(ic->i_send_cq))
|
||||
ic->i_send_cq = NULL;
|
||||
rds_ibdev_out:
|
||||
rds_ib_remove_conn(rds_ibdev, conn);
|
||||
rds_ib_dev_put(rds_ibdev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ struct rds_connection {
|
|||
|
||||
/* Protocol version */
|
||||
unsigned int c_version;
|
||||
possible_net_t c_net;
|
||||
struct net *c_net;
|
||||
|
||||
struct list_head c_map_item;
|
||||
unsigned long c_map_queued;
|
||||
|
|
@ -162,13 +162,13 @@ struct rds_connection {
|
|||
static inline
|
||||
struct net *rds_conn_net(struct rds_connection *conn)
|
||||
{
|
||||
return read_pnet(&conn->c_net);
|
||||
return conn->c_net;
|
||||
}
|
||||
|
||||
static inline
|
||||
void rds_conn_net_set(struct rds_connection *conn, struct net *net)
|
||||
{
|
||||
write_pnet(&conn->c_net, net);
|
||||
conn->c_net = get_net(net);
|
||||
}
|
||||
|
||||
#define RDS_FLAG_CONG_BITMAP 0x01
|
||||
|
|
|
|||
|
|
@ -481,9 +481,10 @@ static void __net_exit rds_tcp_exit_net(struct net *net)
|
|||
* we do need to clean up the listen socket here.
|
||||
*/
|
||||
if (rtn->rds_tcp_listen_sock) {
|
||||
rds_tcp_listen_stop(rtn->rds_tcp_listen_sock);
|
||||
struct socket *lsock = rtn->rds_tcp_listen_sock;
|
||||
|
||||
rtn->rds_tcp_listen_sock = NULL;
|
||||
flush_work(&rtn->rds_tcp_accept_w);
|
||||
rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -520,13 +521,13 @@ static void rds_tcp_kill_sock(struct net *net)
|
|||
struct rds_tcp_connection *tc, *_tc;
|
||||
LIST_HEAD(tmp_list);
|
||||
struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid);
|
||||
struct socket *lsock = rtn->rds_tcp_listen_sock;
|
||||
|
||||
rds_tcp_listen_stop(rtn->rds_tcp_listen_sock);
|
||||
rtn->rds_tcp_listen_sock = NULL;
|
||||
flush_work(&rtn->rds_tcp_accept_w);
|
||||
rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w);
|
||||
spin_lock_irq(&rds_tcp_conn_lock);
|
||||
list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) {
|
||||
struct net *c_net = read_pnet(&tc->t_cpath->cp_conn->c_net);
|
||||
struct net *c_net = tc->t_cpath->cp_conn->c_net;
|
||||
|
||||
if (net != c_net || !tc->t_sock)
|
||||
continue;
|
||||
|
|
@ -543,8 +544,12 @@ static void rds_tcp_kill_sock(struct net *net)
|
|||
void *rds_tcp_listen_sock_def_readable(struct net *net)
|
||||
{
|
||||
struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid);
|
||||
struct socket *lsock = rtn->rds_tcp_listen_sock;
|
||||
|
||||
return rtn->rds_tcp_listen_sock->sk->sk_user_data;
|
||||
if (!lsock)
|
||||
return NULL;
|
||||
|
||||
return lsock->sk->sk_user_data;
|
||||
}
|
||||
|
||||
static int rds_tcp_dev_event(struct notifier_block *this,
|
||||
|
|
@ -581,7 +586,7 @@ static void rds_tcp_sysctl_reset(struct net *net)
|
|||
|
||||
spin_lock_irq(&rds_tcp_conn_lock);
|
||||
list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) {
|
||||
struct net *c_net = read_pnet(&tc->t_cpath->cp_conn->c_net);
|
||||
struct net *c_net = tc->t_cpath->cp_conn->c_net;
|
||||
|
||||
if (net != c_net || !tc->t_sock)
|
||||
continue;
|
||||
|
|
@ -635,19 +640,19 @@ static int rds_tcp_init(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
ret = register_netdevice_notifier(&rds_tcp_dev_notifier);
|
||||
if (ret) {
|
||||
pr_warn("could not register rds_tcp_dev_notifier\n");
|
||||
ret = rds_tcp_recv_init();
|
||||
if (ret)
|
||||
goto out_slab;
|
||||
}
|
||||
|
||||
ret = register_pernet_subsys(&rds_tcp_net_ops);
|
||||
if (ret)
|
||||
goto out_notifier;
|
||||
goto out_recv;
|
||||
|
||||
ret = rds_tcp_recv_init();
|
||||
if (ret)
|
||||
ret = register_netdevice_notifier(&rds_tcp_dev_notifier);
|
||||
if (ret) {
|
||||
pr_warn("could not register rds_tcp_dev_notifier\n");
|
||||
goto out_pernet;
|
||||
}
|
||||
|
||||
rds_trans_register(&rds_tcp_transport);
|
||||
|
||||
|
|
@ -657,9 +662,8 @@ static int rds_tcp_init(void)
|
|||
|
||||
out_pernet:
|
||||
unregister_pernet_subsys(&rds_tcp_net_ops);
|
||||
out_notifier:
|
||||
if (unregister_netdevice_notifier(&rds_tcp_dev_notifier))
|
||||
pr_warn("could not unregister rds_tcp_dev_notifier\n");
|
||||
out_recv:
|
||||
rds_tcp_recv_exit();
|
||||
out_slab:
|
||||
kmem_cache_destroy(rds_tcp_conn_slab);
|
||||
out:
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ void rds_tcp_state_change(struct sock *sk);
|
|||
|
||||
/* tcp_listen.c */
|
||||
struct socket *rds_tcp_listen_init(struct net *);
|
||||
void rds_tcp_listen_stop(struct socket *);
|
||||
void rds_tcp_listen_stop(struct socket *sock, struct work_struct *acceptor);
|
||||
void rds_tcp_listen_data_ready(struct sock *sk);
|
||||
int rds_tcp_accept_one(struct socket *sock);
|
||||
int rds_tcp_keepalive(struct socket *sock);
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ int rds_tcp_accept_one(struct socket *sock)
|
|||
|
||||
new_sock->type = sock->type;
|
||||
new_sock->ops = sock->ops;
|
||||
ret = sock->ops->accept(sock, new_sock, O_NONBLOCK);
|
||||
ret = sock->ops->accept(sock, new_sock, O_NONBLOCK, true);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
|
@ -223,6 +223,9 @@ void rds_tcp_listen_data_ready(struct sock *sk)
|
|||
* before it has been accepted and the accepter has set up their
|
||||
* data_ready.. we only want to queue listen work for our listening
|
||||
* socket
|
||||
*
|
||||
* (*ready)() may be null if we are racing with netns delete, and
|
||||
* the listen socket is being torn down.
|
||||
*/
|
||||
if (sk->sk_state == TCP_LISTEN)
|
||||
rds_tcp_accept_work(sk);
|
||||
|
|
@ -231,7 +234,8 @@ void rds_tcp_listen_data_ready(struct sock *sk)
|
|||
|
||||
out:
|
||||
read_unlock_bh(&sk->sk_callback_lock);
|
||||
ready(sk);
|
||||
if (ready)
|
||||
ready(sk);
|
||||
}
|
||||
|
||||
struct socket *rds_tcp_listen_init(struct net *net)
|
||||
|
|
@ -271,7 +275,7 @@ out:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void rds_tcp_listen_stop(struct socket *sock)
|
||||
void rds_tcp_listen_stop(struct socket *sock, struct work_struct *acceptor)
|
||||
{
|
||||
struct sock *sk;
|
||||
|
||||
|
|
@ -292,5 +296,6 @@ void rds_tcp_listen_stop(struct socket *sock)
|
|||
|
||||
/* wait for accepts to stop and close the socket */
|
||||
flush_workqueue(rds_wq);
|
||||
flush_work(acceptor);
|
||||
sock_release(sock);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue