On Mon, Jan 10, 2022 at 12:17:23PM +0300, Dan Carpenter wrote: > Seems reasonable. > > On Sun, Jan 09, 2022 at 11:26:52AM +1300, Paulo Miguel Almeida wrote: > > meta-comments: > > - I'm not entirely sure if -EPERM is the best error code to return here, > > I'm taking suggestions > > Better to just return -EINVAL. > > --- > > drivers/staging/pi433/pi433_if.c | 16 +++++++++++++++- > > 1 file changed, 15 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/staging/pi433/pi433_if.c b/drivers/staging/pi433/pi433_if.c > > index 051c9052aeeb..3e9913f4bc7d 100644 > > --- a/drivers/staging/pi433/pi433_if.c > > +++ b/drivers/staging/pi433/pi433_if.c > > @@ -108,6 +108,9 @@ struct pi433_device { > > struct pi433_instance { > > struct pi433_device *device; > > struct pi433_tx_cfg tx_cfg; > > + > > + /* control flags */ > > + bool tx_cfg_initialized; > > }; > > > > /*-------------------------------------------------------------------------*/ > > @@ -823,6 +826,16 @@ pi433_write(struct file *filp, const char __user *buf, > > if (count > MAX_MSG_SIZE) > > return -EMSGSIZE; > > > > + /* > > + * check if tx_cfg has been initialized otherwise we won't be able to > > + * config the RF trasmitter correctly due to invalid settings > > + */ > > + if (!instance->tx_cfg_initialized) { > > + dev_dbg(device->dev, > > + "write: failed due to uninitialized tx_cfg"); > > Use dev_notice_once() or similar. Maybe "unconfigured" instead of > uninitialized? > > dev_notice_once(device->dev, > "write: failed due to unconfigured tx_cfg (see PI433_IOC_WR_TX_CFG)"); > > > > + return -EPERM; > > + } > > + > > /* > > * write the following sequence into fifo: > > * - tx_cfg > > @@ -897,6 +910,7 @@ pi433_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > > return -EFAULT; > > mutex_lock(&device->tx_fifo_lock); > > memcpy(&instance->tx_cfg, &tx_cfg, sizeof(struct pi433_tx_cfg)); > > + instance->tx_cfg_initialized = true; > > mutex_unlock(&device->tx_fifo_lock); > > break; > > case PI433_IOC_RD_RX_CFG: > > @@ -950,7 +964,7 @@ static int pi433_open(struct inode *inode, struct file *filp) > > /* setup instance data*/ > > instance->device = device; > > instance->tx_cfg.bit_rate = 4711; > > This is sort of pointless because it can't work until that gets over > written. > > > > - // TODO: fill instance->tx_cfg; > > + instance->tx_cfg_initialized = false; > > kzalloc() will already set this to false. > > regards, > dan carpenter > I agree with you on all points mentioned above. I will send another version of this patch shortly. Thanks for the patch review. Paulo A.