On Mon, May 12, 2025 at 04:08:35PM +0200, Thomas Richard wrote:
> On 5/9/25 11:07, Geert Uytterhoeven wrote:
> > On Tue, 6 May 2025 at 17:21, Thomas Richard <thomas.rich...@bootlin.com> 
> > wrote:

...

> >> +int gpio_fwd_set_config(struct gpio_chip *chip, unsigned int offset,
> >> +                       unsigned long config);
> >> +
> >> +int gpio_fwd_to_irq(struct gpio_chip *chip, unsigned int offset);
> > 
> > I would expect all of these to take gpiochip_fwd pointers instead of
> > gpio_chip pointers.  What prevents you from passing a gpio_chip pointer
> > that does not correspond to a gpiochip_fwd object, causing a crash?
> 
> Indeed nothing prevents from passing gpio_chip pointer which does not
> correspond to a gpiochip_fwd object.
> And it is also a bit weird to pass a gpiochip_fwd pointer in some cases
> (for example gpio_fwd_gpio_add()) and a gpio_chip in other cases.
> 
> I can keep GPIO operations as is, and create exported wrappers which
> take a gpiochip_fwd pointer as parameter, for example:
> 
> int gpiochip_fwd_get_multiple(struct gpiochip_fwd *fwd,
>                             unsigned long *mask,
>                             unsigned long *bits)
> {
>       struct gpio_chip *gc = gpiochip_fwd_get_gpiochip(fwd);
> 
>       return gpio_fwd_get_multiple_locked(chip, mask, bits);
> }
> EXPORT_SYMBOL_NS_GPL(gpiochip_fwd_get_multiple, "GPIO_FORWARDER");
> 
> So exported functions are gpiochip_fwd_*().

Sounds good for me. Let's wait for Geert's opinoin on this.

-- 
With Best Regards,
Andy Shevchenko



Reply via email to