Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 184286
b: refs/heads/master
c: 7a1e9b2
h: refs/heads/master
v: v3
  • Loading branch information
Sathya Perla authored and David S. Miller committed Feb 17, 2010
1 parent a0928ab commit b324427
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a058a632747dd0f1799b12f4ecd54e43f5b5f10d
refs/heads/master: 7a1e9b2059d147461cff3dfbabbfb43f296a1eef
1 change: 1 addition & 0 deletions trunk/drivers/net/benet/be.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ struct be_eq_obj {
struct be_mcc_obj {
struct be_queue_info q;
struct be_queue_info cq;
bool rearm_cq;
};

struct be_drvr_stats {
Expand Down
20 changes: 18 additions & 2 deletions trunk/drivers/net/benet/be_cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,26 @@ static struct be_mcc_compl *be_mcc_compl_get(struct be_adapter *adapter)
return NULL;
}

void be_async_mcc_enable(struct be_adapter *adapter)
{
spin_lock_bh(&adapter->mcc_cq_lock);

be_cq_notify(adapter, adapter->mcc_obj.cq.id, true, 0);
adapter->mcc_obj.rearm_cq = true;

spin_unlock_bh(&adapter->mcc_cq_lock);
}

void be_async_mcc_disable(struct be_adapter *adapter)
{
adapter->mcc_obj.rearm_cq = false;
}

int be_process_mcc(struct be_adapter *adapter)
{
struct be_mcc_compl *compl;
int num = 0, status = 0;
struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;

spin_lock_bh(&adapter->mcc_cq_lock);
while ((compl = be_mcc_compl_get(adapter))) {
Expand All @@ -120,14 +136,14 @@ int be_process_mcc(struct be_adapter *adapter)
(struct be_async_event_link_state *) compl);
} else if (compl->flags & CQE_FLAGS_COMPLETED_MASK) {
status = be_mcc_compl_process(adapter, compl);
atomic_dec(&adapter->mcc_obj.q.used);
atomic_dec(&mcc_obj->q.used);
}
be_mcc_compl_use(compl);
num++;
}

if (num)
be_cq_notify(adapter, adapter->mcc_obj.cq.id, true, num);
be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num);

spin_unlock_bh(&adapter->mcc_cq_lock);
return status;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/benet/be_cmds.h
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,8 @@ extern int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac,
struct be_dma_mem *nonemb_cmd);
extern int be_cmd_fw_init(struct be_adapter *adapter);
extern int be_cmd_fw_clean(struct be_adapter *adapter);
extern void be_async_mcc_enable(struct be_adapter *adapter);
extern void be_async_mcc_disable(struct be_adapter *adapter);
extern int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
u32 loopback_type, u32 pkt_size,
u32 num_pkts, u64 pattern);
Expand Down
5 changes: 5 additions & 0 deletions trunk/drivers/net/benet/be_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1655,6 +1655,9 @@ static int be_open(struct net_device *netdev)
/* Rx compl queue may be in unarmed state; rearm it */
be_cq_notify(adapter, adapter->rx_obj.cq.id, true, 0);

/* Now that interrupts are on we can process async mcc */
be_async_mcc_enable(adapter);

status = be_cmd_link_status_query(adapter, &link_up, &mac_speed,
&link_speed);
if (status)
Expand Down Expand Up @@ -1780,6 +1783,8 @@ static int be_close(struct net_device *netdev)

cancel_delayed_work_sync(&adapter->work);

be_async_mcc_disable(adapter);

netif_stop_queue(netdev);
netif_carrier_off(netdev);
adapter->link_up = false;
Expand Down

0 comments on commit b324427

Please sign in to comment.