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

Commit bdca1fd9 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann
Browse files

fakelb: fix schedule while atomic



This patch changes the spinlock to mutex for the available fakelb phy
list. When holding the spinlock the ieee802154_unregister_hw is called
which holding the rtnl_mutex, in that case we get a "BUG: sleeping function
called from invalid context" error. We simple change the spinlock to
mutex which allows to hold the rtnl lock there.

Signed-off-by: default avatarAlexander Aring <aar@pengutronix.de>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 8a0c9f49
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
static int numlbs = 2;

static LIST_HEAD(fakelb_phys);
static DEFINE_SPINLOCK(fakelb_phys_lock);
static DEFINE_MUTEX(fakelb_phys_lock);

static LIST_HEAD(fakelb_ifup_phys);
static DEFINE_RWLOCK(fakelb_ifup_phys_lock);
@@ -188,9 +188,9 @@ static int fakelb_add_one(struct device *dev)
	if (err)
		goto err_reg;

	spin_lock(&fakelb_phys_lock);
	mutex_lock(&fakelb_phys_lock);
	list_add_tail(&phy->list, &fakelb_phys);
	spin_unlock(&fakelb_phys_lock);
	mutex_unlock(&fakelb_phys_lock);

	return 0;

@@ -222,10 +222,10 @@ static int fakelb_probe(struct platform_device *pdev)
	return 0;

err_slave:
	spin_lock(&fakelb_phys_lock);
	mutex_lock(&fakelb_phys_lock);
	list_for_each_entry_safe(phy, tmp, &fakelb_phys, list)
		fakelb_del(phy);
	spin_unlock(&fakelb_phys_lock);
	mutex_unlock(&fakelb_phys_lock);
	return err;
}

@@ -233,10 +233,10 @@ static int fakelb_remove(struct platform_device *pdev)
{
	struct fakelb_phy *phy, *tmp;

	spin_lock(&fakelb_phys_lock);
	mutex_lock(&fakelb_phys_lock);
	list_for_each_entry_safe(phy, tmp, &fakelb_phys, list)
		fakelb_del(phy);
	spin_unlock(&fakelb_phys_lock);
	mutex_unlock(&fakelb_phys_lock);
	return 0;
}