stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Doug Anderson <dianders@chromium.org>,
	Linus Walleij <linus.walleij@linaro.org>
Subject: [PATCH 3.14 27/51] pinctrl: Dont just pretend to protect pinctrl_maps, do it for real
Date: Fri, 15 May 2015 16:10:29 -0700	[thread overview]
Message-ID: <20150515230951.506519789@linuxfoundation.org> (raw)
In-Reply-To: <20150515230950.640453239@linuxfoundation.org>

3.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Doug Anderson <dianders@chromium.org>

commit c5272a28566b00cce79127ad382406e0a8650690 upstream.

Way back, when the world was a simpler place and there was no war, no
evil, and no kernel bugs, there was just a single pinctrl lock.  That
was how the world was when (57291ce pinctrl: core device tree mapping
table parsing support) was written.  In that case, there were
instances where the pinctrl mutex was already held when
pinctrl_register_map() was called, hence a "locked" parameter was
passed to the function to indicate that the mutex was already locked
(so we shouldn't lock it again).

A few years ago in (42fed7b pinctrl: move subsystem mutex to
pinctrl_dev struct), we switched to a separate pinctrl_maps_mutex.
...but (oops) we forgot to re-think about the whole "locked" parameter
for pinctrl_register_map().  Basically the "locked" parameter appears
to still refer to whether the bigger pinctrl_dev mutex is locked, but
we're using it to skip locks of our (now separate) pinctrl_maps_mutex.

That's kind of a bad thing(TM).  Probably nobody noticed because most
of the calls to pinctrl_register_map happen at boot time and we've got
synchronous device probing.  ...and even cases where we're
asynchronous don't end up actually hitting the race too often.  ...but
after banging my head against the wall for a bug that reproduced 1 out
of 1000 reboots and lots of looking through kgdb, I finally noticed
this.

Anyway, we can now safely remove the "locked" parameter and go back to
a war-free, evil-free, and kernel-bug-free world.

Fixes: 42fed7ba44e4 ("pinctrl: move subsystem mutex to pinctrl_dev struct")
Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/pinctrl/core.c       |   10 ++++------
 drivers/pinctrl/core.h       |    2 +-
 drivers/pinctrl/devicetree.c |    2 +-
 3 files changed, 6 insertions(+), 8 deletions(-)

--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -1121,7 +1121,7 @@ void devm_pinctrl_put(struct pinctrl *p)
 EXPORT_SYMBOL_GPL(devm_pinctrl_put);
 
 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
-			 bool dup, bool locked)
+			 bool dup)
 {
 	int i, ret;
 	struct pinctrl_maps *maps_node;
@@ -1189,11 +1189,9 @@ int pinctrl_register_map(struct pinctrl_
 		maps_node->maps = maps;
 	}
 
-	if (!locked)
-		mutex_lock(&pinctrl_maps_mutex);
+	mutex_lock(&pinctrl_maps_mutex);
 	list_add_tail(&maps_node->node, &pinctrl_maps);
-	if (!locked)
-		mutex_unlock(&pinctrl_maps_mutex);
+	mutex_unlock(&pinctrl_maps_mutex);
 
 	return 0;
 }
@@ -1208,7 +1206,7 @@ int pinctrl_register_map(struct pinctrl_
 int pinctrl_register_mappings(struct pinctrl_map const *maps,
 			      unsigned num_maps)
 {
-	return pinctrl_register_map(maps, num_maps, true, false);
+	return pinctrl_register_map(maps, num_maps, true);
 }
 
 void pinctrl_unregister_map(struct pinctrl_map const *map)
--- a/drivers/pinctrl/core.h
+++ b/drivers/pinctrl/core.h
@@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_
 }
 
 int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
-			 bool dup, bool locked);
+			 bool dup);
 void pinctrl_unregister_map(struct pinctrl_map const *map);
 
 extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);
--- a/drivers/pinctrl/devicetree.c
+++ b/drivers/pinctrl/devicetree.c
@@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struc
 	dt_map->num_maps = num_maps;
 	list_add_tail(&dt_map->node, &p->dt_maps);
 
