linux/include/linux/kmod.h
<<
>>
Prefs
   1#ifndef __LINUX_KMOD_H__
   2#define __LINUX_KMOD_H__
   3
   4/*
   5 *      include/linux/kmod.h
   6 *
   7 *      This program is free software; you can redistribute it and/or modify
   8 *      it under the terms of the GNU General Public License as published by
   9 *      the Free Software Foundation; either version 2 of the License, or
  10 *      (at your option) any later version.
  11 *
  12 *      This program is distributed in the hope that it will be useful,
  13 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *      GNU General Public License for more details.
  16 *
  17 *      You should have received a copy of the GNU General Public License
  18 *      along with this program; if not, write to the Free Software
  19 *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20 */
  21
  22#include <linux/gfp.h>
  23#include <linux/stddef.h>
  24#include <linux/errno.h>
  25#include <linux/compiler.h>
  26#include <linux/workqueue.h>
  27#include <linux/sysctl.h>
  28
  29#define KMOD_PATH_LEN 256
  30
  31#ifdef CONFIG_MODULES
  32extern char modprobe_path[]; /* for sysctl */
  33/* modprobe exit status on success, -ve on error.  Return value
  34 * usually useless though. */
  35extern __printf(2, 3)
  36int __request_module(bool wait, const char *name, ...);
  37#define request_module(mod...) __request_module(true, mod)
  38#define request_module_nowait(mod...) __request_module(false, mod)
  39#define try_then_request_module(x, mod...) \
  40        ((x) ?: (__request_module(true, mod), (x)))
  41#else
  42static inline int request_module(const char *name, ...) { return -ENOSYS; }
  43static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; }
  44#define try_then_request_module(x, mod...) (x)
  45#endif
  46
  47
  48struct cred;
  49struct file;
  50
  51#define UMH_NO_WAIT     0       /* don't wait at all */
  52#define UMH_WAIT_EXEC   1       /* wait for the exec, but not the process */
  53#define UMH_WAIT_PROC   2       /* wait for the process to complete */
  54#define UMH_KILLABLE    4       /* wait for EXEC/PROC killable */
  55
  56struct subprocess_info {
  57        struct work_struct work;
  58        struct completion *complete;
  59        char *path;
  60        char **argv;
  61        char **envp;
  62        int wait;
  63        int retval;
  64        int (*init)(struct subprocess_info *info, struct cred *new);
  65        void (*cleanup)(struct subprocess_info *info);
  66        void *data;
  67};
  68
  69extern int
  70call_usermodehelper_fns(char *path, char **argv, char **envp, int wait,
  71                        int (*init)(struct subprocess_info *info, struct cred *new),
  72                        void (*cleanup)(struct subprocess_info *), void *data);
  73
  74static inline int
  75call_usermodehelper(char *path, char **argv, char **envp, int wait)
  76{
  77        return call_usermodehelper_fns(path, argv, envp, wait,
  78                                       NULL, NULL, NULL);
  79}
  80
  81extern struct ctl_table usermodehelper_table[];
  82
  83enum umh_disable_depth {
  84        UMH_ENABLED = 0,
  85        UMH_FREEZING,
  86        UMH_DISABLED,
  87};
  88
  89extern void usermodehelper_init(void);
  90
  91extern int __usermodehelper_disable(enum umh_disable_depth depth);
  92extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
  93
  94static inline int usermodehelper_disable(void)
  95{
  96        return __usermodehelper_disable(UMH_DISABLED);
  97}
  98
  99static inline void usermodehelper_enable(void)
 100{
 101        __usermodehelper_set_disable_depth(UMH_ENABLED);
 102}
 103
 104extern int usermodehelper_read_trylock(void);
 105extern long usermodehelper_read_lock_wait(long timeout);
 106extern void usermodehelper_read_unlock(void);
 107
 108#endif /* __LINUX_KMOD_H__ */
 109
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.