Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3bfc96e authored by Dominik Brodowski's avatar Dominik Brodowski
Browse files

pcmcia: avoid sysfs-related lockup for cardbus

In cb_free(), we remove some sysfs files -- other sysfs files might
grab ops_mutex, so we cannot hold it while removing sysfs files. This
fixes http://lkml.org/lkml/2010/1/17/88

 .

Tested-by: default avatarWolfram Sang <w.sang@pengutronix.de>
Signed-off-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
parent aa584ca4
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -400,10 +400,19 @@ static void socket_shutdown(struct pcmcia_socket *s)
	s->lock_count = 0;
	kfree(s->fake_cis);
	s->fake_cis = NULL;
	s->functions = 0;

	/* From here on we can be sure that only we (that is, the
	 * pccardd thread) accesses this socket, and all (16-bit)
	 * PCMCIA interactions are gone. Therefore, release
	 * ops_mutex so that we don't get a sysfs-related lockdep
	 * warning.
	 */
	mutex_unlock(&s->ops_mutex);

#ifdef CONFIG_CARDBUS
	cb_free(s);
#endif
	s->functions = 0;

	/* give socket some time to power down */
	msleep(100);
@@ -415,7 +424,6 @@ static void socket_shutdown(struct pcmcia_socket *s)
	}

	s->state &= ~SOCKET_INUSE;
	mutex_unlock(&s->ops_mutex);
}

static int socket_setup(struct pcmcia_socket *skt, int initial_delay)