-	return pinctrl_register_map(map, num_maps, false, true);
+	return pinctrl_register_map(map, num_maps, false);
 }
 
 struct pinctrl_dev *of_pinctrl_get(struct device_node *np)



  parent reply	other threads:[~2015-05-15 23:11 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-15 23:10 [PATCH 3.14 00/51] 3.14.43-stable review Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 01/51] ocfs2: dlm: fix race between purge and get lock resource Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 02/51] nilfs2: fix sanity check of btree level in nilfs_btree_root_broken() Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 03/51] RDMA/CMA: Canonize IPv4 on IPV6 sockets properly Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 04/51] gpio: unregister gpiochip device before removing it Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 05/51] gpio: sysfs: fix memory leaks and device hotplug Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 06/51] mnt: Fix fs_fully_visible to verify the root directory is visible Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 07/51] mm/memory-failure: call shake_page() when error hits thp tail page Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 08/51] writeback: use |1 instead of +1 to protect against div by zero Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 09/51] mm: soft-offline: fix num_poisoned_pages counting on concurrent events Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 10/51] xen/events: Clear cpu_evtchn_mask before resuming Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 11/51] xen/console: Update console event channel on resume Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 12/51] xen/events: Set irq_info->evtchn before binding the channel to CPU in __startup_pirq() Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 13/51] Revert "dm crypt: fix deadlock when async crypto algorithm returns -EBUSY" Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 14/51] ARM: dts: imx25: Add #pwm-cells to pwm4 Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 15/51] ARM: dts: imx28: Fix AUART4 TX-DMA interrupt name Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 16/51] ARM: dts: imx23-olinuxino: Fix dr_mode of usb0 Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 17/51] ARM: dts: imx23-olinuxino: Fix polarity of LED GPIO Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 18/51] ARM: mvebu: armada-xp-openblocks-ax3-4: Disable internal RTC Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 19/51] ARM: net fix emit_udiv() for BPF_ALU | BPF_DIV | BPF_K intruction Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 20/51] ARM: ux500: Move GPIO regulator for SD-card into board DTSs Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 21/51] ARM: ux500: Enable GPIO regulator for SD-card for HREF boards Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 22/51] ARM: ux500: Enable GPIO regulator for SD-card for snowball Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 23/51] drm/i915: Add missing MacBook Pro models with dual channel LVDS Greg Kroah-Hartman
2015-05-15 23:10 ` Greg Kroah-Hartman [this message]
2015-05-15 23:10 ` [PATCH 3.14 28/51] mmc: card: Dont access RPMB partitions for normal read/write Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 29/51] mmc: core: add missing pm event in mmc_pm_notify to fix hib restore Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 30/51] mmc: sh_mmcif: Fix timeout value for command request Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 31/51] sound/oss: fix deadlock in sequencer_ioctl(SNDCTL_SEQ_OUTOFBAND) Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 32/51] ACPICA: Tables: Change acpi_find_root_pointer() to use acpi_physical_address Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 33/51] ACPICA: Utilities: Cleanup to enforce ACPI_PHYSADDR_TO_PTR()/ACPI_PTR_TO_PHYSADDR() Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 34/51] ACPICA: Utilities: Cleanup to convert physical address printing formats Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 35/51] ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 36/51] deal with deadlock in d_walk() Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 37/51] arm64: KVM: force cache clean on page fault when caches are off Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 38/51] arm64: KVM: allows discrimination of AArch32 sysreg access Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 39/51] arm64: KVM: trap VM system registers until MMU and caches are ON Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 40/51] ARM: KVM: introduce kvm_p*d_addr_end Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 41/51] arm64: KVM: flush VM pages before letting the guest enable caches Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 42/51] ARM: KVM: force cache clean on page fault when caches are off Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 43/51] ARM: KVM: fix handling of trapped 64bit coprocessor accesses Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 44/51] ARM: KVM: fix ordering of " Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 45/51] ARM: KVM: introduce per-vcpu HYP Configuration Register Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 46/51] ARM: KVM: add world-switch for AMAIR{0,1} Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 47/51] ARM: KVM: trap VM system registers until MMU and caches are ON Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 48/51] KVM: arm/arm64: vgic: fix GICD_ICFGR register accesses Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 49/51] KVM: ARM: vgic: Fix the overlap check action about setting the GICD & GICC base address Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 50/51] arm64: kvm: use inner-shareable barriers for inner-shareable maintenance Greg Kroah-Hartman
2015-05-15 23:10 ` [PATCH 3.14 51/51] kvm: arm64: vgic: fix hyp panic with 64k pages on juno platform Greg Kroah-Hartman
2015-05-16  3:15 ` [PATCH 3.14 00/51] 3.14.43-stable review Shuah Khan
2015-05-16  3:15 ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150515230951.506519789@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dianders@chromium.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).