2009-03-13 08:26:50

by Peter Teoh

[permalink] [raw]
Subject: kernel_thread() usage found in staging

>From Documentation/feature_removal_schedule.txt, it is well-known that
kernel_thread() API usage is discouraged, but in staging we still
routinely see its use. Perhaps the original driver owner have
overlooked this?

Thanks.

./rt2870/common/2870_rtmp_init.c:
pid_number = kernel_thread(MlmeThread, pAd, CLONE_VM);
pid_number = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM);
pid_number = kernel_thread(TimerQThread, pAd, CLONE_VM);

./usbip/usbip_common.c:
retval = kernel_thread(usbip_thread, (void *)&ud->tcp_rx, 0);
retval = kernel_thread(usbip_thread, (void *)&ud->tcp_tx, 0);

./usbip/usbip_event.c:
kernel_thread(usbip_thread, (void *)eh, 0);

./epl/ShbIpc-LinuxKernel.c:
kernel_thread(ShbIpcThreadSignalNewData, pShbInstance_p,
kernel_thread(ShbIpcThreadSignalJobReady, pShbInstance_p,

./epl/EplSdoUdpu.c:
kernel_thread(EplSdoUdpThread, &SdoUdpInstance_g, CLONE_KERNEL);


--
Regards,
Peter Teoh


2009-03-13 21:32:26

by Greg KH

[permalink] [raw]
Subject: Re: kernel_thread() usage found in staging

On Fri, Mar 13, 2009 at 04:26:27PM +0800, Peter Teoh wrote:
> >From Documentation/feature_removal_schedule.txt, it is well-known that
> kernel_thread() API usage is discouraged, but in staging we still
> routinely see its use. Perhaps the original driver owner have
> overlooked this?

Yes, they probably didn't realize this and some of this code predates
the kthread code.

> ./rt2870/common/2870_rtmp_init.c:
> pid_number = kernel_thread(MlmeThread, pAd, CLONE_VM);
> pid_number = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM);
> pid_number = kernel_thread(TimerQThread, pAd, CLONE_VM);
>
> ./usbip/usbip_common.c:
> retval = kernel_thread(usbip_thread, (void *)&ud->tcp_rx, 0);
> retval = kernel_thread(usbip_thread, (void *)&ud->tcp_tx, 0);
>
> ./usbip/usbip_event.c:
> kernel_thread(usbip_thread, (void *)eh, 0);
>
> ./epl/ShbIpc-LinuxKernel.c:
> kernel_thread(ShbIpcThreadSignalNewData, pShbInstance_p,
> kernel_thread(ShbIpcThreadSignalJobReady, pShbInstance_p,
>
> ./epl/EplSdoUdpu.c:
> kernel_thread(EplSdoUdpThread, &SdoUdpInstance_g, CLONE_KERNEL);

Patches are gladly accepted to clean this up.

thanks,

greg k-h

2009-03-18 14:04:22

by Daniel Krüger

[permalink] [raw]
Subject: Re: kernel_thread() usage found in staging

Hello,

sorry for stepping in. I found the original posting via Google while
trying to compile the openPOWERLINK protocol stack with a recent Linux
kernel. I am the official maintainer of openPOWERLINK.

> ./epl/ShbIpc-LinuxKernel.c:
> kernel_thread(ShbIpcThreadSignalNewData, pShbInstance_p,
> kernel_thread(ShbIpcThreadSignalJobReady, pShbInstance_p,
>
> ./epl/EplSdoUdpu.c:
> kernel_thread(EplSdoUdpThread, &SdoUdpInstance_g, CLONE_KERNEL);

As I understand, there are some issues (race conditions) with the
kthread-API and signals. I need signals, because the kernel-threads may
block in some I/O functions.

What is the right way to use the kthread-API with signals? Or are there
any solutions to avoid signals?
Is there any sample code that shows how to do it?

Thanks in advance for any help.

Regards,
Daniel Kr?ger

--
SYS TEC electronic GmbH
August-Bebel-Str. 29
D-07973 Greiz

Telefon : +49 (0) 3661 6279 0
Fax : +49 (0) 3661 6279 99
Email : [email protected]
Internet : http://www.systec-electronic.com

Managing Director : Dipl.-Phys. Siegmar Schmidt
Commercial registry : Amtsgericht Jena, HRB 205563