Skip to content

Commit 8a34845

Browse files
tlfalcondavem330
authored andcommitted
ibmvnic: Create separate initialization routine for resets
Instead of having one initialization routine for all cases, create a separate, simpler function for standard initialization, such as during device probe. Use the original initialization function to handle device reset scenarios. The goal of this patch is to avoid having a single, cluttered init function to handle all possible scenarios. Signed-off-by: Thomas Falcon <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ab5ec33 commit 8a34845

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ static void send_cap_queries(struct ibmvnic_adapter *adapter);
116116
static int init_sub_crqs(struct ibmvnic_adapter *);
117117
static int init_sub_crq_irqs(struct ibmvnic_adapter *adapter);
118118
static int ibmvnic_init(struct ibmvnic_adapter *);
119+
static int ibmvnic_reset_init(struct ibmvnic_adapter *);
119120
static void release_crq_queue(struct ibmvnic_adapter *);
120121
static int __ibmvnic_set_mac(struct net_device *netdev, struct sockaddr *p);
121122
static int init_crq_queue(struct ibmvnic_adapter *adapter);
@@ -1807,7 +1808,7 @@ static int do_reset(struct ibmvnic_adapter *adapter,
18071808
return rc;
18081809
}
18091810

1810-
rc = ibmvnic_init(adapter);
1811+
rc = ibmvnic_reset_init(adapter);
18111812
if (rc)
18121813
return IBMVNIC_INIT_FAILED;
18131814

@@ -4571,7 +4572,7 @@ static int init_crq_queue(struct ibmvnic_adapter *adapter)
45714572
return retrc;
45724573
}
45734574

4574-
static int ibmvnic_init(struct ibmvnic_adapter *adapter)
4575+
static int ibmvnic_reset_init(struct ibmvnic_adapter *adapter)
45754576
{
45764577
struct device *dev = &adapter->vdev->dev;
45774578
unsigned long timeout = msecs_to_jiffies(30000);
@@ -4630,6 +4631,49 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
46304631
return rc;
46314632
}
46324633

4634+
static int ibmvnic_init(struct ibmvnic_adapter *adapter)
4635+
{
4636+
struct device *dev = &adapter->vdev->dev;
4637+
unsigned long timeout = msecs_to_jiffies(30000);
4638+
int rc;
4639+
4640+
adapter->from_passive_init = false;
4641+
4642+
init_completion(&adapter->init_done);
4643+
adapter->init_done_rc = 0;
4644+
ibmvnic_send_crq_init(adapter);
4645+
if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
4646+
dev_err(dev, "Initialization sequence timed out\n");
4647+
return -1;
4648+
}
4649+
4650+
if (adapter->init_done_rc) {
4651+
release_crq_queue(adapter);
4652+
return adapter->init_done_rc;
4653+
}
4654+
4655+
if (adapter->from_passive_init) {
4656+
adapter->state = VNIC_OPEN;
4657+
adapter->from_passive_init = false;
4658+
return -1;
4659+
}
4660+
4661+
rc = init_sub_crqs(adapter);
4662+
if (rc) {
4663+
dev_err(dev, "Initialization of sub crqs failed\n");
4664+
release_crq_queue(adapter);
4665+
return rc;
4666+
}
4667+
4668+
rc = init_sub_crq_irqs(adapter);
4669+
if (rc) {
4670+
dev_err(dev, "Failed to initialize sub crq irqs\n");
4671+
release_crq_queue(adapter);
4672+
}
4673+
4674+
return rc;
4675+
}
4676+
46334677
static struct device_attribute dev_attr_failover;
46344678

46354679
static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)

0 commit comments

Comments
 (0)