mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-19 11:04:00 +08:00
S2io: Removed rx_lock and put_lock
- Removed rx_lock and put_lock as the buffer replenishment and receive completion is handled serially. Signed-off-by: Surjit Reang <surjit.reang@neterion.com> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com> Signed-off-by: Ramkrishna Vepa <ram.vepa@neterion.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
99993af698
commit
c9fcbf4774
@ -2530,7 +2530,6 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
|
|||||||
struct config_param *config;
|
struct config_param *config;
|
||||||
u64 tmp;
|
u64 tmp;
|
||||||
struct buffAdd *ba;
|
struct buffAdd *ba;
|
||||||
unsigned long flags;
|
|
||||||
struct RxD_t *first_rxdp = NULL;
|
struct RxD_t *first_rxdp = NULL;
|
||||||
u64 Buffer0_ptr = 0, Buffer1_ptr = 0;
|
u64 Buffer0_ptr = 0, Buffer1_ptr = 0;
|
||||||
struct RxD1 *rxdp1;
|
struct RxD1 *rxdp1;
|
||||||
@ -2578,15 +2577,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
|
|||||||
DBG_PRINT(INTR_DBG, "%s: Next block at: %p\n",
|
DBG_PRINT(INTR_DBG, "%s: Next block at: %p\n",
|
||||||
dev->name, rxdp);
|
dev->name, rxdp);
|
||||||
}
|
}
|
||||||
if(!napi) {
|
|
||||||
spin_lock_irqsave(&nic->put_lock, flags);
|
|
||||||
mac_control->rings[ring_no].put_pos =
|
|
||||||
(block_no * (rxd_count[nic->rxd_mode] + 1)) + off;
|
|
||||||
spin_unlock_irqrestore(&nic->put_lock, flags);
|
|
||||||
} else {
|
|
||||||
mac_control->rings[ring_no].put_pos =
|
|
||||||
(block_no * (rxd_count[nic->rxd_mode] + 1)) + off;
|
|
||||||
}
|
|
||||||
if ((rxdp->Control_1 & RXD_OWN_XENA) &&
|
if ((rxdp->Control_1 & RXD_OWN_XENA) &&
|
||||||
((nic->rxd_mode == RXD_MODE_3B) &&
|
((nic->rxd_mode == RXD_MODE_3B) &&
|
||||||
(rxdp->Control_2 & s2BIT(0)))) {
|
(rxdp->Control_2 & s2BIT(0)))) {
|
||||||
@ -2964,7 +2955,7 @@ static void rx_intr_handler(struct ring_info *ring_data)
|
|||||||
{
|
{
|
||||||
struct s2io_nic *nic = ring_data->nic;
|
struct s2io_nic *nic = ring_data->nic;
|
||||||
struct net_device *dev = (struct net_device *) nic->dev;
|
struct net_device *dev = (struct net_device *) nic->dev;
|
||||||
int get_block, put_block, put_offset;
|
int get_block, put_block;
|
||||||
struct rx_curr_get_info get_info, put_info;
|
struct rx_curr_get_info get_info, put_info;
|
||||||
struct RxD_t *rxdp;
|
struct RxD_t *rxdp;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
@ -2973,19 +2964,11 @@ static void rx_intr_handler(struct ring_info *ring_data)
|
|||||||
struct RxD1* rxdp1;
|
struct RxD1* rxdp1;
|
||||||
struct RxD3* rxdp3;
|
struct RxD3* rxdp3;
|
||||||
|
|
||||||
spin_lock(&nic->rx_lock);
|
|
||||||
|
|
||||||
get_info = ring_data->rx_curr_get_info;
|
get_info = ring_data->rx_curr_get_info;
|
||||||
get_block = get_info.block_index;
|
get_block = get_info.block_index;
|
||||||
memcpy(&put_info, &ring_data->rx_curr_put_info, sizeof(put_info));
|
memcpy(&put_info, &ring_data->rx_curr_put_info, sizeof(put_info));
|
||||||
put_block = put_info.block_index;
|
put_block = put_info.block_index;
|
||||||
rxdp = ring_data->rx_blocks[get_block].rxds[get_info.offset].virt_addr;
|
rxdp = ring_data->rx_blocks[get_block].rxds[get_info.offset].virt_addr;
|
||||||
if (!napi) {
|
|
||||||
spin_lock(&nic->put_lock);
|
|
||||||
put_offset = ring_data->put_pos;
|
|
||||||
spin_unlock(&nic->put_lock);
|
|
||||||
} else
|
|
||||||
put_offset = ring_data->put_pos;
|
|
||||||
|
|
||||||
while (RXD_IS_UP2DT(rxdp)) {
|
while (RXD_IS_UP2DT(rxdp)) {
|
||||||
/*
|
/*
|
||||||
@ -3002,7 +2985,6 @@ static void rx_intr_handler(struct ring_info *ring_data)
|
|||||||
DBG_PRINT(ERR_DBG, "%s: The skb is ",
|
DBG_PRINT(ERR_DBG, "%s: The skb is ",
|
||||||
dev->name);
|
dev->name);
|
||||||
DBG_PRINT(ERR_DBG, "Null in Rx Intr\n");
|
DBG_PRINT(ERR_DBG, "Null in Rx Intr\n");
|
||||||
spin_unlock(&nic->rx_lock);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (nic->rxd_mode == RXD_MODE_1) {
|
if (nic->rxd_mode == RXD_MODE_1) {
|
||||||
@ -3058,8 +3040,6 @@ static void rx_intr_handler(struct ring_info *ring_data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&nic->rx_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -7083,7 +7063,6 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io)
|
|||||||
{
|
{
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
struct XENA_dev_config __iomem *bar0 = sp->bar0;
|
struct XENA_dev_config __iomem *bar0 = sp->bar0;
|
||||||
unsigned long flags;
|
|
||||||
register u64 val64 = 0;
|
register u64 val64 = 0;
|
||||||
struct config_param *config;
|
struct config_param *config;
|
||||||
config = &sp->config;
|
config = &sp->config;
|
||||||
@ -7142,9 +7121,7 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io)
|
|||||||
free_tx_buffers(sp);
|
free_tx_buffers(sp);
|
||||||
|
|
||||||
/* Free all Rx buffers */
|
/* Free all Rx buffers */
|
||||||
spin_lock_irqsave(&sp->rx_lock, flags);
|
|
||||||
free_rx_buffers(sp);
|
free_rx_buffers(sp);
|
||||||
spin_unlock_irqrestore(&sp->rx_lock, flags);
|
|
||||||
|
|
||||||
clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state));
|
clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state));
|
||||||
}
|
}
|
||||||
@ -8044,10 +8021,6 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
|
|||||||
for (i = 0; i < sp->config.tx_fifo_num; i++)
|
for (i = 0; i < sp->config.tx_fifo_num; i++)
|
||||||
spin_lock_init(&mac_control->fifos[i].tx_lock);
|
spin_lock_init(&mac_control->fifos[i].tx_lock);
|
||||||
|
|
||||||
if (!napi)
|
|
||||||
spin_lock_init(&sp->put_lock);
|
|
||||||
spin_lock_init(&sp->rx_lock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SXE-002: Configure link and activity LED to init state
|
* SXE-002: Configure link and activity LED to init state
|
||||||
* on driver load.
|
* on driver load.
|
||||||
|
@ -703,9 +703,6 @@ struct ring_info {
|
|||||||
*/
|
*/
|
||||||
struct rx_curr_get_info rx_curr_get_info;
|
struct rx_curr_get_info rx_curr_get_info;
|
||||||
|
|
||||||
/* Index to the absolute position of the put pointer of Rx ring */
|
|
||||||
int put_pos;
|
|
||||||
|
|
||||||
/* Buffer Address store. */
|
/* Buffer Address store. */
|
||||||
struct buffAdd **ba;
|
struct buffAdd **ba;
|
||||||
struct s2io_nic *nic;
|
struct s2io_nic *nic;
|
||||||
@ -877,8 +874,6 @@ struct s2io_nic {
|
|||||||
|
|
||||||
atomic_t rx_bufs_left[MAX_RX_RINGS];
|
atomic_t rx_bufs_left[MAX_RX_RINGS];
|
||||||
|
|
||||||
spinlock_t put_lock;
|
|
||||||
|
|
||||||
#define PROMISC 1
|
#define PROMISC 1
|
||||||
#define ALL_MULTI 2
|
#define ALL_MULTI 2
|
||||||
|
|
||||||
@ -962,7 +957,6 @@ struct s2io_nic {
|
|||||||
u8 lro;
|
u8 lro;
|
||||||
u16 lro_max_aggr_per_sess;
|
u16 lro_max_aggr_per_sess;
|
||||||
volatile unsigned long state;
|
volatile unsigned long state;
|
||||||
spinlock_t rx_lock;
|
|
||||||
u64 general_int_mask;
|
u64 general_int_mask;
|
||||||
#define VPD_STRING_LEN 80
|
#define VPD_STRING_LEN 80
|
||||||
u8 product_name[VPD_STRING_LEN];
|
u8 product_name[VPD_STRING_LEN];
|
||||||
|
Loading…
Reference in New Issue
Block a user