diff mbox

[resend,1/6] delay: add poll_event_interruptible

Message ID a26ef20e6ff686573a0af16435f20aba186746af.1516985620.git.msuchanek@suse.de (mailing list archive)
State Not Applicable
Headers show

Commit Message

Michal Suchanek Jan. 26, 2018, 4:58 p.m. UTC
Add convenience macro for polling an event that does not have a
waitqueue.

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
 include/linux/delay.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Bart Van Assche Jan. 29, 2018, 5 p.m. UTC | #1
On Fri, 2018-01-26 at 17:58 +0100, Michal Suchanek wrote:
> Add convenience macro for polling an event that does not have a

> waitqueue.

> 

> Signed-off-by: Michal Suchanek <msuchanek@suse.de>

> ---

>  include/linux/delay.h | 12 ++++++++++++

>  1 file changed, 12 insertions(+)

> 

> diff --git a/include/linux/delay.h b/include/linux/delay.h

> index b78bab4395d8..3ae9fa395628 100644

> --- a/include/linux/delay.h

> +++ b/include/linux/delay.h

> @@ -64,4 +64,16 @@ static inline void ssleep(unsigned int seconds)

>  	msleep(seconds * 1000);

>  }

>  

> +#define poll_event_interruptible(event, interval) ({ \

> +	int ret = 0; \

> +	while (!(event)) { \

> +		if (signal_pending(current)) { \

> +			ret = -ERESTARTSYS; \

> +			break; \

> +		} \

> +		msleep_interruptible(interval); \

> +	} \

> +	ret; \

> +})

> +

>  #endif /* defined(_LINUX_DELAY_H) */


Sorry but I'm not sure we should encourage other kernel developers to use
busy-waiting by adding the poll_event_interruptible() macro to a system-wide
header file. Can that macro be moved into a CDROM-specific .c or .h file?

Thanks,

Bart.
diff mbox

Patch

diff --git a/include/linux/delay.h b/include/linux/delay.h
index b78bab4395d8..3ae9fa395628 100644
--- a/include/linux/delay.h
+++ b/include/linux/delay.h
@@ -64,4 +64,16 @@  static inline void ssleep(unsigned int seconds)
 	msleep(seconds * 1000);
 }
 
+#define poll_event_interruptible(event, interval) ({ \
+	int ret = 0; \
+	while (!(event)) { \
+		if (signal_pending(current)) { \
+			ret = -ERESTARTSYS; \
+			break; \
+		} \
+		msleep_interruptible(interval); \
+	} \
+	ret; \
+})
+
 #endif /* defined(_LINUX_DELAY_H) */