The rule of thumb is to include the headers we are the direct user of.
In particular, if we need an atomic API, we include <linux/atomic.h>.
On the other hand we should not use headers for no reason. In particular,
if we are not doing any IRQ job, why is the <linux/irq.h> included?
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
* you have read from the dev file
*/
+#include <linux/atomic.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/init.h>
-#include <linux/irq.h>
-#include <linux/kernel.h>
+#include <linux/kernel.h> /* for sprintf() */
#include <linux/module.h>
-#include <linux/poll.h>
+#include <linux/printk.h>
+#include <linux/types.h>
+#include <linux/uaccess.h> /* for get_user and put_user */
+
+#include <asm/errno.h>
/* Prototypes - this would normally go in a .h file */
static int device_open(struct inode *, struct file *);
* chardev2.c - Create an input/output character device
*/
+#include <linux/atomic.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/init.h>
-#include <linux/irq.h>
-#include <linux/kernel.h> /* We are doing kernel work */
#include <linux/module.h> /* Specifically, a module */
-#include <linux/poll.h>
+#include <linux/printk.h>
+#include <linux/types.h>
+
+#include <asm/errno.h>
#include "chardev.h"
#define SUCCESS 0
* completions.c
*/
#include <linux/completion.h>
+#include <linux/err.h> /* for IS_ERR() */
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
/*
* example_atomic.c
*/
-#include <linux/interrupt.h>
+#include <linux/atomic.h>
+#include <linux/bitops.h>
#include <linux/kernel.h>
#include <linux/module.h>
/*
* example_mutex.c
*/
-#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
/*
* example_rwlock.c
*/
-#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/rwlock.h>
static DEFINE_RWLOCK(myrwlock);
* example_spinlock.c
*/
#include <linux/init.h>
-#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/spinlock.h>
* at the same time, put all but one to sleep.
*/
+#include <linux/atomic.h>
+#include <linux/fs.h>
#include <linux/kernel.h> /* We're doing kernel work */
#include <linux/module.h> /* Specifically, a module */
#include <linux/proc_fs.h> /* Necessary because we use proc fs */
-#include <linux/sched.h> /* For putting processes to sleep and
- waking them up */
+#include <linux/types.h>
#include <linux/uaccess.h> /* for get_user and put_user */
#include <linux/version.h>
+#include <linux/wait.h> /* For putting processes to sleep and
+ waking them up */
+
+#include <asm/current.h>
+#include <asm/errno.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
#define HAVE_PROC_OPS