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

Commit 10d1a002 authored by Ohad Ben-Cohen's avatar Ohad Ben-Cohen Committed by Hiroshi DOYU
Browse files

omap: mailbox: convert rwlocks to spinlock

rwlocks are slower and have potential starvation issues
therefore spinlocks are generally preferred.

see also: http://lwn.net/Articles/364583/



Signed-off-by: default avatarOhad Ben-Cohen <ohad@wizery.com>
Signed-off-by: default avatarKanigeri Hari <h-kanigeri2@ti.com>
Signed-off-by: default avatarHiroshi DOYU <Hiroshi.DOYU@nokia.com>
parent 1ea5d6d1
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@

static struct workqueue_struct *mboxd;
static struct omap_mbox *mboxes;
static DEFINE_RWLOCK(mboxes_lock);
static DEFINE_SPINLOCK(mboxes_lock);
static bool rq_full;

static int mbox_configured;
@@ -341,14 +341,14 @@ struct omap_mbox *omap_mbox_get(const char *name)
	struct omap_mbox *mbox;
	int ret;

	read_lock(&mboxes_lock);
	spin_lock(&mboxes_lock);
	mbox = *(find_mboxes(name));
	if (mbox == NULL) {
		read_unlock(&mboxes_lock);
		spin_unlock(&mboxes_lock);
		return ERR_PTR(-ENOENT);
	}

	read_unlock(&mboxes_lock);
	spin_unlock(&mboxes_lock);

	ret = omap_mbox_startup(mbox);
	if (ret)
@@ -374,15 +374,15 @@ int omap_mbox_register(struct device *parent, struct omap_mbox *mbox)
	if (mbox->next)
		return -EBUSY;

	write_lock(&mboxes_lock);
	spin_lock(&mboxes_lock);
	tmp = find_mboxes(mbox->name);
	if (*tmp) {
		ret = -EBUSY;
		write_unlock(&mboxes_lock);
		spin_unlock(&mboxes_lock);
		goto err_find;
	}
	*tmp = mbox;
	write_unlock(&mboxes_lock);
	spin_unlock(&mboxes_lock);

	return 0;

@@ -395,18 +395,18 @@ int omap_mbox_unregister(struct omap_mbox *mbox)
{
	struct omap_mbox **tmp;

	write_lock(&mboxes_lock);
	spin_lock(&mboxes_lock);
	tmp = &mboxes;
	while (*tmp) {
		if (mbox == *tmp) {
			*tmp = mbox->next;
			mbox->next = NULL;
			write_unlock(&mboxes_lock);
			spin_unlock(&mboxes_lock);
			return 0;
		}
		tmp = &(*tmp)->next;
	}
	write_unlock(&mboxes_lock);
	spin_unlock(&mboxes_lock);

	return -EINVAL;
}