> -----Original Message----- > From: Xu, Yilun <yilun.xu@xxxxxxxxx> > Sent: Wednesday, April 15, 2020 6:08 PM > To: mdf@xxxxxxxxxx; linux-fpga@xxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx > Cc: trix@xxxxxxxxxx; bhu@xxxxxxxxxx; Xu, Yilun <yilun.xu@xxxxxxxxx>; > Kang, Luwei <luwei.kang@xxxxxxxxx>; Wu, Hao <hao.wu@xxxxxxxxx> > Subject: [PATCH v4 4/7] fpga: dfl: afu: add interrupt support for port error > reporting > > Error reporting interrupt is very useful to notify users that some > errors are detected by the hardware. Once users are notified, they > could query hardware logged error states, no need to continuously > poll on these states. > > This patch adds interrupt support for port error reporting sub feature. > It follows the common DFL interrupt notification and handling mechanism, > implements two ioctl commands below for user to query number of irqs > supported, and set/unset interrupt triggers. > > Ioctls: > * DFL_FPGA_PORT_ERR_GET_IRQ_NUM > get the number of irqs, which is used to determine whether/how many > interrupts error reporting feature supports. > > * DFL_FPGA_PORT_ERR_SET_IRQ > set/unset given eventfds as error interrupt triggers. > > Signed-off-by: Luwei Kang <luwei.kang@xxxxxxxxx> > Signed-off-by: Wu Hao <hao.wu@xxxxxxxxx> > Signed-off-by: Xu Yilun <yilun.xu@xxxxxxxxx> > ---- > v2: use DFL_FPGA_PORT_ERR_GET_IRQ_NUM instead of > DFL_FPGA_PORT_ERR_GET_INFO > Delete flag field for DFL_FPGA_PORT_ERR_SET_IRQ param > v3: put_user() instead of copy_to_user() > improves comments > v4: use common functions to handle irq ioctls > --- > drivers/fpga/dfl-afu-error.c | 22 ++++++++++++++++++++++ > drivers/fpga/dfl-afu-main.c | 4 ++++ > include/uapi/linux/fpga-dfl.h | 23 +++++++++++++++++++++++ > 3 files changed, 49 insertions(+) > > diff --git a/drivers/fpga/dfl-afu-error.c b/drivers/fpga/dfl-afu-error.c > index c1467ae..facbd7b 100644 > --- a/drivers/fpga/dfl-afu-error.c > +++ b/drivers/fpga/dfl-afu-error.c > @@ -15,6 +15,7 @@ > */ > > #include <linux/uaccess.h> > +#include <linux/fpga-dfl.h> Same. : ) > > #include "dfl-afu.h" > > @@ -219,6 +220,26 @@ static void port_err_uinit(struct platform_device > *pdev, > afu_port_err_mask(&pdev->dev, true); > } > > +static long > +port_err_ioctl(struct platform_device *pdev, struct dfl_feature *feature, > + unsigned int cmd, unsigned long arg) > +{ > + long ret = -ENODEV; > + > + switch (cmd) { > + case DFL_FPGA_PORT_ERR_GET_IRQ_NUM: > + ret = dfl_feature_ioctl_get_num_irqs(pdev, feature, arg); > + break; > + case DFL_FPGA_PORT_ERR_SET_IRQ: > + ret = dfl_feature_ioctl_set_irq(pdev, feature, arg); > + break; > + default: > + dev_dbg(&pdev->dev, "%x cmd not handled", cmd); > + } > + > + return ret; > +} Looks like we don't have to introduce this local 'ret'. With above fixings: Acked-by: Wu Hao <hao.wu@xxxxxxxxx> Thanks Hao