lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 29 Feb 2012 17:40:40 +0100
From:	Linus Walleij <linus.walleij@...aro.org>
To:	Stephen Warren <swarren@...dia.com>
Cc:	Linus Walleij <linus.walleij@...ricsson.com>, B29396@...escale.com,
	s.hauer@...gutronix.de, dongas86@...il.com, shawn.guo@...aro.org,
	thomas.abraham@...aro.org, tony@...mide.com,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH V2 1/2] pinctrl: Introduce PINCTRL_STATE_DEFAULT, define
 hogs as that state

Aha now I see the problem here...

On Tue, Feb 28, 2012 at 12:55 AM, Stephen Warren <swarren@...dia.com> wrote:

> This provides a single centralized name for the default state.
(...)
> -/* Hog a single map entry and add to the hoglist */
> -static int pinctrl_hog_map(struct pinctrl_dev *pctldev,
(...)
> -static int pinctrl_hog_maps(struct pinctrl_dev *pctldev)
(...)
> -       pinctrl_hog_maps(pctldev);
> +       pctldev->p = pinctrl_get(pctldev->dev, PINCTRL_STATE_DEFAULT);
> +       if (!IS_ERR(pctldev->p))
> +               pinctrl_enable(pctldev->p);

So what happens here is that my hogs will try to activate three different
functions in the same struct pinctrl *p.

This fails the sanity check in pinmux.c:

	/*
	 * If the function selector is already set, it needs to be identical,
	 * we support several groups with one function but not several
	 * functions with one or several groups in the same pinmux.
	 */
	if (p->func_selector != UINT_MAX &&
	    p->func_selector != func_selector) {
		dev_err(pctldev->dev,
			"dual function defines in the map for device %s\n",
		       devname);
		return -EINVAL;
	}
	p->func_selector = func_selector;

Since it is assumed that we can only activate one function at a time
for a given device handle (struct pinmux).

Which was sound, since we said that one single function can activate
several groups.

So you still need one struct pinmux *p for each hog or it won't work.

Allowing the struct pinmux to activate several functions at once is
another solution, but would defy the idea of having several groups
mapped to one function, then you could just as well use that instead,
and it would be a tad bit too many "many to many" relations in my
opinion.

So I would revert back to using one handle per hog.

(Sorry if I misunderstood the problem though we're getting pretty
complex here...)

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists