On 2020-08-31 9:56 a.m., Allen wrote: > Logan, >>> In preparation for unconditionally passing the >>> struct tasklet_struct pointer to all tasklet >>> callbacks, switch to using the new tasklet_setup() >>> and from_tasklet() to pass the tasklet pointer explicitly. >>> >>> Signed-off-by: Allen Pais <allen.lkml@xxxxxxxxx> >>> --- >>> drivers/dma/plx_dma.c | 7 +++---- >>> 1 file changed, 3 insertions(+), 4 deletions(-) >>> >>> diff --git a/drivers/dma/plx_dma.c b/drivers/dma/plx_dma.c >>> index db4c5fd453a9..f387c5bbc170 100644 >>> --- a/drivers/dma/plx_dma.c >>> +++ b/drivers/dma/plx_dma.c >>> @@ -241,9 +241,9 @@ static void plx_dma_stop(struct plx_dma_dev *plxdev) >>> rcu_read_unlock(); >>> } >>> >>> -static void plx_dma_desc_task(unsigned long data) >>> +static void plx_dma_desc_task(struct tasklet_struct *t) >>> { >>> - struct plx_dma_dev *plxdev = (void *)data; >>> + struct plx_dma_dev *plxdev = from_tasklet(plxdev, t, desc_task); >> >> The discussion I saw on another thread suggested the private macro >> from_tasklet() would be replaced with something generic. So isn't this >> patchset a bit premature? > > Yes, but efforts to replace it with something generic was not well accepted. > We were left with either using a private macro from_tasklet() or use > well known container_of(). I have left it to the maintainers to decide > which one they prefer. Well my vote would be for using container_of() directly. But I don't really have much clout here. Logan