Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1714034 > unrolled thread
| Started by | Jiri Kosina <jikos@kernel.org> |
|---|---|
| First post | 2017-08-17 15:40 +0200 |
| Last post | 2017-08-31 08:20 +0200 |
| Articles | 13 — 5 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [linuxwifi] x86/thermal: AB-BA dependency between mvm->mutex and tz->lock Jiri Kosina <jikos@kernel.org> - 2017-08-17 15:40 +0200
Re: [linuxwifi] x86/thermal: AB-BA dependency between mvm->mutex and tz->lock "Coelho, Luciano" <luciano.coelho@intel.com> - 2017-08-17 16:10 +0200
[PATCH] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-08-22 09:40 +0200
[PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-08-22 09:40 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-08-24 08:10 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Jiri Kosina <jikos@kernel.org> - 2017-08-24 22:00 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-08-24 22:10 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Kalle Valo <kvalo@codeaurora.org> - 2017-08-29 10:20 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-09-04 13:50 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Jiri Kosina <jikos@kernel.org> - 2017-09-04 13:50 +0200
Re: [v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Kalle Valo <kvalo@codeaurora.org> - 2017-08-24 16:00 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() David Weinehall <david.weinehall@linux.intel.com> - 2017-08-30 17:00 +0200
Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() Luca Coelho <luca@coelho.fi> - 2017-08-31 08:20 +0200
| From | Jiri Kosina <jikos@kernel.org> |
|---|---|
| Date | 2017-08-17 15:40 +0200 |
| Subject | Re: [linuxwifi] x86/thermal: AB-BA dependency between mvm->mutex and tz->lock |
| Message-ID | <uftbH-5uW-7@gated-at.bofh.it> |
Hi, anything new on this front please? The splat (and therefore deadlock potential) is still there with current Linus' tree. Thanks, -- Jiri Kosina SUSE Labs
[toc] | [next] | [standalone]
| From | "Coelho, Luciano" <luciano.coelho@intel.com> |
|---|---|
| Date | 2017-08-17 16:10 +0200 |
| Message-ID | <uftEJ-5VR-15@gated-at.bofh.it> |
| In reply to | #1714034 |
On Thu, 2017-08-17 at 15:38 +0200, Jiri Kosina wrote: > Hi, > > anything new on this front please? > > The splat (and therefore deadlock potential) is still there with current > Linus' tree. Sorry, haven't had more time to spend on it. I'll do it this evening. But, just to clarify, the deadlock potential has been there for a while, right? The only difference is that now we get the splat. Not saying we shouldn't fix it though. ;) -- Luca.
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-08-22 09:40 +0200 |
| Subject | [PATCH] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <uhbX3-7Cz-1@gated-at.bofh.it> |
| In reply to | #1714034 |
From: Luca Coelho <luciano.coelho@intel.com>
Work queues cannot be allocated in when a mutex is held because the
mutex may be in use and that would make it sleep. Doing so generates
the following splat with 4.13+:
[ 19.513298] ======================================================
[ 19.513429] WARNING: possible circular locking dependency detected
[ 19.513557] 4.13.0-rc5+ #6 Not tainted
[ 19.513638] ------------------------------------------------------
[ 19.513767] cpuhp/0/12 is trying to acquire lock:
[ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
[ 19.514047]
[ 19.514047] but task is already holding lock:
[ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
[ 19.514338]
[ 19.514338] which lock already depends on the new lock.
This lock dependency already existed with previous kernel versions,
but it was not detected until commit ... was introduced.
Reported-by: David Weinehall <david.weinehall@intel.com>
Reported-by: Jiri Kosina <jikos@kernel.org>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 2 ++
drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 10 +---------
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 9 +++++++++
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
index fa315d84e98e..a1ea9ef97ed9 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
@@ -787,6 +787,8 @@ int iwl_pci_fw_enter_d0i3(struct iwl_trans *trans);
void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable);
+void iwl_pcie_rx_allocator_work(struct work_struct *data);
+
/* common functions that are used by gen2 transport */
void iwl_pcie_apm_config(struct iwl_trans *trans);
int iwl_pcie_prepare_card_hw(struct iwl_trans *trans);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
index 351c4423125a..942736d3fa75 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
@@ -597,7 +597,7 @@ static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans,
rxq->free_count += RX_CLAIM_REQ_ALLOC;
}
-static void iwl_pcie_rx_allocator_work(struct work_struct *data)
+void iwl_pcie_rx_allocator_work(struct work_struct *data)
{
struct iwl_rb_allocator *rba_p =
container_of(data, struct iwl_rb_allocator, rx_alloc);
@@ -900,10 +900,6 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans)
return err;
}
def_rxq = trans_pcie->rxq;
- if (!rba->alloc_wq)
- rba->alloc_wq = alloc_workqueue("rb_allocator",
- WQ_HIGHPRI | WQ_UNBOUND, 1);
- INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work);
spin_lock(&rba->lock);
atomic_set(&rba->req_pending, 0);
@@ -1017,10 +1013,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans)
}
cancel_work_sync(&rba->rx_alloc);
- if (rba->alloc_wq) {
- destroy_workqueue(rba->alloc_wq);
- rba->alloc_wq = NULL;
- }
iwl_pcie_free_rbs_pool(trans);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index f95eec52508e..3927bbf04f72 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -1786,6 +1786,11 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
iwl_pcie_tx_free(trans);
iwl_pcie_rx_free(trans);
+ if (trans_pcie->rba.alloc_wq) {
+ destroy_workqueue(trans_pcie->rba.alloc_wq);
+ trans_pcie->rba.alloc_wq = NULL;
+ }
+
if (trans_pcie->msix_enabled) {
for (i = 0; i < trans_pcie->alloc_vecs; i++) {
irq_set_affinity_hint(
@@ -3169,6 +3174,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
trans_pcie->inta_mask = CSR_INI_SET_MASK;
}
+ trans_pcie->rba.alloc_wq = alloc_workqueue("rb_allocator",
+ WQ_HIGHPRI | WQ_UNBOUND, 1);
+ INIT_WORK(&trans_pcie->rba.rx_alloc, iwl_pcie_rx_allocator_work);
+
#ifdef CONFIG_IWLWIFI_PCIE_RTPM
trans->runtime_pm_mode = IWL_PLAT_PM_MODE_D0I3;
#else
--
2.14.1
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-08-22 09:40 +0200 |
| Subject | [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <uhbX4-7Cz-27@gated-at.bofh.it> |
| In reply to | #1714034 |
From: Luca Coelho <luciano.coelho@intel.com>
Work queues cannot be allocated when a mutex is held because the mutex
may be in use and that would make it sleep. Doing so generates the
following splat with 4.13+:
[ 19.513298] ======================================================
[ 19.513429] WARNING: possible circular locking dependency detected
[ 19.513557] 4.13.0-rc5+ #6 Not tainted
[ 19.513638] ------------------------------------------------------
[ 19.513767] cpuhp/0/12 is trying to acquire lock:
[ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
[ 19.514047]
[ 19.514047] but task is already holding lock:
[ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
[ 19.514338]
[ 19.514338] which lock already depends on the new lock.
This lock dependency already existed with previous kernel versions,
but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
lock stacks for hotplug callbacks") was introduced.
Reported-by: David Weinehall <david.weinehall@intel.com>
Reported-by: Jiri Kosina <jikos@kernel.org>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
In v2:
- updated the commit message to a new version, with a grammar fix
and the actual commit that exposed the problem;
drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 2 ++
drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 10 +---------
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 9 +++++++++
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
index fa315d84e98e..a1ea9ef97ed9 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
@@ -787,6 +787,8 @@ int iwl_pci_fw_enter_d0i3(struct iwl_trans *trans);
void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable);
+void iwl_pcie_rx_allocator_work(struct work_struct *data);
+
/* common functions that are used by gen2 transport */
void iwl_pcie_apm_config(struct iwl_trans *trans);
int iwl_pcie_prepare_card_hw(struct iwl_trans *trans);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
index 351c4423125a..942736d3fa75 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
@@ -597,7 +597,7 @@ static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans,
rxq->free_count += RX_CLAIM_REQ_ALLOC;
}
-static void iwl_pcie_rx_allocator_work(struct work_struct *data)
+void iwl_pcie_rx_allocator_work(struct work_struct *data)
{
struct iwl_rb_allocator *rba_p =
container_of(data, struct iwl_rb_allocator, rx_alloc);
@@ -900,10 +900,6 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans)
return err;
}
def_rxq = trans_pcie->rxq;
- if (!rba->alloc_wq)
- rba->alloc_wq = alloc_workqueue("rb_allocator",
- WQ_HIGHPRI | WQ_UNBOUND, 1);
- INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work);
spin_lock(&rba->lock);
atomic_set(&rba->req_pending, 0);
@@ -1017,10 +1013,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans)
}
cancel_work_sync(&rba->rx_alloc);
- if (rba->alloc_wq) {
- destroy_workqueue(rba->alloc_wq);
- rba->alloc_wq = NULL;
- }
iwl_pcie_free_rbs_pool(trans);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index f95eec52508e..3927bbf04f72 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -1786,6 +1786,11 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
iwl_pcie_tx_free(trans);
iwl_pcie_rx_free(trans);
+ if (trans_pcie->rba.alloc_wq) {
+ destroy_workqueue(trans_pcie->rba.alloc_wq);
+ trans_pcie->rba.alloc_wq = NULL;
+ }
+
if (trans_pcie->msix_enabled) {
for (i = 0; i < trans_pcie->alloc_vecs; i++) {
irq_set_affinity_hint(
@@ -3169,6 +3174,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
trans_pcie->inta_mask = CSR_INI_SET_MASK;
}
+ trans_pcie->rba.alloc_wq = alloc_workqueue("rb_allocator",
+ WQ_HIGHPRI | WQ_UNBOUND, 1);
+ INIT_WORK(&trans_pcie->rba.rx_alloc, iwl_pcie_rx_allocator_work);
+
#ifdef CONFIG_IWLWIFI_PCIE_RTPM
trans->runtime_pm_mode = IWL_PLAT_PM_MODE_D0I3;
#else
--
2.14.1
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-08-24 08:10 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <uhTv4-2Hg-7@gated-at.bofh.it> |
| In reply to | #1717099 |
On Tue, 2017-08-22 at 10:37 +0300, Luca Coelho wrote:
> From: Luca Coelho <luciano.coelho@intel.com>
>
> Work queues cannot be allocated when a mutex is held because the mutex
> may be in use and that would make it sleep. Doing so generates the
> following splat with 4.13+:
>
> [ 19.513298] ======================================================
> [ 19.513429] WARNING: possible circular locking dependency detected
> [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> [ 19.513638] ------------------------------------------------------
> [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> [ 19.514047]
> [ 19.514047] but task is already holding lock:
> [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> [ 19.514338]
> [ 19.514338] which lock already depends on the new lock.
>
> This lock dependency already existed with previous kernel versions,
> but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> lock stacks for hotplug callbacks") was introduced.
>
> Reported-by: David Weinehall <david.weinehall@intel.com>
> Reported-by: Jiri Kosina <jikos@kernel.org>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Jiri, did you have a chance to try this out? I'm about to ask Kalle to
merge this so it gets in in time for 4.13-rc7.
--
Cheers,
Luca.
[toc] | [prev] | [next] | [standalone]
| From | Jiri Kosina <jikos@kernel.org> |
|---|---|
| Date | 2017-08-24 22:00 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ui6sh-2o2-1@gated-at.bofh.it> |
| In reply to | #1718858 |
On Thu, 24 Aug 2017, Luca Coelho wrote:
> > Work queues cannot be allocated when a mutex is held because the mutex
> > may be in use and that would make it sleep. Doing so generates the
> > following splat with 4.13+:
> >
> > [ 19.513298] ======================================================
> > [ 19.513429] WARNING: possible circular locking dependency detected
> > [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> > [ 19.513638] ------------------------------------------------------
> > [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> > [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> > [ 19.514047]
> > [ 19.514047] but task is already holding lock:
> > [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> > [ 19.514338]
> > [ 19.514338] which lock already depends on the new lock.
> >
> > This lock dependency already existed with previous kernel versions,
> > but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> > lock stacks for hotplug callbacks") was introduced.
> >
> > Reported-by: David Weinehall <david.weinehall@intel.com>
> > Reported-by: Jiri Kosina <jikos@kernel.org>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
>
> Jiri, did you have a chance to try this out? I'm about to ask Kalle to
> merge this so it gets in in time for 4.13-rc7.
Sorry, I am almost completely offline for one more week (vacation), and
will not have access to the affected system before that. But this indeed
looks like a correct fix to me, so feel free to add
Acked-by: Jiri Kosina <jkosina@suse.cz>
I'll be able to provide my Tested-by: eventually only in ~10 days.
Thanks,
--
Jiri Kosina
SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-08-24 22:10 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ui6BY-2Gh-9@gated-at.bofh.it> |
| In reply to | #1719534 |
On Thu, 2017-08-24 at 21:56 +0200, Jiri Kosina wrote:
> On Thu, 24 Aug 2017, Luca Coelho wrote:
>
> > > Work queues cannot be allocated when a mutex is held because the mutex
> > > may be in use and that would make it sleep. Doing so generates the
> > > following splat with 4.13+:
> > >
> > > [ 19.513298] ======================================================
> > > [ 19.513429] WARNING: possible circular locking dependency detected
> > > [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> > > [ 19.513638] ------------------------------------------------------
> > > [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> > > [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> > > [ 19.514047]
> > > [ 19.514047] but task is already holding lock:
> > > [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> > > [ 19.514338]
> > > [ 19.514338] which lock already depends on the new lock.
> > >
> > > This lock dependency already existed with previous kernel versions,
> > > but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> > > lock stacks for hotplug callbacks") was introduced.
> > >
> > > Reported-by: David Weinehall <david.weinehall@intel.com>
> > > Reported-by: Jiri Kosina <jikos@kernel.org>
> > > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> >
> > Jiri, did you have a chance to try this out? I'm about to ask Kalle to
> > merge this so it gets in in time for 4.13-rc7.
>
> Sorry, I am almost completely offline for one more week (vacation), and
> will not have access to the affected system before that.
Sounds good! Enjoy! ;)
> But this indeed
> looks like a correct fix to me, so feel free to add
>
> Acked-by: Jiri Kosina <jkosina@suse.cz>
>
> I'll be able to provide my Tested-by: eventually only in ~10 days.
Kalle already picked it up in wireless-drivers and this should make it's
way to 4.13-rc7 (we hope).
In any case, thanks for reporting and the help debugging it.
--
Cheers,
Luca.
[toc] | [prev] | [next] | [standalone]
| From | Kalle Valo <kvalo@codeaurora.org> |
|---|---|
| Date | 2017-08-29 10:20 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ujJUB-bY-1@gated-at.bofh.it> |
| In reply to | #1719538 |
Luca Coelho <luca@coelho.fi> writes:
> On Thu, 2017-08-24 at 21:56 +0200, Jiri Kosina wrote:
>> On Thu, 24 Aug 2017, Luca Coelho wrote:
>>
>> > > Work queues cannot be allocated when a mutex is held because the mutex
>> > > may be in use and that would make it sleep. Doing so generates the
>> > > following splat with 4.13+:
>> > >
>> > > [ 19.513298] ======================================================
>> > > [ 19.513429] WARNING: possible circular locking dependency detected
>> > > [ 19.513557] 4.13.0-rc5+ #6 Not tainted
>> > > [ 19.513638] ------------------------------------------------------
>> > > [ 19.513767] cpuhp/0/12 is trying to acquire lock:
>> > > [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>]
>> > > thermal_zone_get_temp+0x5b/0xb0
>> > > [ 19.514047]
>> > > [ 19.514047] but task is already holding lock:
>> > > [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>]
>> > > cpuhp_thread_fun+0x3a/0x210
>> > > [ 19.514338]
>> > > [ 19.514338] which lock already depends on the new lock.
>> > >
>> > > This lock dependency already existed with previous kernel versions,
>> > > but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
>> > > lock stacks for hotplug callbacks") was introduced.
>> > >
>> > > Reported-by: David Weinehall <david.weinehall@intel.com>
>> > > Reported-by: Jiri Kosina <jikos@kernel.org>
>> > > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
>> >
>> > Jiri, did you have a chance to try this out? I'm about to ask Kalle to
>> > merge this so it gets in in time for 4.13-rc7.
>>
>> Sorry, I am almost completely offline for one more week (vacation), and
>> will not have access to the affected system before that.
>
> Sounds good! Enjoy! ;)
>
>
>> But this indeed
>> looks like a correct fix to me, so feel free to add
>>
>> Acked-by: Jiri Kosina <jkosina@suse.cz>
>>
>> I'll be able to provide my Tested-by: eventually only in ~10 days.
>
>
> Kalle already picked it up in wireless-drivers and this should make it's
> way to 4.13-rc7 (we hope).
It (10a54d8196d1) didn't make it to -rc7 but it's in net tree now and
should make it to the next release on Sunday (either -rc8 or the final).
--
Kalle Valo
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-09-04 13:50 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ulY37-4ZN-3@gated-at.bofh.it> |
| In reply to | #1719538 |
On Mon, 2017-09-04 at 13:43 +0200, Jiri Kosina wrote: > On Thu, 24 Aug 2017, Luca Coelho wrote: > > > > looks like a correct fix to me, so feel free to add > > > > > > Acked-by: Jiri Kosina <jkosina@suse.cz> > > > > > > I'll be able to provide my Tested-by: eventually only in ~10 days. > > > > > > Kalle already picked it up in wireless-drivers and this should make it's > > way to 4.13-rc7 (we hope). > > > > In any case, thanks for reporting and the help debugging it. > > I know it's pretty late for this to be added to the commit, but I don't > want this to be left in the void, so for the sake of completness: > > Tested-by: Jiri Kosina <jkosina@suse.cz> Thanks, Jiri, for reporting, debugging and testing! -- Cheers, Luca.
[toc] | [prev] | [next] | [standalone]
| From | Jiri Kosina <jikos@kernel.org> |
|---|---|
| Date | 2017-09-04 13:50 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ulY37-4ZN-5@gated-at.bofh.it> |
| In reply to | #1719538 |
On Thu, 24 Aug 2017, Luca Coelho wrote: > > looks like a correct fix to me, so feel free to add > > > > Acked-by: Jiri Kosina <jkosina@suse.cz> > > > > I'll be able to provide my Tested-by: eventually only in ~10 days. > > > Kalle already picked it up in wireless-drivers and this should make it's > way to 4.13-rc7 (we hope). > > In any case, thanks for reporting and the help debugging it. I know it's pretty late for this to be added to the commit, but I don't want this to be left in the void, so for the sake of completness: Tested-by: Jiri Kosina <jkosina@suse.cz> Thanks, -- Jiri Kosina SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Kalle Valo <kvalo@codeaurora.org> |
|---|---|
| Date | 2017-08-24 16:00 +0200 |
| Subject | Re: [v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ui0PT-7jh-1@gated-at.bofh.it> |
| In reply to | #1717099 |
Luciano Coelho <luca@coelho.fi> wrote:
> From: Luca Coelho <luciano.coelho@intel.com>
>
> Work queues cannot be allocated when a mutex is held because the mutex
> may be in use and that would make it sleep. Doing so generates the
> following splat with 4.13+:
>
> [ 19.513298] ======================================================
> [ 19.513429] WARNING: possible circular locking dependency detected
> [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> [ 19.513638] ------------------------------------------------------
> [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> [ 19.514047]
> [ 19.514047] but task is already holding lock:
> [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> [ 19.514338]
> [ 19.514338] which lock already depends on the new lock.
>
> This lock dependency already existed with previous kernel versions,
> but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> lock stacks for hotplug callbacks") was introduced.
>
> Reported-by: David Weinehall <david.weinehall@intel.com>
> Reported-by: Jiri Kosina <jikos@kernel.org>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Patch applied to wireless-drivers.git, thanks.
10a54d8196d1 iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc()
--
https://patchwork.kernel.org/patch/9914349/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
[toc] | [prev] | [next] | [standalone]
| From | David Weinehall <david.weinehall@linux.intel.com> |
|---|---|
| Date | 2017-08-30 17:00 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ukcDg-19H-17@gated-at.bofh.it> |
| In reply to | #1717099 |
On Tue, Aug 22, 2017 at 10:37:29AM +0300, Luca Coelho wrote:
> From: Luca Coelho <luciano.coelho@intel.com>
>
> Work queues cannot be allocated when a mutex is held because the mutex
> may be in use and that would make it sleep. Doing so generates the
> following splat with 4.13+:
>
> [ 19.513298] ======================================================
> [ 19.513429] WARNING: possible circular locking dependency detected
> [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> [ 19.513638] ------------------------------------------------------
> [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> [ 19.514047]
> [ 19.514047] but task is already holding lock:
> [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> [ 19.514338]
> [ 19.514338] which lock already depends on the new lock.
>
> This lock dependency already existed with previous kernel versions,
> but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> lock stacks for hotplug callbacks") was introduced.
>
> Reported-by: David Weinehall <david.weinehall@intel.com>
> Reported-by: Jiri Kosina <jikos@kernel.org>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
With this patch I no longer get the lockdep warning,
and the driver seems to work just as well as before.
Thanks!
Tested-by: David Weinehall <david.weinehall@linux.intel.com>
> ---
> In v2:
> - updated the commit message to a new version, with a grammar fix
> and the actual commit that exposed the problem;
>
> drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 2 ++
> drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 10 +---------
> drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 9 +++++++++
> 3 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
> index fa315d84e98e..a1ea9ef97ed9 100644
> --- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
> +++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
> @@ -787,6 +787,8 @@ int iwl_pci_fw_enter_d0i3(struct iwl_trans *trans);
>
> void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable);
>
> +void iwl_pcie_rx_allocator_work(struct work_struct *data);
> +
> /* common functions that are used by gen2 transport */
> void iwl_pcie_apm_config(struct iwl_trans *trans);
> int iwl_pcie_prepare_card_hw(struct iwl_trans *trans);
> diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
> index 351c4423125a..942736d3fa75 100644
> --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
> +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
> @@ -597,7 +597,7 @@ static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans,
> rxq->free_count += RX_CLAIM_REQ_ALLOC;
> }
>
> -static void iwl_pcie_rx_allocator_work(struct work_struct *data)
> +void iwl_pcie_rx_allocator_work(struct work_struct *data)
> {
> struct iwl_rb_allocator *rba_p =
> container_of(data, struct iwl_rb_allocator, rx_alloc);
> @@ -900,10 +900,6 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans)
> return err;
> }
> def_rxq = trans_pcie->rxq;
> - if (!rba->alloc_wq)
> - rba->alloc_wq = alloc_workqueue("rb_allocator",
> - WQ_HIGHPRI | WQ_UNBOUND, 1);
> - INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work);
>
> spin_lock(&rba->lock);
> atomic_set(&rba->req_pending, 0);
> @@ -1017,10 +1013,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans)
> }
>
> cancel_work_sync(&rba->rx_alloc);
> - if (rba->alloc_wq) {
> - destroy_workqueue(rba->alloc_wq);
> - rba->alloc_wq = NULL;
> - }
>
> iwl_pcie_free_rbs_pool(trans);
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
> index f95eec52508e..3927bbf04f72 100644
> --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
> +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
> @@ -1786,6 +1786,11 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
> iwl_pcie_tx_free(trans);
> iwl_pcie_rx_free(trans);
>
> + if (trans_pcie->rba.alloc_wq) {
> + destroy_workqueue(trans_pcie->rba.alloc_wq);
> + trans_pcie->rba.alloc_wq = NULL;
> + }
> +
> if (trans_pcie->msix_enabled) {
> for (i = 0; i < trans_pcie->alloc_vecs; i++) {
> irq_set_affinity_hint(
> @@ -3169,6 +3174,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
> trans_pcie->inta_mask = CSR_INI_SET_MASK;
> }
>
> + trans_pcie->rba.alloc_wq = alloc_workqueue("rb_allocator",
> + WQ_HIGHPRI | WQ_UNBOUND, 1);
> + INIT_WORK(&trans_pcie->rba.rx_alloc, iwl_pcie_rx_allocator_work);
> +
> #ifdef CONFIG_IWLWIFI_PCIE_RTPM
> trans->runtime_pm_mode = IWL_PLAT_PM_MODE_D0I3;
> #else
> --
> 2.14.1
>
[toc] | [prev] | [next] | [standalone]
| From | Luca Coelho <luca@coelho.fi> |
|---|---|
| Date | 2017-08-31 08:20 +0200 |
| Subject | Re: [PATCH v2] iwlwifi: pcie: move rx workqueue initialization to iwl_trans_pcie_alloc() |
| Message-ID | <ukqZz-202-9@gated-at.bofh.it> |
| In reply to | #1723417 |
On Wed, 2017-08-30 at 17:57 +0300, David Weinehall wrote:
> On Tue, Aug 22, 2017 at 10:37:29AM +0300, Luca Coelho wrote:
> > From: Luca Coelho <luciano.coelho@intel.com>
> >
> > Work queues cannot be allocated when a mutex is held because the mutex
> > may be in use and that would make it sleep. Doing so generates the
> > following splat with 4.13+:
> >
> > [ 19.513298] ======================================================
> > [ 19.513429] WARNING: possible circular locking dependency detected
> > [ 19.513557] 4.13.0-rc5+ #6 Not tainted
> > [ 19.513638] ------------------------------------------------------
> > [ 19.513767] cpuhp/0/12 is trying to acquire lock:
> > [ 19.513867] (&tz->lock){+.+.+.}, at: [<ffffffff924afebb>] thermal_zone_get_temp+0x5b/0xb0
> > [ 19.514047]
> > [ 19.514047] but task is already holding lock:
> > [ 19.514166] (cpuhp_state){+.+.+.}, at: [<ffffffff91cc4baa>] cpuhp_thread_fun+0x3a/0x210
> > [ 19.514338]
> > [ 19.514338] which lock already depends on the new lock.
> >
> > This lock dependency already existed with previous kernel versions,
> > but it was not detected until commit 49dfe2a67797 ("cpuhotplug: Link
> > lock stacks for hotplug callbacks") was introduced.
> >
> > Reported-by: David Weinehall <david.weinehall@intel.com>
> > Reported-by: Jiri Kosina <jikos@kernel.org>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
>
> With this patch I no longer get the lockdep warning,
> and the driver seems to work just as well as before.
Great! Thanks for reporting and testing, David!
> Thanks!
>
> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
Thanks for this too, but unfortunately it's too late to add it, since
the patch is already in net tree.
--
Cheers,
Luca.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web