Hi Geert, [add Phil]
> Geert Uytterhoeven <ge...@linux-m68k.org> hat am 8. April 2018 um 11:05 > geschrieben: > > > If CONFIG_RASPBERRYPI_FIRMWARE=n: > > drivers/gpio/gpio-raspberrypi-exp.c: In function > ‘rpi_exp_gpio_get_polarity’: > drivers/gpio/gpio-raspberrypi-exp.c:71: warning: ‘get.polarity’ is used > uninitialized in this function > drivers/gpio/gpio-raspberrypi-exp.c: In function > ‘rpi_exp_gpio_get_direction’: > drivers/gpio/gpio-raspberrypi-exp.c:150: warning: ‘get.direction’ is used > uninitialized in this function > > The dummy firmware interface functions return 0, which means success, > causing subsequent code to make use of the never initialized output > parameter. i think this is more theoritical, because we need to get rpi_firmware first and in this case it's NULL. > > Fix this by making the dummy functions return an error code (-ENOSYS) > instead. Anyway i'm okay with the change. > > Note that this assumes the firmware always fills in the requested data > in the CONFIG_RASPBERRYPI_FIRMWARE=y case. Unfortunately i don't know. > > Fixes: d45f1a563b92dac7 ("staging: vc04_services: fix up rpi firmware > functions") > Signed-off-by: Geert Uytterhoeven <ge...@linux-m68k.org> > --- > Should get.polarity resp. get.direction be preinitialized instead, > like is done for get.state? > > static int rpi_exp_gpio_get(struct gpio_chip *gc, unsigned int off) > { > ... > get.state = 0; /* storage for returned value */ > > ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_STATE, > &get, sizeof(get)); > ... > } > > This would avoid returning uninitialized data if the firmware did not > fill in the requested data. > --- > include/soc/bcm2835/raspberrypi-firmware.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/soc/bcm2835/raspberrypi-firmware.h > b/include/soc/bcm2835/raspberrypi-firmware.h > index 50df5b28d2c9df6e..8ee8991aa099af3a 100644 > --- a/include/soc/bcm2835/raspberrypi-firmware.h > +++ b/include/soc/bcm2835/raspberrypi-firmware.h > @@ -143,13 +143,13 @@ struct rpi_firmware *rpi_firmware_get(struct > device_node *firmware_node); > static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag, > void *data, size_t len) > { > - return 0; > + return -ENOSYS; > } > > static inline int rpi_firmware_property_list(struct rpi_firmware *fw, > void *data, size_t tag_size) > { > - return 0; > + return -ENOSYS; > } > > static inline struct rpi_firmware *rpi_firmware_get(struct device_node > *firmware_node) > -- > 2.7.4 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-ker...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel