Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
a493f1a2
Commit
a493f1a2
authored
Nov 29, 2011
by
Roland Dreier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'cxgb4', 'ipoib', 'misc' and 'qib' into for-next
parents
01b225e1
3874397c
580da35a
8ee887d7
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
58 additions
and
43 deletions
+58
-43
drivers/infiniband/core/addr.c
drivers/infiniband/core/addr.c
+6
-3
drivers/infiniband/hw/cxgb3/iwch_cm.c
drivers/infiniband/hw/cxgb3/iwch_cm.c
+4
-0
drivers/infiniband/hw/cxgb4/cm.c
drivers/infiniband/hw/cxgb4/cm.c
+6
-0
drivers/infiniband/hw/nes/nes_cm.c
drivers/infiniband/hw/nes/nes_cm.c
+4
-2
drivers/infiniband/hw/qib/qib_iba7322.c
drivers/infiniband/hw/qib/qib_iba7322.c
+9
-9
drivers/infiniband/hw/qib/qib_qsfp.c
drivers/infiniband/hw/qib/qib_qsfp.c
+0
-12
drivers/infiniband/ulp/ipoib/ipoib_ib.c
drivers/infiniband/ulp/ipoib/ipoib_ib.c
+8
-5
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
+12
-8
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+9
-4
No files found.
drivers/infiniband/core/addr.c
View file @
a493f1a2
...
...
@@ -216,7 +216,9 @@ static int addr4_resolve(struct sockaddr_in *src_in,
neigh
=
neigh_lookup
(
&
arp_tbl
,
&
rt
->
rt_gateway
,
rt
->
dst
.
dev
);
if
(
!
neigh
||
!
(
neigh
->
nud_state
&
NUD_VALID
))
{
rcu_read_lock
();
neigh_event_send
(
dst_get_neighbour
(
&
rt
->
dst
),
NULL
);
rcu_read_unlock
();
ret
=
-
ENODATA
;
if
(
neigh
)
goto
release
;
...
...
@@ -274,15 +276,16 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
goto
put
;
}
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
dst
);
if
(
!
neigh
||
!
(
neigh
->
nud_state
&
NUD_VALID
))
{
if
(
neigh
)
neigh_event_send
(
neigh
,
NULL
);
ret
=
-
ENODATA
;
goto
put
;
}
}
else
{
ret
=
rdma_copy_addr
(
addr
,
dst
->
dev
,
neigh
->
ha
);
}
rcu_read_unlock
();
put:
dst_release
(
dst
);
return
ret
;
...
...
drivers/infiniband/hw/cxgb3/iwch_cm.c
View file @
a493f1a2
...
...
@@ -1375,8 +1375,10 @@ static int pass_accept_req(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
goto
reject
;
}
dst
=
&
rt
->
dst
;
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
dst
);
l2t
=
t3_l2t_get
(
tdev
,
neigh
,
neigh
->
dev
);
rcu_read_unlock
();
if
(
!
l2t
)
{
printk
(
KERN_ERR
MOD
"%s - failed to allocate l2t entry!
\n
"
,
__func__
);
...
...
@@ -1946,10 +1948,12 @@ int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
}
ep
->
dst
=
&
rt
->
dst
;
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
ep
->
dst
);
/* get a l2t entry */
ep
->
l2t
=
t3_l2t_get
(
ep
->
com
.
tdev
,
neigh
,
neigh
->
dev
);
rcu_read_unlock
();
if
(
!
ep
->
l2t
)
{
printk
(
KERN_ERR
MOD
"%s - cannot alloc l2e.
\n
"
,
__func__
);
err
=
-
ENOMEM
;
...
...
drivers/infiniband/hw/cxgb4/cm.c
View file @
a493f1a2
...
...
@@ -1596,6 +1596,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
goto
reject
;
}
dst
=
&
rt
->
dst
;
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
dst
);
if
(
neigh
->
dev
->
flags
&
IFF_LOOPBACK
)
{
pdev
=
ip_dev_find
(
&
init_net
,
peer_ip
);
...
...
@@ -1622,6 +1623,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
rss_qid
=
dev
->
rdev
.
lldi
.
rxq_ids
[
cxgb4_port_idx
(
neigh
->
dev
)
*
step
];
}
rcu_read_unlock
();
if
(
!
l2t
)
{
printk
(
KERN_ERR
MOD
"%s - failed to allocate l2t entry!
\n
"
,
__func__
);
...
...
@@ -1822,6 +1824,7 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
}
ep
->
dst
=
&
rt
->
dst
;
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
ep
->
dst
);
/* get a l2t entry */
...
...
@@ -1858,6 +1861,7 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
ep
->
rss_qid
=
ep
->
com
.
dev
->
rdev
.
lldi
.
rxq_ids
[
cxgb4_port_idx
(
neigh
->
dev
)
*
step
];
}
rcu_read_unlock
();
if
(
!
ep
->
l2t
)
{
printk
(
KERN_ERR
MOD
"%s - cannot alloc l2e.
\n
"
,
__func__
);
err
=
-
ENOMEM
;
...
...
@@ -2303,6 +2307,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
}
ep
->
dst
=
&
rt
->
dst
;
rcu_read_lock
();
neigh
=
dst_get_neighbour
(
ep
->
dst
);
/* get a l2t entry */
...
...
@@ -2341,6 +2346,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
ep
->
retry_with_mpa_v1
=
0
;
ep
->
tried_with_mpa_v1
=
0
;
}
rcu_read_unlock
();
if
(
!
ep
->
l2t
)
{
printk
(
KERN_ERR
MOD
"%s - cannot alloc l2e.
\n
"
,
__func__
);
err
=
-
ENOMEM
;
...
...
drivers/infiniband/hw/nes/nes_cm.c
View file @
a493f1a2
...
...
@@ -1377,9 +1377,11 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi
neigh_release
(
neigh
);
}
if
((
neigh
==
NULL
)
||
(
!
(
neigh
->
nud_state
&
NUD_VALID
)))
if
((
neigh
==
NULL
)
||
(
!
(
neigh
->
nud_state
&
NUD_VALID
)))
{
rcu_read_lock
();
neigh_event_send
(
dst_get_neighbour
(
&
rt
->
dst
),
NULL
);
rcu_read_unlock
();
}
ip_rt_put
(
rt
);
return
rc
;
}
...
...
drivers/infiniband/hw/qib/qib_iba7322.c
View file @
a493f1a2
...
...
@@ -2307,19 +2307,11 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd)
SYM_LSB
(
IBCCtrlA_0
,
MaxPktLen
);
ppd
->
cpspec
->
ibcctrl_a
=
ibc
;
/* without linkcmd or linkinitcmd! */
/* initially come up waiting for TS1, without sending anything. */
val
=
ppd
->
cpspec
->
ibcctrl_a
|
(
QLOGIC_IB_IBCC_LINKINITCMD_DISABLE
<<
QLOGIC_IB_IBCC_LINKINITCMD_SHIFT
);
ppd
->
cpspec
->
ibcctrl_a
=
val
;
/*
* Reset the PCS interface to the serdes (and also ibc, which is still
* in reset from above). Writes new value of ibcctrl_a as last step.
*/
qib_7322_mini_pcs_reset
(
ppd
);
qib_write_kreg
(
dd
,
kr_scratch
,
0ULL
);
/* clear the linkinit cmds */
ppd
->
cpspec
->
ibcctrl_a
&=
~
SYM_MASK
(
IBCCtrlA_0
,
LinkInitCmd
);
if
(
!
ppd
->
cpspec
->
ibcctrl_b
)
{
unsigned
lse
=
ppd
->
link_speed_enabled
;
...
...
@@ -2385,6 +2377,14 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd)
ppd
->
cpspec
->
ibcctrl_a
|=
SYM_MASK
(
IBCCtrlA_0
,
IBLinkEn
);
set_vls
(
ppd
);
/* initially come up DISABLED, without sending anything. */
val
=
ppd
->
cpspec
->
ibcctrl_a
|
(
QLOGIC_IB_IBCC_LINKINITCMD_DISABLE
<<
QLOGIC_IB_IBCC_LINKINITCMD_SHIFT
);
qib_write_kreg_port
(
ppd
,
krp_ibcctrl_a
,
val
);
qib_write_kreg
(
dd
,
kr_scratch
,
0ULL
);
/* clear the linkinit cmds */
ppd
->
cpspec
->
ibcctrl_a
=
val
&
~
SYM_MASK
(
IBCCtrlA_0
,
LinkInitCmd
);
/* be paranoid against later code motion, etc. */
spin_lock_irqsave
(
&
dd
->
cspec
->
rcvmod_lock
,
flags
);
ppd
->
p_rcvctrl
|=
SYM_MASK
(
RcvCtrl_0
,
RcvIBPortEnable
);
...
...
@@ -5241,7 +5241,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
off */
if
(
ppd
->
dd
->
flags
&
QIB_HAS_QSFP
)
{
qd
->
t_insert
=
get_jiffies_64
();
schedule_work
(
&
qd
->
work
);
queue_work
(
ib_wq
,
&
qd
->
work
);
}
spin_lock_irqsave
(
&
ppd
->
sdma_lock
,
flags
);
if
(
__qib_sdma_running
(
ppd
))
...
...
drivers/infiniband/hw/qib/qib_qsfp.c
View file @
a493f1a2
...
...
@@ -480,18 +480,6 @@ void qib_qsfp_init(struct qib_qsfp_data *qd,
udelay
(
20
);
/* Generous RST dwell */
dd
->
f_gpio_mod
(
dd
,
mask
,
mask
,
mask
);
/* Spec says module can take up to two seconds! */
mask
=
QSFP_GPIO_MOD_PRS_N
;
if
(
qd
->
ppd
->
hw_pidx
)
mask
<<=
QSFP_GPIO_PORT2_SHIFT
;
/* Do not try to wait here. Better to let event handle it */
if
(
!
qib_qsfp_mod_present
(
qd
->
ppd
))
goto
bail
;
/* We see a module, but it may be unwise to look yet. Just schedule */
qd
->
t_insert
=
get_jiffies_64
();
queue_work
(
ib_wq
,
&
qd
->
work
);
bail:
return
;
}
...
...
drivers/infiniband/ulp/ipoib/ipoib_ib.c
View file @
a493f1a2
...
...
@@ -57,21 +57,24 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
struct
ib_pd
*
pd
,
struct
ib_ah_attr
*
attr
)
{
struct
ipoib_ah
*
ah
;
struct
ib_ah
*
vah
;
ah
=
kmalloc
(
sizeof
*
ah
,
GFP_KERNEL
);
if
(
!
ah
)
return
NULL
;
return
ERR_PTR
(
-
ENOMEM
)
;
ah
->
dev
=
dev
;
ah
->
last_send
=
0
;
kref_init
(
&
ah
->
ref
);
ah
->
ah
=
ib_create_ah
(
pd
,
attr
);
if
(
IS_ERR
(
ah
->
ah
))
{
v
ah
=
ib_create_ah
(
pd
,
attr
);
if
(
IS_ERR
(
v
ah
))
{
kfree
(
ah
);
ah
=
NULL
;
}
else
ah
=
(
struct
ipoib_ah
*
)
vah
;
}
else
{
ah
->
ah
=
vah
;
ipoib_dbg
(
netdev_priv
(
dev
),
"Created ah %p
\n
"
,
ah
->
ah
);
}
return
ah
;
}
...
...
drivers/infiniband/ulp/ipoib/ipoib_main.c
View file @
a493f1a2
...
...
@@ -432,7 +432,7 @@ static void path_rec_completion(int status,
spin_lock_irqsave
(
&
priv
->
lock
,
flags
);
if
(
ah
)
{
if
(
!
IS_ERR_OR_NULL
(
ah
)
)
{
path
->
pathrec
=
*
pathrec
;
old_ah
=
path
->
ah
;
...
...
@@ -555,6 +555,7 @@ static int path_rec_start(struct net_device *dev,
return
0
;
}
/* called with rcu_read_lock */
static
void
neigh_add_path
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
ipoib_dev_priv
*
priv
=
netdev_priv
(
dev
);
...
...
@@ -636,6 +637,7 @@ static void neigh_add_path(struct sk_buff *skb, struct net_device *dev)
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
}
/* called with rcu_read_lock */
static
void
ipoib_path_lookup
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
ipoib_dev_priv
*
priv
=
netdev_priv
(
skb
->
dev
);
...
...
@@ -720,13 +722,14 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct
neighbour
*
n
=
NULL
;
unsigned
long
flags
;
rcu_read_lock
();
if
(
likely
(
skb_dst
(
skb
)))
n
=
dst_get_neighbour
(
skb_dst
(
skb
));
if
(
likely
(
n
))
{
if
(
unlikely
(
!*
to_ipoib_neigh
(
n
)))
{
ipoib_path_lookup
(
skb
,
dev
);
return
NETDEV_TX_OK
;
goto
unlock
;
}
neigh
=
*
to_ipoib_neigh
(
n
);
...
...
@@ -749,17 +752,17 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
ipoib_neigh_free
(
dev
,
neigh
);
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
ipoib_path_lookup
(
skb
,
dev
);
return
NETDEV_TX_OK
;
goto
unlock
;
}
if
(
ipoib_cm_get
(
neigh
))
{
if
(
ipoib_cm_up
(
neigh
))
{
ipoib_cm_send
(
dev
,
skb
,
ipoib_cm_get
(
neigh
));
return
NETDEV_TX_OK
;
goto
unlock
;
}
}
else
if
(
neigh
->
ah
)
{
ipoib_send
(
dev
,
skb
,
neigh
->
ah
,
IPOIB_QPN
(
n
->
ha
));
return
NETDEV_TX_OK
;
goto
unlock
;
}
if
(
skb_queue_len
(
&
neigh
->
queue
)
<
IPOIB_MAX_PATH_REC_QUEUE
)
{
...
...
@@ -793,13 +796,14 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
phdr
->
hwaddr
+
4
);
dev_kfree_skb_any
(
skb
);
++
dev
->
stats
.
tx_dropped
;
return
NETDEV_TX_OK
;
goto
unlock
;
}
unicast_arp_send
(
skb
,
dev
,
phdr
);
}
}
unlock:
rcu_read_unlock
();
return
NETDEV_TX_OK
;
}
...
...
@@ -837,7 +841,7 @@ static int ipoib_hard_header(struct sk_buff *skb,
dst
=
skb_dst
(
skb
);
n
=
NULL
;
if
(
dst
)
n
=
dst_get_neighbour
(
dst
);
n
=
dst_get_neighbour
_raw
(
dst
);
if
((
!
dst
||
!
n
)
&&
daddr
)
{
struct
ipoib_pseudoheader
*
phdr
=
(
struct
ipoib_pseudoheader
*
)
skb_push
(
skb
,
sizeof
*
phdr
);
...
...
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
View file @
a493f1a2
...
...
@@ -240,8 +240,11 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
av
.
grh
.
dgid
=
mcast
->
mcmember
.
mgid
;
ah
=
ipoib_create_ah
(
dev
,
priv
->
pd
,
&
av
);
if
(
!
ah
)
{
ipoib_warn
(
priv
,
"ib_address_create failed
\n
"
);
if
(
IS_ERR
(
ah
))
{
ipoib_warn
(
priv
,
"ib_address_create failed %ld
\n
"
,
-
PTR_ERR
(
ah
));
/* use original error */
return
PTR_ERR
(
ah
);
}
else
{
spin_lock_irq
(
&
priv
->
lock
);
mcast
->
ah
=
ah
;
...
...
@@ -266,7 +269,7 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
skb
->
dev
=
dev
;
if
(
dst
)
n
=
dst_get_neighbour
(
dst
);
n
=
dst_get_neighbour
_raw
(
dst
);
if
(
!
dst
||
!
n
)
{
/* put pseudoheader back on for next time */
skb_push
(
skb
,
sizeof
(
struct
ipoib_pseudoheader
));
...
...
@@ -722,6 +725,8 @@ void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb)
if
(
mcast
&&
mcast
->
ah
)
{
struct
dst_entry
*
dst
=
skb_dst
(
skb
);
struct
neighbour
*
n
=
NULL
;
rcu_read_lock
();
if
(
dst
)
n
=
dst_get_neighbour
(
dst
);
if
(
n
&&
!*
to_ipoib_neigh
(
n
))
{
...
...
@@ -734,7 +739,7 @@ void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb)
list_add_tail
(
&
neigh
->
list
,
&
mcast
->
neigh_list
);
}
}
rcu_read_unlock
();
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
ipoib_send
(
dev
,
skb
,
mcast
->
ah
,
IB_MULTICAST_QPN
);
return
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment