linux/include/linux/umh.h
<<
>>
Prefs
   1#ifndef __LINUX_UMH_H__
   2#define __LINUX_UMH_H__
   3
   4#include <linux/gfp.h>
   5#include <linux/stddef.h>
   6#include <linux/errno.h>
   7#include <linux/compiler.h>
   8#include <linux/workqueue.h>
   9#include <linux/sysctl.h>
  10
  11struct cred;
  12struct file;
  13
  14#define UMH_NO_WAIT     0       /* don't wait at all */
  15#define UMH_WAIT_EXEC   1       /* wait for the exec, but not the process */
  16#define UMH_WAIT_PROC   2       /* wait for the process to complete */
  17#define UMH_KILLABLE    4       /* wait for EXEC/PROC killable */
  18
  19struct subprocess_info {
  20        struct work_struct work;
  21        struct completion *complete;
  22        const char *path;
  23        char **argv;
  24        char **envp;
  25        int wait;
  26        int retval;
  27        int (*init)(struct subprocess_info *info, struct cred *new);
  28        void (*cleanup)(struct subprocess_info *info);
  29        void *data;
  30} __randomize_layout;
  31
  32extern int
  33call_usermodehelper(const char *path, char **argv, char **envp, int wait);
  34
  35extern struct subprocess_info *
  36call_usermodehelper_setup(const char *path, char **argv, char **envp,
  37                          gfp_t gfp_mask,
  38                          int (*init)(struct subprocess_info *info, struct cred *new),
  39                          void (*cleanup)(struct subprocess_info *), void *data);
  40
  41extern int
  42call_usermodehelper_exec(struct subprocess_info *info, int wait);
  43
  44extern struct ctl_table usermodehelper_table[];
  45
  46enum umh_disable_depth {
  47        UMH_ENABLED = 0,
  48        UMH_FREEZING,
  49        UMH_DISABLED,
  50};
  51
  52extern int __usermodehelper_disable(enum umh_disable_depth depth);
  53extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
  54
  55static inline int usermodehelper_disable(void)
  56{
  57        return __usermodehelper_disable(UMH_DISABLED);
  58}
  59
  60static inline void usermodehelper_enable(void)
  61{
  62        __usermodehelper_set_disable_depth(UMH_ENABLED);
  63}
  64
  65extern int usermodehelper_read_trylock(void);
  66extern long usermodehelper_read_lock_wait(long timeout);
  67extern void usermodehelper_read_unlock(void);
  68
  69#endif /* __LINUX_UMH_H__ */
  70