Patch "ibmvnic: Initialize completion variables before starting work" has been added to the 4.9-stable tree
This is a note to let you know that I've just added the patch titled
ibmvnic: Initialize completion variables before starting work
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ibmvnic-initialize-completion-variables-before-starting-work.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 15 11:12:23 CEST 2017
From: Nathan Fontenot <[email protected]>
Date: Tue, 23 May 2017 21:53:39 -0400
Subject: ibmvnic: Initialize completion variables before starting work
From: Nathan Fontenot <[email protected]>
[ Upstream commit db5d0b597bc27bbddf40f2f8359a73be4eb77104 ]
Initialize condition variables prior to invoking any work that can mark them complete. This resolves a race in the ibmvnic driver where the driver faults trying to complete an uninitialized condition variable.
--- drivers/net/ethernet/ibm/ibmvnic.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/net/ethernet/ibm/ibmvnic.c +9 -8
@@ -189,9 +189,10 @@ static int alloc_long_term_buff(struct i } ltb->map_id = adapter->map_id; adapter->map_id++; + +init_completion (&adapter->fw_done);send_request_map (adapter, ltb->addr, ltb->size, ltb->map_id); -init_completion (&adapter->fw_done);wait_for_completion (&adapter->fw_done);return 0 ; }
@@ -1133,10 +1134,10 @@ static void ibmvnic_get_ethtool_stats(st crq.request_statistics.ioba =cpu_to_be32 (adapter->stats_token); crq.request_statistics.len =cpu_to_be32 (sizeof (struct ibmvnic_statistics )); -ibmvnic_send_crq (adapter, &crq);/* Wait for data to be written */ init_completion (&adapter->stats_done); +ibmvnic_send_crq (adapter, &crq);wait_for_completion (&adapter->stats_done);for (i =0 ; i <ARRAY_SIZE (ibmvnic_stats); i++)
@@ -2809,9 +2810,9 @@ static ssize_t trace_read(struct file *f crq.collect_fw_trace.correlator = adapter->ras_comps[num].correlator; crq.collect_fw_trace.ioba =cpu_to_be32 (trace_tok); crq.collect_fw_trace.len = adapter->ras_comps[num].trace_buff_size; -ibmvnic_send_crq (adapter, &crq);init_completion (&adapter->fw_done); +ibmvnic_send_crq (adapter, &crq);wait_for_completion (&adapter->fw_done);if (*ppos + len >be32_to_cpu (adapter->ras_comps[num].trace_buff_size))
@@ -3591,9 +3592,9 @@ static int ibmvnic_dump_show(struct seq_memset (&crq,0 ,sizeof (crq)); crq.request_dump_size.first =IBMVNIC_CRQ_CMD ; crq.request_dump_size.cmd =REQUEST_DUMP_SIZE ; -ibmvnic_send_crq (adapter, &crq);init_completion (&adapter->fw_done); +ibmvnic_send_crq (adapter, &crq);wait_for_completion (&adapter->fw_done);seq_write (seq, adapter->dump_data, adapter->dump_data_size);
@@ -3639,8 +3640,8 @@ static void handle_crq_init_rsp(struct w } } -send_version_xchg (adapter);reinit_completion (&adapter->init_done); +send_version_xchg (adapter);if (!wait_for_completion_timeout (&adapter->init_done, timeout)) {dev_err (dev,"Passive init timeout\n" ); goto task_failed;
@@ -3650,9 +3651,9 @@ static void handle_crq_init_rsp(struct wif (adapter->renegotiate) { adapter->renegotiate = false;release_sub_crqs_no_irqs (adapter); -send_cap_queries (adapter);reinit_completion (&adapter->init_done); +send_cap_queries (adapter);if (!wait_for_completion_timeout (&adapter->init_done, timeout)) {dev_err (dev,"Passive init timeout\n" );
@@ -3780,9 +3781,9 @@ static int ibmvnic_probe(struct vio_dev adapter->debugfs_dump = ent; } } -ibmvnic_send_crq_init (adapter);init_completion (&adapter->init_done); +ibmvnic_send_crq_init (adapter);if (!wait_for_completion_timeout (&adapter->init_done, timeout))return 0 ;
@@ -3790,9 +3791,9 @@ static int ibmvnic_probe(struct vio_devif (adapter->renegotiate) { adapter->renegotiate = false;release_sub_crqs_no_irqs (adapter); -send_cap_queries (adapter);reinit_completion (&adapter->init_done); +send_cap_queries (adapter);if (!wait_for_completion_timeout (&adapter->init_done, timeout))return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/ibmvnic-call-napi_disable-instead-of-napi_enable-in-failure-path.patch queue-4.9/ibmvnic-initialize-completion-variables-before-starting-work.patch