Bug
        
                          [В начало]
Ошибка # 127
Показать/спрятать трассу ошибок|            Error trace     
         {    20     typedef unsigned char __u8;    23     typedef unsigned short __u16;    25     typedef int __s32;    26     typedef unsigned int __u32;    30     typedef unsigned long long __u64;    15     typedef signed char s8;    16     typedef unsigned char u8;    19     typedef unsigned short u16;    21     typedef int s32;    22     typedef unsigned int u32;    24     typedef long long s64;    25     typedef unsigned long long u64;    14     typedef long __kernel_long_t;    15     typedef unsigned long __kernel_ulong_t;    27     typedef int __kernel_pid_t;    48     typedef unsigned int __kernel_uid32_t;    49     typedef unsigned int __kernel_gid32_t;    71     typedef __kernel_ulong_t __kernel_size_t;    72     typedef __kernel_long_t __kernel_ssize_t;    87     typedef long long __kernel_loff_t;    88     typedef __kernel_long_t __kernel_time_t;    89     typedef __kernel_long_t __kernel_clock_t;    90     typedef int __kernel_timer_t;    91     typedef int __kernel_clockid_t;    32     typedef __u16 __le16;    34     typedef __u32 __le32;    36     typedef __u64 __le64;    12     typedef __u32 __kernel_dev_t;    15     typedef __kernel_dev_t dev_t;    18     typedef unsigned short umode_t;    21     typedef __kernel_pid_t pid_t;    26     typedef __kernel_clockid_t clockid_t;    29     typedef _Bool bool;    31     typedef __kernel_uid32_t uid_t;    32     typedef __kernel_gid32_t gid_t;    45     typedef __kernel_loff_t loff_t;    54     typedef __kernel_size_t size_t;    59     typedef __kernel_ssize_t ssize_t;    69     typedef __kernel_time_t time_t;   102     typedef __s32 int32_t;   106     typedef __u8 uint8_t;   107     typedef __u16 uint16_t;   108     typedef __u32 uint32_t;   133     typedef unsigned long sector_t;   134     typedef unsigned long blkcnt_t;   152     typedef u64 dma_addr_t;   157     typedef unsigned int gfp_t;   158     typedef unsigned int fmode_t;   159     typedef unsigned int oom_flags_t;   162     typedef u64 phys_addr_t;   167     typedef phys_addr_t resource_size_t;   177     struct __anonstruct_atomic_t_6 {   int counter; } ;   177     typedef struct __anonstruct_atomic_t_6 atomic_t;   182     struct __anonstruct_atomic64_t_7 {   long counter; } ;   182     typedef struct __anonstruct_atomic64_t_7 atomic64_t;   183     struct list_head {   struct list_head *next;   struct list_head *prev; } ;   188     struct hlist_node ;   188     struct hlist_head {   struct hlist_node *first; } ;   192     struct hlist_node {   struct hlist_node *next;   struct hlist_node **pprev; } ;   203     struct callback_head {   struct callback_head *next;   void (*func)(struct callback_head *); } ;   234     enum dma_data_direction {   DMA_BIDIRECTIONAL = 0,   DMA_TO_DEVICE = 1,   DMA_FROM_DEVICE = 2,   DMA_NONE = 3 } ;     5     struct device ;     5     struct page ;     7     struct dma_attrs ;    33     struct module ;    72     struct pt_regs {   unsigned long r15;   unsigned long r14;   unsigned long r13;   unsigned long r12;   unsigned long bp;   unsigned long bx;   unsigned long r11;   unsigned long r10;   unsigned long r9;   unsigned long r8;   unsigned long ax;   unsigned long cx;   unsigned long dx;   unsigned long si;   unsigned long di;   unsigned long orig_ax;   unsigned long ip;   unsigned long cs;   unsigned long flags;   unsigned long sp;   unsigned long ss; } ;    66     struct __anonstruct____missing_field_name_9 {   unsigned int a;   unsigned int b; } ;    66     struct __anonstruct____missing_field_name_10 {   u16 limit0;   u16 base0;   unsigned char base1;   unsigned char type;   unsigned char s;   unsigned char dpl;   unsigned char p;   unsigned char limit;   unsigned char avl;   unsigned char l;   unsigned char d;   unsigned char g;   unsigned char base2; } ;    66     union __anonunion____missing_field_name_8 {   struct __anonstruct____missing_field_name_9 __annonCompField4;   struct __anonstruct____missing_field_name_10 __annonCompField5; } ;    66     struct desc_struct {   union __anonunion____missing_field_name_8 __annonCompField6; } ;    12     typedef unsigned long pteval_t;    13     typedef unsigned long pmdval_t;    15     typedef unsigned long pgdval_t;    16     typedef unsigned long pgprotval_t;    18     struct __anonstruct_pte_t_11 {   pteval_t pte; } ;    18     typedef struct __anonstruct_pte_t_11 pte_t;    20     struct pgprot {   pgprotval_t pgprot; } ;   221     typedef struct pgprot pgprot_t;   223     struct __anonstruct_pgd_t_12 {   pgdval_t pgd; } ;   223     typedef struct __anonstruct_pgd_t_12 pgd_t;   262     struct __anonstruct_pmd_t_14 {   pmdval_t pmd; } ;   262     typedef struct __anonstruct_pmd_t_14 pmd_t;   390     typedef struct page *pgtable_t;   401     struct file ;   414     struct seq_file ;   452     struct thread_struct ;   454     struct mm_struct ;   455     struct task_struct ;   456     struct cpumask ;    20     struct qspinlock {   atomic_t val; } ;    33     typedef struct qspinlock arch_spinlock_t;    34     struct qrwlock {   atomic_t cnts;   arch_spinlock_t wait_lock; } ;    14     typedef struct qrwlock arch_rwlock_t;   420     struct file_operations ;   432     struct completion ;   102     struct vm_area_struct ;    27     union __anonunion___u_16 {   struct list_head *__val;   char __c[1U]; } ;   200     union __anonunion___u_20 {   struct list_head *__val;   char __c[1U]; } ;   555     struct timespec ;   556     struct compat_timespec ;   557     struct __anonstruct_futex_32 {   u32 *uaddr;   u32 val;   u32 flags;   u32 bitset;   u64 time;   u32 *uaddr2; } ;   557     struct __anonstruct_nanosleep_33 {   clockid_t clockid;   struct timespec *rmtp;   struct compat_timespec *compat_rmtp;   u64 expires; } ;   557     struct pollfd ;   557     struct __anonstruct_poll_34 {   struct pollfd *ufds;   int nfds;   int has_timeout;   unsigned long tv_sec;   unsigned long tv_nsec; } ;   557     union __anonunion____missing_field_name_31 {   struct __anonstruct_futex_32 futex;   struct __anonstruct_nanosleep_33 nanosleep;   struct __anonstruct_poll_34 poll; } ;   557     struct restart_block {   long int (*fn)(struct restart_block *);   union __anonunion____missing_field_name_31 __annonCompField7; } ;    27     struct math_emu_info {   long ___orig_eip;   struct pt_regs *regs; } ;   328     struct cpumask {   unsigned long bits[128U]; } ;    15     typedef struct cpumask cpumask_t;   656     typedef struct cpumask *cpumask_var_t;    23     typedef atomic64_t atomic_long_t;   260     struct fregs_state {   u32 cwd;   u32 swd;   u32 twd;   u32 fip;   u32 fcs;   u32 foo;   u32 fos;   u32 st_space[20U];   u32 status; } ;    26     struct __anonstruct____missing_field_name_59 {   u64 rip;   u64 rdp; } ;    26     struct __anonstruct____missing_field_name_60 {   u32 fip;   u32 fcs;   u32 foo;   u32 fos; } ;    26     union __anonunion____missing_field_name_58 {   struct __anonstruct____missing_field_name_59 __annonCompField13;   struct __anonstruct____missing_field_name_60 __annonCompField14; } ;    26     union __anonunion____missing_field_name_61 {   u32 padding1[12U];   u32 sw_reserved[12U]; } ;    26     struct fxregs_state {   u16 cwd;   u16 swd;   u16 twd;   u16 fop;   union __anonunion____missing_field_name_58 __annonCompField15;   u32 mxcsr;   u32 mxcsr_mask;   u32 st_space[32U];   u32 xmm_space[64U];   u32 padding[12U];   union __anonunion____missing_field_name_61 __annonCompField16; } ;    66     struct swregs_state {   u32 cwd;   u32 swd;   u32 twd;   u32 fip;   u32 fcs;   u32 foo;   u32 fos;   u32 st_space[20U];   u8 ftop;   u8 changed;   u8 lookahead;   u8 no_update;   u8 rm;   u8 alimit;   struct math_emu_info *info;   u32 entry_eip; } ;   214     struct xstate_header {   u64 xfeatures;   u64 xcomp_bv;   u64 reserved[6U]; } ;   220     struct xregs_state {   struct fxregs_state i387;   struct xstate_header header;   u8 extended_state_area[0U]; } ;   235     union fpregs_state {   struct fregs_state fsave;   struct fxregs_state fxsave;   struct swregs_state soft;   struct xregs_state xsave;   u8 __padding[4096U]; } ;   252     struct fpu {   unsigned int last_cpu;   unsigned char fpstate_active;   unsigned char fpregs_active;   unsigned char counter;   union fpregs_state state; } ;   170     struct seq_operations ;   369     struct perf_event ;   370     struct thread_struct {   struct desc_struct tls_array[3U];   unsigned long sp0;   unsigned long sp;   unsigned short es;   unsigned short ds;   unsigned short fsindex;   unsigned short gsindex;   unsigned long fs;   unsigned long gs;   struct perf_event *ptrace_bps[4U];   unsigned long debugreg6;   unsigned long ptrace_dr7;   unsigned long cr2;   unsigned long trap_nr;   unsigned long error_code;   unsigned long *io_bitmap_ptr;   unsigned long iopl;   unsigned int io_bitmap_max;   struct fpu fpu; } ;    33     struct lockdep_map ;    55     struct stack_trace {   unsigned int nr_entries;   unsigned int max_entries;   unsigned long *entries;   int skip; } ;    28     struct lockdep_subclass_key {   char __one_byte; } ;    53     struct lock_class_key {   struct lockdep_subclass_key subkeys[8U]; } ;    59     struct lock_class {   struct list_head hash_entry;   struct list_head lock_entry;   struct lockdep_subclass_key *key;   unsigned int subclass;   unsigned int dep_gen_id;   unsigned long usage_mask;   struct stack_trace usage_traces[13U];   struct list_head locks_after;   struct list_head locks_before;   unsigned int version;   unsigned long ops;   const char *name;   int name_version;   unsigned long contention_point[4U];   unsigned long contending_point[4U]; } ;   144     struct lockdep_map {   struct lock_class_key *key;   struct lock_class *class_cache[2U];   const char *name;   int cpu;   unsigned long ip; } ;   205     struct held_lock {   u64 prev_chain_key;   unsigned long acquire_ip;   struct lockdep_map *instance;   struct lockdep_map *nest_lock;   u64 waittime_stamp;   u64 holdtime_stamp;   unsigned short class_idx;   unsigned char irq_context;   unsigned char trylock;   unsigned char read;   unsigned char check;   unsigned char hardirqs_off;   unsigned short references;   unsigned int pin_count; } ;   546     struct raw_spinlock {   arch_spinlock_t raw_lock;   unsigned int magic;   unsigned int owner_cpu;   void *owner;   struct lockdep_map dep_map; } ;    32     typedef struct raw_spinlock raw_spinlock_t;    33     struct __anonstruct____missing_field_name_75 {   u8 __padding[24U];   struct lockdep_map dep_map; } ;    33     union __anonunion____missing_field_name_74 {   struct raw_spinlock rlock;   struct __anonstruct____missing_field_name_75 __annonCompField19; } ;    33     struct spinlock {   union __anonunion____missing_field_name_74 __annonCompField20; } ;    76     typedef struct spinlock spinlock_t;    23     struct __anonstruct_rwlock_t_76 {   arch_rwlock_t raw_lock;   unsigned int magic;   unsigned int owner_cpu;   void *owner;   struct lockdep_map dep_map; } ;    23     typedef struct __anonstruct_rwlock_t_76 rwlock_t;    12     struct __wait_queue ;    12     typedef struct __wait_queue wait_queue_t;    15     struct __wait_queue {   unsigned int flags;   void *private;   int (*func)(wait_queue_t *, unsigned int, int, void *);   struct list_head task_list; } ;    38     struct __wait_queue_head {   spinlock_t lock;   struct list_head task_list; } ;    43     typedef struct __wait_queue_head wait_queue_head_t;  1221     struct seqcount {   unsigned int sequence;   struct lockdep_map dep_map; } ;    52     typedef struct seqcount seqcount_t;   404     struct __anonstruct_seqlock_t_89 {   struct seqcount seqcount;   spinlock_t lock; } ;   404     typedef struct __anonstruct_seqlock_t_89 seqlock_t;    95     struct __anonstruct_nodemask_t_90 {   unsigned long bits[16U]; } ;    95     typedef struct __anonstruct_nodemask_t_90 nodemask_t;    13     struct optimistic_spin_queue {   atomic_t tail; } ;    39     struct mutex {   atomic_t count;   spinlock_t wait_lock;   struct list_head wait_list;   struct task_struct *owner;   void *magic;   struct lockdep_map dep_map; } ;    67     struct mutex_waiter {   struct list_head list;   struct task_struct *task;   void *magic; } ;   177     struct rw_semaphore ;   178     struct rw_semaphore {   long count;   struct list_head wait_list;   raw_spinlock_t wait_lock;   struct optimistic_spin_queue osq;   struct task_struct *owner;   struct lockdep_map dep_map; } ;   172     struct completion {   unsigned int done;   wait_queue_head_t wait; } ;   105     struct timespec {   __kernel_time_t tv_sec;   long tv_nsec; } ;   446     union ktime {   s64 tv64; } ;    41     typedef union ktime ktime_t;  1148     struct timer_list {   struct hlist_node entry;   unsigned long expires;   void (*function)(unsigned long);   unsigned long data;   u32 flags;   int slack;   int start_pid;   void *start_site;   char start_comm[16U];   struct lockdep_map lockdep_map; } ;   238     struct hrtimer ;   239     enum hrtimer_restart ;   240     struct rb_node {   unsigned long __rb_parent_color;   struct rb_node *rb_right;   struct rb_node *rb_left; } ;    41     struct rb_root {   struct rb_node *rb_node; } ;   838     struct nsproxy ;   259     struct workqueue_struct ;   260     struct work_struct ;    54     struct work_struct {   atomic_long_t data;   struct list_head entry;   void (*func)(struct work_struct *);   struct lockdep_map lockdep_map; } ;   107     struct delayed_work {   struct work_struct work;   struct timer_list timer;   struct workqueue_struct *wq;   int cpu; } ;   215     struct resource ;    64     struct resource {   resource_size_t start;   resource_size_t end;   const char *name;   unsigned long flags;   struct resource *parent;   struct resource *sibling;   struct resource *child; } ;    58     struct pm_message {   int event; } ;    64     typedef struct pm_message pm_message_t;    65     struct dev_pm_ops {   int (*prepare)(struct device *);   void (*complete)(struct device *);   int (*suspend)(struct device *);   int (*resume)(struct device *);   int (*freeze)(struct device *);   int (*thaw)(struct device *);   int (*poweroff)(struct device *);   int (*restore)(struct device *);   int (*suspend_late)(struct device *);   int (*resume_early)(struct device *);   int (*freeze_late)(struct device *);   int (*thaw_early)(struct device *);   int (*poweroff_late)(struct device *);   int (*restore_early)(struct device *);   int (*suspend_noirq)(struct device *);   int (*resume_noirq)(struct device *);   int (*freeze_noirq)(struct device *);   int (*thaw_noirq)(struct device *);   int (*poweroff_noirq)(struct device *);   int (*restore_noirq)(struct device *);   int (*runtime_suspend)(struct device *);   int (*runtime_resume)(struct device *);   int (*runtime_idle)(struct device *); } ;   320     enum rpm_status {   RPM_ACTIVE = 0,   RPM_RESUMING = 1,   RPM_SUSPENDED = 2,   RPM_SUSPENDING = 3 } ;   327     enum rpm_request {   RPM_REQ_NONE = 0,   RPM_REQ_IDLE = 1,   RPM_REQ_SUSPEND = 2,   RPM_REQ_AUTOSUSPEND = 3,   RPM_REQ_RESUME = 4 } ;   335     struct wakeup_source ;   336     struct wake_irq ;   337     struct pm_domain_data ;   338     struct pm_subsys_data {   spinlock_t lock;   unsigned int refcount;   struct list_head clock_list;   struct pm_domain_data *domain_data; } ;   556     struct dev_pm_qos ;   556     struct dev_pm_info {   pm_message_t power_state;   unsigned char can_wakeup;   unsigned char async_suspend;   bool is_prepared;   bool is_suspended;   bool is_noirq_suspended;   bool is_late_suspended;   bool ignore_children;   bool early_init;   bool direct_complete;   spinlock_t lock;   struct list_head entry;   struct completion completion;   struct wakeup_source *wakeup;   bool wakeup_path;   bool syscore;   bool no_pm_callbacks;   struct timer_list suspend_timer;   unsigned long timer_expires;   struct work_struct work;   wait_queue_head_t wait_queue;   struct wake_irq *wakeirq;   atomic_t usage_count;   atomic_t child_count;   unsigned char disable_depth;   unsigned char idle_notification;   unsigned char request_pending;   unsigned char deferred_resume;   unsigned char run_wake;   unsigned char runtime_auto;   unsigned char no_callbacks;   unsigned char irq_safe;   unsigned char use_autosuspend;   unsigned char timer_autosuspends;   unsigned char memalloc_noio;   enum rpm_request request;   enum rpm_status runtime_status;   int runtime_error;   int autosuspend_delay;   unsigned long last_busy;   unsigned long active_jiffies;   unsigned long suspended_jiffies;   unsigned long accounting_timestamp;   struct pm_subsys_data *subsys_data;   void (*set_latency_tolerance)(struct device *, s32 );   struct dev_pm_qos *qos; } ;   616     struct dev_pm_domain {   struct dev_pm_ops ops;   void (*detach)(struct device *, bool );   int (*activate)(struct device *);   void (*sync)(struct device *);   void (*dismiss)(struct device *); } ;    25     struct ldt_struct ;    25     struct __anonstruct_mm_context_t_159 {   struct ldt_struct *ldt;   unsigned short ia32_compat;   struct mutex lock;   void *vdso;   atomic_t perf_rdpmc_allowed; } ;    25     typedef struct __anonstruct_mm_context_t_159 mm_context_t;    22     struct bio_vec ;  1211     struct llist_node ;    64     struct llist_node {   struct llist_node *next; } ;   559     union __anonunion____missing_field_name_189 {   unsigned long bitmap[4U];   struct callback_head callback_head; } ;   559     struct idr_layer {   int prefix;   int layer;   struct idr_layer *ary[256U];   int count;   union __anonunion____missing_field_name_189 __annonCompField33; } ;    41     struct idr {   struct idr_layer *hint;   struct idr_layer *top;   int layers;   int cur;   spinlock_t lock;   int id_free_cnt;   struct idr_layer *id_free; } ;   124     struct ida_bitmap {   long nr_busy;   unsigned long bitmap[15U]; } ;   167     struct ida {   struct idr idr;   struct ida_bitmap *free_bitmap; } ;   199     struct dentry ;   200     struct iattr ;   201     struct super_block ;   202     struct file_system_type ;   203     struct kernfs_open_node ;   204     struct kernfs_iattrs ;   227     struct kernfs_root ;   227     struct kernfs_elem_dir {   unsigned long subdirs;   struct rb_root children;   struct kernfs_root *root; } ;    85     struct kernfs_node ;    85     struct kernfs_elem_symlink {   struct kernfs_node *target_kn; } ;    89     struct kernfs_ops ;    89     struct kernfs_elem_attr {   const struct kernfs_ops *ops;   struct kernfs_open_node *open;   loff_t size;   struct kernfs_node *notify_next; } ;    96     union __anonunion____missing_field_name_194 {   struct kernfs_elem_dir dir;   struct kernfs_elem_symlink symlink;   struct kernfs_elem_attr attr; } ;    96     struct kernfs_node {   atomic_t count;   atomic_t active;   struct lockdep_map dep_map;   struct kernfs_node *parent;   const char *name;   struct rb_node rb;   const void *ns;   unsigned int hash;   union __anonunion____missing_field_name_194 __annonCompField34;   void *priv;   unsigned short flags;   umode_t mode;   unsigned int ino;   struct kernfs_iattrs *iattr; } ;   138     struct kernfs_syscall_ops {   int (*remount_fs)(struct kernfs_root *, int *, char *);   int (*show_options)(struct seq_file *, struct kernfs_root *);   int (*mkdir)(struct kernfs_node *, const char *, umode_t );   int (*rmdir)(struct kernfs_node *);   int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); } ;   155     struct kernfs_root {   struct kernfs_node *kn;   unsigned int flags;   struct ida ino_ida;   struct kernfs_syscall_ops *syscall_ops;   struct list_head supers;   wait_queue_head_t deactivate_waitq; } ;   171     struct vm_operations_struct ;   171     struct kernfs_open_file {   struct kernfs_node *kn;   struct file *file;   void *priv;   struct mutex mutex;   int event;   struct list_head list;   char *prealloc_buf;   size_t atomic_write_len;   bool mmapped;   const struct vm_operations_struct *vm_ops; } ;   188     struct kernfs_ops {   int (*seq_show)(struct seq_file *, void *);   void * (*seq_start)(struct seq_file *, loff_t *);   void * (*seq_next)(struct seq_file *, void *, loff_t *);   void (*seq_stop)(struct seq_file *, void *);   ssize_t  (*read)(struct kernfs_open_file *, char *, size_t , loff_t );   size_t atomic_write_len;   bool prealloc;   ssize_t  (*write)(struct kernfs_open_file *, char *, size_t , loff_t );   int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);   struct lock_class_key lockdep_key; } ;   284     struct inode ;   493     struct sock ;   494     struct kobject ;   495     enum kobj_ns_type {   KOBJ_NS_TYPE_NONE = 0,   KOBJ_NS_TYPE_NET = 1,   KOBJ_NS_TYPES = 2 } ;   501     struct kobj_ns_type_operations {   enum kobj_ns_type type;   bool  (*current_may_mount)();   void * (*grab_current_ns)();   const void * (*netlink_ns)(struct sock *);   const void * (*initial_ns)();   void (*drop_ns)(void *); } ;    83     struct user_namespace ;    22     struct __anonstruct_kuid_t_197 {   uid_t val; } ;    22     typedef struct __anonstruct_kuid_t_197 kuid_t;    27     struct __anonstruct_kgid_t_198 {   gid_t val; } ;    27     typedef struct __anonstruct_kgid_t_198 kgid_t;   139     struct kstat {   u64 ino;   dev_t dev;   umode_t mode;   unsigned int nlink;   kuid_t uid;   kgid_t gid;   dev_t rdev;   loff_t size;   struct timespec atime;   struct timespec mtime;   struct timespec ctime;   unsigned long blksize;   unsigned long long blocks; } ;    36     struct bin_attribute ;    37     struct attribute {   const char *name;   umode_t mode;   bool ignore_lockdep;   struct lock_class_key *key;   struct lock_class_key skey; } ;    37     struct attribute_group {   const char *name;   umode_t  (*is_visible)(struct kobject *, struct attribute *, int);   umode_t  (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);   struct attribute **attrs;   struct bin_attribute **bin_attrs; } ;    92     struct bin_attribute {   struct attribute attr;   size_t size;   void *private;   ssize_t  (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t );   ssize_t  (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t );   int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *); } ;   165     struct sysfs_ops {   ssize_t  (*show)(struct kobject *, struct attribute *, char *);   ssize_t  (*store)(struct kobject *, struct attribute *, const char *, size_t ); } ;   530     struct kref {   atomic_t refcount; } ;    52     struct kset ;    52     struct kobj_type ;    52     struct kobject {   const char *name;   struct list_head entry;   struct kobject *parent;   struct kset *kset;   struct kobj_type *ktype;   struct kernfs_node *sd;   struct kref kref;   struct delayed_work release;   unsigned char state_initialized;   unsigned char state_in_sysfs;   unsigned char state_add_uevent_sent;   unsigned char state_remove_uevent_sent;   unsigned char uevent_suppress; } ;   115     struct kobj_type {   void (*release)(struct kobject *);   const struct sysfs_ops *sysfs_ops;   struct attribute **default_attrs;   const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);   const void * (*namespace)(struct kobject *); } ;   123     struct kobj_uevent_env {   char *argv[3U];   char *envp[32U];   int envp_idx;   char buf[2048U];   int buflen; } ;   131     struct kset_uevent_ops {   const int (*filter)(struct kset *, struct kobject *);   const const char * (*name)(struct kset *, struct kobject *);   const int (*uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *); } ;   148     struct kset {   struct list_head list;   spinlock_t list_lock;   struct kobject kobj;   const struct kset_uevent_ops *uevent_ops; } ;   223     struct klist_node ;    37     struct klist_node {   void *n_klist;   struct list_head n_node;   struct kref n_ref; } ;    68     struct path ;    69     struct seq_file {   char *buf;   size_t size;   size_t from;   size_t count;   size_t pad_until;   loff_t index;   loff_t read_pos;   u64 version;   struct mutex lock;   const struct seq_operations *op;   int poll_event;   struct user_namespace *user_ns;   void *private; } ;    35     struct seq_operations {   void * (*start)(struct seq_file *, loff_t *);   void (*stop)(struct seq_file *, void *);   void * (*next)(struct seq_file *, void *, loff_t *);   int (*show)(struct seq_file *, void *); } ;   227     struct pinctrl ;   228     struct pinctrl_state ;   194     struct dev_pin_info {   struct pinctrl *p;   struct pinctrl_state *default_state;   struct pinctrl_state *init_state;   struct pinctrl_state *sleep_state;   struct pinctrl_state *idle_state; } ;    48     struct dma_map_ops ;    48     struct dev_archdata {   struct dma_map_ops *dma_ops;   void *iommu; } ;    24     struct device_private ;    25     struct device_driver ;    26     struct driver_private ;    27     struct class ;    28     struct subsys_private ;    29     struct bus_type ;    30     struct device_node ;    31     struct fwnode_handle ;    32     struct iommu_ops ;    33     struct iommu_group ;    61     struct device_attribute ;    61     struct bus_type {   const char *name;   const char *dev_name;   struct device *dev_root;   struct device_attribute *dev_attrs;   const struct attribute_group **bus_groups;   const struct attribute_group **dev_groups;   const struct attribute_group **drv_groups;   int (*match)(struct device *, struct device_driver *);   int (*uevent)(struct device *, struct kobj_uevent_env *);   int (*probe)(struct device *);   int (*remove)(struct device *);   void (*shutdown)(struct device *);   int (*online)(struct device *);   int (*offline)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct dev_pm_ops *pm;   const struct iommu_ops *iommu_ops;   struct subsys_private *p;   struct lock_class_key lock_key; } ;   139     struct device_type ;   198     enum probe_type {   PROBE_DEFAULT_STRATEGY = 0,   PROBE_PREFER_ASYNCHRONOUS = 1,   PROBE_FORCE_SYNCHRONOUS = 2 } ;   204     struct of_device_id ;   204     struct acpi_device_id ;   204     struct device_driver {   const char *name;   struct bus_type *bus;   struct module *owner;   const char *mod_name;   bool suppress_bind_attrs;   enum probe_type probe_type;   const struct of_device_id *of_match_table;   const struct acpi_device_id *acpi_match_table;   int (*probe)(struct device *);   int (*remove)(struct device *);   void (*shutdown)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct attribute_group **groups;   const struct dev_pm_ops *pm;   struct driver_private *p; } ;   354     struct class_attribute ;   354     struct class {   const char *name;   struct module *owner;   struct class_attribute *class_attrs;   const struct attribute_group **dev_groups;   struct kobject *dev_kobj;   int (*dev_uevent)(struct device *, struct kobj_uevent_env *);   char * (*devnode)(struct device *, umode_t *);   void (*class_release)(struct class *);   void (*dev_release)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct kobj_ns_type_operations *ns_type;   const void * (*namespace)(struct device *);   const struct dev_pm_ops *pm;   struct subsys_private *p; } ;   447     struct class_attribute {   struct attribute attr;   ssize_t  (*show)(struct class *, struct class_attribute *, char *);   ssize_t  (*store)(struct class *, struct class_attribute *, const char *, size_t ); } ;   515     struct device_type {   const char *name;   const struct attribute_group **groups;   int (*uevent)(struct device *, struct kobj_uevent_env *);   char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *);   void (*release)(struct device *);   const struct dev_pm_ops *pm; } ;   543     struct device_attribute {   struct attribute attr;   ssize_t  (*show)(struct device *, struct device_attribute *, char *);   ssize_t  (*store)(struct device *, struct device_attribute *, const char *, size_t ); } ;   684     struct device_dma_parameters {   unsigned int max_segment_size;   unsigned long segment_boundary_mask; } ;   693     struct irq_domain ;   693     struct dma_coherent_mem ;   693     struct cma ;   693     struct device {   struct device *parent;   struct device_private *p;   struct kobject kobj;   const char *init_name;   const struct device_type *type;   struct mutex mutex;   struct bus_type *bus;   struct device_driver *driver;   void *platform_data;   void *driver_data;   struct dev_pm_info power;   struct dev_pm_domain *pm_domain;   struct irq_domain *msi_domain;   struct dev_pin_info *pins;   struct list_head msi_list;   int numa_node;   u64 *dma_mask;   u64 coherent_dma_mask;   unsigned long dma_pfn_offset;   struct device_dma_parameters *dma_parms;   struct list_head dma_pools;   struct dma_coherent_mem *dma_mem;   struct cma *cma_area;   struct dev_archdata archdata;   struct device_node *of_node;   struct fwnode_handle *fwnode;   dev_t devt;   u32 id;   spinlock_t devres_lock;   struct list_head devres_head;   struct klist_node knode_class;   struct class *class;   const struct attribute_group **groups;   void (*release)(struct device *);   struct iommu_group *iommu_group;   bool offline_disabled;   bool offline; } ;   847     struct wakeup_source {   const char *name;   struct list_head entry;   spinlock_t lock;   struct wake_irq *wakeirq;   struct timer_list timer;   unsigned long timer_expires;   ktime_t total_time;   ktime_t max_time;   ktime_t last_time;   ktime_t start_prevent_time;   ktime_t prevent_sleep_time;   unsigned long event_count;   unsigned long active_count;   unsigned long relax_count;   unsigned long expire_count;   unsigned long wakeup_count;   bool active;   bool autosleep_enabled; } ;  1320     struct dma_attrs {   unsigned long flags[1U]; } ;    69     struct scatterlist ;    58     struct arch_uprobe_task {   unsigned long saved_scratch_register;   unsigned int saved_trap_nr;   unsigned int saved_tf; } ;    66     enum uprobe_task_state {   UTASK_RUNNING = 0,   UTASK_SSTEP = 1,   UTASK_SSTEP_ACK = 2,   UTASK_SSTEP_TRAPPED = 3 } ;    73     struct __anonstruct____missing_field_name_204 {   struct arch_uprobe_task autask;   unsigned long vaddr; } ;    73     struct __anonstruct____missing_field_name_205 {   struct callback_head dup_xol_work;   unsigned long dup_xol_addr; } ;    73     union __anonunion____missing_field_name_203 {   struct __anonstruct____missing_field_name_204 __annonCompField37;   struct __anonstruct____missing_field_name_205 __annonCompField38; } ;    73     struct uprobe ;    73     struct return_instance ;    73     struct uprobe_task {   enum uprobe_task_state state;   union __anonunion____missing_field_name_203 __annonCompField39;   struct uprobe *active_uprobe;   unsigned long xol_vaddr;   struct return_instance *return_instances;   unsigned int depth; } ;    94     struct return_instance {   struct uprobe *uprobe;   unsigned long func;   unsigned long stack;   unsigned long orig_ret_vaddr;   bool chained;   struct return_instance *next; } ;   110     struct xol_area ;   111     struct uprobes_state {   struct xol_area *xol_area; } ;   150     struct address_space ;   151     struct mem_cgroup ;   152     union __anonunion____missing_field_name_206 {   struct address_space *mapping;   void *s_mem;   atomic_t compound_mapcount; } ;   152     union __anonunion____missing_field_name_208 {   unsigned long index;   void *freelist; } ;   152     struct __anonstruct____missing_field_name_212 {   unsigned short inuse;   unsigned short objects;   unsigned char frozen; } ;   152     union __anonunion____missing_field_name_211 {   atomic_t _mapcount;   struct __anonstruct____missing_field_name_212 __annonCompField42;   int units; } ;   152     struct __anonstruct____missing_field_name_210 {   union __anonunion____missing_field_name_211 __annonCompField43;   atomic_t _count; } ;   152     union __anonunion____missing_field_name_209 {   unsigned long counters;   struct __anonstruct____missing_field_name_210 __annonCompField44;   unsigned int active; } ;   152     struct __anonstruct____missing_field_name_207 {   union __anonunion____missing_field_name_208 __annonCompField41;   union __anonunion____missing_field_name_209 __annonCompField45; } ;   152     struct dev_pagemap ;   152     struct __anonstruct____missing_field_name_214 {   struct page *next;   int pages;   int pobjects; } ;   152     struct __anonstruct____missing_field_name_215 {   unsigned long compound_head;   unsigned int compound_dtor;   unsigned int compound_order; } ;   152     struct __anonstruct____missing_field_name_216 {   unsigned long __pad;   pgtable_t pmd_huge_pte; } ;   152     union __anonunion____missing_field_name_213 {   struct list_head lru;   struct dev_pagemap *pgmap;   struct __anonstruct____missing_field_name_214 __annonCompField47;   struct callback_head callback_head;   struct __anonstruct____missing_field_name_215 __annonCompField48;   struct __anonstruct____missing_field_name_216 __annonCompField49; } ;   152     struct kmem_cache ;   152     union __anonunion____missing_field_name_217 {   unsigned long private;   spinlock_t *ptl;   struct kmem_cache *slab_cache; } ;   152     struct page {   unsigned long flags;   union __anonunion____missing_field_name_206 __annonCompField40;   struct __anonstruct____missing_field_name_207 __annonCompField46;   union __anonunion____missing_field_name_213 __annonCompField50;   union __anonunion____missing_field_name_217 __annonCompField51;   struct mem_cgroup *mem_cgroup; } ;   191     struct page_frag {   struct page *page;   __u32 offset;   __u32 size; } ;   276     struct userfaultfd_ctx ;   276     struct vm_userfaultfd_ctx {   struct userfaultfd_ctx *ctx; } ;   283     struct __anonstruct_shared_218 {   struct rb_node rb;   unsigned long rb_subtree_last; } ;   283     struct anon_vma ;   283     struct mempolicy ;   283     struct vm_area_struct {   unsigned long vm_start;   unsigned long vm_end;   struct vm_area_struct *vm_next;   struct vm_area_struct *vm_prev;   struct rb_node vm_rb;   unsigned long rb_subtree_gap;   struct mm_struct *vm_mm;   pgprot_t vm_page_prot;   unsigned long vm_flags;   struct __anonstruct_shared_218 shared;   struct list_head anon_vma_chain;   struct anon_vma *anon_vma;   const struct vm_operations_struct *vm_ops;   unsigned long vm_pgoff;   struct file *vm_file;   void *vm_private_data;   struct mempolicy *vm_policy;   struct vm_userfaultfd_ctx vm_userfaultfd_ctx; } ;   356     struct core_thread {   struct task_struct *task;   struct core_thread *next; } ;   361     struct core_state {   atomic_t nr_threads;   struct core_thread dumper;   struct completion startup; } ;   375     struct task_rss_stat {   int events;   int count[4U]; } ;   383     struct mm_rss_stat {   atomic_long_t count[4U]; } ;   388     struct kioctx_table ;   389     struct linux_binfmt ;   389     struct mmu_notifier_mm ;   389     struct mm_struct {   struct vm_area_struct *mmap;   struct rb_root mm_rb;   u32 vmacache_seqnum;   unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);   unsigned long mmap_base;   unsigned long mmap_legacy_base;   unsigned long task_size;   unsigned long highest_vm_end;   pgd_t *pgd;   atomic_t mm_users;   atomic_t mm_count;   atomic_long_t nr_ptes;   atomic_long_t nr_pmds;   int map_count;   spinlock_t page_table_lock;   struct rw_semaphore mmap_sem;   struct list_head mmlist;   unsigned long hiwater_rss;   unsigned long hiwater_vm;   unsigned long total_vm;   unsigned long locked_vm;   unsigned long pinned_vm;   unsigned long data_vm;   unsigned long exec_vm;   unsigned long stack_vm;   unsigned long def_flags;   unsigned long start_code;   unsigned long end_code;   unsigned long start_data;   unsigned long end_data;   unsigned long start_brk;   unsigned long brk;   unsigned long start_stack;   unsigned long arg_start;   unsigned long arg_end;   unsigned long env_start;   unsigned long env_end;   unsigned long saved_auxv[46U];   struct mm_rss_stat rss_stat;   struct linux_binfmt *binfmt;   cpumask_var_t cpu_vm_mask_var;   mm_context_t context;   unsigned long flags;   struct core_state *core_state;   spinlock_t ioctx_lock;   struct kioctx_table *ioctx_table;   struct task_struct *owner;   struct file *exe_file;   struct mmu_notifier_mm *mmu_notifier_mm;   struct cpumask cpumask_allocation;   unsigned long numa_next_scan;   unsigned long numa_scan_offset;   int numa_scan_seq;   bool tlb_flush_pending;   struct uprobes_state uprobes_state;   void *bd_addr;   atomic_long_t hugetlb_usage; } ;   591     struct percpu_ref ;    55     typedef void percpu_ref_func_t(struct percpu_ref *);    68     struct percpu_ref {   atomic_long_t count;   unsigned long percpu_count_ptr;   percpu_ref_func_t *release;   percpu_ref_func_t *confirm_switch;   bool force_atomic;   struct callback_head rcu; } ;    93     struct shrink_control {   gfp_t gfp_mask;   unsigned long nr_to_scan;   int nid;   struct mem_cgroup *memcg; } ;    27     struct shrinker {   unsigned long int (*count_objects)(struct shrinker *, struct shrink_control *);   unsigned long int (*scan_objects)(struct shrinker *, struct shrink_control *);   int seeks;   long batch;   unsigned long flags;   struct list_head list;   atomic_long_t *nr_deferred; } ;    41     struct rlimit {   __kernel_ulong_t rlim_cur;   __kernel_ulong_t rlim_max; } ;    68     struct file_ra_state ;    69     struct user_struct ;    70     struct writeback_control ;    71     struct bdi_writeback ;   226     struct vm_fault {   unsigned int flags;   gfp_t gfp_mask;   unsigned long pgoff;   void *virtual_address;   struct page *cow_page;   struct page *page;   unsigned long max_pgoff;   pte_t *pte; } ;   262     struct vm_operations_struct {   void (*open)(struct vm_area_struct *);   void (*close)(struct vm_area_struct *);   int (*mremap)(struct vm_area_struct *);   int (*fault)(struct vm_area_struct *, struct vm_fault *);   int (*pmd_fault)(struct vm_area_struct *, unsigned long, pmd_t *, unsigned int);   void (*map_pages)(struct vm_area_struct *, struct vm_fault *);   int (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *);   int (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *);   int (*access)(struct vm_area_struct *, unsigned long, void *, int, int);   const char * (*name)(struct vm_area_struct *);   int (*set_policy)(struct vm_area_struct *, struct mempolicy *);   struct mempolicy * (*get_policy)(struct vm_area_struct *, unsigned long);   struct page * (*find_special_page)(struct vm_area_struct *, unsigned long); } ;  1285     struct kvec ;  2365     struct scatterlist {   unsigned long sg_magic;   unsigned long page_link;   unsigned int offset;   unsigned int length;   dma_addr_t dma_address;   unsigned int dma_length; } ;    21     struct sg_table {   struct scatterlist *sgl;   unsigned int nents;   unsigned int orig_nents; } ;   158     struct dma_map_ops {   void * (*alloc)(struct device *, size_t , dma_addr_t *, gfp_t , struct dma_attrs *);   void (*free)(struct device *, size_t , void *, dma_addr_t , struct dma_attrs *);   int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t , size_t , struct dma_attrs *);   int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t , size_t , struct dma_attrs *);   dma_addr_t  (*map_page)(struct device *, struct page *, unsigned long, size_t , enum dma_data_direction , struct dma_attrs *);   void (*unmap_page)(struct device *, dma_addr_t , size_t , enum dma_data_direction , struct dma_attrs *);   int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *);   void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *);   void (*sync_single_for_cpu)(struct device *, dma_addr_t , size_t , enum dma_data_direction );   void (*sync_single_for_device)(struct device *, dma_addr_t , size_t , enum dma_data_direction );   void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction );   void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction );   int (*mapping_error)(struct device *, dma_addr_t );   int (*dma_supported)(struct device *, u64 );   int (*set_dma_mask)(struct device *, u64 );   int is_phys; } ;    13     typedef unsigned long kernel_ulong_t;   186     struct acpi_device_id {   __u8 id[9U];   kernel_ulong_t driver_data;   __u32 cls;   __u32 cls_msk; } ;   229     struct of_device_id {   char name[32U];   char type[32U];   char compatible[128U];   const void *data; } ;    22     struct kernel_cap_struct {   __u32 cap[2U]; } ;    25     typedef struct kernel_cap_struct kernel_cap_t;    84     struct plist_node {   int prio;   struct list_head prio_list;   struct list_head node_list; } ;     4     typedef unsigned long cputime_t;    25     struct sem_undo_list ;    25     struct sysv_sem {   struct sem_undo_list *undo_list; } ;    26     struct sysv_shm {   struct list_head shm_clist; } ;    24     struct __anonstruct_sigset_t_234 {   unsigned long sig[1U]; } ;    24     typedef struct __anonstruct_sigset_t_234 sigset_t;    25     struct siginfo ;    17     typedef void __signalfn_t(int);    18     typedef __signalfn_t *__sighandler_t;    20     typedef void __restorefn_t();    21     typedef __restorefn_t *__sigrestore_t;    34     union sigval {   int sival_int;   void *sival_ptr; } ;    10     typedef union sigval sigval_t;    11     struct __anonstruct__kill_236 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid; } ;    11     struct __anonstruct__timer_237 {   __kernel_timer_t _tid;   int _overrun;   char _pad[0U];   sigval_t _sigval;   int _sys_private; } ;    11     struct __anonstruct__rt_238 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid;   sigval_t _sigval; } ;    11     struct __anonstruct__sigchld_239 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid;   int _status;   __kernel_clock_t _utime;   __kernel_clock_t _stime; } ;    11     struct __anonstruct__addr_bnd_241 {   void *_lower;   void *_upper; } ;    11     struct __anonstruct__sigfault_240 {   void *_addr;   short _addr_lsb;   struct __anonstruct__addr_bnd_241 _addr_bnd; } ;    11     struct __anonstruct__sigpoll_242 {   long _band;   int _fd; } ;    11     struct __anonstruct__sigsys_243 {   void *_call_addr;   int _syscall;   unsigned int _arch; } ;    11     union __anonunion__sifields_235 {   int _pad[28U];   struct __anonstruct__kill_236 _kill;   struct __anonstruct__timer_237 _timer;   struct __anonstruct__rt_238 _rt;   struct __anonstruct__sigchld_239 _sigchld;   struct __anonstruct__sigfault_240 _sigfault;   struct __anonstruct__sigpoll_242 _sigpoll;   struct __anonstruct__sigsys_243 _sigsys; } ;    11     struct siginfo {   int si_signo;   int si_errno;   int si_code;   union __anonunion__sifields_235 _sifields; } ;   113     typedef struct siginfo siginfo_t;    22     struct sigpending {   struct list_head list;   sigset_t signal; } ;   242     struct sigaction {   __sighandler_t sa_handler;   unsigned long sa_flags;   __sigrestore_t sa_restorer;   sigset_t sa_mask; } ;   256     struct k_sigaction {   struct sigaction sa; } ;   442     enum pid_type {   PIDTYPE_PID = 0,   PIDTYPE_PGID = 1,   PIDTYPE_SID = 2,   PIDTYPE_MAX = 3 } ;   449     struct pid_namespace ;   449     struct upid {   int nr;   struct pid_namespace *ns;   struct hlist_node pid_chain; } ;    56     struct pid {   atomic_t count;   unsigned int level;   struct hlist_head tasks[3U];   struct callback_head rcu;   struct upid numbers[1U]; } ;    68     struct pid_link {   struct hlist_node node;   struct pid *pid; } ;    53     struct seccomp_filter ;    54     struct seccomp {   int mode;   struct seccomp_filter *filter; } ;    40     struct rt_mutex_waiter ;   100     struct timerqueue_node {   struct rb_node node;   ktime_t expires; } ;    12     struct timerqueue_head {   struct rb_root head;   struct timerqueue_node *next; } ;    50     struct hrtimer_clock_base ;    51     struct hrtimer_cpu_base ;    60     enum hrtimer_restart {   HRTIMER_NORESTART = 0,   HRTIMER_RESTART = 1 } ;    65     struct hrtimer {   struct timerqueue_node node;   ktime_t _softexpires;   enum hrtimer_restart  (*function)(struct hrtimer *);   struct hrtimer_clock_base *base;   unsigned long state;   int start_pid;   void *start_site;   char start_comm[16U]; } ;   123     struct hrtimer_clock_base {   struct hrtimer_cpu_base *cpu_base;   int index;   clockid_t clockid;   struct timerqueue_head active;   ktime_t  (*get_time)();   ktime_t offset; } ;   156     struct hrtimer_cpu_base {   raw_spinlock_t lock;   seqcount_t seq;   struct hrtimer *running;   unsigned int cpu;   unsigned int active_bases;   unsigned int clock_was_set_seq;   bool migration_enabled;   bool nohz_active;   unsigned char in_hrtirq;   unsigned char hres_active;   unsigned char hang_detected;   ktime_t expires_next;   struct hrtimer *next_timer;   unsigned int nr_events;   unsigned int nr_retries;   unsigned int nr_hangs;   unsigned int max_hang_time;   struct hrtimer_clock_base clock_base[4U]; } ;   466     struct task_io_accounting {   u64 rchar;   u64 wchar;   u64 syscr;   u64 syscw;   u64 read_bytes;   u64 write_bytes;   u64 cancelled_write_bytes; } ;    45     struct latency_record {   unsigned long backtrace[12U];   unsigned int count;   unsigned long time;   unsigned long max; } ;    39     struct assoc_array_ptr ;    39     struct assoc_array {   struct assoc_array_ptr *root;   unsigned long nr_leaves_on_tree; } ;    31     typedef int32_t key_serial_t;    34     typedef uint32_t key_perm_t;    35     struct key ;    36     struct signal_struct ;    37     struct cred ;    38     struct key_type ;    42     struct keyring_index_key {   struct key_type *type;   const char *description;   size_t desc_len; } ;    91     union key_payload {   void *rcu_data0;   void *data[4U]; } ;   128     union __anonunion____missing_field_name_262 {   struct list_head graveyard_link;   struct rb_node serial_node; } ;   128     struct key_user ;   128     union __anonunion____missing_field_name_263 {   time_t expiry;   time_t revoked_at; } ;   128     struct __anonstruct____missing_field_name_265 {   struct key_type *type;   char *description; } ;   128     union __anonunion____missing_field_name_264 {   struct keyring_index_key index_key;   struct __anonstruct____missing_field_name_265 __annonCompField54; } ;   128     struct __anonstruct____missing_field_name_267 {   struct list_head name_link;   struct assoc_array keys; } ;   128     union __anonunion____missing_field_name_266 {   union key_payload payload;   struct __anonstruct____missing_field_name_267 __annonCompField56;   int reject_error; } ;   128     struct key {   atomic_t usage;   key_serial_t serial;   union __anonunion____missing_field_name_262 __annonCompField52;   struct rw_semaphore sem;   struct key_user *user;   void *security;   union __anonunion____missing_field_name_263 __annonCompField53;   time_t last_used_at;   kuid_t uid;   kgid_t gid;   key_perm_t perm;   unsigned short quotalen;   unsigned short datalen;   unsigned long flags;   union __anonunion____missing_field_name_264 __annonCompField55;   union __anonunion____missing_field_name_266 __annonCompField57; } ;   354     struct audit_context ;    27     struct group_info {   atomic_t usage;   int ngroups;   int nblocks;   kgid_t small_block[32U];   kgid_t *blocks[0U]; } ;    90     struct cred {   atomic_t usage;   atomic_t subscribers;   void *put_addr;   unsigned int magic;   kuid_t uid;   kgid_t gid;   kuid_t suid;   kgid_t sgid;   kuid_t euid;   kgid_t egid;   kuid_t fsuid;   kgid_t fsgid;   unsigned int securebits;   kernel_cap_t cap_inheritable;   kernel_cap_t cap_permitted;   kernel_cap_t cap_effective;   kernel_cap_t cap_bset;   kernel_cap_t cap_ambient;   unsigned char jit_keyring;   struct key *session_keyring;   struct key *process_keyring;   struct key *thread_keyring;   struct key *request_key_auth;   void *security;   struct user_struct *user;   struct user_namespace *user_ns;   struct group_info *group_info;   struct callback_head rcu; } ;   377     enum rcu_sync_type {   RCU_SYNC = 0,   RCU_SCHED_SYNC = 1,   RCU_BH_SYNC = 2 } ;   383     struct rcu_sync {   int gp_state;   int gp_count;   wait_queue_head_t gp_wait;   int cb_state;   struct callback_head cb_head;   enum rcu_sync_type gp_type; } ;    65     struct percpu_rw_semaphore {   struct rcu_sync rss;   unsigned int *fast_read_ctr;   struct rw_semaphore rw_sem;   atomic_t slow_read_ctr;   wait_queue_head_t write_waitq; } ;    54     struct cgroup ;    55     struct cgroup_root ;    56     struct cgroup_subsys ;    57     struct cgroup_taskset ;   100     struct cgroup_file {   struct kernfs_node *kn; } ;    89     struct cgroup_subsys_state {   struct cgroup *cgroup;   struct cgroup_subsys *ss;   struct percpu_ref refcnt;   struct cgroup_subsys_state *parent;   struct list_head sibling;   struct list_head children;   int id;   unsigned int flags;   u64 serial_nr;   struct callback_head callback_head;   struct work_struct destroy_work; } ;   134     struct css_set {   atomic_t refcount;   struct hlist_node hlist;   struct list_head tasks;   struct list_head mg_tasks;   struct list_head cgrp_links;   struct cgroup *dfl_cgrp;   struct cgroup_subsys_state *subsys[13U];   struct list_head mg_preload_node;   struct list_head mg_node;   struct cgroup *mg_src_cgrp;   struct css_set *mg_dst_cset;   struct list_head e_cset_node[13U];   struct list_head task_iters;   struct callback_head callback_head; } ;   210     struct cgroup {   struct cgroup_subsys_state self;   unsigned long flags;   int id;   int level;   int populated_cnt;   struct kernfs_node *kn;   struct cgroup_file procs_file;   struct cgroup_file events_file;   unsigned int subtree_control;   unsigned int child_subsys_mask;   struct cgroup_subsys_state *subsys[13U];   struct cgroup_root *root;   struct list_head cset_links;   struct list_head e_csets[13U];   struct list_head pidlists;   struct mutex pidlist_mutex;   wait_queue_head_t offline_waitq;   struct work_struct release_agent_work;   int ancestor_ids[]; } ;   294     struct cgroup_root {   struct kernfs_root *kf_root;   unsigned int subsys_mask;   int hierarchy_id;   struct cgroup cgrp;   int cgrp_ancestor_id_storage;   atomic_t nr_cgrps;   struct list_head root_list;   unsigned int flags;   struct idr cgroup_idr;   char release_agent_path[4096U];   char name[64U]; } ;   333     struct cftype {   char name[64U];   unsigned long private;   size_t max_write_len;   unsigned int flags;   unsigned int file_offset;   struct cgroup_subsys *ss;   struct list_head node;   struct kernfs_ops *kf_ops;   u64  (*read_u64)(struct cgroup_subsys_state *, struct cftype *);   s64  (*read_s64)(struct cgroup_subsys_state *, struct cftype *);   int (*seq_show)(struct seq_file *, void *);   void * (*seq_start)(struct seq_file *, loff_t *);   void * (*seq_next)(struct seq_file *, void *, loff_t *);   void (*seq_stop)(struct seq_file *, void *);   int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64 );   int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64 );   ssize_t  (*write)(struct kernfs_open_file *, char *, size_t , loff_t );   struct lock_class_key lockdep_key; } ;   418     struct cgroup_subsys {   struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);   int (*css_online)(struct cgroup_subsys_state *);   void (*css_offline)(struct cgroup_subsys_state *);   void (*css_released)(struct cgroup_subsys_state *);   void (*css_free)(struct cgroup_subsys_state *);   void (*css_reset)(struct cgroup_subsys_state *);   void (*css_e_css_changed)(struct cgroup_subsys_state *);   int (*can_attach)(struct cgroup_taskset *);   void (*cancel_attach)(struct cgroup_taskset *);   void (*attach)(struct cgroup_taskset *);   int (*can_fork)(struct task_struct *);   void (*cancel_fork)(struct task_struct *);   void (*fork)(struct task_struct *);   void (*exit)(struct task_struct *);   void (*free)(struct task_struct *);   void (*bind)(struct cgroup_subsys_state *);   int early_init;   bool broken_hierarchy;   bool warned_broken_hierarchy;   int id;   const char *name;   const char *legacy_name;   struct cgroup_root *root;   struct idr css_idr;   struct list_head cfts;   struct cftype *dfl_cftypes;   struct cftype *legacy_cftypes;   unsigned int depends_on; } ;   128     struct futex_pi_state ;   129     struct robust_list_head ;   130     struct bio_list ;   131     struct fs_struct ;   132     struct perf_event_context ;   133     struct blk_plug ;   135     struct nameidata ;   188     struct cfs_rq ;   189     struct task_group ;   482     struct sighand_struct {   atomic_t count;   struct k_sigaction action[64U];   spinlock_t siglock;   wait_queue_head_t signalfd_wqh; } ;   523     struct pacct_struct {   int ac_flag;   long ac_exitcode;   unsigned long ac_mem;   cputime_t ac_utime;   cputime_t ac_stime;   unsigned long ac_minflt;   unsigned long ac_majflt; } ;   531     struct cpu_itimer {   cputime_t expires;   cputime_t incr;   u32 error;   u32 incr_error; } ;   538     struct prev_cputime {   cputime_t utime;   cputime_t stime;   raw_spinlock_t lock; } ;   563     struct task_cputime {   cputime_t utime;   cputime_t stime;   unsigned long long sum_exec_runtime; } ;   579     struct task_cputime_atomic {   atomic64_t utime;   atomic64_t stime;   atomic64_t sum_exec_runtime; } ;   601     struct thread_group_cputimer {   struct task_cputime_atomic cputime_atomic;   bool running;   bool checking_timer; } ;   646     struct autogroup ;   647     struct tty_struct ;   647     struct taskstats ;   647     struct tty_audit_buf ;   647     struct signal_struct {   atomic_t sigcnt;   atomic_t live;   int nr_threads;   struct list_head thread_head;   wait_queue_head_t wait_chldexit;   struct task_struct *curr_target;   struct sigpending shared_pending;   int group_exit_code;   int notify_count;   struct task_struct *group_exit_task;   int group_stop_count;   unsigned int flags;   unsigned char is_child_subreaper;   unsigned char has_child_subreaper;   int posix_timer_id;   struct list_head posix_timers;   struct hrtimer real_timer;   struct pid *leader_pid;   ktime_t it_real_incr;   struct cpu_itimer it[2U];   struct thread_group_cputimer cputimer;   struct task_cputime cputime_expires;   struct list_head cpu_timers[3U];   struct pid *tty_old_pgrp;   int leader;   struct tty_struct *tty;   struct autogroup *autogroup;   seqlock_t stats_lock;   cputime_t utime;   cputime_t stime;   cputime_t cutime;   cputime_t cstime;   cputime_t gtime;   cputime_t cgtime;   struct prev_cputime prev_cputime;   unsigned long nvcsw;   unsigned long nivcsw;   unsigned long cnvcsw;   unsigned long cnivcsw;   unsigned long min_flt;   unsigned long maj_flt;   unsigned long cmin_flt;   unsigned long cmaj_flt;   unsigned long inblock;   unsigned long oublock;   unsigned long cinblock;   unsigned long coublock;   unsigned long maxrss;   unsigned long cmaxrss;   struct task_io_accounting ioac;   unsigned long long sum_sched_runtime;   struct rlimit rlim[16U];   struct pacct_struct pacct;   struct taskstats *stats;   unsigned int audit_tty;   unsigned int audit_tty_log_passwd;   struct tty_audit_buf *tty_audit_buf;   oom_flags_t oom_flags;   short oom_score_adj;   short oom_score_adj_min;   struct mutex cred_guard_mutex; } ;   814     struct user_struct {   atomic_t __count;   atomic_t processes;   atomic_t sigpending;   atomic_t inotify_watches;   atomic_t inotify_devs;   atomic_t fanotify_listeners;   atomic_long_t epoll_watches;   unsigned long mq_bytes;   unsigned long locked_shm;   unsigned long unix_inflight;   atomic_long_t pipe_bufs;   struct key *uid_keyring;   struct key *session_keyring;   struct hlist_node uidhash_node;   kuid_t uid;   atomic_long_t locked_vm; } ;   859     struct backing_dev_info ;   860     struct reclaim_state ;   861     struct sched_info {   unsigned long pcount;   unsigned long long run_delay;   unsigned long long last_arrival;   unsigned long long last_queued; } ;   875     struct task_delay_info {   spinlock_t lock;   unsigned int flags;   u64 blkio_start;   u64 blkio_delay;   u64 swapin_delay;   u32 blkio_count;   u32 swapin_count;   u64 freepages_start;   u64 freepages_delay;   u32 freepages_count; } ;   923     struct wake_q_node {   struct wake_q_node *next; } ;  1150     struct io_context ;  1184     struct pipe_inode_info ;  1186     struct load_weight {   unsigned long weight;   u32 inv_weight; } ;  1193     struct sched_avg {   u64 last_update_time;   u64 load_sum;   u32 util_sum;   u32 period_contrib;   unsigned long load_avg;   unsigned long util_avg; } ;  1213     struct sched_statistics {   u64 wait_start;   u64 wait_max;   u64 wait_count;   u64 wait_sum;   u64 iowait_count;   u64 iowait_sum;   u64 sleep_start;   u64 sleep_max;   s64 sum_sleep_runtime;   u64 block_start;   u64 block_max;   u64 exec_max;   u64 slice_max;   u64 nr_migrations_cold;   u64 nr_failed_migrations_affine;   u64 nr_failed_migrations_running;   u64 nr_failed_migrations_hot;   u64 nr_forced_migrations;   u64 nr_wakeups;   u64 nr_wakeups_sync;   u64 nr_wakeups_migrate;   u64 nr_wakeups_local;   u64 nr_wakeups_remote;   u64 nr_wakeups_affine;   u64 nr_wakeups_affine_attempts;   u64 nr_wakeups_passive;   u64 nr_wakeups_idle; } ;  1248     struct sched_entity {   struct load_weight load;   struct rb_node run_node;   struct list_head group_node;   unsigned int on_rq;   u64 exec_start;   u64 sum_exec_runtime;   u64 vruntime;   u64 prev_sum_exec_runtime;   u64 nr_migrations;   struct sched_statistics statistics;   int depth;   struct sched_entity *parent;   struct cfs_rq *cfs_rq;   struct cfs_rq *my_q;   struct sched_avg avg; } ;  1285     struct rt_rq ;  1285     struct sched_rt_entity {   struct list_head run_list;   unsigned long timeout;   unsigned long watchdog_stamp;   unsigned int time_slice;   struct sched_rt_entity *back;   struct sched_rt_entity *parent;   struct rt_rq *rt_rq;   struct rt_rq *my_q; } ;  1301     struct sched_dl_entity {   struct rb_node rb_node;   u64 dl_runtime;   u64 dl_deadline;   u64 dl_period;   u64 dl_bw;   s64 runtime;   u64 deadline;   unsigned int flags;   int dl_throttled;   int dl_new;   int dl_boosted;   int dl_yielded;   struct hrtimer dl_timer; } ;  1369     struct tlbflush_unmap_batch {   struct cpumask cpumask;   bool flush_required;   bool writable; } ;  1388     struct sched_class ;  1388     struct files_struct ;  1388     struct compat_robust_list_head ;  1388     struct numa_group ;  1388     struct task_struct {   volatile long state;   void *stack;   atomic_t usage;   unsigned int flags;   unsigned int ptrace;   struct llist_node wake_entry;   int on_cpu;   unsigned int wakee_flips;   unsigned long wakee_flip_decay_ts;   struct task_struct *last_wakee;   int wake_cpu;   int on_rq;   int prio;   int static_prio;   int normal_prio;   unsigned int rt_priority;   const struct sched_class *sched_class;   struct sched_entity se;   struct sched_rt_entity rt;   struct task_group *sched_task_group;   struct sched_dl_entity dl;   struct hlist_head preempt_notifiers;   unsigned int policy;   int nr_cpus_allowed;   cpumask_t cpus_allowed;   unsigned long rcu_tasks_nvcsw;   bool rcu_tasks_holdout;   struct list_head rcu_tasks_holdout_list;   int rcu_tasks_idle_cpu;   struct sched_info sched_info;   struct list_head tasks;   struct plist_node pushable_tasks;   struct rb_node pushable_dl_tasks;   struct mm_struct *mm;   struct mm_struct *active_mm;   u32 vmacache_seqnum;   struct vm_area_struct *vmacache[4U];   struct task_rss_stat rss_stat;   int exit_state;   int exit_code;   int exit_signal;   int pdeath_signal;   unsigned long jobctl;   unsigned int personality;   unsigned char sched_reset_on_fork;   unsigned char sched_contributes_to_load;   unsigned char sched_migrated;   unsigned char;   unsigned char in_execve;   unsigned char in_iowait;   unsigned char memcg_may_oom;   unsigned char memcg_kmem_skip_account;   unsigned char brk_randomized;   unsigned long atomic_flags;   struct restart_block restart_block;   pid_t pid;   pid_t tgid;   struct task_struct *real_parent;   struct task_struct *parent;   struct list_head children;   struct list_head sibling;   struct task_struct *group_leader;   struct list_head ptraced;   struct list_head ptrace_entry;   struct pid_link pids[3U];   struct list_head thread_group;   struct list_head thread_node;   struct completion *vfork_done;   int *set_child_tid;   int *clear_child_tid;   cputime_t utime;   cputime_t stime;   cputime_t utimescaled;   cputime_t stimescaled;   cputime_t gtime;   struct prev_cputime prev_cputime;   unsigned long nvcsw;   unsigned long nivcsw;   u64 start_time;   u64 real_start_time;   unsigned long min_flt;   unsigned long maj_flt;   struct task_cputime cputime_expires;   struct list_head cpu_timers[3U];   const struct cred *real_cred;   const struct cred *cred;   char comm[16U];   struct nameidata *nameidata;   struct sysv_sem sysvsem;   struct sysv_shm sysvshm;   unsigned long last_switch_count;   struct fs_struct *fs;   struct files_struct *files;   struct nsproxy *nsproxy;   struct signal_struct *signal;   struct sighand_struct *sighand;   sigset_t blocked;   sigset_t real_blocked;   sigset_t saved_sigmask;   struct sigpending pending;   unsigned long sas_ss_sp;   size_t sas_ss_size;   struct callback_head *task_works;   struct audit_context *audit_context;   kuid_t loginuid;   unsigned int sessionid;   struct seccomp seccomp;   u32 parent_exec_id;   u32 self_exec_id;   spinlock_t alloc_lock;   raw_spinlock_t pi_lock;   struct wake_q_node wake_q;   struct rb_root pi_waiters;   struct rb_node *pi_waiters_leftmost;   struct rt_mutex_waiter *pi_blocked_on;   struct mutex_waiter *blocked_on;   unsigned int irq_events;   unsigned long hardirq_enable_ip;   unsigned long hardirq_disable_ip;   unsigned int hardirq_enable_event;   unsigned int hardirq_disable_event;   int hardirqs_enabled;   int hardirq_context;   unsigned long softirq_disable_ip;   unsigned long softirq_enable_ip;   unsigned int softirq_disable_event;   unsigned int softirq_enable_event;   int softirqs_enabled;   int softirq_context;   u64 curr_chain_key;   int lockdep_depth;   unsigned int lockdep_recursion;   struct held_lock held_locks[48U];   gfp_t lockdep_reclaim_gfp;   unsigned int in_ubsan;   void *journal_info;   struct bio_list *bio_list;   struct blk_plug *plug;   struct reclaim_state *reclaim_state;   struct backing_dev_info *backing_dev_info;   struct io_context *io_context;   unsigned long ptrace_message;   siginfo_t *last_siginfo;   struct task_io_accounting ioac;   u64 acct_rss_mem1;   u64 acct_vm_mem1;   cputime_t acct_timexpd;   nodemask_t mems_allowed;   seqcount_t mems_allowed_seq;   int cpuset_mem_spread_rotor;   int cpuset_slab_spread_rotor;   struct css_set *cgroups;   struct list_head cg_list;   struct robust_list_head *robust_list;   struct compat_robust_list_head *compat_robust_list;   struct list_head pi_state_list;   struct futex_pi_state *pi_state_cache;   struct perf_event_context *perf_event_ctxp[2U];   struct mutex perf_event_mutex;   struct list_head perf_event_list;   struct mempolicy *mempolicy;   short il_next;   short pref_node_fork;   int numa_scan_seq;   unsigned int numa_scan_period;   unsigned int numa_scan_period_max;   int numa_preferred_nid;   unsigned long numa_migrate_retry;   u64 node_stamp;   u64 last_task_numa_placement;   u64 last_sum_exec_runtime;   struct callback_head numa_work;   struct list_head numa_entry;   struct numa_group *numa_group;   unsigned long *numa_faults;   unsigned long total_numa_faults;   unsigned long numa_faults_locality[3U];   unsigned long numa_pages_migrated;   struct tlbflush_unmap_batch tlb_ubc;   struct callback_head rcu;   struct pipe_inode_info *splice_pipe;   struct page_frag task_frag;   struct task_delay_info *delays;   int make_it_fail;   int nr_dirtied;   int nr_dirtied_pause;   unsigned long dirty_paused_when;   int latency_record_count;   struct latency_record latency_record[32U];   unsigned long timer_slack_ns;   unsigned long default_timer_slack_ns;   unsigned int kasan_depth;   unsigned long trace;   unsigned long trace_recursion;   struct mem_cgroup *memcg_in_oom;   gfp_t memcg_oom_gfp_mask;   int memcg_oom_order;   unsigned int memcg_nr_pages_over_high;   struct uprobe_task *utask;   unsigned int sequential_io;   unsigned int sequential_io_avg;   unsigned long task_state_change;   int pagefault_disabled;   struct thread_struct thread; } ;    19     struct dma_pool ;  1992     struct umc_dev {   u16 version;   u8 cap_id;   u8 bar;   struct resource resource;   unsigned int irq;   struct device dev; } ;   253     struct usb_device_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __le16 bcdUSB;   __u8 bDeviceClass;   __u8 bDeviceSubClass;   __u8 bDeviceProtocol;   __u8 bMaxPacketSize0;   __le16 idVendor;   __le16 idProduct;   __le16 bcdDevice;   __u8 iManufacturer;   __u8 iProduct;   __u8 iSerialNumber;   __u8 bNumConfigurations; } ;   275     struct usb_config_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __le16 wTotalLength;   __u8 bNumInterfaces;   __u8 bConfigurationValue;   __u8 iConfiguration;   __u8 bmAttributes;   __u8 bMaxPower; } ;   343     struct usb_interface_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bInterfaceNumber;   __u8 bAlternateSetting;   __u8 bNumEndpoints;   __u8 bInterfaceClass;   __u8 bInterfaceSubClass;   __u8 bInterfaceProtocol;   __u8 iInterface; } ;   363     struct usb_endpoint_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bEndpointAddress;   __u8 bmAttributes;   __le16 wMaxPacketSize;   __u8 bInterval;   __u8 bRefresh;   __u8 bSynchAddress; } ;   613     struct usb_ss_ep_comp_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bMaxBurst;   __u8 bmAttributes;   __le16 wBytesPerInterval; } ;   704     struct usb_interface_assoc_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bFirstInterface;   __u8 bInterfaceCount;   __u8 bFunctionClass;   __u8 bFunctionSubClass;   __u8 bFunctionProtocol;   __u8 iFunction; } ;   733     struct usb_key_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 tTKID[3U];   __u8 bReserved;   __u8 bKeyData[0U]; } ;   747     struct usb_encryption_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bEncryptionType;   __u8 bEncryptionValue;   __u8 bAuthKeyIndex; } ;   763     struct usb_bos_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __le16 wTotalLength;   __u8 bNumDeviceCaps; } ;   785     struct usb_wireless_cap_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bDevCapabilityType;   __u8 bmAttributes;   __le16 wPHYRates;   __u8 bmTFITXPowerInfo;   __u8 bmFFITXPowerInfo;   __le16 bmBandGroup;   __u8 bReserved; } ;   813     struct usb_ext_cap_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bDevCapabilityType;   __le32 bmAttributes; } ;   823     struct usb_ss_cap_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bDevCapabilityType;   __u8 bmAttributes;   __le16 wSpeedSupported;   __u8 bFunctionalitySupport;   __u8 bU1devExitLat;   __le16 bU2DevExitLat; } ;   852     struct usb_ss_container_id_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bDevCapabilityType;   __u8 bReserved;   __u8 ContainerID[16U]; } ;   867     struct usb_ssp_cap_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bDevCapabilityType;   __u8 bReserved;   __le32 bmAttributes;   __u16 wFunctionalitySupport;   __le16 wReserved;   __le32 bmSublinkSpeedAttr[1U]; } ;   946     enum usb_device_speed {   USB_SPEED_UNKNOWN = 0,   USB_SPEED_LOW = 1,   USB_SPEED_FULL = 2,   USB_SPEED_HIGH = 3,   USB_SPEED_WIRELESS = 4,   USB_SPEED_SUPER = 5 } ;   955     enum usb_device_state {   USB_STATE_NOTATTACHED = 0,   USB_STATE_ATTACHED = 1,   USB_STATE_POWERED = 2,   USB_STATE_RECONNECTING = 3,   USB_STATE_UNAUTHENTICATED = 4,   USB_STATE_DEFAULT = 5,   USB_STATE_ADDRESS = 6,   USB_STATE_CONFIGURED = 7,   USB_STATE_SUSPENDED = 8 } ;   967     enum usb3_link_state {   USB3_LPM_U0 = 0,   USB3_LPM_U1 = 1,   USB3_LPM_U2 = 2,   USB3_LPM_U3 = 3 } ;    54     enum irqreturn {   IRQ_NONE = 0,   IRQ_HANDLED = 1,   IRQ_WAKE_THREAD = 2 } ;    16     typedef enum irqreturn irqreturn_t;   468     struct tasklet_struct {   struct tasklet_struct *next;   unsigned long state;   atomic_t count;   void (*func)(unsigned long);   unsigned long data; } ;    81     struct hlist_bl_node ;    81     struct hlist_bl_head {   struct hlist_bl_node *first; } ;    36     struct hlist_bl_node {   struct hlist_bl_node *next;   struct hlist_bl_node **pprev; } ;   114     struct __anonstruct____missing_field_name_309 {   spinlock_t lock;   int count; } ;   114     union __anonunion____missing_field_name_308 {   struct __anonstruct____missing_field_name_309 __annonCompField72; } ;   114     struct lockref {   union __anonunion____missing_field_name_308 __annonCompField73; } ;    50     struct vfsmount ;    51     struct __anonstruct____missing_field_name_311 {   u32 hash;   u32 len; } ;    51     union __anonunion____missing_field_name_310 {   struct __anonstruct____missing_field_name_311 __annonCompField74;   u64 hash_len; } ;    51     struct qstr {   union __anonunion____missing_field_name_310 __annonCompField75;   const unsigned char *name; } ;    90     struct dentry_operations ;    90     union __anonunion_d_u_312 {   struct hlist_node d_alias;   struct callback_head d_rcu; } ;    90     struct dentry {   unsigned int d_flags;   seqcount_t d_seq;   struct hlist_bl_node d_hash;   struct dentry *d_parent;   struct qstr d_name;   struct inode *d_inode;   unsigned char d_iname[32U];   struct lockref d_lockref;   const struct dentry_operations *d_op;   struct super_block *d_sb;   unsigned long d_time;   void *d_fsdata;   struct list_head d_lru;   struct list_head d_child;   struct list_head d_subdirs;   union __anonunion_d_u_312 d_u; } ;   142     struct dentry_operations {   int (*d_revalidate)(struct dentry *, unsigned int);   int (*d_weak_revalidate)(struct dentry *, unsigned int);   int (*d_hash)(const struct dentry *, struct qstr *);   int (*d_compare)(const struct dentry *, const struct dentry *, unsigned int, const char *, const struct qstr *);   int (*d_delete)(const struct dentry *);   void (*d_release)(struct dentry *);   void (*d_prune)(struct dentry *);   void (*d_iput)(struct dentry *, struct inode *);   char * (*d_dname)(struct dentry *, char *, int);   struct vfsmount * (*d_automount)(struct path *);   int (*d_manage)(struct dentry *, bool );   struct inode * (*d_select_inode)(struct dentry *, unsigned int); } ;   586     struct path {   struct vfsmount *mnt;   struct dentry *dentry; } ;    27     struct list_lru_one {   struct list_head list;   long nr_items; } ;    32     struct list_lru_memcg {   struct list_lru_one *lru[0U]; } ;    37     struct list_lru_node {   spinlock_t lock;   struct list_lru_one lru;   struct list_lru_memcg *memcg_lrus; } ;    47     struct list_lru {   struct list_lru_node *node;   struct list_head list; } ;    67     struct __anonstruct____missing_field_name_316 {   struct radix_tree_node *parent;   void *private_data; } ;    67     union __anonunion____missing_field_name_315 {   struct __anonstruct____missing_field_name_316 __annonCompField76;   struct callback_head callback_head; } ;    67     struct radix_tree_node {   unsigned int path;   unsigned int count;   union __anonunion____missing_field_name_315 __annonCompField77;   struct list_head private_list;   void *slots[64U];   unsigned long tags[3U][1U]; } ;   114     struct radix_tree_root {   unsigned int height;   gfp_t gfp_mask;   struct radix_tree_node *rnode; } ;    45     struct fiemap_extent {   __u64 fe_logical;   __u64 fe_physical;   __u64 fe_length;   __u64 fe_reserved64[2U];   __u32 fe_flags;   __u32 fe_reserved[3U]; } ;    38     enum migrate_mode {   MIGRATE_ASYNC = 0,   MIGRATE_SYNC_LIGHT = 1,   MIGRATE_SYNC = 2 } ;    47     struct block_device ;    19     struct bio_vec {   struct page *bv_page;   unsigned int bv_len;   unsigned int bv_offset; } ;   268     struct delayed_call {   void (*fn)(void *);   void *arg; } ;   162     struct export_operations ;   164     struct iovec ;   165     struct kiocb ;   166     struct poll_table_struct ;   167     struct kstatfs ;   168     struct swap_info_struct ;   169     struct iov_iter ;    76     struct iattr {   unsigned int ia_valid;   umode_t ia_mode;   kuid_t ia_uid;   kgid_t ia_gid;   loff_t ia_size;   struct timespec ia_atime;   struct timespec ia_mtime;   struct timespec ia_ctime;   struct file *ia_file; } ;   212     struct dquot ;    19     typedef __kernel_uid32_t projid_t;    23     struct __anonstruct_kprojid_t_322 {   projid_t val; } ;    23     typedef struct __anonstruct_kprojid_t_322 kprojid_t;   166     enum quota_type {   USRQUOTA = 0,   GRPQUOTA = 1,   PRJQUOTA = 2 } ;    66     typedef long long qsize_t;    67     union __anonunion____missing_field_name_323 {   kuid_t uid;   kgid_t gid;   kprojid_t projid; } ;    67     struct kqid {   union __anonunion____missing_field_name_323 __annonCompField79;   enum quota_type type; } ;   184     struct mem_dqblk {   qsize_t dqb_bhardlimit;   qsize_t dqb_bsoftlimit;   qsize_t dqb_curspace;   qsize_t dqb_rsvspace;   qsize_t dqb_ihardlimit;   qsize_t dqb_isoftlimit;   qsize_t dqb_curinodes;   time_t dqb_btime;   time_t dqb_itime; } ;   206     struct quota_format_type ;   207     struct mem_dqinfo {   struct quota_format_type *dqi_format;   int dqi_fmt_id;   struct list_head dqi_dirty_list;   unsigned long dqi_flags;   unsigned int dqi_bgrace;   unsigned int dqi_igrace;   qsize_t dqi_max_spc_limit;   qsize_t dqi_max_ino_limit;   void *dqi_priv; } ;   272     struct dquot {   struct hlist_node dq_hash;   struct list_head dq_inuse;   struct list_head dq_free;   struct list_head dq_dirty;   struct mutex dq_lock;   atomic_t dq_count;   wait_queue_head_t dq_wait_unused;   struct super_block *dq_sb;   struct kqid dq_id;   loff_t dq_off;   unsigned long dq_flags;   struct mem_dqblk dq_dqb; } ;   299     struct quota_format_ops {   int (*check_quota_file)(struct super_block *, int);   int (*read_file_info)(struct super_block *, int);   int (*write_file_info)(struct super_block *, int);   int (*free_file_info)(struct super_block *, int);   int (*read_dqblk)(struct dquot *);   int (*commit_dqblk)(struct dquot *);   int (*release_dqblk)(struct dquot *); } ;   310     struct dquot_operations {   int (*write_dquot)(struct dquot *);   struct dquot * (*alloc_dquot)(struct super_block *, int);   void (*destroy_dquot)(struct dquot *);   int (*acquire_dquot)(struct dquot *);   int (*release_dquot)(struct dquot *);   int (*mark_dirty)(struct dquot *);   int (*write_info)(struct super_block *, int);   qsize_t * (*get_reserved_space)(struct inode *);   int (*get_projid)(struct inode *, kprojid_t *); } ;   325     struct qc_dqblk {   int d_fieldmask;   u64 d_spc_hardlimit;   u64 d_spc_softlimit;   u64 d_ino_hardlimit;   u64 d_ino_softlimit;   u64 d_space;   u64 d_ino_count;   s64 d_ino_timer;   s64 d_spc_timer;   int d_ino_warns;   int d_spc_warns;   u64 d_rt_spc_hardlimit;   u64 d_rt_spc_softlimit;   u64 d_rt_space;   s64 d_rt_spc_timer;   int d_rt_spc_warns; } ;   348     struct qc_type_state {   unsigned int flags;   unsigned int spc_timelimit;   unsigned int ino_timelimit;   unsigned int rt_spc_timelimit;   unsigned int spc_warnlimit;   unsigned int ino_warnlimit;   unsigned int rt_spc_warnlimit;   unsigned long long ino;   blkcnt_t blocks;   blkcnt_t nextents; } ;   394     struct qc_state {   unsigned int s_incoredqs;   struct qc_type_state s_state[3U]; } ;   405     struct qc_info {   int i_fieldmask;   unsigned int i_flags;   unsigned int i_spc_timelimit;   unsigned int i_ino_timelimit;   unsigned int i_rt_spc_timelimit;   unsigned int i_spc_warnlimit;   unsigned int i_ino_warnlimit;   unsigned int i_rt_spc_warnlimit; } ;   418     struct quotactl_ops {   int (*quota_on)(struct super_block *, int, int, struct path *);   int (*quota_off)(struct super_block *, int);   int (*quota_enable)(struct super_block *, unsigned int);   int (*quota_disable)(struct super_block *, unsigned int);   int (*quota_sync)(struct super_block *, int);   int (*set_info)(struct super_block *, int, struct qc_info *);   int (*get_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *);   int (*set_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *);   int (*get_state)(struct super_block *, struct qc_state *);   int (*rm_xquota)(struct super_block *, unsigned int); } ;   432     struct quota_format_type {   int qf_fmt_id;   const struct quota_format_ops *qf_ops;   struct module *qf_owner;   struct quota_format_type *qf_next; } ;   496     struct quota_info {   unsigned int flags;   struct mutex dqio_mutex;   struct mutex dqonoff_mutex;   struct inode *files[3U];   struct mem_dqinfo info[3U];   const struct quota_format_ops *ops[3U]; } ;   526     struct kiocb {   struct file *ki_filp;   loff_t ki_pos;   void (*ki_complete)(struct kiocb *, long, long);   void *private;   int ki_flags; } ;   367     struct address_space_operations {   int (*writepage)(struct page *, struct writeback_control *);   int (*readpage)(struct file *, struct page *);   int (*writepages)(struct address_space *, struct writeback_control *);   int (*set_page_dirty)(struct page *);   int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);   int (*write_begin)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page **, void **);   int (*write_end)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page *, void *);   sector_t  (*bmap)(struct address_space *, sector_t );   void (*invalidatepage)(struct page *, unsigned int, unsigned int);   int (*releasepage)(struct page *, gfp_t );   void (*freepage)(struct page *);   ssize_t  (*direct_IO)(struct kiocb *, struct iov_iter *, loff_t );   int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode );   int (*launder_page)(struct page *);   int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long);   void (*is_dirty_writeback)(struct page *, bool *, bool *);   int (*error_remove_page)(struct address_space *, struct page *);   int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);   void (*swap_deactivate)(struct file *); } ;   424     struct address_space {   struct inode *host;   struct radix_tree_root page_tree;   spinlock_t tree_lock;   atomic_t i_mmap_writable;   struct rb_root i_mmap;   struct rw_semaphore i_mmap_rwsem;   unsigned long nrpages;   unsigned long nrexceptional;   unsigned long writeback_index;   const struct address_space_operations *a_ops;   unsigned long flags;   spinlock_t private_lock;   struct list_head private_list;   void *private_data; } ;   445     struct request_queue ;   446     struct hd_struct ;   446     struct gendisk ;   446     struct block_device {   dev_t bd_dev;   int bd_openers;   struct inode *bd_inode;   struct super_block *bd_super;   struct mutex bd_mutex;   struct list_head bd_inodes;   void *bd_claiming;   void *bd_holder;   int bd_holders;   bool bd_write_holder;   struct list_head bd_holder_disks;   struct block_device *bd_contains;   unsigned int bd_block_size;   struct hd_struct *bd_part;   unsigned int bd_part_count;   int bd_invalidated;   struct gendisk *bd_disk;   struct request_queue *bd_queue;   struct list_head bd_list;   unsigned long bd_private;   int bd_fsfreeze_count;   struct mutex bd_fsfreeze_mutex;   int bd_map_count; } ;   565     struct posix_acl ;   566     struct inode_operations ;   566     union __anonunion____missing_field_name_328 {   const unsigned int i_nlink;   unsigned int __i_nlink; } ;   566     union __anonunion____missing_field_name_329 {   struct hlist_head i_dentry;   struct callback_head i_rcu; } ;   566     struct file_lock_context ;   566     struct cdev ;   566     union __anonunion____missing_field_name_330 {   struct pipe_inode_info *i_pipe;   struct block_device *i_bdev;   struct cdev *i_cdev;   char *i_link; } ;   566     struct inode {   umode_t i_mode;   unsigned short i_opflags;   kuid_t i_uid;   kgid_t i_gid;   unsigned int i_flags;   struct posix_acl *i_acl;   struct posix_acl *i_default_acl;   const struct inode_operations *i_op;   struct super_block *i_sb;   struct address_space *i_mapping;   void *i_security;   unsigned long i_ino;   union __anonunion____missing_field_name_328 __annonCompField80;   dev_t i_rdev;   loff_t i_size;   struct timespec i_atime;   struct timespec i_mtime;   struct timespec i_ctime;   spinlock_t i_lock;   unsigned short i_bytes;   unsigned int i_blkbits;   blkcnt_t i_blocks;   unsigned long i_state;   struct mutex i_mutex;   unsigned long dirtied_when;   unsigned long dirtied_time_when;   struct hlist_node i_hash;   struct list_head i_io_list;   struct bdi_writeback *i_wb;   int i_wb_frn_winner;   u16 i_wb_frn_avg_time;   u16 i_wb_frn_history;   struct list_head i_lru;   struct list_head i_sb_list;   union __anonunion____missing_field_name_329 __annonCompField81;   u64 i_version;   atomic_t i_count;   atomic_t i_dio_count;   atomic_t i_writecount;   atomic_t i_readcount;   const struct file_operations *i_fop;   struct file_lock_context *i_flctx;   struct address_space i_data;   struct list_head i_devices;   union __anonunion____missing_field_name_330 __annonCompField82;   __u32 i_generation;   __u32 i_fsnotify_mask;   struct hlist_head i_fsnotify_marks;   void *i_private; } ;   837     struct fown_struct {   rwlock_t lock;   struct pid *pid;   enum pid_type pid_type;   kuid_t uid;   kuid_t euid;   int signum; } ;   845     struct file_ra_state {   unsigned long start;   unsigned int size;   unsigned int async_size;   unsigned int ra_pages;   unsigned int mmap_miss;   loff_t prev_pos; } ;   868     union __anonunion_f_u_331 {   struct llist_node fu_llist;   struct callback_head fu_rcuhead; } ;   868     struct file {   union __anonunion_f_u_331 f_u;   struct path f_path;   struct inode *f_inode;   const struct file_operations *f_op;   spinlock_t f_lock;   atomic_long_t f_count;   unsigned int f_flags;   fmode_t f_mode;   struct mutex f_pos_lock;   loff_t f_pos;   struct fown_struct f_owner;   const struct cred *f_cred;   struct file_ra_state f_ra;   u64 f_version;   void *f_security;   void *private_data;   struct list_head f_ep_links;   struct list_head f_tfile_llink;   struct address_space *f_mapping; } ;   953     typedef void *fl_owner_t;   954     struct file_lock ;   955     struct file_lock_operations {   void (*fl_copy_lock)(struct file_lock *, struct file_lock *);   void (*fl_release_private)(struct file_lock *); } ;   961     struct lock_manager_operations {   int (*lm_compare_owner)(struct file_lock *, struct file_lock *);   unsigned long int (*lm_owner_key)(struct file_lock *);   fl_owner_t  (*lm_get_owner)(fl_owner_t );   void (*lm_put_owner)(fl_owner_t );   void (*lm_notify)(struct file_lock *);   int (*lm_grant)(struct file_lock *, int);   bool  (*lm_break)(struct file_lock *);   int (*lm_change)(struct file_lock *, int, struct list_head *);   void (*lm_setup)(struct file_lock *, void **); } ;   988     struct nlm_lockowner ;   989     struct nfs_lock_info {   u32 state;   struct nlm_lockowner *owner;   struct list_head list; } ;    14     struct nfs4_lock_state ;    15     struct nfs4_lock_info {   struct nfs4_lock_state *owner; } ;    19     struct fasync_struct ;    19     struct __anonstruct_afs_333 {   struct list_head link;   int state; } ;    19     union __anonunion_fl_u_332 {   struct nfs_lock_info nfs_fl;   struct nfs4_lock_info nfs4_fl;   struct __anonstruct_afs_333 afs; } ;    19     struct file_lock {   struct file_lock *fl_next;   struct list_head fl_list;   struct hlist_node fl_link;   struct list_head fl_block;   fl_owner_t fl_owner;   unsigned int fl_flags;   unsigned char fl_type;   unsigned int fl_pid;   int fl_link_cpu;   struct pid *fl_nspid;   wait_queue_head_t fl_wait;   struct file *fl_file;   loff_t fl_start;   loff_t fl_end;   struct fasync_struct *fl_fasync;   unsigned long fl_break_time;   unsigned long fl_downgrade_time;   const struct file_lock_operations *fl_ops;   const struct lock_manager_operations *fl_lmops;   union __anonunion_fl_u_332 fl_u; } ;  1041     struct file_lock_context {   spinlock_t flc_lock;   struct list_head flc_flock;   struct list_head flc_posix;   struct list_head flc_lease; } ;  1244     struct fasync_struct {   spinlock_t fa_lock;   int magic;   int fa_fd;   struct fasync_struct *fa_next;   struct file *fa_file;   struct callback_head fa_rcu; } ;  1279     struct sb_writers {   int frozen;   wait_queue_head_t wait_unfrozen;   struct percpu_rw_semaphore rw_sem[3U]; } ;  1305     struct super_operations ;  1305     struct xattr_handler ;  1305     struct mtd_info ;  1305     struct super_block {   struct list_head s_list;   dev_t s_dev;   unsigned char s_blocksize_bits;   unsigned long s_blocksize;   loff_t s_maxbytes;   struct file_system_type *s_type;   const struct super_operations *s_op;   const struct dquot_operations *dq_op;   const struct quotactl_ops *s_qcop;   const struct export_operations *s_export_op;   unsigned long s_flags;   unsigned long s_iflags;   unsigned long s_magic;   struct dentry *s_root;   struct rw_semaphore s_umount;   int s_count;   atomic_t s_active;   void *s_security;   const struct xattr_handler **s_xattr;   struct hlist_bl_head s_anon;   struct list_head s_mounts;   struct block_device *s_bdev;   struct backing_dev_info *s_bdi;   struct mtd_info *s_mtd;   struct hlist_node s_instances;   unsigned int s_quota_types;   struct quota_info s_dquot;   struct sb_writers s_writers;   char s_id[32U];   u8 s_uuid[16U];   void *s_fs_info;   unsigned int s_max_links;   fmode_t s_mode;   u32 s_time_gran;   struct mutex s_vfs_rename_mutex;   char *s_subtype;   char *s_options;   const struct dentry_operations *s_d_op;   int cleancache_poolid;   struct shrinker s_shrink;   atomic_long_t s_remove_count;   int s_readonly_remount;   struct workqueue_struct *s_dio_done_wq;   struct hlist_head s_pins;   struct list_lru s_dentry_lru;   struct list_lru s_inode_lru;   struct callback_head rcu;   struct work_struct destroy_work;   struct mutex s_sync_lock;   int s_stack_depth;   spinlock_t s_inode_list_lock;   struct list_head s_inodes; } ;  1554     struct fiemap_extent_info {   unsigned int fi_flags;   unsigned int fi_extents_mapped;   unsigned int fi_extents_max;   struct fiemap_extent *fi_extents_start; } ;  1568     struct dir_context ;  1593     struct dir_context {   int (*actor)(struct dir_context *, const char *, int, loff_t , u64 , unsigned int);   loff_t pos; } ;  1600     struct file_operations {   struct module *owner;   loff_t  (*llseek)(struct file *, loff_t , int);   ssize_t  (*read)(struct file *, char *, size_t , loff_t *);   ssize_t  (*write)(struct file *, const char *, size_t , loff_t *);   ssize_t  (*read_iter)(struct kiocb *, struct iov_iter *);   ssize_t  (*write_iter)(struct kiocb *, struct iov_iter *);   int (*iterate)(struct file *, struct dir_context *);   unsigned int (*poll)(struct file *, struct poll_table_struct *);   long int (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);   long int (*compat_ioctl)(struct file *, unsigned int, unsigned long);   int (*mmap)(struct file *, struct vm_area_struct *);   int (*open)(struct inode *, struct file *);   int (*flush)(struct file *, fl_owner_t );   int (*release)(struct inode *, struct file *);   int (*fsync)(struct file *, loff_t , loff_t , int);   int (*aio_fsync)(struct kiocb *, int);   int (*fasync)(int, struct file *, int);   int (*lock)(struct file *, int, struct file_lock *);   ssize_t  (*sendpage)(struct file *, struct page *, int, size_t , loff_t *, int);   unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);   int (*check_flags)(int);   int (*flock)(struct file *, int, struct file_lock *);   ssize_t  (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t , unsigned int);   ssize_t  (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t , unsigned int);   int (*setlease)(struct file *, long, struct file_lock **, void **);   long int (*fallocate)(struct file *, int, loff_t , loff_t );   void (*show_fdinfo)(struct seq_file *, struct file *);   ssize_t  (*copy_file_range)(struct file *, loff_t , struct file *, loff_t , size_t , unsigned int);   int (*clone_file_range)(struct file *, loff_t , struct file *, loff_t , u64 );   ssize_t  (*dedupe_file_range)(struct file *, u64 , u64 , struct file *, u64 ); } ;  1668     struct inode_operations {   struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);   const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);   int (*permission)(struct inode *, int);   struct posix_acl * (*get_acl)(struct inode *, int);   int (*readlink)(struct dentry *, char *, int);   int (*create)(struct inode *, struct dentry *, umode_t , bool );   int (*link)(struct dentry *, struct inode *, struct dentry *);   int (*unlink)(struct inode *, struct dentry *);   int (*symlink)(struct inode *, struct dentry *, const char *);   int (*mkdir)(struct inode *, struct dentry *, umode_t );   int (*rmdir)(struct inode *, struct dentry *);   int (*mknod)(struct inode *, struct dentry *, umode_t , dev_t );   int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);   int (*rename2)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);   int (*setattr)(struct dentry *, struct iattr *);   int (*getattr)(struct vfsmount *, struct dentry *, struct kstat *);   int (*setxattr)(struct dentry *, const char *, const void *, size_t , int);   ssize_t  (*getxattr)(struct dentry *, const char *, void *, size_t );   ssize_t  (*listxattr)(struct dentry *, char *, size_t );   int (*removexattr)(struct dentry *, const char *);   int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 , u64 );   int (*update_time)(struct inode *, struct timespec *, int);   int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t , int *);   int (*tmpfile)(struct inode *, struct dentry *, umode_t );   int (*set_acl)(struct inode *, struct posix_acl *, int); } ;  1723     struct super_operations {   struct inode * (*alloc_inode)(struct super_block *);   void (*destroy_inode)(struct inode *);   void (*dirty_inode)(struct inode *, int);   int (*write_inode)(struct inode *, struct writeback_control *);   int (*drop_inode)(struct inode *);   void (*evict_inode)(struct inode *);   void (*put_super)(struct super_block *);   int (*sync_fs)(struct super_block *, int);   int (*freeze_super)(struct super_block *);   int (*freeze_fs)(struct super_block *);   int (*thaw_super)(struct super_block *);   int (*unfreeze_fs)(struct super_block *);   int (*statfs)(struct dentry *, struct kstatfs *);   int (*remount_fs)(struct super_block *, int *, char *);   void (*umount_begin)(struct super_block *);   int (*show_options)(struct seq_file *, struct dentry *);   int (*show_devname)(struct seq_file *, struct dentry *);   int (*show_path)(struct seq_file *, struct dentry *);   int (*show_stats)(struct seq_file *, struct dentry *);   ssize_t  (*quota_read)(struct super_block *, int, char *, size_t , loff_t );   ssize_t  (*quota_write)(struct super_block *, int, const char *, size_t , loff_t );   struct dquot ** (*get_dquots)(struct inode *);   int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t );   long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);   long int (*free_cached_objects)(struct super_block *, struct shrink_control *); } ;  1962     struct file_system_type {   const char *name;   int fs_flags;   struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);   void (*kill_sb)(struct super_block *);   struct module *owner;   struct file_system_type *next;   struct hlist_head fs_supers;   struct lock_class_key s_lock_key;   struct lock_class_key s_umount_key;   struct lock_class_key s_vfs_rename_key;   struct lock_class_key s_writers_key[3U];   struct lock_class_key i_lock_key;   struct lock_class_key i_mutex_key;   struct lock_class_key i_mutex_dir_key; } ;   281     struct usb_device ;   283     struct wusb_dev ;   284     struct ep_device ;   285     struct usb_host_endpoint {   struct usb_endpoint_descriptor desc;   struct usb_ss_ep_comp_descriptor ss_ep_comp;   struct list_head urb_list;   void *hcpriv;   struct ep_device *ep_dev;   unsigned char *extra;   int extralen;   int enabled;   int streams; } ;    77     struct usb_host_interface {   struct usb_interface_descriptor desc;   int extralen;   unsigned char *extra;   struct usb_host_endpoint *endpoint;   char *string; } ;    92     enum usb_interface_condition {   USB_INTERFACE_UNBOUND = 0,   USB_INTERFACE_BINDING = 1,   USB_INTERFACE_BOUND = 2,   USB_INTERFACE_UNBINDING = 3 } ;    99     struct usb_interface {   struct usb_host_interface *altsetting;   struct usb_host_interface *cur_altsetting;   unsigned int num_altsetting;   struct usb_interface_assoc_descriptor *intf_assoc;   int minor;   enum usb_interface_condition condition;   unsigned char sysfs_files_created;   unsigned char ep_devs_created;   unsigned char unregistering;   unsigned char needs_remote_wakeup;   unsigned char needs_altsetting0;   unsigned char needs_binding;   unsigned char resetting_device;   unsigned char authorized;   struct device dev;   struct device *usb_dev;   atomic_t pm_usage_cnt;   struct work_struct reset_ws; } ;   204     struct usb_interface_cache {   unsigned int num_altsetting;   struct kref ref;   struct usb_host_interface altsetting[0U]; } ;   259     struct usb_host_config {   struct usb_config_descriptor desc;   char *string;   struct usb_interface_assoc_descriptor *intf_assoc[16U];   struct usb_interface *interface[32U];   struct usb_interface_cache *intf_cache[32U];   unsigned char *extra;   int extralen; } ;   323     struct usb_host_bos {   struct usb_bos_descriptor *desc;   struct usb_ext_cap_descriptor *ext_cap;   struct usb_ss_cap_descriptor *ss_cap;   struct usb_ssp_cap_descriptor *ssp_cap;   struct usb_ss_container_id_descriptor *ss_id; } ;   336     struct usb_devmap {   unsigned long devicemap[2U]; } ;   348     struct mon_bus ;   348     struct usb_bus {   struct device *controller;   int busnum;   const char *bus_name;   u8 uses_dma;   u8 uses_pio_for_control;   u8 otg_port;   unsigned char is_b_host;   unsigned char b_hnp_enable;   unsigned char no_stop_on_short;   unsigned char no_sg_constraint;   unsigned int sg_tablesize;   int devnum_next;   struct usb_devmap devmap;   struct usb_device *root_hub;   struct usb_bus *hs_companion;   struct list_head bus_list;   struct mutex usb_address0_mutex;   int bandwidth_allocated;   int bandwidth_int_reqs;   int bandwidth_isoc_reqs;   unsigned int resuming_ports;   struct mon_bus *mon_bus;   int monitored; } ;   399     struct usb_tt ;   400     enum usb_device_removable {   USB_DEVICE_REMOVABLE_UNKNOWN = 0,   USB_DEVICE_REMOVABLE = 1,   USB_DEVICE_FIXED = 2 } ;   413     struct usb2_lpm_parameters {   unsigned int besl;   int timeout; } ;   434     struct usb3_lpm_parameters {   unsigned int mel;   unsigned int pel;   unsigned int sel;   int timeout; } ;   473     struct usb_device {   int devnum;   char devpath[16U];   u32 route;   enum usb_device_state state;   enum usb_device_speed speed;   struct usb_tt *tt;   int ttport;   unsigned int toggle[2U];   struct usb_device *parent;   struct usb_bus *bus;   struct usb_host_endpoint ep0;   struct device dev;   struct usb_device_descriptor descriptor;   struct usb_host_bos *bos;   struct usb_host_config *config;   struct usb_host_config *actconfig;   struct usb_host_endpoint *ep_in[16U];   struct usb_host_endpoint *ep_out[16U];   char **rawdescriptors;   unsigned short bus_mA;   u8 portnum;   u8 level;   unsigned char can_submit;   unsigned char persist_enabled;   unsigned char have_langid;   unsigned char authorized;   unsigned char authenticated;   unsigned char wusb;   unsigned char lpm_capable;   unsigned char usb2_hw_lpm_capable;   unsigned char usb2_hw_lpm_besl_capable;   unsigned char usb2_hw_lpm_enabled;   unsigned char usb2_hw_lpm_allowed;   unsigned char usb3_lpm_u1_enabled;   unsigned char usb3_lpm_u2_enabled;   int string_langid;   char *product;   char *manufacturer;   char *serial;   struct list_head filelist;   int maxchild;   u32 quirks;   atomic_t urbnum;   unsigned long active_duration;   unsigned long connect_time;   unsigned char do_remote_wakeup;   unsigned char reset_resume;   unsigned char port_is_suspended;   struct wusb_dev *wusb_dev;   int slot_id;   enum usb_device_removable removable;   struct usb2_lpm_parameters l1_params;   struct usb3_lpm_parameters u1_params;   struct usb3_lpm_parameters u2_params;   unsigned int lpm_disable_count; } ;  1206     struct usb_iso_packet_descriptor {   unsigned int offset;   unsigned int length;   unsigned int actual_length;   int status; } ;  1248     struct urb ;  1249     struct usb_anchor {   struct list_head urb_list;   wait_queue_head_t wait;   spinlock_t lock;   atomic_t suspend_wakeups;   unsigned char poisoned; } ;  1268     struct urb {   struct kref kref;   void *hcpriv;   atomic_t use_count;   atomic_t reject;   int unlinked;   struct list_head urb_list;   struct list_head anchor_list;   struct usb_anchor *anchor;   struct usb_device *dev;   struct usb_host_endpoint *ep;   unsigned int pipe;   unsigned int stream_id;   int status;   unsigned int transfer_flags;   void *transfer_buffer;   dma_addr_t transfer_dma;   struct scatterlist *sg;   int num_mapped_sgs;   int num_sgs;   u32 transfer_buffer_length;   u32 actual_length;   unsigned char *setup_packet;   dma_addr_t setup_dma;   int start_frame;   int number_of_packets;   int interval;   int error_count;   void *context;   void (*complete)(struct urb *);   struct usb_iso_packet_descriptor iso_frame_desc[0U]; } ;  1900     struct giveback_urb_bh {   bool running;   spinlock_t lock;   struct list_head head;   struct tasklet_struct bh;   struct usb_host_endpoint *completing_ep; } ;    72     struct hc_driver ;    72     struct usb_phy ;    72     struct phy ;    72     struct usb_hcd {   struct usb_bus self;   struct kref kref;   const char *product_desc;   int speed;   char irq_descr[24U];   struct timer_list rh_timer;   struct urb *status_urb;   struct work_struct wakeup_work;   const struct hc_driver *driver;   struct usb_phy *usb_phy;   struct phy *phy;   unsigned long flags;   unsigned char rh_registered;   unsigned char rh_pollable;   unsigned char msix_enabled;   unsigned char remove_phy;   unsigned char uses_new_polling;   unsigned char wireless;   unsigned char has_tt;   unsigned char amd_resume_bug;   unsigned char can_do_streams;   unsigned char tpl_support;   unsigned char cant_recv_wakeups;   unsigned int irq;   void *regs;   resource_size_t rsrc_start;   resource_size_t rsrc_len;   unsigned int power_budget;   struct giveback_urb_bh high_prio_bh;   struct giveback_urb_bh low_prio_bh;   struct mutex *bandwidth_mutex;   struct usb_hcd *shared_hcd;   struct usb_hcd *primary_hcd;   struct dma_pool *pool[4U];   int state;   unsigned long hcd_priv[0U]; } ;   233     struct hc_driver {   const char *description;   const char *product_desc;   size_t hcd_priv_size;   irqreturn_t  (*irq)(struct usb_hcd *);   int flags;   int (*reset)(struct usb_hcd *);   int (*start)(struct usb_hcd *);   int (*pci_suspend)(struct usb_hcd *, bool );   int (*pci_resume)(struct usb_hcd *, bool );   void (*stop)(struct usb_hcd *);   void (*shutdown)(struct usb_hcd *);   int (*get_frame_number)(struct usb_hcd *);   int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t );   int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);   int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t );   void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);   void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);   void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);   int (*hub_status_data)(struct usb_hcd *, char *);   int (*hub_control)(struct usb_hcd *, u16 , u16 , u16 , char *, u16 );   int (*bus_suspend)(struct usb_hcd *);   int (*bus_resume)(struct usb_hcd *);   int (*start_port_reset)(struct usb_hcd *, unsigned int);   void (*relinquish_port)(struct usb_hcd *, int);   int (*port_handed_over)(struct usb_hcd *, int);   void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);   int (*alloc_dev)(struct usb_hcd *, struct usb_device *);   void (*free_dev)(struct usb_hcd *, struct usb_device *);   int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t );   int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t );   int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);   int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);   int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);   void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);   int (*address_device)(struct usb_hcd *, struct usb_device *);   int (*enable_device)(struct usb_hcd *, struct usb_device *);   int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t );   int (*reset_device)(struct usb_hcd *, struct usb_device *);   int (*update_device)(struct usb_hcd *, struct usb_device *);   int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);   int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state );   int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state );   int (*find_raw_port_number)(struct usb_hcd *, int);   int (*port_power)(struct usb_hcd *, int, bool ); } ;   266     struct usb_tt {   struct usb_device *hub;   int multi;   unsigned int think_time;   void *hcpriv;   spinlock_t lock;   struct list_head clear_list;   struct work_struct clear_work; } ;   716     struct iovec {   void *iov_base;   __kernel_size_t iov_len; } ;    21     struct kvec {   void *iov_base;   size_t iov_len; } ;    27     union __anonunion____missing_field_name_337 {   const struct iovec *iov;   const struct kvec *kvec;   const struct bio_vec *bvec; } ;    27     struct iov_iter {   int type;   size_t iov_offset;   size_t count;   union __anonunion____missing_field_name_337 __annonCompField83;   unsigned long nr_segs; } ;   186     struct pipe_buf_operations ;   186     struct pipe_buffer {   struct page *page;   unsigned int offset;   unsigned int len;   const struct pipe_buf_operations *ops;   unsigned int flags;   unsigned long private; } ;    27     struct pipe_inode_info {   struct mutex mutex;   wait_queue_head_t wait;   unsigned int nrbufs;   unsigned int curbuf;   unsigned int buffers;   unsigned int readers;   unsigned int writers;   unsigned int files;   unsigned int waiting_writers;   unsigned int r_counter;   unsigned int w_counter;   struct page *tmp_page;   struct fasync_struct *fasync_readers;   struct fasync_struct *fasync_writers;   struct pipe_buffer *bufs;   struct user_struct *user; } ;    63     struct pipe_buf_operations {   int can_merge;   int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);   void (*release)(struct pipe_inode_info *, struct pipe_buffer *);   int (*steal)(struct pipe_inode_info *, struct pipe_buffer *);   void (*get)(struct pipe_inode_info *, struct pipe_buffer *); } ;    66     struct uwb_mac_addr {   u8 data[6U]; } ;   136     struct uwb_dev_addr {   u8 data[2U]; } ;   192     enum uwb_drp_type {   UWB_DRP_TYPE_ALIEN_BP = 0,   UWB_DRP_TYPE_HARD = 1,   UWB_DRP_TYPE_SOFT = 2,   UWB_DRP_TYPE_PRIVATE = 3,   UWB_DRP_TYPE_PCA = 4 } ;   219     struct uwb_drp_alloc {   __le16 zone_bm;   __le16 mas_bm; } ;   289     struct uwb_ie_hdr {   u8 element_id;   u8 length; } ;   300     struct uwb_ie_drp {   struct uwb_ie_hdr hdr;   __le16 drp_control;   struct uwb_dev_addr dev_addr;   struct uwb_drp_alloc allocs[]; } ;   394     struct uwb_ie_drp_avail {   struct uwb_ie_hdr hdr;   unsigned long bmp[4U]; } ;   468     struct uwb_rccb {   u8 bCommandType;   __le16 wCommand;   u8 bCommandContext; } ;   482     struct uwb_rceb {   u8 bEventType;   __le16 wEvent;   u8 bEventContext; } ;   612     struct uwb_rc_cmd_set_ie {   struct uwb_rccb rccb;   __le16 wIELength;   u8 IEData[]; } ;   780     struct uwb_dev ;   781     struct uwb_beca_e ;   782     struct uwb_rc ;   783     struct uwb_rsv ;   784     struct uwb_dbg ;   785     struct uwb_dev {   struct mutex mutex;   struct list_head list_node;   struct device dev;   struct uwb_rc *rc;   struct uwb_beca_e *bce;   struct uwb_mac_addr mac_addr;   struct uwb_dev_addr dev_addr;   int beacon_slot;   unsigned long streams[1U];   unsigned long last_availability_bm[4U]; } ;    77     struct uwb_notifs_chain {   struct list_head list;   struct mutex mutex; } ;    91     struct uwb_beca {   struct list_head list;   size_t entries;   struct mutex mutex; } ;    98     struct uwbd {   int pid;   struct task_struct *task;   wait_queue_head_t wq;   struct list_head event_list;   spinlock_t event_list_lock; } ;   107     struct uwb_mas_bm {   unsigned long bm[4U];   unsigned long unsafe_bm[4U];   int safe;   int unsafe; } ;   118     enum uwb_rsv_state {   UWB_RSV_STATE_NONE = 0,   UWB_RSV_STATE_O_INITIATED = 1,   UWB_RSV_STATE_O_PENDING = 2,   UWB_RSV_STATE_O_MODIFIED = 3,   UWB_RSV_STATE_O_ESTABLISHED = 4,   UWB_RSV_STATE_O_TO_BE_MOVED = 5,   UWB_RSV_STATE_O_MOVE_EXPANDING = 6,   UWB_RSV_STATE_O_MOVE_COMBINING = 7,   UWB_RSV_STATE_O_MOVE_REDUCING = 8,   UWB_RSV_STATE_T_ACCEPTED = 9,   UWB_RSV_STATE_T_DENIED = 10,   UWB_RSV_STATE_T_CONFLICT = 11,   UWB_RSV_STATE_T_PENDING = 12,   UWB_RSV_STATE_T_EXPANDING_ACCEPTED = 13,   UWB_RSV_STATE_T_EXPANDING_CONFLICT = 14,   UWB_RSV_STATE_T_EXPANDING_PENDING = 15,   UWB_RSV_STATE_T_EXPANDING_DENIED = 16,   UWB_RSV_STATE_T_RESIZED = 17,   UWB_RSV_STATE_LAST = 18 } ;   140     enum uwb_rsv_target_type {   UWB_RSV_TARGET_DEV = 0,   UWB_RSV_TARGET_DEVADDR = 1 } ;   145     union __anonunion____missing_field_name_361 {   struct uwb_dev *dev;   struct uwb_dev_addr devaddr; } ;   145     struct uwb_rsv_target {   enum uwb_rsv_target_type type;   union __anonunion____missing_field_name_361 __annonCompField99; } ;   183     struct uwb_rsv_move {   struct uwb_mas_bm final_mas;   struct uwb_ie_drp *companion_drp_ie;   struct uwb_mas_bm companion_mas; } ;   196     struct uwb_rsv {   struct uwb_rc *rc;   struct list_head rc_node;   struct list_head pal_node;   struct kref kref;   struct uwb_dev *owner;   struct uwb_rsv_target target;   enum uwb_drp_type type;   int max_mas;   int min_mas;   int max_interval;   bool is_multicast;   void (*callback)(struct uwb_rsv *);   void *pal_priv;   enum uwb_rsv_state state;   bool needs_release_companion_mas;   u8 stream;   u8 tiebreaker;   struct uwb_mas_bm mas;   struct uwb_ie_drp *drp_ie;   struct uwb_rsv_move mv;   bool ie_valid;   struct timer_list timer;   struct work_struct handle_timeout_work; } ;   275     struct uwb_drp_avail {   unsigned long global[4U];   unsigned long local[4U];   unsigned long pending[4U];   struct uwb_ie_drp_avail ie;   bool ie_valid; } ;   306     struct uwb_drp_backoff_win {   u8 window;   u8 n;   int total_expired;   struct timer_list timer;   bool can_reserve_extra_mases; } ;   330     struct uwb_rc {   struct uwb_dev uwb_dev;   int index;   u16 version;   struct module *owner;   void *priv;   int (*start)(struct uwb_rc *);   void (*stop)(struct uwb_rc *);   int (*cmd)(struct uwb_rc *, const struct uwb_rccb *, size_t );   int (*reset)(struct uwb_rc *);   int (*filter_cmd)(struct uwb_rc *, struct uwb_rccb **, size_t *);   int (*filter_event)(struct uwb_rc *, struct uwb_rceb **, const size_t , size_t *, size_t *);   spinlock_t neh_lock;   struct list_head neh_list;   unsigned long ctx_bm[4U];   u8 ctx_roll;   int beaconing;   int beaconing_forced;   int scanning;   unsigned char scan_type;   unsigned char ready;   struct uwb_notifs_chain notifs_chain;   struct uwb_beca uwb_beca;   struct uwbd uwbd;   struct uwb_drp_backoff_win bow;   struct uwb_drp_avail drp_avail;   struct list_head reservations;   struct list_head cnflt_alien_list;   struct uwb_mas_bm cnflt_alien_bitmap;   struct mutex rsvs_mutex;   spinlock_t rsvs_lock;   struct workqueue_struct *rsv_workq;   struct delayed_work rsv_update_work;   struct delayed_work rsv_alien_bp_work;   int set_drp_ie_pending;   struct mutex ies_mutex;   struct uwb_rc_cmd_set_ie *ies;   size_t ies_capacity;   struct list_head pals;   int active_pals;   struct uwb_dbg *dbg; } ;   422     struct uwb_pal {   struct list_head node;   const char *name;   struct device *device;   struct uwb_rc *rc;   void (*channel_changed)(struct uwb_pal *, int);   void (*new_rsv)(struct uwb_pal *, struct uwb_rsv *);   int channel;   struct dentry *debugfs_dir; } ;   830     struct wuie_hdr {   u8 bLength;   u8 bIEIdentifier; } ;    61     struct wusb_ckhdid {   u8 data[16U]; } ;    84     struct wuie_host_info {   struct wuie_hdr hdr;   __le16 attributes;   struct wusb_ckhdid CHID; } ;    98     struct __anonstruct_blk_362 {   struct wusb_ckhdid CDID;   u8 bDeviceAddress;   u8 bReserved; } ;    98     struct wuie_connect_ack {   struct wuie_hdr hdr;   struct __anonstruct_blk_362 blk[4U]; } ;   136     struct wuie_keep_alive {   struct wuie_hdr hdr;   u8 bDeviceAddress[4U]; } ;   375     struct wusbhc ;   375     struct wusb_dev {   struct kref refcnt;   struct wusbhc *wusbhc;   struct list_head cack_node;   struct list_head rekey_node;   u8 port_idx;   u8 addr;   unsigned char beacon_type;   struct usb_encryption_descriptor ccm1_etd;   struct wusb_ckhdid cdid;   unsigned long entry_ts;   struct usb_bos_descriptor *bos;   struct usb_wireless_cap_descriptor *wusb_cap_descr;   struct uwb_mas_bm availability;   struct work_struct devconnect_acked_work;   struct usb_device *usb_dev; } ;   134     struct wusb_port {   u16 status;   u16 change;   struct wusb_dev *wusb_dev;   u32 ptk_tkid; } ;   158     struct wusb_dev_info ;   158     struct __anonstruct_gtk_363 {   struct usb_key_descriptor descr;   u8 data[16U]; } ;   158     struct wusbhc {   struct usb_hcd usb_hcd;   struct device *dev;   struct uwb_rc *uwb_rc;   struct uwb_pal pal;   unsigned int trust_timeout;   struct wusb_ckhdid chid;   uint8_t phy_rate;   uint8_t dnts_num_slots;   uint8_t dnts_interval;   uint8_t retry_count;   struct wuie_host_info *wuie_host_info;   struct mutex mutex;   u16 cluster_id;   struct wusb_port *port;   struct wusb_dev_info *dev_info;   u8 ports_max;   unsigned char active;   struct wuie_keep_alive keep_alive_ie;   struct delayed_work keep_alive_timer;   struct list_head cack_list;   size_t cack_count;   struct wuie_connect_ack cack_ie;   struct uwb_rsv *rsv;   struct mutex mmcie_mutex;   struct wuie_hdr **mmcie;   u8 mmcies_max;   int (*start)(struct wusbhc *);   void (*stop)(struct wusbhc *, int);   int (*mmcie_add)(struct wusbhc *, u8 , u8 , u8 , struct wuie_hdr *);   int (*mmcie_rm)(struct wusbhc *, u8 );   int (*dev_info_set)(struct wusbhc *, struct wusb_dev *);   int (*bwa_set)(struct wusbhc *, s8 , const struct uwb_mas_bm *);   int (*set_ptk)(struct wusbhc *, u8 , u32 , const void *, size_t );   int (*set_gtk)(struct wusbhc *, u32 , const void *, size_t );   int (*set_num_dnts)(struct wusbhc *, u8 , u8 );   struct __anonstruct_gtk_363 gtk;   u8 gtk_index;   u32 gtk_tkid;   struct workqueue_struct *wq_security;   struct work_struct gtk_rekey_work;   struct usb_encryption_descriptor *ccm1_etd; } ;   114     struct whc_qtd {   __le32 status;   __le32 options;   __le64 page_list_ptr;   __u8 setup[8U]; } ;    55     struct whc_itd {   __le16 presentation_time;   __u8 num_segments;   __u8 status;   __le32 options;   __le64 page_list_ptr;   __le64 seg_list_ptr; } ;    87     struct whc_page_list_entry {   __le64 buf_ptr; } ;   127     union __anonunion_overlay_364 {   struct whc_qtd qtd;   struct whc_itd itd; } ;   127     struct whc_qhead {   __le64 link;   __le32 info1;   __le32 info2;   __le32 info3;   __le16 status;   __le16 err_count;   __le32 cur_window;   __le32 scratch[3U];   union __anonunion_overlay_364 overlay; } ;   198     union __anonunion____missing_field_name_365 {   struct whc_qtd qtd[8U];   struct whc_itd itd[8U]; } ;   198     struct whc ;   198     struct whc_qset {   struct whc_qhead qh;   union __anonunion____missing_field_name_365 __annonCompField100;   dma_addr_t qset_dma;   struct whc *whc;   struct usb_host_endpoint *ep;   struct list_head stds;   int ntds;   int td_start;   int td_end;   struct list_head list_node;   unsigned char in_sw_list;   unsigned char in_hw_list;   unsigned char remove;   unsigned char reset;   struct urb *pause_after_urb;   struct completion remove_complete;   uint16_t max_packet;   uint8_t max_burst;   uint8_t max_seq; } ;   275     struct di_buf_entry {   __le32 availability_info[8U];   __le32 addr_sec_info;   __le32 reserved[7U]; } ;   286     struct dn_buf_entry {   __u8 msg_size;   __u8 reserved1;   __u8 src_addr;   __u8 status;   __le32 tkid;   __u8 dn_data[56U]; } ;   307     struct whc_dbg ;   308     struct whc {   struct wusbhc wusbhc;   struct umc_dev *umc;   resource_size_t base_phys;   void *base;   int irq;   u8 n_devices;   u8 n_keys;   u8 n_mmc_ies;   u64 *pz_list;   struct dn_buf_entry *dn_buf;   struct di_buf_entry *di_buf;   dma_addr_t pz_list_dma;   dma_addr_t dn_buf_dma;   dma_addr_t di_buf_dma;   spinlock_t lock;   struct mutex mutex;   void *gen_cmd_buf;   dma_addr_t gen_cmd_buf_dma;   wait_queue_head_t cmd_wq;   struct workqueue_struct *workqueue;   struct work_struct dn_work;   struct dma_pool *qset_pool;   struct list_head async_list;   struct list_head async_removed_list;   wait_queue_head_t async_list_wq;   struct work_struct async_work;   struct list_head periodic_list[5U];   struct list_head periodic_removed_list;   wait_queue_head_t periodic_list_wq;   struct work_struct periodic_work;   struct whc_dbg *dbg; } ;    77     struct whc_std {   struct urb *urb;   size_t len;   int ntds_remaining;   struct whc_qtd *qtd;   struct list_head list_node;   int num_pointers;   dma_addr_t dma_addr;   struct whc_page_list_entry *pl_virt;   void *bounce_buf;   struct scatterlist *bounce_sg;   unsigned int bounce_offset; } ;   110     struct whc_urb {   struct urb *urb;   struct whc_qset *qset;   struct work_struct dequeue_work;   bool is_async;   int status; } ;   135     enum whc_update {   WHC_UPDATE_ADDED = 1,   WHC_UPDATE_REMOVED = 2,   WHC_UPDATE_UPDATED = 4 } ;   214     struct whc_dbg {   struct dentry *di_f;   struct dentry *asl_f;   struct dentry *pzl_f; } ;    99     struct kernel_symbol {   unsigned long value;   const char *name; } ;   131     typedef void (*ctor_fn_t)();   555     struct bug_entry {   int bug_addr_disp;   int file_disp;   unsigned short line;   unsigned short flags; } ;    82     struct static_key {   atomic_t enabled; } ;   264     struct tracepoint_func {   void *func;   void *data;   int prio; } ;    18     struct tracepoint {   const char *name;   struct static_key key;   void (*regfunc)();   void (*unregfunc)();   struct tracepoint_func *funcs; } ;    15     typedef __u64 Elf64_Addr;    16     typedef __u16 Elf64_Half;    20     typedef __u32 Elf64_Word;    21     typedef __u64 Elf64_Xword;   190     struct elf64_sym {   Elf64_Word st_name;   unsigned char st_info;   unsigned char st_other;   Elf64_Half st_shndx;   Elf64_Addr st_value;   Elf64_Xword st_size; } ;   198     typedef struct elf64_sym Elf64_Sym;   223     struct kernel_param ;   228     struct kernel_param_ops {   unsigned int flags;   int (*set)(const char *, const struct kernel_param *);   int (*get)(char *, const struct kernel_param *);   void (*free)(void *); } ;    62     struct kparam_string ;    62     struct kparam_array ;    62     union __anonunion____missing_field_name_224 {   void *arg;   const struct kparam_string *str;   const struct kparam_array *arr; } ;    62     struct kernel_param {   const char *name;   struct module *mod;   const struct kernel_param_ops *ops;   const u16 perm;   s8 level;   u8 flags;   union __anonunion____missing_field_name_224 __annonCompField52; } ;    83     struct kparam_string {   unsigned int maxlen;   char *string; } ;    89     struct kparam_array {   unsigned int max;   unsigned int elemsize;   unsigned int *num;   const struct kernel_param_ops *ops;   void *elem; } ;   470     struct latch_tree_node {   struct rb_node node[2U]; } ;   211     struct mod_arch_specific { } ;    38     struct module_param_attrs ;    38     struct module_kobject {   struct kobject kobj;   struct module *mod;   struct kobject *drivers_dir;   struct module_param_attrs *mp;   struct completion *kobj_completion; } ;    48     struct module_attribute {   struct attribute attr;   ssize_t  (*show)(struct module_attribute *, struct module_kobject *, char *);   ssize_t  (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t );   void (*setup)(struct module *, const char *);   int (*test)(struct module *);   void (*free)(struct module *); } ;    74     struct exception_table_entry ;   290     enum module_state {   MODULE_STATE_LIVE = 0,   MODULE_STATE_COMING = 1,   MODULE_STATE_GOING = 2,   MODULE_STATE_UNFORMED = 3 } ;   297     struct mod_tree_node {   struct module *mod;   struct latch_tree_node node; } ;   304     struct module_layout {   void *base;   unsigned int size;   unsigned int text_size;   unsigned int ro_size;   struct mod_tree_node mtn; } ;   318     struct module_sect_attrs ;   318     struct module_notes_attrs ;   318     struct trace_event_call ;   318     struct trace_enum_map ;   318     struct module {   enum module_state state;   struct list_head list;   char name[56U];   struct module_kobject mkobj;   struct module_attribute *modinfo_attrs;   const char *version;   const char *srcversion;   struct kobject *holders_dir;   const struct kernel_symbol *syms;   const unsigned long *crcs;   unsigned int num_syms;   struct mutex param_lock;   struct kernel_param *kp;   unsigned int num_kp;   unsigned int num_gpl_syms;   const struct kernel_symbol *gpl_syms;   const unsigned long *gpl_crcs;   const struct kernel_symbol *unused_syms;   const unsigned long *unused_crcs;   unsigned int num_unused_syms;   unsigned int num_unused_gpl_syms;   const struct kernel_symbol *unused_gpl_syms;   const unsigned long *unused_gpl_crcs;   bool sig_ok;   bool async_probe_requested;   const struct kernel_symbol *gpl_future_syms;   const unsigned long *gpl_future_crcs;   unsigned int num_gpl_future_syms;   unsigned int num_exentries;   struct exception_table_entry *extable;   int (*init)();   struct module_layout core_layout;   struct module_layout init_layout;   struct mod_arch_specific arch;   unsigned int taints;   unsigned int num_bugs;   struct list_head bug_list;   struct bug_entry *bug_table;   Elf64_Sym *symtab;   Elf64_Sym *core_symtab;   unsigned int num_symtab;   unsigned int core_num_syms;   char *strtab;   char *core_strtab;   struct module_sect_attrs *sect_attrs;   struct module_notes_attrs *notes_attrs;   char *args;   void *percpu;   unsigned int percpu_size;   unsigned int num_tracepoints;   const struct tracepoint **tracepoints_ptrs;   unsigned int num_trace_bprintk_fmt;   const char **trace_bprintk_fmt_start;   struct trace_event_call **trace_events;   unsigned int num_trace_events;   struct trace_enum_map **trace_enums;   unsigned int num_trace_enums;   bool klp_alive;   struct list_head source_list;   struct list_head target_list;   void (*exit)();   atomic_t refcnt;   ctor_fn_t  (**ctors)();   unsigned int num_ctors; } ;    14     struct pci_device_id {   __u32 vendor;   __u32 device;   __u32 subvendor;   __u32 subdevice;   __u32 class;   __u32 class_mask;   kernel_ulong_t driver_data; } ;    72     struct umc_driver {   char *name;   u8 cap_id;   int (*match)(struct umc_driver *, struct umc_dev *);   const void *match_data;   int (*probe)(struct umc_dev *);   void (*remove)(struct umc_dev *);   int (*pre_reset)(struct umc_dev *);   int (*post_reset)(struct umc_dev *);   struct device_driver driver; } ;    62     struct exception_table_entry {   int insn;   int fixup; } ;    27     union __anonunion___u_16___0 {   struct list_head *__val;   char __c[1U]; } ;   234     struct _ddebug {   const char *modname;   const char *function;   const char *filename;   const char *format;   unsigned int lineno;   unsigned char flags; } ;    27     union __anonunion___u_16___1 {   struct list_head *__val;   char __c[1U]; } ;   181     struct wusb_dn_hdr {   u8 bType;   u8 notifdata[]; } ;    27     union __anonunion___u_16___2 {   struct list_head *__val;   char __c[1U]; } ;   200     union __anonunion___u_20___0 {   struct list_head *__val;   char __c[1U]; } ;    27     union __anonunion___u_16___3 {   struct list_head *__val;   char __c[1U]; } ;   890     struct usb_wireless_ep_comp_descriptor {   __u8 bLength;   __u8 bDescriptorType;   __u8 bMaxBurst;   __u8 bMaxSequence;   __le16 wMaxStreamDelay;   __le16 wOverTheAirPacketSize;   __u8 bOverTheAirInterval;   __u8 bmCompAttributes; } ;    38     typedef int Set;     1     long int __builtin_expect(long, long);     1     void * __builtin_memcpy(void *, const void *, unsigned long);   216     void __read_once_size(const volatile void *p, void *res, int size);   241     void __write_once_size(volatile void *p, void *res, int size);   178     void __might_sleep(const char *, int, int);    25     void INIT_LIST_HEAD(struct list_head *list);    48     void __list_add(struct list_head *, struct list_head *, struct list_head *);    61     void list_add(struct list_head *new, struct list_head *head);   112     void __list_del_entry(struct list_head *);   113     void list_del(struct list_head *);   165     void list_move(struct list_head *list, struct list_head *head);   198     int list_empty(const struct list_head *head);    31     void _raw_spin_lock_irq(raw_spinlock_t *);    34     unsigned long int _raw_spin_lock_irqsave(raw_spinlock_t *);    43     void _raw_spin_unlock_irq(raw_spinlock_t *);    45     void _raw_spin_unlock_irqrestore(raw_spinlock_t *, unsigned long);   289     raw_spinlock_t * spinlock_check(spinlock_t *lock);   330     void spin_lock_irq(spinlock_t *lock);   355     void spin_unlock_irq(spinlock_t *lock);   360     void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);   977     long int prepare_to_wait_event(wait_queue_head_t *, wait_queue_t *, int);   978     void finish_wait(wait_queue_head_t *, wait_queue_t *);   138     void mutex_lock_nested(struct mutex *, unsigned int);   174     void mutex_unlock(struct mutex *);   292     unsigned long int __msecs_to_jiffies(const unsigned int);   354     unsigned long int msecs_to_jiffies(const unsigned int m);   429     bool  queue_work_on(int, struct workqueue_struct *, struct work_struct *);   469     bool  queue_work(struct workqueue_struct *wq, struct work_struct *work);    31     unsigned int ioread32(void *);    37     void iowrite32(u32 , void *);   426     long int schedule_timeout(long);   412     int usb_hcd_link_urb_to_ep(struct usb_hcd *, struct urb *);   413     int usb_hcd_check_unlink_urb(struct usb_hcd *, struct urb *, int);   415     void usb_hcd_unlink_urb_from_ep(struct usb_hcd *, struct urb *);    88     u32  le_readl(void *addr);    96     void le_writeq(u64 value, void *addr);   113     int whci_wait_for(struct device *, u32 *, u32 , u32 , unsigned long, const char *);   268     void whc_qset_set_link_ptr(u64 *ptr, u64 target);   147     void whc_write_wusbcmd(struct whc *whc, u32 mask, u32 val);   149     void whc_hw_error(struct whc *whc, const char *reason);   171     void asl_start(struct whc *whc);   172     void asl_stop(struct whc *whc);   173     int asl_init(struct whc *whc);   174     void asl_clean_up(struct whc *whc);   175     int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags);   176     int asl_urb_dequeue(struct whc *whc, struct urb *urb, int status);   177     void asl_qset_delete(struct whc *whc, struct whc_qset *qset);   178     void scan_async_work(struct work_struct *work);   191     struct whc_qset * qset_alloc(struct whc *whc, gfp_t mem_flags);   192     void qset_free(struct whc *whc, struct whc_qset *qset);   193     struct whc_qset * get_qset(struct whc *whc, struct urb *urb, gfp_t mem_flags);   194     void qset_delete(struct whc *whc, struct whc_qset *qset);   195     void qset_clear(struct whc *whc, struct whc_qset *qset);   196     void qset_reset(struct whc *whc, struct whc_qset *qset);   197     int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb, gfp_t mem_flags);   199     void qset_free_std(struct whc *whc, struct whc_std *std);   200     void qset_remove_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb, int status);   202     void process_halted_qtd(struct whc *whc, struct whc_qset *qset, struct whc_qtd *qtd);   204     void process_inactive_qtd(struct whc *whc, struct whc_qset *qset, struct whc_qtd *qtd);   206     enum whc_update  qset_add_qtds(struct whc *whc, struct whc_qset *qset);   207     void qset_remove_complete(struct whc *whc, struct whc_qset *qset);   209     void asl_update(struct whc *whc, uint32_t wusbcmd);    28     void qset_get_next_prev(struct whc *whc, struct whc_qset *qset, struct whc_qset **next, struct whc_qset **prev);    47     void asl_qset_insert_begin(struct whc *whc, struct whc_qset *qset);    53     void asl_qset_insert(struct whc *whc, struct whc_qset *qset);    66     void asl_qset_remove(struct whc *whc, struct whc_qset *qset);    97     uint32_t  process_qset(struct whc *whc, struct whc_qset *qset);    33     extern struct module __this_module;   148     void kfree(const void *);   312     void * __kmalloc(size_t , gfp_t );   451     void * kmalloc(size_t size, gfp_t flags);   605     void * kzalloc(size_t size, gfp_t flags);   114     ssize_t  seq_read(struct file *, char *, size_t , loff_t *);   115     loff_t  seq_lseek(struct file *, loff_t , int);   122     void seq_printf(struct seq_file *, const char *, ...);   140     int single_open(struct file *, int (*)(struct seq_file *, void *), void *);   142     int single_release(struct inode *, struct file *);    49     struct dentry * debugfs_create_file(const char *, umode_t , struct dentry *, void *, const struct file_operations *);    68     void debugfs_remove(struct dentry *);   212     void whc_dbg_init(struct whc *whc);   213     void whc_dbg_clean_up(struct whc *whc);    35     void qset_print(struct seq_file *s, struct whc_qset *qset);    87     int di_print(struct seq_file *s, void *p);   107     int asl_print(struct seq_file *s, void *p);   119     int pzl_print(struct seq_file *s, void *p);   134     int di_open(struct inode *inode, struct file *file);   139     int asl_open(struct inode *inode, struct file *file);   144     int pzl_open(struct inode *inode, struct file *file);   149     const struct file_operations di_fops = { &__this_module, &seq_lseek, &seq_read, 0, 0, 0, 0, 0, 0, 0, 0, &di_open, 0, &single_release, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   157     const struct file_operations asl_fops = { &__this_module, &seq_lseek, &seq_read, 0, 0, 0, 0, 0, 0, 0, 0, &asl_open, 0, &single_release, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   165     const struct file_operations pzl_fops = { &__this_module, &seq_lseek, &seq_read, 0, 0, 0, 0, 0, 0, 0, 0, &pzl_open, 0, &single_release, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   219     void ldv_check_final_state();   222     void ldv_check_return_value(int);   228     void ldv_initialize();   231     void ldv_handler_precall();   234     int nondet_int();   237     int LDV_IN_INTERRUPT = 0;   240     void ldv_main1_sequence_infinite_withcheck_stateful();    72     void set_bit(long nr, volatile unsigned long *addr);   100     int device_wakeup_enable(struct device *);   897     void * dev_get_drvdata(const struct device *dev);  1120     void dev_err(const struct device *, const char *, ...);  1122     void dev_warn(const struct device *, const char *, ...);   104     int __umc_driver_register(struct umc_driver *, struct module *, const char *);   115     void umc_driver_unregister(struct umc_driver *);   471     int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd);   484     int usb_endpoint_xfer_control(const struct usb_endpoint_descriptor *epd);   438     struct usb_hcd * usb_create_hcd(const struct hc_driver *, struct device *, const char *);   444     void usb_put_hcd(struct usb_hcd *);   446     int usb_add_hcd(struct usb_hcd *, unsigned int, unsigned long);   448     void usb_remove_hcd(struct usb_hcd *);   508     struct uwb_rc * uwb_rc_get_by_grandpa(const struct device *);   509     void uwb_rc_put(struct uwb_rc *);   309     int wusbhc_create(struct wusbhc *);   310     int wusbhc_b_create(struct wusbhc *);   311     void wusbhc_b_destroy(struct wusbhc *);   312     void wusbhc_destroy(struct wusbhc *);   407     int wusbhc_rh_status_data(struct usb_hcd *, char *);   408     int wusbhc_rh_control(struct usb_hcd *, u16 , u16 , u16 , char *, u16 );   409     int wusbhc_rh_start_port_reset(struct usb_hcd *, unsigned int);   444     u8  wusb_cluster_id_get();   445     void wusb_cluster_id_put(u8 );    80     void le_writel(u32 value, void *addr);   143     int whc_init(struct whc *whc);   144     void whc_clean_up(struct whc *whc);   152     int whc_wusbhc_start(struct wusbhc *wusbhc);   153     void whc_wusbhc_stop(struct wusbhc *wusbhc, int delay);   154     int whc_mmcie_add(struct wusbhc *wusbhc, u8 interval, u8 repeat_cnt, u8 handle, struct wuie_hdr *wuie);   156     int whc_mmcie_rm(struct wusbhc *wusbhc, u8 handle);   157     int whc_bwa_set(struct wusbhc *wusbhc, s8 stream_index, const struct uwb_mas_bm *mas_bm);   158     int whc_dev_info_set(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev);   159     int whc_set_num_dnts(struct wusbhc *wusbhc, u8 interval, u8 slots);   160     int whc_set_ptk(struct wusbhc *wusbhc, u8 port_idx, u32 tkid, const void *ptk, size_t key_size);   162     int whc_set_gtk(struct wusbhc *wusbhc, u32 tkid, const void *gtk, size_t key_size);   164     int whc_set_cluster_id(struct whc *whc, u8 bcid);   167     irqreturn_t  whc_int_handler(struct usb_hcd *hcd);   185     int pzl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags);   186     int pzl_urb_dequeue(struct whc *whc, struct urb *urb, int status);   187     void pzl_qset_delete(struct whc *whc, struct whc_qset *qset);    33     int whc_reset(struct usb_hcd *usb_hcd);    45     int whc_start(struct usb_hcd *usb_hcd);    89     void whc_stop(struct usb_hcd *usb_hcd);   108     int whc_get_frame_number(struct usb_hcd *usb_hcd);   118     int whc_urb_enqueue(struct usb_hcd *usb_hcd, struct urb *urb, gfp_t mem_flags);   146     int whc_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb, int status);   173     void whc_endpoint_disable(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep);   191     void whc_endpoint_reset(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep);   217     struct hc_driver whc_hc_driver = { "whci-hcd", "Wireless host controller", 2008UL, &whc_int_handler, 32, &whc_reset, &whc_start, 0, 0, &whc_stop, 0, &whc_get_frame_number, &whc_urb_enqueue, &whc_urb_dequeue, 0, 0, &whc_endpoint_disable, &whc_endpoint_reset, &wusbhc_rh_status_data, &wusbhc_rh_control, 0, 0, &wusbhc_rh_start_port_reset, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   238     int whc_probe(struct umc_dev *umc);   322     void whc_remove(struct umc_dev *umc);   339     struct umc_driver whci_hc_driver = { (char *)"whci-hcd", 1U, 0, 0, &whc_probe, &whc_remove, 0, 0, { 0, 0, 0, 0, (_Bool)0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };   346     int whci_hc_driver_init();   352     void whci_hc_driver_exit();   363     const struct pci_device_id __mod_pci__whci_hcd_id_table_device_table[2U] = {  };   391     void ldv_check_return_value_probe(int);   406     void ldv_main2_sequence_infinite_withcheck_stateful();    31     void * __memcpy(void *, const void *, size_t );    25     void INIT_LIST_HEAD___0(struct list_head *list);   322     void wusbhc_reset_all(struct wusbhc *);   148     int whc_do_gencmd(struct whc *whc, u32 cmd, u32 params, void *addr, size_t len);    53     void __dynamic_dev_dbg(struct _ddebug *, const struct device *, const char *, ...);    25     void INIT_LIST_HEAD___1(struct list_head *list);    56     void * __memset(void *, int, size_t );   280     void lockdep_init_map(struct lockdep_map *, const char *, struct lock_class_key *, int);    93     void __raw_spin_lock_init(raw_spinlock_t *, const char *, struct lock_class_key *);    72     void __init_waitqueue_head(wait_queue_head_t *, const char *, struct lock_class_key *);   119     void __mutex_init(struct mutex *, const char *, struct lock_class_key *);   181     void __init_work(struct work_struct *, int);   361     struct workqueue_struct * __alloc_workqueue_key(const char *, unsigned int, int, struct lock_class_key *, const char *, ...);   421     void destroy_workqueue(struct workqueue_struct *);   140     extern struct resource iomem_resource;   165     resource_size_t  resource_size(const struct resource *res);   193     struct resource * __request_region(struct resource *, resource_size_t , resource_size_t , const char *, int);   202     void __release_region(struct resource *, resource_size_t , resource_size_t );   181     void * ioremap_nocache(resource_size_t , unsigned long);   192     void * ioremap(resource_size_t offset, unsigned long size);   197     void iounmap(volatile void *);    87     const char * kobject_name(const struct kobject *kobj);   850     const char * dev_name(const struct device *dev);    53     void debug_dma_alloc_coherent(struct device *, size_t , dma_addr_t , void *);    29     extern struct dma_map_ops *dma_ops;    31     struct dma_map_ops * get_dma_ops(struct device *dev);    43     bool  arch_dma_alloc_attrs(struct device **, gfp_t *);   355     void * dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, struct dma_attrs *attrs);   396     void * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag);   402     void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);    19     struct dma_pool * dma_pool_create(const char *, struct device *, size_t , size_t , size_t );    22     void dma_pool_destroy(struct dma_pool *);   168     void whc_dn_work(struct work_struct *work);   181     int pzl_init(struct whc *whc);   182     void pzl_clean_up(struct whc *whc);   188     void scan_periodic_work(struct work_struct *work);    30     void whc_hw_reset(struct whc *whc);    37     void whc_hw_init_di_buf(struct whc *whc);    48     void whc_hw_init_dn_buf(struct whc *whc);   200     void __wake_up(wait_queue_head_t *, unsigned int, int, void *);   395     void wusbhc_handle_dn(struct wusbhc *, u8 , struct wusb_dn_hdr *, size_t );    25     void transfer_done(struct whc *whc);    67     int process_dn_buf(struct whc *whc);    25     void INIT_LIST_HEAD___2(struct list_head *list);   198     int list_empty___0(const struct list_head *head);   183     void pzl_start(struct whc *whc);   184     void pzl_stop(struct whc *whc);   208     void pzl_update(struct whc *whc, uint32_t wusbcmd);    28     void update_pzl_pointers(struct whc *whc, int period, u64 addr);    65     int qset_get_period(struct whc *whc, struct whc_qset *qset);    76     void qset_insert_in_sw_list(struct whc *whc, struct whc_qset *qset);    87     void pzl_qset_remove(struct whc *whc, struct whc_qset *qset);   103     enum whc_update  pzl_process_qset(struct whc *whc, struct whc_qset *qset);   207     void update_pzl_hw_view(struct whc *whc);     7     dma_addr_t  ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);     8     int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);   437     int fls(int x);    25     void INIT_LIST_HEAD___3(struct list_head *list);    75     void list_add_tail(struct list_head *new, struct list_head *head);   154     void list_del_init(struct list_head *entry);    22     void _raw_spin_lock(raw_spinlock_t *);    41     void _raw_spin_unlock(raw_spinlock_t *);   300     void spin_lock(spinlock_t *lock);   345     void spin_unlock(spinlock_t *lock);    73     void init_completion(struct completion *x);    91     void wait_for_completion(struct completion *);   106     void complete(struct completion *);    44     void debug_dma_unmap_page(struct device *, dma_addr_t , size_t , int, bool );   926     void * lowmem_page_address(const struct page *page);   120     struct page * sg_page(struct scatterlist *sg);   239     void * sg_virt(struct scatterlist *sg);   246     struct scatterlist * sg_next(struct scatterlist *);    77     int valid_dma_direction(int dma_direction);   147     dma_addr_t  ldv_dma_map_single_attrs_33(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);   156     void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);   461     int ldv_dma_mapping_error_34(struct device *dev, dma_addr_t dma_addr);   147     void * krealloc(const void *, size_t , gfp_t );    24     void * dma_pool_alloc(struct dma_pool *, gfp_t , dma_addr_t *);    27     void * dma_pool_zalloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle);    33     void dma_pool_free(struct dma_pool *, void *, dma_addr_t );   320     void wusbhc_giveback_urb(struct wusbhc *, struct urb *, int);   468     u8  wusb_port_no_to_idx(u8 port_no);   188     unsigned int usb_pipe_to_qh_type(unsigned int pipe);   131     bool  whc_std_last(struct whc_std *std);    52     void qset_fill_qh(struct whc *whc, struct whc_qset *qset, struct urb *urb);   254     void qset_remove_qtd(struct whc *whc, struct whc_qset *qset);   263     void qset_copy_bounce_to_sg(struct whc *whc, struct whc_std *std);   330     void qset_remove_qtds(struct whc *whc, struct whc_qset *qset, struct urb *urb);   347     void qset_free_stds(struct whc_qset *qset, struct urb *urb);   357     int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_flags);   395     void urb_dequeue_work(struct work_struct *work);   416     struct whc_std * qset_new_std(struct whc *whc, struct whc_qset *qset, struct urb *urb, gfp_t mem_flags);   434     int qset_add_urb_sg(struct whc *whc, struct whc_qset *qset, struct urb *urb, gfp_t mem_flags);   553     int qset_add_urb_sg_linearize(struct whc *whc, struct whc_qset *qset, struct urb *urb, gfp_t mem_flags);   726     int get_urb_status_from_qtd(struct urb *urb, u32 status);   201     void bitmap_copy(unsigned long *dst, const unsigned long *src, unsigned int nbits);    46     void msleep(unsigned int);   271     void uwb_mas_bm_copy_le(void *dst, const struct uwb_mas_bm *mas);    25     int whc_update_di(struct whc *whc, int idx);   141     int whc_set_key(struct whc *whc, u8 key_index, uint32_t tkid, const void *key, size_t key_size, bool is_gtk);    10     void ldv_error();    25     int ldv_undef_int();    26     void * ldv_undef_ptr();     8     int LDV_DMA_MAP_CALLS = 0;    11     dma_addr_t  ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir);    41     dma_addr_t  ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir);           return ;         }        {       408     struct usb_hcd *var_group1;   409     struct urb *var_group2;   410     unsigned int var_whc_urb_enqueue_4_p2;   411     int var_whc_urb_dequeue_5_p2;   412     struct usb_host_endpoint *var_group3;   413     struct umc_dev *var_group4;   414     int res_whc_probe_8;   415     int ldv_s_whci_hc_driver_umc_driver;   416     int tmp;   417     int tmp___0;   418     int tmp___1;   476     ldv_s_whci_hc_driver_umc_driver = 0;   456     LDV_IN_INTERRUPT = 1;   471     ldv_handler_precall() { /* Function call is skipped due to function is undefined */}           {   348       int tmp;   348       tmp = __umc_driver_register(&whci_hc_driver, &__this_module, "whci_hcd") { /* Function call is skipped due to function is undefined */}           }  479     goto ldv_39430;   479     tmp___1 = nondet_int() { /* Function call is skipped due to function is undefined */}   482     goto ldv_39429;   480     ldv_39429:;   483     tmp___0 = nondet_int() { /* Function call is skipped due to function is undefined */}   483     switch (tmp___0);   561     ldv_handler_precall() { /* Function call is skipped due to function is undefined */}           {         }  120       struct wusbhc *wusbhc;   121       const struct usb_hcd *__mptr;   122       struct whc *whc;   123       const struct wusbhc *__mptr___0;   124       int ret;   121       __mptr = (const struct usb_hcd *)usb_hcd;   121       wusbhc = (struct wusbhc *)__mptr;   122       __mptr___0 = (const struct wusbhc *)wusbhc;   122       whc = (struct whc *)__mptr___0;   125       switch ((urb->pipe) >> 30);   133       skipped uneccesary edges            {           }  267         struct whc_qset *qset;   268         int err;   269         unsigned long flags;   270         raw_spinlock_t *tmp;   271         flags = _raw_spin_lock_irqsave(tmp) { /* Function call is skipped due to function is undefined */}   273         err = usb_hcd_link_urb_to_ep(&(whc->wusbhc.usb_hcd), urb) { /* Function call is skipped due to function is undefined */}               {   159           struct whc_qset *qset;   162           struct whc_qset *__CPAchecker_TMP_0 = (struct whc_qset *)(urb->ep->hcpriv);   162           qset = __CPAchecker_TMP_0;               }              {             }  640           struct whc_urb *wurb;   641           int remaining;   642           unsigned long long transfer_dma;   643           int ntds_remaining;   644           int ret;   645           void *tmp;   646           struct lock_class_key __key;   647           struct __anonstruct_atomic64_t_7 __constr_expr_0;   648           struct whc_std *std;   649           unsigned long std_len;   650           int tmp___0;   642           int __CPAchecker_TMP_0 = (int)(urb->transfer_buffer_length);   642           remaining = __CPAchecker_TMP_0;   643           transfer_dma = urb->transfer_dma;                 {   607             void *tmp;                   {                 }  453               void *tmp___2;   468               tmp___2 = __kmalloc(size, flags) { /* Function call is skipped due to function is undefined */}                   }  647           wurb = (struct whc_urb *)tmp;   650           urb->hcpriv = (void *)wurb;   651           wurb->qset = qset;   652           wurb->urb = urb;   653           __init_work(&(wurb->dequeue_work), 0) { /* Function call is skipped due to function is undefined */}   653           __constr_expr_0.counter = 137438953408L;   653           wurb->dequeue_work.data = __constr_expr_0;   653           lockdep_init_map(&(wurb->dequeue_work.lockdep_map), "(&wurb->dequeue_work)", &__key, 0) { /* Function call is skipped due to function is undefined */}                 {    27             union __anonunion___u_16___3 __u;    27             __u.__val = list;    28             list->prev = list;                 }  653           wurb->dequeue_work.func = &urb_dequeue_work;                 {               }  437             unsigned long remaining;   438             struct scatterlist *sg;   439             int i;   440             int ntds;   441             struct whc_std *std;   442             struct whc_page_list_entry *new_pl_virt;   443             unsigned long long prev_end;   444             unsigned long pl_len;   445             int p;   446             unsigned long long dma_addr;   447             unsigned long dma_remaining;   448             unsigned long long sp;   449             unsigned long long ep;   450             int num_pointers;   451             unsigned long __min1;   452             unsigned long __min2;   453             unsigned long dma_len;   454             void *tmp;   455             const struct list_head *__mptr;   456             int tmp___0;   457             const struct list_head *__mptr___0;   440             ntds = 0;   441             std = (struct whc_std *)0;   443             prev_end = 0ULL;   445             p = 0;   447             size_t __CPAchecker_TMP_0 = (size_t )(urb->transfer_buffer_length);   447             remaining = __CPAchecker_TMP_0;   449             i = 0;   449             sg = urb->sg;   449             goto ldv_38588;   455             ldv_38576:;   535             __mptr = (const struct list_head *)(qset->stds.next);   535             std = ((struct whc_std *)__mptr) + 18446744073709551584UL;   535             goto ldv_38594;   537             goto ldv_38593;   536             ldv_38593:;   537             unsigned long __CPAchecker_TMP_9 = (unsigned long)(std->num_pointers);   537             pl_len = __CPAchecker_TMP_9 * 8UL;   538             tmp___0 = ntds;   538             ntds = ntds - 1;   538             std->ntds_remaining = tmp___0;   539             void *__CPAchecker_TMP_10 = (void *)(std->pl_virt);   539             -ldv_dma_map_single_attrs_33(whc->wusbhc.dev, __CPAchecker_TMP_10, pl_len, 1, (struct dma_attrs *)0)                   {    38               unsigned long long tmp;                     {                   }   58                 unsigned long long nonedetermined;    59                 void *tmp;    58                 tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}    58                 nonedetermined = (dma_addr_t )tmp;    63                 LDV_DMA_MAP_CALLS = LDV_DMA_MAP_CALLS + 1;                     }  535             __mptr___0 = (const struct list_head *)(std->list_node.next);   535             std = ((struct whc_std *)__mptr___0) + 18446744073709551584UL;   536             ldv_38594:;   537             goto ldv_38593;   536             ldv_38593:;   537             unsigned long __CPAchecker_TMP_9 = (unsigned long)(std->num_pointers);   537             pl_len = __CPAchecker_TMP_9 * 8UL;   538             tmp___0 = ntds;   538             ntds = ntds - 1;   538             std->ntds_remaining = tmp___0;   539             void *__CPAchecker_TMP_10 = (void *)(std->pl_virt);   539             -ldv_dma_map_single_attrs_33(whc->wusbhc.dev, __CPAchecker_TMP_10, pl_len, 1, (struct dma_attrs *)0)                   {                 }   38               unsigned long long tmp;                     {                   }   58                 unsigned long long nonedetermined;    59                 void *tmp;    58                 tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}    58                 nonedetermined = (dma_addr_t )tmp;                     } |              Source code             1 /*
    2  * Wireless Host Controller (WHC) asynchronous schedule management.
    3  *
    4  * Copyright (C) 2007 Cambridge Silicon Radio Ltd.
    5  *
    6  * This program is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU General Public License version
    8  * 2 as published by the Free Software Foundation.
    9  *
   10  * This program is distributed in the hope that it will be useful,
   11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13  * GNU General Public License for more details.
   14  *
   15  * You should have received a copy of the GNU General Public License
   16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   17  */
   18 #include <linux/kernel.h>
   19 #include <linux/gfp.h>
   20 #include <linux/dma-mapping.h>
   21 #include <linux/uwb/umc.h>
   22 #include <linux/usb.h>
   23 
   24 #include "../../wusbcore/wusbhc.h"
   25 
   26 #include "whcd.h"
   27 
   28 static void qset_get_next_prev(struct whc *whc, struct whc_qset *qset,
   29 			       struct whc_qset **next, struct whc_qset **prev)
   30 {
   31 	struct list_head *n, *p;
   32 
   33 	BUG_ON(list_empty(&whc->async_list));
   34 
   35 	n = qset->list_node.next;
   36 	if (n == &whc->async_list)
   37 		n = n->next;
   38 	p = qset->list_node.prev;
   39 	if (p == &whc->async_list)
   40 		p = p->prev;
   41 
   42 	*next = container_of(n, struct whc_qset, list_node);
   43 	*prev = container_of(p, struct whc_qset, list_node);
   44 
   45 }
   46 
   47 static void asl_qset_insert_begin(struct whc *whc, struct whc_qset *qset)
   48 {
   49 	list_move(&qset->list_node, &whc->async_list);
   50 	qset->in_sw_list = true;
   51 }
   52 
   53 static void asl_qset_insert(struct whc *whc, struct whc_qset *qset)
   54 {
   55 	struct whc_qset *next, *prev;
   56 
   57 	qset_clear(whc, qset);
   58 
   59 	/* Link into ASL. */
   60 	qset_get_next_prev(whc, qset, &next, &prev);
   61 	whc_qset_set_link_ptr(&qset->qh.link, next->qset_dma);
   62 	whc_qset_set_link_ptr(&prev->qh.link, qset->qset_dma);
   63 	qset->in_hw_list = true;
   64 }
   65 
   66 static void asl_qset_remove(struct whc *whc, struct whc_qset *qset)
   67 {
   68 	struct whc_qset *prev, *next;
   69 
   70 	qset_get_next_prev(whc, qset, &next, &prev);
   71 
   72 	list_move(&qset->list_node, &whc->async_removed_list);
   73 	qset->in_sw_list = false;
   74 
   75 	/*
   76 	 * No more qsets in the ASL?  The caller must stop the ASL as
   77 	 * it's no longer valid.
   78 	 */
   79 	if (list_empty(&whc->async_list))
   80 		return;
   81 
   82 	/* Remove from ASL. */
   83 	whc_qset_set_link_ptr(&prev->qh.link, next->qset_dma);
   84 	qset->in_hw_list = false;
   85 }
   86 
   87 /**
   88  * process_qset - process any recently inactivated or halted qTDs in a
   89  * qset.
   90  *
   91  * After inactive qTDs are removed, new qTDs can be added if the
   92  * urb queue still contains URBs.
   93  *
   94  * Returns any additional WUSBCMD bits for the ASL sync command (i.e.,
   95  * WUSBCMD_ASYNC_QSET_RM if a halted qset was removed).
   96  */
   97 static uint32_t process_qset(struct whc *whc, struct whc_qset *qset)
   98 {
   99 	enum whc_update update = 0;
  100 	uint32_t status = 0;
  101 
  102 	while (qset->ntds) {
  103 		struct whc_qtd *td;
  104 		int t;
  105 
  106 		t = qset->td_start;
  107 		td = &qset->qtd[qset->td_start];
  108 		status = le32_to_cpu(td->status);
  109 
  110 		/*
  111 		 * Nothing to do with a still active qTD.
  112 		 */
  113 		if (status & QTD_STS_ACTIVE)
  114 			break;
  115 
  116 		if (status & QTD_STS_HALTED) {
  117 			/* Ug, an error. */
  118 			process_halted_qtd(whc, qset, td);
  119 			/* A halted qTD always triggers an update
  120 			   because the qset was either removed or
  121 			   reactivated. */
  122 			update |= WHC_UPDATE_UPDATED;
  123 			goto done;
  124 		}
  125 
  126 		/* Mmm, a completed qTD. */
  127 		process_inactive_qtd(whc, qset, td);
  128 	}
  129 
  130 	if (!qset->remove)
  131 		update |= qset_add_qtds(whc, qset);
  132 
  133 done:
  134 	/*
  135 	 * Remove this qset from the ASL if requested, but only if has
  136 	 * no qTDs.
  137 	 */
  138 	if (qset->remove && qset->ntds == 0) {
  139 		asl_qset_remove(whc, qset);
  140 		update |= WHC_UPDATE_REMOVED;
  141 	}
  142 	return update;
  143 }
  144 
  145 void asl_start(struct whc *whc)
  146 {
  147 	struct whc_qset *qset;
  148 
  149 	qset = list_first_entry(&whc->async_list, struct whc_qset, list_node);
  150 
  151 	le_writeq(qset->qset_dma | QH_LINK_NTDS(8), whc->base + WUSBASYNCLISTADDR);
  152 
  153 	whc_write_wusbcmd(whc, WUSBCMD_ASYNC_EN, WUSBCMD_ASYNC_EN);
  154 	whci_wait_for(&whc->umc->dev, whc->base + WUSBSTS,
  155 		      WUSBSTS_ASYNC_SCHED, WUSBSTS_ASYNC_SCHED,
  156 		      1000, "start ASL");
  157 }
  158 
  159 void asl_stop(struct whc *whc)
  160 {
  161 	whc_write_wusbcmd(whc, WUSBCMD_ASYNC_EN, 0);
  162 	whci_wait_for(&whc->umc->dev, whc->base + WUSBSTS,
  163 		      WUSBSTS_ASYNC_SCHED, 0,
  164 		      1000, "stop ASL");
  165 }
  166 
  167 /**
  168  * asl_update - request an ASL update and wait for the hardware to be synced
  169  * @whc: the WHCI HC
  170  * @wusbcmd: WUSBCMD value to start the update.
  171  *
  172  * If the WUSB HC is inactive (i.e., the ASL is stopped) then the
  173  * update must be skipped as the hardware may not respond to update
  174  * requests.
  175  */
  176 void asl_update(struct whc *whc, uint32_t wusbcmd)
  177 {
  178 	struct wusbhc *wusbhc = &whc->wusbhc;
  179 	long t;
  180 
  181 	mutex_lock(&wusbhc->mutex);
  182 	if (wusbhc->active) {
  183 		whc_write_wusbcmd(whc, wusbcmd, wusbcmd);
  184 		t = wait_event_timeout(
  185 			whc->async_list_wq,
  186 			(le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0,
  187 			msecs_to_jiffies(1000));
  188 		if (t == 0)
  189 			whc_hw_error(whc, "ASL update timeout");
  190 	}
  191 	mutex_unlock(&wusbhc->mutex);
  192 }
  193 
  194 /**
  195  * scan_async_work - scan the ASL for qsets to process.
  196  *
  197  * Process each qset in the ASL in turn and then signal the WHC that
  198  * the ASL has been updated.
  199  *
  200  * Then start, stop or update the asynchronous schedule as required.
  201  */
  202 void scan_async_work(struct work_struct *work)
  203 {
  204 	struct whc *whc = container_of(work, struct whc, async_work);
  205 	struct whc_qset *qset, *t;
  206 	enum whc_update update = 0;
  207 
  208 	spin_lock_irq(&whc->lock);
  209 
  210 	/*
  211 	 * Transerve the software list backwards so new qsets can be
  212 	 * safely inserted into the ASL without making it non-circular.
  213 	 */
  214 	list_for_each_entry_safe_reverse(qset, t, &whc->async_list, list_node) {
  215 		if (!qset->in_hw_list) {
  216 			asl_qset_insert(whc, qset);
  217 			update |= WHC_UPDATE_ADDED;
  218 		}
  219 
  220 		update |= process_qset(whc, qset);
  221 	}
  222 
  223 	spin_unlock_irq(&whc->lock);
  224 
  225 	if (update) {
  226 		uint32_t wusbcmd = WUSBCMD_ASYNC_UPDATED | WUSBCMD_ASYNC_SYNCED_DB;
  227 		if (update & WHC_UPDATE_REMOVED)
  228 			wusbcmd |= WUSBCMD_ASYNC_QSET_RM;
  229 		asl_update(whc, wusbcmd);
  230 	}
  231 
  232 	/*
  233 	 * Now that the ASL is updated, complete the removal of any
  234 	 * removed qsets.
  235 	 *
  236 	 * If the qset was to be reset, do so and reinsert it into the
  237 	 * ASL if it has pending transfers.
  238 	 */
  239 	spin_lock_irq(&whc->lock);
  240 
  241 	list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) {
  242 		qset_remove_complete(whc, qset);
  243 		if (qset->reset) {
  244 			qset_reset(whc, qset);
  245 			if (!list_empty(&qset->stds)) {
  246 				asl_qset_insert_begin(whc, qset);
  247 				queue_work(whc->workqueue, &whc->async_work);
  248 			}
  249 		}
  250 	}
  251 
  252 	spin_unlock_irq(&whc->lock);
  253 }
  254 
  255 /**
  256  * asl_urb_enqueue - queue an URB onto the asynchronous list (ASL).
  257  * @whc: the WHCI host controller
  258  * @urb: the URB to enqueue
  259  * @mem_flags: flags for any memory allocations
  260  *
  261  * The qset for the endpoint is obtained and the urb queued on to it.
  262  *
  263  * Work is scheduled to update the hardware's view of the ASL.
  264  */
  265 int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags)
  266 {
  267 	struct whc_qset *qset;
  268 	int err;
  269 	unsigned long flags;
  270 
  271 	spin_lock_irqsave(&whc->lock, flags);
  272 
  273 	err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
  274 	if (err < 0) {
  275 		spin_unlock_irqrestore(&whc->lock, flags);
  276 		return err;
  277 	}
  278 
  279 	qset = get_qset(whc, urb, GFP_ATOMIC);
  280 	if (qset == NULL)
  281 		err = -ENOMEM;
  282 	else
  283 		err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
  284 	if (!err) {
  285 		if (!qset->in_sw_list && !qset->remove)
  286 			asl_qset_insert_begin(whc, qset);
  287 	} else
  288 		usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb);
  289 
  290 	spin_unlock_irqrestore(&whc->lock, flags);
  291 
  292 	if (!err)
  293 		queue_work(whc->workqueue, &whc->async_work);
  294 
  295 	return err;
  296 }
  297 
  298 /**
  299  * asl_urb_dequeue - remove an URB (qset) from the async list.
  300  * @whc: the WHCI host controller
  301  * @urb: the URB to dequeue
  302  * @status: the current status of the URB
  303  *
  304  * URBs that do yet have qTDs can simply be removed from the software
  305  * queue, otherwise the qset must be removed from the ASL so the qTDs
  306  * can be removed.
  307  */
  308 int asl_urb_dequeue(struct whc *whc, struct urb *urb, int status)
  309 {
  310 	struct whc_urb *wurb = urb->hcpriv;
  311 	struct whc_qset *qset = wurb->qset;
  312 	struct whc_std *std, *t;
  313 	bool has_qtd = false;
  314 	int ret;
  315 	unsigned long flags;
  316 
  317 	spin_lock_irqsave(&whc->lock, flags);
  318 
  319 	ret = usb_hcd_check_unlink_urb(&whc->wusbhc.usb_hcd, urb, status);
  320 	if (ret < 0)
  321 		goto out;
  322 
  323 	list_for_each_entry_safe(std, t, &qset->stds, list_node) {
  324 		if (std->urb == urb) {
  325 			if (std->qtd)
  326 				has_qtd = true;
  327 			qset_free_std(whc, std);
  328 		} else
  329 			std->qtd = NULL; /* so this std is re-added when the qset is */
  330 	}
  331 
  332 	if (has_qtd) {
  333 		asl_qset_remove(whc, qset);
  334 		wurb->status = status;
  335 		wurb->is_async = true;
  336 		queue_work(whc->workqueue, &wurb->dequeue_work);
  337 	} else
  338 		qset_remove_urb(whc, qset, urb, status);
  339 out:
  340 	spin_unlock_irqrestore(&whc->lock, flags);
  341 
  342 	return ret;
  343 }
  344 
  345 /**
  346  * asl_qset_delete - delete a qset from the ASL
  347  */
  348 void asl_qset_delete(struct whc *whc, struct whc_qset *qset)
  349 {
  350 	qset->remove = 1;
  351 	queue_work(whc->workqueue, &whc->async_work);
  352 	qset_delete(whc, qset);
  353 }
  354 
  355 /**
  356  * asl_init - initialize the asynchronous schedule list
  357  *
  358  * A dummy qset with no qTDs is added to the ASL to simplify removing
  359  * qsets (no need to stop the ASL when the last qset is removed).
  360  */
  361 int asl_init(struct whc *whc)
  362 {
  363 	struct whc_qset *qset;
  364 
  365 	qset = qset_alloc(whc, GFP_KERNEL);
  366 	if (qset == NULL)
  367 		return -ENOMEM;
  368 
  369 	asl_qset_insert_begin(whc, qset);
  370 	asl_qset_insert(whc, qset);
  371 
  372 	return 0;
  373 }
  374 
  375 /**
  376  * asl_clean_up - free ASL resources
  377  *
  378  * The ASL is stopped and empty except for the dummy qset.
  379  */
  380 void asl_clean_up(struct whc *whc)
  381 {
  382 	struct whc_qset *qset;
  383 
  384 	if (!list_empty(&whc->async_list)) {
  385 		qset = list_first_entry(&whc->async_list, struct whc_qset, list_node);
  386 		list_del(&qset->list_node);
  387 		qset_free(whc, qset);
  388 	}
  389 }                 1 
    2 /*
    3  * Wireless Host Controller (WHC) driver.
    4  *
    5  * Copyright (C) 2007 Cambridge Silicon Radio Ltd.
    6  *
    7  * This program is free software; you can redistribute it and/or
    8  * modify it under the terms of the GNU General Public License version
    9  * 2 as published by the Free Software Foundation.
   10  *
   11  * This program is distributed in the hope that it will be useful,
   12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14  * GNU General Public License for more details.
   15  *
   16  * You should have received a copy of the GNU General Public License
   17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   18  */
   19 #include <linux/kernel.h>
   20 #include <linux/init.h>
   21 #include <linux/module.h>
   22 #include <linux/uwb/umc.h>
   23 
   24 #include "../../wusbcore/wusbhc.h"
   25 
   26 #include "whcd.h"
   27 
   28 /*
   29  * One time initialization.
   30  *
   31  * Nothing to do here.
   32  */
   33 static int whc_reset(struct usb_hcd *usb_hcd)
   34 {
   35 	return 0;
   36 }
   37 
   38 /*
   39  * Start the wireless host controller.
   40  *
   41  * Start device notification.
   42  *
   43  * Put hc into run state, set DNTS parameters.
   44  */
   45 static int whc_start(struct usb_hcd *usb_hcd)
   46 {
   47 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
   48 	struct whc *whc = wusbhc_to_whc(wusbhc);
   49 	u8 bcid;
   50 	int ret;
   51 
   52 	mutex_lock(&wusbhc->mutex);
   53 
   54 	le_writel(WUSBINTR_GEN_CMD_DONE
   55 		  | WUSBINTR_HOST_ERR
   56 		  | WUSBINTR_ASYNC_SCHED_SYNCED
   57 		  | WUSBINTR_DNTS_INT
   58 		  | WUSBINTR_ERR_INT
   59 		  | WUSBINTR_INT,
   60 		  whc->base + WUSBINTR);
   61 
   62 	/* set cluster ID */
   63 	bcid = wusb_cluster_id_get();
   64 	ret = whc_set_cluster_id(whc, bcid);
   65 	if (ret < 0)
   66 		goto out;
   67 	wusbhc->cluster_id = bcid;
   68 
   69 	/* start HC */
   70 	whc_write_wusbcmd(whc, WUSBCMD_RUN, WUSBCMD_RUN);
   71 
   72 	usb_hcd->uses_new_polling = 1;
   73 	set_bit(HCD_FLAG_POLL_RH, &usb_hcd->flags);
   74 	usb_hcd->state = HC_STATE_RUNNING;
   75 
   76 out:
   77 	mutex_unlock(&wusbhc->mutex);
   78 	return ret;
   79 }
   80 
   81 
   82 /*
   83  * Stop the wireless host controller.
   84  *
   85  * Stop device notification.
   86  *
   87  * Wait for pending transfer to stop? Put hc into stop state?
   88  */
   89 static void whc_stop(struct usb_hcd *usb_hcd)
   90 {
   91 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
   92 	struct whc *whc = wusbhc_to_whc(wusbhc);
   93 
   94 	mutex_lock(&wusbhc->mutex);
   95 
   96 	/* stop HC */
   97 	le_writel(0, whc->base + WUSBINTR);
   98 	whc_write_wusbcmd(whc, WUSBCMD_RUN, 0);
   99 	whci_wait_for(&whc->umc->dev, whc->base + WUSBSTS,
  100 		      WUSBSTS_HCHALTED, WUSBSTS_HCHALTED,
  101 		      100, "HC to halt");
  102 
  103 	wusb_cluster_id_put(wusbhc->cluster_id);
  104 
  105 	mutex_unlock(&wusbhc->mutex);
  106 }
  107 
  108 static int whc_get_frame_number(struct usb_hcd *usb_hcd)
  109 {
  110 	/* Frame numbers are not applicable to WUSB. */
  111 	return -ENOSYS;
  112 }
  113 
  114 
  115 /*
  116  * Queue an URB to the ASL or PZL
  117  */
  118 static int whc_urb_enqueue(struct usb_hcd *usb_hcd, struct urb *urb,
  119 			   gfp_t mem_flags)
  120 {
  121 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  122 	struct whc *whc = wusbhc_to_whc(wusbhc);
  123 	int ret;
  124 
  125 	switch (usb_pipetype(urb->pipe)) {
  126 	case PIPE_INTERRUPT:
  127 		ret = pzl_urb_enqueue(whc, urb, mem_flags);
  128 		break;
  129 	case PIPE_ISOCHRONOUS:
  130 		dev_err(&whc->umc->dev, "isochronous transfers unsupported\n");
  131 		ret = -ENOTSUPP;
  132 		break;
  133 	case PIPE_CONTROL:
  134 	case PIPE_BULK:
  135 	default:
  136 		ret = asl_urb_enqueue(whc, urb, mem_flags);
  137 		break;
  138 	}
  139 
  140 	return ret;
  141 }
  142 
  143 /*
  144  * Remove a queued URB from the ASL or PZL.
  145  */
  146 static int whc_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb, int status)
  147 {
  148 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  149 	struct whc *whc = wusbhc_to_whc(wusbhc);
  150 	int ret;
  151 
  152 	switch (usb_pipetype(urb->pipe)) {
  153 	case PIPE_INTERRUPT:
  154 		ret = pzl_urb_dequeue(whc, urb, status);
  155 		break;
  156 	case PIPE_ISOCHRONOUS:
  157 		ret = -ENOTSUPP;
  158 		break;
  159 	case PIPE_CONTROL:
  160 	case PIPE_BULK:
  161 	default:
  162 		ret = asl_urb_dequeue(whc, urb, status);
  163 		break;
  164 	}
  165 
  166 	return ret;
  167 }
  168 
  169 /*
  170  * Wait for all URBs to the endpoint to be completed, then delete the
  171  * qset.
  172  */
  173 static void whc_endpoint_disable(struct usb_hcd *usb_hcd,
  174 				 struct usb_host_endpoint *ep)
  175 {
  176 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  177 	struct whc *whc = wusbhc_to_whc(wusbhc);
  178 	struct whc_qset *qset;
  179 
  180 	qset = ep->hcpriv;
  181 	if (qset) {
  182 		ep->hcpriv = NULL;
  183 		if (usb_endpoint_xfer_bulk(&ep->desc)
  184 		    || usb_endpoint_xfer_control(&ep->desc))
  185 			asl_qset_delete(whc, qset);
  186 		else
  187 			pzl_qset_delete(whc, qset);
  188 	}
  189 }
  190 
  191 static void whc_endpoint_reset(struct usb_hcd *usb_hcd,
  192 			       struct usb_host_endpoint *ep)
  193 {
  194 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  195 	struct whc *whc = wusbhc_to_whc(wusbhc);
  196 	struct whc_qset *qset;
  197 	unsigned long flags;
  198 
  199 	spin_lock_irqsave(&whc->lock, flags);
  200 
  201 	qset = ep->hcpriv;
  202 	if (qset) {
  203 		qset->remove = 1;
  204 		qset->reset = 1;
  205 
  206 		if (usb_endpoint_xfer_bulk(&ep->desc)
  207 		    || usb_endpoint_xfer_control(&ep->desc))
  208 			queue_work(whc->workqueue, &whc->async_work);
  209 		else
  210 			queue_work(whc->workqueue, &whc->periodic_work);
  211 	}
  212 
  213 	spin_unlock_irqrestore(&whc->lock, flags);
  214 }
  215 
  216 
  217 static struct hc_driver whc_hc_driver = {
  218 	.description = "whci-hcd",
  219 	.product_desc = "Wireless host controller",
  220 	.hcd_priv_size = sizeof(struct whc) - sizeof(struct usb_hcd),
  221 	.irq = whc_int_handler,
  222 	.flags = HCD_USB2,
  223 
  224 	.reset = whc_reset,
  225 	.start = whc_start,
  226 	.stop = whc_stop,
  227 	.get_frame_number = whc_get_frame_number,
  228 	.urb_enqueue = whc_urb_enqueue,
  229 	.urb_dequeue = whc_urb_dequeue,
  230 	.endpoint_disable = whc_endpoint_disable,
  231 	.endpoint_reset = whc_endpoint_reset,
  232 
  233 	.hub_status_data = wusbhc_rh_status_data,
  234 	.hub_control = wusbhc_rh_control,
  235 	.start_port_reset = wusbhc_rh_start_port_reset,
  236 };
  237 
  238 static int whc_probe(struct umc_dev *umc)
  239 {
  240 	int ret;
  241 	struct usb_hcd *usb_hcd;
  242 	struct wusbhc *wusbhc;
  243 	struct whc *whc;
  244 	struct device *dev = &umc->dev;
  245 
  246 	usb_hcd = usb_create_hcd(&whc_hc_driver, dev, "whci");
  247 	if (usb_hcd == NULL) {
  248 		dev_err(dev, "unable to create hcd\n");
  249 		return -ENOMEM;
  250 	}
  251 
  252 	usb_hcd->wireless = 1;
  253 	usb_hcd->self.sg_tablesize = 2048; /* somewhat arbitrary */
  254 
  255 	wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  256 	whc = wusbhc_to_whc(wusbhc);
  257 	whc->umc = umc;
  258 
  259 	ret = whc_init(whc);
  260 	if (ret)
  261 		goto error;
  262 
  263 	wusbhc->dev = dev;
  264 	wusbhc->uwb_rc = uwb_rc_get_by_grandpa(umc->dev.parent);
  265 	if (!wusbhc->uwb_rc) {
  266 		ret = -ENODEV;
  267 		dev_err(dev, "cannot get radio controller\n");
  268 		goto error;
  269 	}
  270 
  271 	if (whc->n_devices > USB_MAXCHILDREN) {
  272 		dev_warn(dev, "USB_MAXCHILDREN too low for WUSB adapter (%u ports)\n",
  273 			 whc->n_devices);
  274 		wusbhc->ports_max = USB_MAXCHILDREN;
  275 	} else
  276 		wusbhc->ports_max = whc->n_devices;
  277 	wusbhc->mmcies_max      = whc->n_mmc_ies;
  278 	wusbhc->start           = whc_wusbhc_start;
  279 	wusbhc->stop            = whc_wusbhc_stop;
  280 	wusbhc->mmcie_add       = whc_mmcie_add;
  281 	wusbhc->mmcie_rm        = whc_mmcie_rm;
  282 	wusbhc->dev_info_set    = whc_dev_info_set;
  283 	wusbhc->bwa_set         = whc_bwa_set;
  284 	wusbhc->set_num_dnts    = whc_set_num_dnts;
  285 	wusbhc->set_ptk         = whc_set_ptk;
  286 	wusbhc->set_gtk         = whc_set_gtk;
  287 
  288 	ret = wusbhc_create(wusbhc);
  289 	if (ret)
  290 		goto error_wusbhc_create;
  291 
  292 	ret = usb_add_hcd(usb_hcd, whc->umc->irq, IRQF_SHARED);
  293 	if (ret) {
  294 		dev_err(dev, "cannot add HCD: %d\n", ret);
  295 		goto error_usb_add_hcd;
  296 	}
  297 	device_wakeup_enable(usb_hcd->self.controller);
  298 
  299 	ret = wusbhc_b_create(wusbhc);
  300 	if (ret) {
  301 		dev_err(dev, "WUSBHC phase B setup failed: %d\n", ret);
  302 		goto error_wusbhc_b_create;
  303 	}
  304 
  305 	whc_dbg_init(whc);
  306 
  307 	return 0;
  308 
  309 error_wusbhc_b_create:
  310 	usb_remove_hcd(usb_hcd);
  311 error_usb_add_hcd:
  312 	wusbhc_destroy(wusbhc);
  313 error_wusbhc_create:
  314 	uwb_rc_put(wusbhc->uwb_rc);
  315 error:
  316 	whc_clean_up(whc);
  317 	usb_put_hcd(usb_hcd);
  318 	return ret;
  319 }
  320 
  321 
  322 static void whc_remove(struct umc_dev *umc)
  323 {
  324 	struct usb_hcd *usb_hcd = dev_get_drvdata(&umc->dev);
  325 	struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
  326 	struct whc *whc = wusbhc_to_whc(wusbhc);
  327 
  328 	if (usb_hcd) {
  329 		whc_dbg_clean_up(whc);
  330 		wusbhc_b_destroy(wusbhc);
  331 		usb_remove_hcd(usb_hcd);
  332 		wusbhc_destroy(wusbhc);
  333 		uwb_rc_put(wusbhc->uwb_rc);
  334 		whc_clean_up(whc);
  335 		usb_put_hcd(usb_hcd);
  336 	}
  337 }
  338 
  339 static struct umc_driver whci_hc_driver = {
  340 	.name =		"whci-hcd",
  341 	.cap_id =       UMC_CAP_ID_WHCI_WUSB_HC,
  342 	.probe =	whc_probe,
  343 	.remove =	whc_remove,
  344 };
  345 
  346 static int __init whci_hc_driver_init(void)
  347 {
  348 	return umc_driver_register(&whci_hc_driver);
  349 }
  350 module_init(whci_hc_driver_init);
  351 
  352 static void __exit whci_hc_driver_exit(void)
  353 {
  354 	umc_driver_unregister(&whci_hc_driver);
  355 }
  356 module_exit(whci_hc_driver_exit);
  357 
  358 /* PCI device ID's that we handle (so it gets loaded) */
  359 static struct pci_device_id __used whci_hcd_id_table[] = {
  360 	{ PCI_DEVICE_CLASS(PCI_CLASS_WIRELESS_WHCI, ~0) },
  361 	{ /* empty last entry */ }
  362 };
  363 MODULE_DEVICE_TABLE(pci, whci_hcd_id_table);
  364 
  365 MODULE_DESCRIPTION("WHCI Wireless USB host controller driver");
  366 MODULE_AUTHOR("Cambridge Silicon Radio Ltd.");
  367 MODULE_LICENSE("GPL");
  368 
  369 
  370 
  371 
  372 
  373 /* LDV_COMMENT_BEGIN_MAIN */
  374 #ifdef LDV_MAIN2_sequence_infinite_withcheck_stateful
  375 
  376 /*###########################################################################*/
  377 
  378 /*############## Driver Environment Generator 0.2 output ####################*/
  379 
  380 /*###########################################################################*/
  381 
  382 
  383 
  384 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */
  385 void ldv_check_final_state(void);
  386 
  387 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */
  388 void ldv_check_return_value(int res);
  389 
  390 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */
  391 void ldv_check_return_value_probe(int res);
  392 
  393 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */
  394 void ldv_initialize(void);
  395 
  396 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */
  397 void ldv_handler_precall(void);
  398 
  399 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */
  400 int nondet_int(void);
  401 
  402 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */
  403 int LDV_IN_INTERRUPT;
  404 
  405 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */
  406 void ldv_main2_sequence_infinite_withcheck_stateful(void) {
  407 
  408 
  409 
  410 	/* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */
  411 	/*============================= VARIABLE DECLARATION PART   =============================*/
  412 	/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  413 	/* content: static int whc_reset(struct usb_hcd *usb_hcd)*/
  414 	/* LDV_COMMENT_END_PREP */
  415 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_reset" */
  416 	struct usb_hcd * var_group1;
  417 	/* content: static int whc_start(struct usb_hcd *usb_hcd)*/
  418 	/* LDV_COMMENT_END_PREP */
  419 	/* content: static void whc_stop(struct usb_hcd *usb_hcd)*/
  420 	/* LDV_COMMENT_END_PREP */
  421 	/* content: static int whc_get_frame_number(struct usb_hcd *usb_hcd)*/
  422 	/* LDV_COMMENT_END_PREP */
  423 	/* content: static int whc_urb_enqueue(struct usb_hcd *usb_hcd, struct urb *urb, gfp_t mem_flags)*/
  424 	/* LDV_COMMENT_END_PREP */
  425 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_urb_enqueue" */
  426 	struct urb * var_group2;
  427 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_urb_enqueue" */
  428 	gfp_t  var_whc_urb_enqueue_4_p2;
  429 	/* content: static int whc_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb, int status)*/
  430 	/* LDV_COMMENT_END_PREP */
  431 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_urb_dequeue" */
  432 	int  var_whc_urb_dequeue_5_p2;
  433 	/* content: static void whc_endpoint_disable(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep)*/
  434 	/* LDV_COMMENT_END_PREP */
  435 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_endpoint_disable" */
  436 	struct usb_host_endpoint * var_group3;
  437 	/* content: static void whc_endpoint_reset(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep)*/
  438 	/* LDV_COMMENT_END_PREP */
  439 
  440 	/** STRUCT: struct type: umc_driver, struct name: whci_hc_driver **/
  441 	/* content: static int whc_probe(struct umc_dev *umc)*/
  442 	/* LDV_COMMENT_END_PREP */
  443 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "whc_probe" */
  444 	struct umc_dev * var_group4;
  445 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "whc_probe" */
  446 	static int res_whc_probe_8;
  447 	/* content: static void whc_remove(struct umc_dev *umc)*/
  448 	/* LDV_COMMENT_END_PREP */
  449 
  450 
  451 
  452 
  453 	/* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */
  454 	/* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */
  455 	/*============================= VARIABLE INITIALIZING PART  =============================*/
  456 	LDV_IN_INTERRUPT=1;
  457 
  458 
  459 
  460 
  461 	/* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */
  462 	/* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */
  463 	/*============================= FUNCTION CALL SECTION       =============================*/
  464 	/* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */
  465 	ldv_initialize();
  466 
  467 	/** INIT: init_type: ST_MODULE_INIT **/
  468 	/* content: static int __init whci_hc_driver_init(void)*/
  469 	/* LDV_COMMENT_END_PREP */
  470 	/* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */
  471 	ldv_handler_precall();
  472 	 if(whci_hc_driver_init()) 
  473 		goto ldv_final;
  474 	
  475 
  476 	int ldv_s_whci_hc_driver_umc_driver = 0;
  477 
  478 
  479 	while(  nondet_int()
  480 		|| !(ldv_s_whci_hc_driver_umc_driver == 0)
  481 	) {
  482 
  483 		switch(nondet_int()) {
  484 
  485 			case 0: {
  486 
  487 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  488 				
  489 
  490 				/* content: static int whc_reset(struct usb_hcd *usb_hcd)*/
  491 				/* LDV_COMMENT_END_PREP */
  492 				/* LDV_COMMENT_FUNCTION_CALL Function from field "reset" from driver structure with callbacks "whc_hc_driver" */
  493 				ldv_handler_precall();
  494 				whc_reset( var_group1);
  495 				
  496 
  497 				
  498 
  499 			}
  500 
  501 			break;
  502 			case 1: {
  503 
  504 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  505 				
  506 
  507 				/* content: static int whc_start(struct usb_hcd *usb_hcd)*/
  508 				/* LDV_COMMENT_END_PREP */
  509 				/* LDV_COMMENT_FUNCTION_CALL Function from field "start" from driver structure with callbacks "whc_hc_driver" */
  510 				ldv_handler_precall();
  511 				whc_start( var_group1);
  512 				
  513 
  514 				
  515 
  516 			}
  517 
  518 			break;
  519 			case 2: {
  520 
  521 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  522 				
  523 
  524 				/* content: static void whc_stop(struct usb_hcd *usb_hcd)*/
  525 				/* LDV_COMMENT_END_PREP */
  526 				/* LDV_COMMENT_FUNCTION_CALL Function from field "stop" from driver structure with callbacks "whc_hc_driver" */
  527 				ldv_handler_precall();
  528 				whc_stop( var_group1);
  529 				
  530 
  531 				
  532 
  533 			}
  534 
  535 			break;
  536 			case 3: {
  537 
  538 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  539 				
  540 
  541 				/* content: static int whc_get_frame_number(struct usb_hcd *usb_hcd)*/
  542 				/* LDV_COMMENT_END_PREP */
  543 				/* LDV_COMMENT_FUNCTION_CALL Function from field "get_frame_number" from driver structure with callbacks "whc_hc_driver" */
  544 				ldv_handler_precall();
  545 				whc_get_frame_number( var_group1);
  546 				
  547 
  548 				
  549 
  550 			}
  551 
  552 			break;
  553 			case 4: {
  554 
  555 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  556 				
  557 
  558 				/* content: static int whc_urb_enqueue(struct usb_hcd *usb_hcd, struct urb *urb, gfp_t mem_flags)*/
  559 				/* LDV_COMMENT_END_PREP */
  560 				/* LDV_COMMENT_FUNCTION_CALL Function from field "urb_enqueue" from driver structure with callbacks "whc_hc_driver" */
  561 				ldv_handler_precall();
  562 				whc_urb_enqueue( var_group1, var_group2, var_whc_urb_enqueue_4_p2);
  563 				
  564 
  565 				
  566 
  567 			}
  568 
  569 			break;
  570 			case 5: {
  571 
  572 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  573 				
  574 
  575 				/* content: static int whc_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb, int status)*/
  576 				/* LDV_COMMENT_END_PREP */
  577 				/* LDV_COMMENT_FUNCTION_CALL Function from field "urb_dequeue" from driver structure with callbacks "whc_hc_driver" */
  578 				ldv_handler_precall();
  579 				whc_urb_dequeue( var_group1, var_group2, var_whc_urb_dequeue_5_p2);
  580 				
  581 
  582 				
  583 
  584 			}
  585 
  586 			break;
  587 			case 6: {
  588 
  589 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  590 				
  591 
  592 				/* content: static void whc_endpoint_disable(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep)*/
  593 				/* LDV_COMMENT_END_PREP */
  594 				/* LDV_COMMENT_FUNCTION_CALL Function from field "endpoint_disable" from driver structure with callbacks "whc_hc_driver" */
  595 				ldv_handler_precall();
  596 				whc_endpoint_disable( var_group1, var_group3);
  597 				
  598 
  599 				
  600 
  601 			}
  602 
  603 			break;
  604 			case 7: {
  605 
  606 				/** STRUCT: struct type: hc_driver, struct name: whc_hc_driver **/
  607 				
  608 
  609 				/* content: static void whc_endpoint_reset(struct usb_hcd *usb_hcd, struct usb_host_endpoint *ep)*/
  610 				/* LDV_COMMENT_END_PREP */
  611 				/* LDV_COMMENT_FUNCTION_CALL Function from field "endpoint_reset" from driver structure with callbacks "whc_hc_driver" */
  612 				ldv_handler_precall();
  613 				whc_endpoint_reset( var_group1, var_group3);
  614 				
  615 
  616 				
  617 
  618 			}
  619 
  620 			break;
  621 			case 8: {
  622 
  623 				/** STRUCT: struct type: umc_driver, struct name: whci_hc_driver **/
  624 				if(ldv_s_whci_hc_driver_umc_driver==0) {
  625 
  626 				/* content: static int whc_probe(struct umc_dev *umc)*/
  627 				/* LDV_COMMENT_END_PREP */
  628 				/* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "whci_hc_driver". Standart function test for correct return result. */
  629 				res_whc_probe_8 = whc_probe( var_group4);
  630 				 ldv_check_return_value(res_whc_probe_8);
  631 				 ldv_check_return_value_probe(res_whc_probe_8);
  632 				 if(res_whc_probe_8) 
  633 					goto ldv_module_exit;
  634 				ldv_s_whci_hc_driver_umc_driver++;
  635 
  636 				}
  637 
  638 			}
  639 
  640 			break;
  641 			case 9: {
  642 
  643 				/** STRUCT: struct type: umc_driver, struct name: whci_hc_driver **/
  644 				if(ldv_s_whci_hc_driver_umc_driver==1) {
  645 
  646 				/* content: static void whc_remove(struct umc_dev *umc)*/
  647 				/* LDV_COMMENT_END_PREP */
  648 				/* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "whci_hc_driver" */
  649 				ldv_handler_precall();
  650 				whc_remove( var_group4);
  651 				ldv_s_whci_hc_driver_umc_driver=0;
  652 
  653 				}
  654 
  655 			}
  656 
  657 			break;
  658 			default: break;
  659 
  660 		}
  661 
  662 	}
  663 
  664 	ldv_module_exit: 
  665 
  666 	/** INIT: init_type: ST_MODULE_EXIT **/
  667 	/* content: static void __exit whci_hc_driver_exit(void)*/
  668 	/* LDV_COMMENT_END_PREP */
  669 	/* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */
  670 	ldv_handler_precall();
  671 	whci_hc_driver_exit();
  672 
  673 	/* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */
  674 	ldv_final: ldv_check_final_state();
  675 
  676 	/* LDV_COMMENT_END_FUNCTION_CALL_SECTION */
  677 	return;
  678 
  679 }
  680 #endif
  681 
  682 /* LDV_COMMENT_END_MAIN */                 1 /*
    2  * Wireless Host Controller (WHC) qset management.
    3  *
    4  * Copyright (C) 2007 Cambridge Silicon Radio Ltd.
    5  *
    6  * This program is free software; you can redistribute it and/or
    7  * modify it under the terms of the GNU General Public License version
    8  * 2 as published by the Free Software Foundation.
    9  *
   10  * This program is distributed in the hope that it will be useful,
   11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13  * GNU General Public License for more details.
   14  *
   15  * You should have received a copy of the GNU General Public License
   16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   17  */
   18 #include <linux/kernel.h>
   19 #include <linux/dma-mapping.h>
   20 #include <linux/slab.h>
   21 #include <linux/uwb/umc.h>
   22 #include <linux/usb.h>
   23 
   24 #include "../../wusbcore/wusbhc.h"
   25 
   26 #include "whcd.h"
   27 
   28 struct whc_qset *qset_alloc(struct whc *whc, gfp_t mem_flags)
   29 {
   30 	struct whc_qset *qset;
   31 	dma_addr_t dma;
   32 
   33 	qset = dma_pool_zalloc(whc->qset_pool, mem_flags, &dma);
   34 	if (qset == NULL)
   35 		return NULL;
   36 
   37 	qset->qset_dma = dma;
   38 	qset->whc = whc;
   39 
   40 	INIT_LIST_HEAD(&qset->list_node);
   41 	INIT_LIST_HEAD(&qset->stds);
   42 
   43 	return qset;
   44 }
   45 
   46 /**
   47  * qset_fill_qh - fill the static endpoint state in a qset's QHead
   48  * @qset: the qset whose QH needs initializing with static endpoint
   49  *        state
   50  * @urb:  an urb for a transfer to this endpoint
   51  */
   52 static void qset_fill_qh(struct whc *whc, struct whc_qset *qset, struct urb *urb)
   53 {
   54 	struct usb_device *usb_dev = urb->dev;
   55 	struct wusb_dev *wusb_dev = usb_dev->wusb_dev;
   56 	struct usb_wireless_ep_comp_descriptor *epcd;
   57 	bool is_out;
   58 	uint8_t phy_rate;
   59 
   60 	is_out = usb_pipeout(urb->pipe);
   61 
   62 	qset->max_packet = le16_to_cpu(urb->ep->desc.wMaxPacketSize);
   63 
   64 	epcd = (struct usb_wireless_ep_comp_descriptor *)qset->ep->extra;
   65 	if (epcd) {
   66 		qset->max_seq = epcd->bMaxSequence;
   67 		qset->max_burst = epcd->bMaxBurst;
   68 	} else {
   69 		qset->max_seq = 2;
   70 		qset->max_burst = 1;
   71 	}
   72 
   73 	/*
   74 	 * Initial PHY rate is 53.3 Mbit/s for control endpoints or
   75 	 * the maximum supported by the device for other endpoints
   76 	 * (unless limited by the user).
   77 	 */
   78 	if (usb_pipecontrol(urb->pipe))
   79 		phy_rate = UWB_PHY_RATE_53;
   80 	else {
   81 		uint16_t phy_rates;
   82 
   83 		phy_rates = le16_to_cpu(wusb_dev->wusb_cap_descr->wPHYRates);
   84 		phy_rate = fls(phy_rates) - 1;
   85 		if (phy_rate > whc->wusbhc.phy_rate)
   86 			phy_rate = whc->wusbhc.phy_rate;
   87 	}
   88 
   89 	qset->qh.info1 = cpu_to_le32(
   90 		QH_INFO1_EP(usb_pipeendpoint(urb->pipe))
   91 		| (is_out ? QH_INFO1_DIR_OUT : QH_INFO1_DIR_IN)
   92 		| usb_pipe_to_qh_type(urb->pipe)
   93 		| QH_INFO1_DEV_INFO_IDX(wusb_port_no_to_idx(usb_dev->portnum))
   94 		| QH_INFO1_MAX_PKT_LEN(qset->max_packet)
   95 		);
   96 	qset->qh.info2 = cpu_to_le32(
   97 		QH_INFO2_BURST(qset->max_burst)
   98 		| QH_INFO2_DBP(0)
   99 		| QH_INFO2_MAX_COUNT(3)
  100 		| QH_INFO2_MAX_RETRY(3)
  101 		| QH_INFO2_MAX_SEQ(qset->max_seq - 1)
  102 		);
  103 	/* FIXME: where can we obtain these Tx parameters from?  Why
  104 	 * doesn't the chip know what Tx power to use? It knows the Rx
  105 	 * strength and can presumably guess the Tx power required
  106 	 * from that? */
  107 	qset->qh.info3 = cpu_to_le32(
  108 		QH_INFO3_TX_RATE(phy_rate)
  109 		| QH_INFO3_TX_PWR(0) /* 0 == max power */
  110 		);
  111 
  112 	qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
  113 }
  114 
  115 /**
  116  * qset_clear - clear fields in a qset so it may be reinserted into a
  117  * schedule.
  118  *
  119  * The sequence number and current window are not cleared (see
  120  * qset_reset()).
  121  */
  122 void qset_clear(struct whc *whc, struct whc_qset *qset)
  123 {
  124 	qset->td_start = qset->td_end = qset->ntds = 0;
  125 
  126 	qset->qh.link = cpu_to_le64(QH_LINK_NTDS(8) | QH_LINK_T);
  127 	qset->qh.status = qset->qh.status & QH_STATUS_SEQ_MASK;
  128 	qset->qh.err_count = 0;
  129 	qset->qh.scratch[0] = 0;
  130 	qset->qh.scratch[1] = 0;
  131 	qset->qh.scratch[2] = 0;
  132 
  133 	memset(&qset->qh.overlay, 0, sizeof(qset->qh.overlay));
  134 
  135 	init_completion(&qset->remove_complete);
  136 }
  137 
  138 /**
  139  * qset_reset - reset endpoint state in a qset.
  140  *
  141  * Clears the sequence number and current window.  This qset must not
  142  * be in the ASL or PZL.
  143  */
  144 void qset_reset(struct whc *whc, struct whc_qset *qset)
  145 {
  146 	qset->reset = 0;
  147 
  148 	qset->qh.status &= ~QH_STATUS_SEQ_MASK;
  149 	qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
  150 }
  151 
  152 /**
  153  * get_qset - get the qset for an async endpoint
  154  *
  155  * A new qset is created if one does not already exist.
  156  */
  157 struct whc_qset *get_qset(struct whc *whc, struct urb *urb,
  158 				 gfp_t mem_flags)
  159 {
  160 	struct whc_qset *qset;
  161 
  162 	qset = urb->ep->hcpriv;
  163 	if (qset == NULL) {
  164 		qset = qset_alloc(whc, mem_flags);
  165 		if (qset == NULL)
  166 			return NULL;
  167 
  168 		qset->ep = urb->ep;
  169 		urb->ep->hcpriv = qset;
  170 		qset_fill_qh(whc, qset, urb);
  171 	}
  172 	return qset;
  173 }
  174 
  175 void qset_remove_complete(struct whc *whc, struct whc_qset *qset)
  176 {
  177 	qset->remove = 0;
  178 	list_del_init(&qset->list_node);
  179 	complete(&qset->remove_complete);
  180 }
  181 
  182 /**
  183  * qset_add_qtds - add qTDs for an URB to a qset
  184  *
  185  * Returns true if the list (ASL/PZL) must be updated because (for a
  186  * WHCI 0.95 controller) an activated qTD was pointed to be iCur.
  187  */
  188 enum whc_update qset_add_qtds(struct whc *whc, struct whc_qset *qset)
  189 {
  190 	struct whc_std *std;
  191 	enum whc_update update = 0;
  192 
  193 	list_for_each_entry(std, &qset->stds, list_node) {
  194 		struct whc_qtd *qtd;
  195 		uint32_t status;
  196 
  197 		if (qset->ntds >= WHCI_QSET_TD_MAX
  198 		    || (qset->pause_after_urb && std->urb != qset->pause_after_urb))
  199 			break;
  200 
  201 		if (std->qtd)
  202 			continue; /* already has a qTD */
  203 
  204 		qtd = std->qtd = &qset->qtd[qset->td_end];
  205 
  206 		/* Fill in setup bytes for control transfers. */
  207 		if (usb_pipecontrol(std->urb->pipe))
  208 			memcpy(qtd->setup, std->urb->setup_packet, 8);
  209 
  210 		status = QTD_STS_ACTIVE | QTD_STS_LEN(std->len);
  211 
  212 		if (whc_std_last(std) && usb_pipeout(std->urb->pipe))
  213 			status |= QTD_STS_LAST_PKT;
  214 
  215 		/*
  216 		 * For an IN transfer the iAlt field should be set so
  217 		 * the h/w will automatically advance to the next
  218 		 * transfer. However, if there are 8 or more TDs
  219 		 * remaining in this transfer then iAlt cannot be set
  220 		 * as it could point to somewhere in this transfer.
  221 		 */
  222 		if (std->ntds_remaining < WHCI_QSET_TD_MAX) {
  223 			int ialt;
  224 			ialt = (qset->td_end + std->ntds_remaining) % WHCI_QSET_TD_MAX;
  225 			status |= QTD_STS_IALT(ialt);
  226 		} else if (usb_pipein(std->urb->pipe))
  227 			qset->pause_after_urb = std->urb;
  228 
  229 		if (std->num_pointers)
  230 			qtd->options = cpu_to_le32(QTD_OPT_IOC);
  231 		else
  232 			qtd->options = cpu_to_le32(QTD_OPT_IOC | QTD_OPT_SMALL);
  233 		qtd->page_list_ptr = cpu_to_le64(std->dma_addr);
  234 
  235 		qtd->status = cpu_to_le32(status);
  236 
  237 		if (QH_STATUS_TO_ICUR(qset->qh.status) == qset->td_end)
  238 			update = WHC_UPDATE_UPDATED;
  239 
  240 		if (++qset->td_end >= WHCI_QSET_TD_MAX)
  241 			qset->td_end = 0;
  242 		qset->ntds++;
  243 	}
  244 
  245 	return update;
  246 }
  247 
  248 /**
  249  * qset_remove_qtd - remove the first qTD from a qset.
  250  *
  251  * The qTD might be still active (if it's part of a IN URB that
  252  * resulted in a short read) so ensure it's deactivated.
  253  */
  254 static void qset_remove_qtd(struct whc *whc, struct whc_qset *qset)
  255 {
  256 	qset->qtd[qset->td_start].status = 0;
  257 
  258 	if (++qset->td_start >= WHCI_QSET_TD_MAX)
  259 		qset->td_start = 0;
  260 	qset->ntds--;
  261 }
  262 
  263 static void qset_copy_bounce_to_sg(struct whc *whc, struct whc_std *std)
  264 {
  265 	struct scatterlist *sg;
  266 	void *bounce;
  267 	size_t remaining, offset;
  268 
  269 	bounce = std->bounce_buf;
  270 	remaining = std->len;
  271 
  272 	sg = std->bounce_sg;
  273 	offset = std->bounce_offset;
  274 
  275 	while (remaining) {
  276 		size_t len;
  277 
  278 		len = min(sg->length - offset, remaining);
  279 		memcpy(sg_virt(sg) + offset, bounce, len);
  280 
  281 		bounce += len;
  282 		remaining -= len;
  283 
  284 		offset += len;
  285 		if (offset >= sg->length) {
  286 			sg = sg_next(sg);
  287 			offset = 0;
  288 		}
  289 	}
  290 
  291 }
  292 
  293 /**
  294  * qset_free_std - remove an sTD and free it.
  295  * @whc: the WHCI host controller
  296  * @std: the sTD to remove and free.
  297  */
  298 void qset_free_std(struct whc *whc, struct whc_std *std)
  299 {
  300 	list_del(&std->list_node);
  301 	if (std->bounce_buf) {
  302 		bool is_out = usb_pipeout(std->urb->pipe);
  303 		dma_addr_t dma_addr;
  304 
  305 		if (std->num_pointers)
  306 			dma_addr = le64_to_cpu(std->pl_virt[0].buf_ptr);
  307 		else
  308 			dma_addr = std->dma_addr;
  309 
  310 		dma_unmap_single(whc->wusbhc.dev, dma_addr,
  311 				 std->len, is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
  312 		if (!is_out)
  313 			qset_copy_bounce_to_sg(whc, std);
  314 		kfree(std->bounce_buf);
  315 	}
  316 	if (std->pl_virt) {
  317 		if (std->dma_addr)
  318 			dma_unmap_single(whc->wusbhc.dev, std->dma_addr,
  319 					 std->num_pointers * sizeof(struct whc_page_list_entry),
  320 					 DMA_TO_DEVICE);
  321 		kfree(std->pl_virt);
  322 		std->pl_virt = NULL;
  323 	}
  324 	kfree(std);
  325 }
  326 
  327 /**
  328  * qset_remove_qtds - remove an URB's qTDs (and sTDs).
  329  */
  330 static void qset_remove_qtds(struct whc *whc, struct whc_qset *qset,
  331 			     struct urb *urb)
  332 {
  333 	struct whc_std *std, *t;
  334 
  335 	list_for_each_entry_safe(std, t, &qset->stds, list_node) {
  336 		if (std->urb != urb)
  337 			break;
  338 		if (std->qtd != NULL)
  339 			qset_remove_qtd(whc, qset);
  340 		qset_free_std(whc, std);
  341 	}
  342 }
  343 
  344 /**
  345  * qset_free_stds - free any remaining sTDs for an URB.
  346  */
  347 static void qset_free_stds(struct whc_qset *qset, struct urb *urb)
  348 {
  349 	struct whc_std *std, *t;
  350 
  351 	list_for_each_entry_safe(std, t, &qset->stds, list_node) {
  352 		if (std->urb == urb)
  353 			qset_free_std(qset->whc, std);
  354 	}
  355 }
  356 
  357 static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_flags)
  358 {
  359 	dma_addr_t dma_addr = std->dma_addr;
  360 	dma_addr_t sp, ep;
  361 	size_t pl_len;
  362 	int p;
  363 
  364 	/* Short buffers don't need a page list. */
  365 	if (std->len <= WHCI_PAGE_SIZE) {
  366 		std->num_pointers = 0;
  367 		return 0;
  368 	}
  369 
  370 	sp = dma_addr & ~(WHCI_PAGE_SIZE-1);
  371 	ep = dma_addr + std->len;
  372 	std->num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE);
  373 
  374 	pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  375 	std->pl_virt = kmalloc(pl_len, mem_flags);
  376 	if (std->pl_virt == NULL)
  377 		return -ENOMEM;
  378 	std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE);
  379 	if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) {
  380 		kfree(std->pl_virt);
  381 		return -EFAULT;
  382 	}
  383 
  384 	for (p = 0; p < std->num_pointers; p++) {
  385 		std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
  386 		dma_addr = (dma_addr + WHCI_PAGE_SIZE) & ~(WHCI_PAGE_SIZE-1);
  387 	}
  388 
  389 	return 0;
  390 }
  391 
  392 /**
  393  * urb_dequeue_work - executes asl/pzl update and gives back the urb to the system.
  394  */
  395 static void urb_dequeue_work(struct work_struct *work)
  396 {
  397 	struct whc_urb *wurb = container_of(work, struct whc_urb, dequeue_work);
  398 	struct whc_qset *qset = wurb->qset;
  399 	struct whc *whc = qset->whc;
  400 	unsigned long flags;
  401 
  402 	if (wurb->is_async)
  403 		asl_update(whc, WUSBCMD_ASYNC_UPDATED
  404 			   | WUSBCMD_ASYNC_SYNCED_DB
  405 			   | WUSBCMD_ASYNC_QSET_RM);
  406 	else
  407 		pzl_update(whc, WUSBCMD_PERIODIC_UPDATED
  408 			   | WUSBCMD_PERIODIC_SYNCED_DB
  409 			   | WUSBCMD_PERIODIC_QSET_RM);
  410 
  411 	spin_lock_irqsave(&whc->lock, flags);
  412 	qset_remove_urb(whc, qset, wurb->urb, wurb->status);
  413 	spin_unlock_irqrestore(&whc->lock, flags);
  414 }
  415 
  416 static struct whc_std *qset_new_std(struct whc *whc, struct whc_qset *qset,
  417 				    struct urb *urb, gfp_t mem_flags)
  418 {
  419 	struct whc_std *std;
  420 
  421 	std = kzalloc(sizeof(struct whc_std), mem_flags);
  422 	if (std == NULL)
  423 		return NULL;
  424 
  425 	std->urb = urb;
  426 	std->qtd = NULL;
  427 
  428 	INIT_LIST_HEAD(&std->list_node);
  429 	list_add_tail(&std->list_node, &qset->stds);
  430 
  431 	return std;
  432 }
  433 
  434 static int qset_add_urb_sg(struct whc *whc, struct whc_qset *qset, struct urb *urb,
  435 			   gfp_t mem_flags)
  436 {
  437 	size_t remaining;
  438 	struct scatterlist *sg;
  439 	int i;
  440 	int ntds = 0;
  441 	struct whc_std *std = NULL;
  442 	struct whc_page_list_entry *new_pl_virt;
  443 	dma_addr_t prev_end = 0;
  444 	size_t pl_len;
  445 	int p = 0;
  446 
  447 	remaining = urb->transfer_buffer_length;
  448 
  449 	for_each_sg(urb->sg, sg, urb->num_mapped_sgs, i) {
  450 		dma_addr_t dma_addr;
  451 		size_t dma_remaining;
  452 		dma_addr_t sp, ep;
  453 		int num_pointers;
  454 
  455 		if (remaining == 0) {
  456 			break;
  457 		}
  458 
  459 		dma_addr = sg_dma_address(sg);
  460 		dma_remaining = min_t(size_t, sg_dma_len(sg), remaining);
  461 
  462 		while (dma_remaining) {
  463 			size_t dma_len;
  464 
  465 			/*
  466 			 * We can use the previous std (if it exists) provided that:
  467 			 * - the previous one ended on a page boundary.
  468 			 * - the current one begins on a page boundary.
  469 			 * - the previous one isn't full.
  470 			 *
  471 			 * If a new std is needed but the previous one
  472 			 * was not a whole number of packets then this
  473 			 * sg list cannot be mapped onto multiple
  474 			 * qTDs.  Return an error and let the caller
  475 			 * sort it out.
  476 			 */
  477 			if (!std
  478 			    || (prev_end & (WHCI_PAGE_SIZE-1))
  479 			    || (dma_addr & (WHCI_PAGE_SIZE-1))
  480 			    || std->len + WHCI_PAGE_SIZE > QTD_MAX_XFER_SIZE) {
  481 				if (std && std->len % qset->max_packet != 0)
  482 					return -EINVAL;
  483 				std = qset_new_std(whc, qset, urb, mem_flags);
  484 				if (std == NULL) {
  485 					return -ENOMEM;
  486 				}
  487 				ntds++;
  488 				p = 0;
  489 			}
  490 
  491 			dma_len = dma_remaining;
  492 
  493 			/*
  494 			 * If the remainder of this element doesn't
  495 			 * fit in a single qTD, limit the qTD to a
  496 			 * whole number of packets.  This allows the
  497 			 * remainder to go into the next qTD.
  498 			 */
  499 			if (std->len + dma_len > QTD_MAX_XFER_SIZE) {
  500 				dma_len = (QTD_MAX_XFER_SIZE / qset->max_packet)
  501 					* qset->max_packet - std->len;
  502 			}
  503 
  504 			std->len += dma_len;
  505 			std->ntds_remaining = -1; /* filled in later */
  506 
  507 			sp = dma_addr & ~(WHCI_PAGE_SIZE-1);
  508 			ep = dma_addr + dma_len;
  509 			num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE);
  510 			std->num_pointers += num_pointers;
  511 
  512 			pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  513 
  514 			new_pl_virt = krealloc(std->pl_virt, pl_len, mem_flags);
  515 			if (new_pl_virt == NULL) {
  516 				kfree(std->pl_virt);
  517 				std->pl_virt = NULL;
  518 				return -ENOMEM;
  519 			}
  520 			std->pl_virt = new_pl_virt;
  521 
  522 			for (;p < std->num_pointers; p++) {
  523 				std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
  524 				dma_addr = (dma_addr + WHCI_PAGE_SIZE) & ~(WHCI_PAGE_SIZE-1);
  525 			}
  526 
  527 			prev_end = dma_addr = ep;
  528 			dma_remaining -= dma_len;
  529 			remaining -= dma_len;
  530 		}
  531 	}
  532 
  533 	/* Now the number of stds is know, go back and fill in
  534 	   std->ntds_remaining. */
  535 	list_for_each_entry(std, &qset->stds, list_node) {
  536 		if (std->ntds_remaining == -1) {
  537 			pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  538 			std->ntds_remaining = ntds--;
  539 			std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt,
  540 						       pl_len, DMA_TO_DEVICE);
  541 		}
  542 	}
  543 	return 0;
  544 }
  545 
  546 /**
  547  * qset_add_urb_sg_linearize - add an urb with sg list, copying the data
  548  *
  549  * If the URB contains an sg list whose elements cannot be directly
  550  * mapped to qTDs then the data must be transferred via bounce
  551  * buffers.
  552  */
  553 static int qset_add_urb_sg_linearize(struct whc *whc, struct whc_qset *qset,
  554 				     struct urb *urb, gfp_t mem_flags)
  555 {
  556 	bool is_out = usb_pipeout(urb->pipe);
  557 	size_t max_std_len;
  558 	size_t remaining;
  559 	int ntds = 0;
  560 	struct whc_std *std = NULL;
  561 	void *bounce = NULL;
  562 	struct scatterlist *sg;
  563 	int i;
  564 
  565 	/* limit maximum bounce buffer to 16 * 3.5 KiB ~= 28 k */
  566 	max_std_len = qset->max_burst * qset->max_packet;
  567 
  568 	remaining = urb->transfer_buffer_length;
  569 
  570 	for_each_sg(urb->sg, sg, urb->num_mapped_sgs, i) {
  571 		size_t len;
  572 		size_t sg_remaining;
  573 		void *orig;
  574 
  575 		if (remaining == 0) {
  576 			break;
  577 		}
  578 
  579 		sg_remaining = min_t(size_t, remaining, sg->length);
  580 		orig = sg_virt(sg);
  581 
  582 		while (sg_remaining) {
  583 			if (!std || std->len == max_std_len) {
  584 				std = qset_new_std(whc, qset, urb, mem_flags);
  585 				if (std == NULL)
  586 					return -ENOMEM;
  587 				std->bounce_buf = kmalloc(max_std_len, mem_flags);
  588 				if (std->bounce_buf == NULL)
  589 					return -ENOMEM;
  590 				std->bounce_sg = sg;
  591 				std->bounce_offset = orig - sg_virt(sg);
  592 				bounce = std->bounce_buf;
  593 				ntds++;
  594 			}
  595 
  596 			len = min(sg_remaining, max_std_len - std->len);
  597 
  598 			if (is_out)
  599 				memcpy(bounce, orig, len);
  600 
  601 			std->len += len;
  602 			std->ntds_remaining = -1; /* filled in later */
  603 
  604 			bounce += len;
  605 			orig += len;
  606 			sg_remaining -= len;
  607 			remaining -= len;
  608 		}
  609 	}
  610 
  611 	/*
  612 	 * For each of the new sTDs, map the bounce buffers, create
  613 	 * page lists (if necessary), and fill in std->ntds_remaining.
  614 	 */
  615 	list_for_each_entry(std, &qset->stds, list_node) {
  616 		if (std->ntds_remaining != -1)
  617 			continue;
  618 
  619 		std->dma_addr = dma_map_single(&whc->umc->dev, std->bounce_buf, std->len,
  620 					       is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
  621 
  622 		if (qset_fill_page_list(whc, std, mem_flags) < 0)
  623 			return -ENOMEM;
  624 
  625 		std->ntds_remaining = ntds--;
  626 	}
  627 
  628 	return 0;
  629 }
  630 
  631 /**
  632  * qset_add_urb - add an urb to the qset's queue.
  633  *
  634  * The URB is chopped into sTDs, one for each qTD that will required.
  635  * At least one qTD (and sTD) is required even if the transfer has no
  636  * data (e.g., for some control transfers).
  637  */
  638 int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb,
  639 	gfp_t mem_flags)
  640 {
  641 	struct whc_urb *wurb;
  642 	int remaining = urb->transfer_buffer_length;
  643 	u64 transfer_dma = urb->transfer_dma;
  644 	int ntds_remaining;
  645 	int ret;
  646 
  647 	wurb = kzalloc(sizeof(struct whc_urb), mem_flags);
  648 	if (wurb == NULL)
  649 		goto err_no_mem;
  650 	urb->hcpriv = wurb;
  651 	wurb->qset = qset;
  652 	wurb->urb = urb;
  653 	INIT_WORK(&wurb->dequeue_work, urb_dequeue_work);
  654 
  655 	if (urb->num_sgs) {
  656 		ret = qset_add_urb_sg(whc, qset, urb, mem_flags);
  657 		if (ret == -EINVAL) {
  658 			qset_free_stds(qset, urb);
  659 			ret = qset_add_urb_sg_linearize(whc, qset, urb, mem_flags);
  660 		}
  661 		if (ret < 0)
  662 			goto err_no_mem;
  663 		return 0;
  664 	}
  665 
  666 	ntds_remaining = DIV_ROUND_UP(remaining, QTD_MAX_XFER_SIZE);
  667 	if (ntds_remaining == 0)
  668 		ntds_remaining = 1;
  669 
  670 	while (ntds_remaining) {
  671 		struct whc_std *std;
  672 		size_t std_len;
  673 
  674 		std_len = remaining;
  675 		if (std_len > QTD_MAX_XFER_SIZE)
  676 			std_len = QTD_MAX_XFER_SIZE;
  677 
  678 		std = qset_new_std(whc, qset, urb, mem_flags);
  679 		if (std == NULL)
  680 			goto err_no_mem;
  681 
  682 		std->dma_addr = transfer_dma;
  683 		std->len = std_len;
  684 		std->ntds_remaining = ntds_remaining;
  685 
  686 		if (qset_fill_page_list(whc, std, mem_flags) < 0)
  687 			goto err_no_mem;
  688 
  689 		ntds_remaining--;
  690 		remaining -= std_len;
  691 		transfer_dma += std_len;
  692 	}
  693 
  694 	return 0;
  695 
  696 err_no_mem:
  697 	qset_free_stds(qset, urb);
  698 	return -ENOMEM;
  699 }
  700 
  701 /**
  702  * qset_remove_urb - remove an URB from the urb queue.
  703  *
  704  * The URB is returned to the USB subsystem.
  705  */
  706 void qset_remove_urb(struct whc *whc, struct whc_qset *qset,
  707 			    struct urb *urb, int status)
  708 {
  709 	struct wusbhc *wusbhc = &whc->wusbhc;
  710 	struct whc_urb *wurb = urb->hcpriv;
  711 
  712 	usb_hcd_unlink_urb_from_ep(&wusbhc->usb_hcd, urb);
  713 	/* Drop the lock as urb->complete() may enqueue another urb. */
  714 	spin_unlock(&whc->lock);
  715 	wusbhc_giveback_urb(wusbhc, urb, status);
  716 	spin_lock(&whc->lock);
  717 
  718 	kfree(wurb);
  719 }
  720 
  721 /**
  722  * get_urb_status_from_qtd - get the completed urb status from qTD status
  723  * @urb:    completed urb
  724  * @status: qTD status
  725  */
  726 static int get_urb_status_from_qtd(struct urb *urb, u32 status)
  727 {
  728 	if (status & QTD_STS_HALTED) {
  729 		if (status & QTD_STS_DBE)
  730 			return usb_pipein(urb->pipe) ? -ENOSR : -ECOMM;
  731 		else if (status & QTD_STS_BABBLE)
  732 			return -EOVERFLOW;
  733 		else if (status & QTD_STS_RCE)
  734 			return -ETIME;
  735 		return -EPIPE;
  736 	}
  737 	if (usb_pipein(urb->pipe)
  738 	    && (urb->transfer_flags & URB_SHORT_NOT_OK)
  739 	    && urb->actual_length < urb->transfer_buffer_length)
  740 		return -EREMOTEIO;
  741 	return 0;
  742 }
  743 
  744 /**
  745  * process_inactive_qtd - process an inactive (but not halted) qTD.
  746  *
  747  * Update the urb with the transfer bytes from the qTD, if the urb is
  748  * completely transferred or (in the case of an IN only) the LPF is
  749  * set, then the transfer is complete and the urb should be returned
  750  * to the system.
  751  */
  752 void process_inactive_qtd(struct whc *whc, struct whc_qset *qset,
  753 				 struct whc_qtd *qtd)
  754 {
  755 	struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
  756 	struct urb *urb = std->urb;
  757 	uint32_t status;
  758 	bool complete;
  759 
  760 	status = le32_to_cpu(qtd->status);
  761 
  762 	urb->actual_length += std->len - QTD_STS_TO_LEN(status);
  763 
  764 	if (usb_pipein(urb->pipe) && (status & QTD_STS_LAST_PKT))
  765 		complete = true;
  766 	else
  767 		complete = whc_std_last(std);
  768 
  769 	qset_remove_qtd(whc, qset);
  770 	qset_free_std(whc, std);
  771 
  772 	/*
  773 	 * Transfers for this URB are complete?  Then return it to the
  774 	 * USB subsystem.
  775 	 */
  776 	if (complete) {
  777 		qset_remove_qtds(whc, qset, urb);
  778 		qset_remove_urb(whc, qset, urb, get_urb_status_from_qtd(urb, status));
  779 
  780 		/*
  781 		 * If iAlt isn't valid then the hardware didn't
  782 		 * advance iCur. Adjust the start and end pointers to
  783 		 * match iCur.
  784 		 */
  785 		if (!(status & QTD_STS_IALT_VALID))
  786 			qset->td_start = qset->td_end
  787 				= QH_STATUS_TO_ICUR(le16_to_cpu(qset->qh.status));
  788 		qset->pause_after_urb = NULL;
  789 	}
  790 }
  791 
  792 /**
  793  * process_halted_qtd - process a qset with a halted qtd
  794  *
  795  * Remove all the qTDs for the failed URB and return the failed URB to
  796  * the USB subsystem.  Then remove all other qTDs so the qset can be
  797  * removed.
  798  *
  799  * FIXME: this is the point where rate adaptation can be done.  If a
  800  * transfer failed because it exceeded the maximum number of retries
  801  * then it could be reactivated with a slower rate without having to
  802  * remove the qset.
  803  */
  804 void process_halted_qtd(struct whc *whc, struct whc_qset *qset,
  805 			       struct whc_qtd *qtd)
  806 {
  807 	struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
  808 	struct urb *urb = std->urb;
  809 	int urb_status;
  810 
  811 	urb_status = get_urb_status_from_qtd(urb, le32_to_cpu(qtd->status));
  812 
  813 	qset_remove_qtds(whc, qset, urb);
  814 	qset_remove_urb(whc, qset, urb, urb_status);
  815 
  816 	list_for_each_entry(std, &qset->stds, list_node) {
  817 		if (qset->ntds == 0)
  818 			break;
  819 		qset_remove_qtd(whc, qset);
  820 		std->qtd = NULL;
  821 	}
  822 
  823 	qset->remove = 1;
  824 }
  825 
  826 void qset_free(struct whc *whc, struct whc_qset *qset)
  827 {
  828 	dma_pool_free(whc->qset_pool, qset, qset->qset_dma);
  829 }
  830 
  831 /**
  832  * qset_delete - wait for a qset to be unused, then free it.
  833  */
  834 void qset_delete(struct whc *whc, struct whc_qset *qset)
  835 {
  836 	wait_for_completion(&qset->remove_complete);
  837 	qset_free(whc, qset);
  838 }                 1 
    2  #include <linux/types.h>
    3  #include <linux/dma-direction.h>
    4 
    5  extern dma_addr_t ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir);
    6  extern dma_addr_t ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir);
    7  extern dma_addr_t ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);
    8  extern int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);
    9 #line 1 "/home/cluser/ldv/ref_launch/work/current--X--drivers--X--defaultlinux-4.5-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.5-rc1.tar.xz/csd_deg_dscv/2256/dscv_tempdir/dscv/ri/331_1a/drivers/usb/host/whci/qset.c"
   10 /*
   11  * Wireless Host Controller (WHC) qset management.
   12  *
   13  * Copyright (C) 2007 Cambridge Silicon Radio Ltd.
   14  *
   15  * This program is free software; you can redistribute it and/or
   16  * modify it under the terms of the GNU General Public License version
   17  * 2 as published by the Free Software Foundation.
   18  *
   19  * This program is distributed in the hope that it will be useful,
   20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   22  * GNU General Public License for more details.
   23  *
   24  * You should have received a copy of the GNU General Public License
   25  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   26  */
   27 #include <linux/kernel.h>
   28 #include <linux/dma-mapping.h>
   29 #include <linux/slab.h>
   30 #include <linux/uwb/umc.h>
   31 #include <linux/usb.h>
   32 
   33 #include "../../wusbcore/wusbhc.h"
   34 
   35 #include "whcd.h"
   36 
   37 struct whc_qset *qset_alloc(struct whc *whc, gfp_t mem_flags)
   38 {
   39 	struct whc_qset *qset;
   40 	dma_addr_t dma;
   41 
   42 	qset = dma_pool_zalloc(whc->qset_pool, mem_flags, &dma);
   43 	if (qset == NULL)
   44 		return NULL;
   45 
   46 	qset->qset_dma = dma;
   47 	qset->whc = whc;
   48 
   49 	INIT_LIST_HEAD(&qset->list_node);
   50 	INIT_LIST_HEAD(&qset->stds);
   51 
   52 	return qset;
   53 }
   54 
   55 /**
   56  * qset_fill_qh - fill the static endpoint state in a qset's QHead
   57  * @qset: the qset whose QH needs initializing with static endpoint
   58  *        state
   59  * @urb:  an urb for a transfer to this endpoint
   60  */
   61 static void qset_fill_qh(struct whc *whc, struct whc_qset *qset, struct urb *urb)
   62 {
   63 	struct usb_device *usb_dev = urb->dev;
   64 	struct wusb_dev *wusb_dev = usb_dev->wusb_dev;
   65 	struct usb_wireless_ep_comp_descriptor *epcd;
   66 	bool is_out;
   67 	uint8_t phy_rate;
   68 
   69 	is_out = usb_pipeout(urb->pipe);
   70 
   71 	qset->max_packet = le16_to_cpu(urb->ep->desc.wMaxPacketSize);
   72 
   73 	epcd = (struct usb_wireless_ep_comp_descriptor *)qset->ep->extra;
   74 	if (epcd) {
   75 		qset->max_seq = epcd->bMaxSequence;
   76 		qset->max_burst = epcd->bMaxBurst;
   77 	} else {
   78 		qset->max_seq = 2;
   79 		qset->max_burst = 1;
   80 	}
   81 
   82 	/*
   83 	 * Initial PHY rate is 53.3 Mbit/s for control endpoints or
   84 	 * the maximum supported by the device for other endpoints
   85 	 * (unless limited by the user).
   86 	 */
   87 	if (usb_pipecontrol(urb->pipe))
   88 		phy_rate = UWB_PHY_RATE_53;
   89 	else {
   90 		uint16_t phy_rates;
   91 
   92 		phy_rates = le16_to_cpu(wusb_dev->wusb_cap_descr->wPHYRates);
   93 		phy_rate = fls(phy_rates) - 1;
   94 		if (phy_rate > whc->wusbhc.phy_rate)
   95 			phy_rate = whc->wusbhc.phy_rate;
   96 	}
   97 
   98 	qset->qh.info1 = cpu_to_le32(
   99 		QH_INFO1_EP(usb_pipeendpoint(urb->pipe))
  100 		| (is_out ? QH_INFO1_DIR_OUT : QH_INFO1_DIR_IN)
  101 		| usb_pipe_to_qh_type(urb->pipe)
  102 		| QH_INFO1_DEV_INFO_IDX(wusb_port_no_to_idx(usb_dev->portnum))
  103 		| QH_INFO1_MAX_PKT_LEN(qset->max_packet)
  104 		);
  105 	qset->qh.info2 = cpu_to_le32(
  106 		QH_INFO2_BURST(qset->max_burst)
  107 		| QH_INFO2_DBP(0)
  108 		| QH_INFO2_MAX_COUNT(3)
  109 		| QH_INFO2_MAX_RETRY(3)
  110 		| QH_INFO2_MAX_SEQ(qset->max_seq - 1)
  111 		);
  112 	/* FIXME: where can we obtain these Tx parameters from?  Why
  113 	 * doesn't the chip know what Tx power to use? It knows the Rx
  114 	 * strength and can presumably guess the Tx power required
  115 	 * from that? */
  116 	qset->qh.info3 = cpu_to_le32(
  117 		QH_INFO3_TX_RATE(phy_rate)
  118 		| QH_INFO3_TX_PWR(0) /* 0 == max power */
  119 		);
  120 
  121 	qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
  122 }
  123 
  124 /**
  125  * qset_clear - clear fields in a qset so it may be reinserted into a
  126  * schedule.
  127  *
  128  * The sequence number and current window are not cleared (see
  129  * qset_reset()).
  130  */
  131 void qset_clear(struct whc *whc, struct whc_qset *qset)
  132 {
  133 	qset->td_start = qset->td_end = qset->ntds = 0;
  134 
  135 	qset->qh.link = cpu_to_le64(QH_LINK_NTDS(8) | QH_LINK_T);
  136 	qset->qh.status = qset->qh.status & QH_STATUS_SEQ_MASK;
  137 	qset->qh.err_count = 0;
  138 	qset->qh.scratch[0] = 0;
  139 	qset->qh.scratch[1] = 0;
  140 	qset->qh.scratch[2] = 0;
  141 
  142 	memset(&qset->qh.overlay, 0, sizeof(qset->qh.overlay));
  143 
  144 	init_completion(&qset->remove_complete);
  145 }
  146 
  147 /**
  148  * qset_reset - reset endpoint state in a qset.
  149  *
  150  * Clears the sequence number and current window.  This qset must not
  151  * be in the ASL or PZL.
  152  */
  153 void qset_reset(struct whc *whc, struct whc_qset *qset)
  154 {
  155 	qset->reset = 0;
  156 
  157 	qset->qh.status &= ~QH_STATUS_SEQ_MASK;
  158 	qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
  159 }
  160 
  161 /**
  162  * get_qset - get the qset for an async endpoint
  163  *
  164  * A new qset is created if one does not already exist.
  165  */
  166 struct whc_qset *get_qset(struct whc *whc, struct urb *urb,
  167 				 gfp_t mem_flags)
  168 {
  169 	struct whc_qset *qset;
  170 
  171 	qset = urb->ep->hcpriv;
  172 	if (qset == NULL) {
  173 		qset = qset_alloc(whc, mem_flags);
  174 		if (qset == NULL)
  175 			return NULL;
  176 
  177 		qset->ep = urb->ep;
  178 		urb->ep->hcpriv = qset;
  179 		qset_fill_qh(whc, qset, urb);
  180 	}
  181 	return qset;
  182 }
  183 
  184 void qset_remove_complete(struct whc *whc, struct whc_qset *qset)
  185 {
  186 	qset->remove = 0;
  187 	list_del_init(&qset->list_node);
  188 	complete(&qset->remove_complete);
  189 }
  190 
  191 /**
  192  * qset_add_qtds - add qTDs for an URB to a qset
  193  *
  194  * Returns true if the list (ASL/PZL) must be updated because (for a
  195  * WHCI 0.95 controller) an activated qTD was pointed to be iCur.
  196  */
  197 enum whc_update qset_add_qtds(struct whc *whc, struct whc_qset *qset)
  198 {
  199 	struct whc_std *std;
  200 	enum whc_update update = 0;
  201 
  202 	list_for_each_entry(std, &qset->stds, list_node) {
  203 		struct whc_qtd *qtd;
  204 		uint32_t status;
  205 
  206 		if (qset->ntds >= WHCI_QSET_TD_MAX
  207 		    || (qset->pause_after_urb && std->urb != qset->pause_after_urb))
  208 			break;
  209 
  210 		if (std->qtd)
  211 			continue; /* already has a qTD */
  212 
  213 		qtd = std->qtd = &qset->qtd[qset->td_end];
  214 
  215 		/* Fill in setup bytes for control transfers. */
  216 		if (usb_pipecontrol(std->urb->pipe))
  217 			memcpy(qtd->setup, std->urb->setup_packet, 8);
  218 
  219 		status = QTD_STS_ACTIVE | QTD_STS_LEN(std->len);
  220 
  221 		if (whc_std_last(std) && usb_pipeout(std->urb->pipe))
  222 			status |= QTD_STS_LAST_PKT;
  223 
  224 		/*
  225 		 * For an IN transfer the iAlt field should be set so
  226 		 * the h/w will automatically advance to the next
  227 		 * transfer. However, if there are 8 or more TDs
  228 		 * remaining in this transfer then iAlt cannot be set
  229 		 * as it could point to somewhere in this transfer.
  230 		 */
  231 		if (std->ntds_remaining < WHCI_QSET_TD_MAX) {
  232 			int ialt;
  233 			ialt = (qset->td_end + std->ntds_remaining) % WHCI_QSET_TD_MAX;
  234 			status |= QTD_STS_IALT(ialt);
  235 		} else if (usb_pipein(std->urb->pipe))
  236 			qset->pause_after_urb = std->urb;
  237 
  238 		if (std->num_pointers)
  239 			qtd->options = cpu_to_le32(QTD_OPT_IOC);
  240 		else
  241 			qtd->options = cpu_to_le32(QTD_OPT_IOC | QTD_OPT_SMALL);
  242 		qtd->page_list_ptr = cpu_to_le64(std->dma_addr);
  243 
  244 		qtd->status = cpu_to_le32(status);
  245 
  246 		if (QH_STATUS_TO_ICUR(qset->qh.status) == qset->td_end)
  247 			update = WHC_UPDATE_UPDATED;
  248 
  249 		if (++qset->td_end >= WHCI_QSET_TD_MAX)
  250 			qset->td_end = 0;
  251 		qset->ntds++;
  252 	}
  253 
  254 	return update;
  255 }
  256 
  257 /**
  258  * qset_remove_qtd - remove the first qTD from a qset.
  259  *
  260  * The qTD might be still active (if it's part of a IN URB that
  261  * resulted in a short read) so ensure it's deactivated.
  262  */
  263 static void qset_remove_qtd(struct whc *whc, struct whc_qset *qset)
  264 {
  265 	qset->qtd[qset->td_start].status = 0;
  266 
  267 	if (++qset->td_start >= WHCI_QSET_TD_MAX)
  268 		qset->td_start = 0;
  269 	qset->ntds--;
  270 }
  271 
  272 static void qset_copy_bounce_to_sg(struct whc *whc, struct whc_std *std)
  273 {
  274 	struct scatterlist *sg;
  275 	void *bounce;
  276 	size_t remaining, offset;
  277 
  278 	bounce = std->bounce_buf;
  279 	remaining = std->len;
  280 
  281 	sg = std->bounce_sg;
  282 	offset = std->bounce_offset;
  283 
  284 	while (remaining) {
  285 		size_t len;
  286 
  287 		len = min(sg->length - offset, remaining);
  288 		memcpy(sg_virt(sg) + offset, bounce, len);
  289 
  290 		bounce += len;
  291 		remaining -= len;
  292 
  293 		offset += len;
  294 		if (offset >= sg->length) {
  295 			sg = sg_next(sg);
  296 			offset = 0;
  297 		}
  298 	}
  299 
  300 }
  301 
  302 /**
  303  * qset_free_std - remove an sTD and free it.
  304  * @whc: the WHCI host controller
  305  * @std: the sTD to remove and free.
  306  */
  307 void qset_free_std(struct whc *whc, struct whc_std *std)
  308 {
  309 	list_del(&std->list_node);
  310 	if (std->bounce_buf) {
  311 		bool is_out = usb_pipeout(std->urb->pipe);
  312 		dma_addr_t dma_addr;
  313 
  314 		if (std->num_pointers)
  315 			dma_addr = le64_to_cpu(std->pl_virt[0].buf_ptr);
  316 		else
  317 			dma_addr = std->dma_addr;
  318 
  319 		dma_unmap_single(whc->wusbhc.dev, dma_addr,
  320 				 std->len, is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
  321 		if (!is_out)
  322 			qset_copy_bounce_to_sg(whc, std);
  323 		kfree(std->bounce_buf);
  324 	}
  325 	if (std->pl_virt) {
  326 		if (std->dma_addr)
  327 			dma_unmap_single(whc->wusbhc.dev, std->dma_addr,
  328 					 std->num_pointers * sizeof(struct whc_page_list_entry),
  329 					 DMA_TO_DEVICE);
  330 		kfree(std->pl_virt);
  331 		std->pl_virt = NULL;
  332 	}
  333 	kfree(std);
  334 }
  335 
  336 /**
  337  * qset_remove_qtds - remove an URB's qTDs (and sTDs).
  338  */
  339 static void qset_remove_qtds(struct whc *whc, struct whc_qset *qset,
  340 			     struct urb *urb)
  341 {
  342 	struct whc_std *std, *t;
  343 
  344 	list_for_each_entry_safe(std, t, &qset->stds, list_node) {
  345 		if (std->urb != urb)
  346 			break;
  347 		if (std->qtd != NULL)
  348 			qset_remove_qtd(whc, qset);
  349 		qset_free_std(whc, std);
  350 	}
  351 }
  352 
  353 /**
  354  * qset_free_stds - free any remaining sTDs for an URB.
  355  */
  356 static void qset_free_stds(struct whc_qset *qset, struct urb *urb)
  357 {
  358 	struct whc_std *std, *t;
  359 
  360 	list_for_each_entry_safe(std, t, &qset->stds, list_node) {
  361 		if (std->urb == urb)
  362 			qset_free_std(qset->whc, std);
  363 	}
  364 }
  365 
  366 static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_flags)
  367 {
  368 	dma_addr_t dma_addr = std->dma_addr;
  369 	dma_addr_t sp, ep;
  370 	size_t pl_len;
  371 	int p;
  372 
  373 	/* Short buffers don't need a page list. */
  374 	if (std->len <= WHCI_PAGE_SIZE) {
  375 		std->num_pointers = 0;
  376 		return 0;
  377 	}
  378 
  379 	sp = dma_addr & ~(WHCI_PAGE_SIZE-1);
  380 	ep = dma_addr + std->len;
  381 	std->num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE);
  382 
  383 	pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  384 	std->pl_virt = kmalloc(pl_len, mem_flags);
  385 	if (std->pl_virt == NULL)
  386 		return -ENOMEM;
  387 	std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE);
  388 	if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) {
  389 		kfree(std->pl_virt);
  390 		return -EFAULT;
  391 	}
  392 
  393 	for (p = 0; p < std->num_pointers; p++) {
  394 		std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
  395 		dma_addr = (dma_addr + WHCI_PAGE_SIZE) & ~(WHCI_PAGE_SIZE-1);
  396 	}
  397 
  398 	return 0;
  399 }
  400 
  401 /**
  402  * urb_dequeue_work - executes asl/pzl update and gives back the urb to the system.
  403  */
  404 static void urb_dequeue_work(struct work_struct *work)
  405 {
  406 	struct whc_urb *wurb = container_of(work, struct whc_urb, dequeue_work);
  407 	struct whc_qset *qset = wurb->qset;
  408 	struct whc *whc = qset->whc;
  409 	unsigned long flags;
  410 
  411 	if (wurb->is_async)
  412 		asl_update(whc, WUSBCMD_ASYNC_UPDATED
  413 			   | WUSBCMD_ASYNC_SYNCED_DB
  414 			   | WUSBCMD_ASYNC_QSET_RM);
  415 	else
  416 		pzl_update(whc, WUSBCMD_PERIODIC_UPDATED
  417 			   | WUSBCMD_PERIODIC_SYNCED_DB
  418 			   | WUSBCMD_PERIODIC_QSET_RM);
  419 
  420 	spin_lock_irqsave(&whc->lock, flags);
  421 	qset_remove_urb(whc, qset, wurb->urb, wurb->status);
  422 	spin_unlock_irqrestore(&whc->lock, flags);
  423 }
  424 
  425 static struct whc_std *qset_new_std(struct whc *whc, struct whc_qset *qset,
  426 				    struct urb *urb, gfp_t mem_flags)
  427 {
  428 	struct whc_std *std;
  429 
  430 	std = kzalloc(sizeof(struct whc_std), mem_flags);
  431 	if (std == NULL)
  432 		return NULL;
  433 
  434 	std->urb = urb;
  435 	std->qtd = NULL;
  436 
  437 	INIT_LIST_HEAD(&std->list_node);
  438 	list_add_tail(&std->list_node, &qset->stds);
  439 
  440 	return std;
  441 }
  442 
  443 static int qset_add_urb_sg(struct whc *whc, struct whc_qset *qset, struct urb *urb,
  444 			   gfp_t mem_flags)
  445 {
  446 	size_t remaining;
  447 	struct scatterlist *sg;
  448 	int i;
  449 	int ntds = 0;
  450 	struct whc_std *std = NULL;
  451 	struct whc_page_list_entry *new_pl_virt;
  452 	dma_addr_t prev_end = 0;
  453 	size_t pl_len;
  454 	int p = 0;
  455 
  456 	remaining = urb->transfer_buffer_length;
  457 
  458 	for_each_sg(urb->sg, sg, urb->num_mapped_sgs, i) {
  459 		dma_addr_t dma_addr;
  460 		size_t dma_remaining;
  461 		dma_addr_t sp, ep;
  462 		int num_pointers;
  463 
  464 		if (remaining == 0) {
  465 			break;
  466 		}
  467 
  468 		dma_addr = sg_dma_address(sg);
  469 		dma_remaining = min_t(size_t, sg_dma_len(sg), remaining);
  470 
  471 		while (dma_remaining) {
  472 			size_t dma_len;
  473 
  474 			/*
  475 			 * We can use the previous std (if it exists) provided that:
  476 			 * - the previous one ended on a page boundary.
  477 			 * - the current one begins on a page boundary.
  478 			 * - the previous one isn't full.
  479 			 *
  480 			 * If a new std is needed but the previous one
  481 			 * was not a whole number of packets then this
  482 			 * sg list cannot be mapped onto multiple
  483 			 * qTDs.  Return an error and let the caller
  484 			 * sort it out.
  485 			 */
  486 			if (!std
  487 			    || (prev_end & (WHCI_PAGE_SIZE-1))
  488 			    || (dma_addr & (WHCI_PAGE_SIZE-1))
  489 			    || std->len + WHCI_PAGE_SIZE > QTD_MAX_XFER_SIZE) {
  490 				if (std && std->len % qset->max_packet != 0)
  491 					return -EINVAL;
  492 				std = qset_new_std(whc, qset, urb, mem_flags);
  493 				if (std == NULL) {
  494 					return -ENOMEM;
  495 				}
  496 				ntds++;
  497 				p = 0;
  498 			}
  499 
  500 			dma_len = dma_remaining;
  501 
  502 			/*
  503 			 * If the remainder of this element doesn't
  504 			 * fit in a single qTD, limit the qTD to a
  505 			 * whole number of packets.  This allows the
  506 			 * remainder to go into the next qTD.
  507 			 */
  508 			if (std->len + dma_len > QTD_MAX_XFER_SIZE) {
  509 				dma_len = (QTD_MAX_XFER_SIZE / qset->max_packet)
  510 					* qset->max_packet - std->len;
  511 			}
  512 
  513 			std->len += dma_len;
  514 			std->ntds_remaining = -1; /* filled in later */
  515 
  516 			sp = dma_addr & ~(WHCI_PAGE_SIZE-1);
  517 			ep = dma_addr + dma_len;
  518 			num_pointers = DIV_ROUND_UP(ep - sp, WHCI_PAGE_SIZE);
  519 			std->num_pointers += num_pointers;
  520 
  521 			pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  522 
  523 			new_pl_virt = krealloc(std->pl_virt, pl_len, mem_flags);
  524 			if (new_pl_virt == NULL) {
  525 				kfree(std->pl_virt);
  526 				std->pl_virt = NULL;
  527 				return -ENOMEM;
  528 			}
  529 			std->pl_virt = new_pl_virt;
  530 
  531 			for (;p < std->num_pointers; p++) {
  532 				std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
  533 				dma_addr = (dma_addr + WHCI_PAGE_SIZE) & ~(WHCI_PAGE_SIZE-1);
  534 			}
  535 
  536 			prev_end = dma_addr = ep;
  537 			dma_remaining -= dma_len;
  538 			remaining -= dma_len;
  539 		}
  540 	}
  541 
  542 	/* Now the number of stds is know, go back and fill in
  543 	   std->ntds_remaining. */
  544 	list_for_each_entry(std, &qset->stds, list_node) {
  545 		if (std->ntds_remaining == -1) {
  546 			pl_len = std->num_pointers * sizeof(struct whc_page_list_entry);
  547 			std->ntds_remaining = ntds--;
  548 			std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt,
  549 						       pl_len, DMA_TO_DEVICE);
  550 		}
  551 	}
  552 	return 0;
  553 }
  554 
  555 /**
  556  * qset_add_urb_sg_linearize - add an urb with sg list, copying the data
  557  *
  558  * If the URB contains an sg list whose elements cannot be directly
  559  * mapped to qTDs then the data must be transferred via bounce
  560  * buffers.
  561  */
  562 static int qset_add_urb_sg_linearize(struct whc *whc, struct whc_qset *qset,
  563 				     struct urb *urb, gfp_t mem_flags)
  564 {
  565 	bool is_out = usb_pipeout(urb->pipe);
  566 	size_t max_std_len;
  567 	size_t remaining;
  568 	int ntds = 0;
  569 	struct whc_std *std = NULL;
  570 	void *bounce = NULL;
  571 	struct scatterlist *sg;
  572 	int i;
  573 
  574 	/* limit maximum bounce buffer to 16 * 3.5 KiB ~= 28 k */
  575 	max_std_len = qset->max_burst * qset->max_packet;
  576 
  577 	remaining = urb->transfer_buffer_length;
  578 
  579 	for_each_sg(urb->sg, sg, urb->num_mapped_sgs, i) {
  580 		size_t len;
  581 		size_t sg_remaining;
  582 		void *orig;
  583 
  584 		if (remaining == 0) {
  585 			break;
  586 		}
  587 
  588 		sg_remaining = min_t(size_t, remaining, sg->length);
  589 		orig = sg_virt(sg);
  590 
  591 		while (sg_remaining) {
  592 			if (!std || std->len == max_std_len) {
  593 				std = qset_new_std(whc, qset, urb, mem_flags);
  594 				if (std == NULL)
  595 					return -ENOMEM;
  596 				std->bounce_buf = kmalloc(max_std_len, mem_flags);
  597 				if (std->bounce_buf == NULL)
  598 					return -ENOMEM;
  599 				std->bounce_sg = sg;
  600 				std->bounce_offset = orig - sg_virt(sg);
  601 				bounce = std->bounce_buf;
  602 				ntds++;
  603 			}
  604 
  605 			len = min(sg_remaining, max_std_len - std->len);
  606 
  607 			if (is_out)
  608 				memcpy(bounce, orig, len);
  609 
  610 			std->len += len;
  611 			std->ntds_remaining = -1; /* filled in later */
  612 
  613 			bounce += len;
  614 			orig += len;
  615 			sg_remaining -= len;
  616 			remaining -= len;
  617 		}
  618 	}
  619 
  620 	/*
  621 	 * For each of the new sTDs, map the bounce buffers, create
  622 	 * page lists (if necessary), and fill in std->ntds_remaining.
  623 	 */
  624 	list_for_each_entry(std, &qset->stds, list_node) {
  625 		if (std->ntds_remaining != -1)
  626 			continue;
  627 
  628 		std->dma_addr = dma_map_single(&whc->umc->dev, std->bounce_buf, std->len,
  629 					       is_out ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
  630 
  631 		if (qset_fill_page_list(whc, std, mem_flags) < 0)
  632 			return -ENOMEM;
  633 
  634 		std->ntds_remaining = ntds--;
  635 	}
  636 
  637 	return 0;
  638 }
  639 
  640 /**
  641  * qset_add_urb - add an urb to the qset's queue.
  642  *
  643  * The URB is chopped into sTDs, one for each qTD that will required.
  644  * At least one qTD (and sTD) is required even if the transfer has no
  645  * data (e.g., for some control transfers).
  646  */
  647 int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb,
  648 	gfp_t mem_flags)
  649 {
  650 	struct whc_urb *wurb;
  651 	int remaining = urb->transfer_buffer_length;
  652 	u64 transfer_dma = urb->transfer_dma;
  653 	int ntds_remaining;
  654 	int ret;
  655 
  656 	wurb = kzalloc(sizeof(struct whc_urb), mem_flags);
  657 	if (wurb == NULL)
  658 		goto err_no_mem;
  659 	urb->hcpriv = wurb;
  660 	wurb->qset = qset;
  661 	wurb->urb = urb;
  662 	INIT_WORK(&wurb->dequeue_work, urb_dequeue_work);
  663 
  664 	if (urb->num_sgs) {
  665 		ret = qset_add_urb_sg(whc, qset, urb, mem_flags);
  666 		if (ret == -EINVAL) {
  667 			qset_free_stds(qset, urb);
  668 			ret = qset_add_urb_sg_linearize(whc, qset, urb, mem_flags);
  669 		}
  670 		if (ret < 0)
  671 			goto err_no_mem;
  672 		return 0;
  673 	}
  674 
  675 	ntds_remaining = DIV_ROUND_UP(remaining, QTD_MAX_XFER_SIZE);
  676 	if (ntds_remaining == 0)
  677 		ntds_remaining = 1;
  678 
  679 	while (ntds_remaining) {
  680 		struct whc_std *std;
  681 		size_t std_len;
  682 
  683 		std_len = remaining;
  684 		if (std_len > QTD_MAX_XFER_SIZE)
  685 			std_len = QTD_MAX_XFER_SIZE;
  686 
  687 		std = qset_new_std(whc, qset, urb, mem_flags);
  688 		if (std == NULL)
  689 			goto err_no_mem;
  690 
  691 		std->dma_addr = transfer_dma;
  692 		std->len = std_len;
  693 		std->ntds_remaining = ntds_remaining;
  694 
  695 		if (qset_fill_page_list(whc, std, mem_flags) < 0)
  696 			goto err_no_mem;
  697 
  698 		ntds_remaining--;
  699 		remaining -= std_len;
  700 		transfer_dma += std_len;
  701 	}
  702 
  703 	return 0;
  704 
  705 err_no_mem:
  706 	qset_free_stds(qset, urb);
  707 	return -ENOMEM;
  708 }
  709 
  710 /**
  711  * qset_remove_urb - remove an URB from the urb queue.
  712  *
  713  * The URB is returned to the USB subsystem.
  714  */
  715 void qset_remove_urb(struct whc *whc, struct whc_qset *qset,
  716 			    struct urb *urb, int status)
  717 {
  718 	struct wusbhc *wusbhc = &whc->wusbhc;
  719 	struct whc_urb *wurb = urb->hcpriv;
  720 
  721 	usb_hcd_unlink_urb_from_ep(&wusbhc->usb_hcd, urb);
  722 	/* Drop the lock as urb->complete() may enqueue another urb. */
  723 	spin_unlock(&whc->lock);
  724 	wusbhc_giveback_urb(wusbhc, urb, status);
  725 	spin_lock(&whc->lock);
  726 
  727 	kfree(wurb);
  728 }
  729 
  730 /**
  731  * get_urb_status_from_qtd - get the completed urb status from qTD status
  732  * @urb:    completed urb
  733  * @status: qTD status
  734  */
  735 static int get_urb_status_from_qtd(struct urb *urb, u32 status)
  736 {
  737 	if (status & QTD_STS_HALTED) {
  738 		if (status & QTD_STS_DBE)
  739 			return usb_pipein(urb->pipe) ? -ENOSR : -ECOMM;
  740 		else if (status & QTD_STS_BABBLE)
  741 			return -EOVERFLOW;
  742 		else if (status & QTD_STS_RCE)
  743 			return -ETIME;
  744 		return -EPIPE;
  745 	}
  746 	if (usb_pipein(urb->pipe)
  747 	    && (urb->transfer_flags & URB_SHORT_NOT_OK)
  748 	    && urb->actual_length < urb->transfer_buffer_length)
  749 		return -EREMOTEIO;
  750 	return 0;
  751 }
  752 
  753 /**
  754  * process_inactive_qtd - process an inactive (but not halted) qTD.
  755  *
  756  * Update the urb with the transfer bytes from the qTD, if the urb is
  757  * completely transferred or (in the case of an IN only) the LPF is
  758  * set, then the transfer is complete and the urb should be returned
  759  * to the system.
  760  */
  761 void process_inactive_qtd(struct whc *whc, struct whc_qset *qset,
  762 				 struct whc_qtd *qtd)
  763 {
  764 	struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
  765 	struct urb *urb = std->urb;
  766 	uint32_t status;
  767 	bool complete;
  768 
  769 	status = le32_to_cpu(qtd->status);
  770 
  771 	urb->actual_length += std->len - QTD_STS_TO_LEN(status);
  772 
  773 	if (usb_pipein(urb->pipe) && (status & QTD_STS_LAST_PKT))
  774 		complete = true;
  775 	else
  776 		complete = whc_std_last(std);
  777 
  778 	qset_remove_qtd(whc, qset);
  779 	qset_free_std(whc, std);
  780 
  781 	/*
  782 	 * Transfers for this URB are complete?  Then return it to the
  783 	 * USB subsystem.
  784 	 */
  785 	if (complete) {
  786 		qset_remove_qtds(whc, qset, urb);
  787 		qset_remove_urb(whc, qset, urb, get_urb_status_from_qtd(urb, status));
  788 
  789 		/*
  790 		 * If iAlt isn't valid then the hardware didn't
  791 		 * advance iCur. Adjust the start and end pointers to
  792 		 * match iCur.
  793 		 */
  794 		if (!(status & QTD_STS_IALT_VALID))
  795 			qset->td_start = qset->td_end
  796 				= QH_STATUS_TO_ICUR(le16_to_cpu(qset->qh.status));
  797 		qset->pause_after_urb = NULL;
  798 	}
  799 }
  800 
  801 /**
  802  * process_halted_qtd - process a qset with a halted qtd
  803  *
  804  * Remove all the qTDs for the failed URB and return the failed URB to
  805  * the USB subsystem.  Then remove all other qTDs so the qset can be
  806  * removed.
  807  *
  808  * FIXME: this is the point where rate adaptation can be done.  If a
  809  * transfer failed because it exceeded the maximum number of retries
  810  * then it could be reactivated with a slower rate without having to
  811  * remove the qset.
  812  */
  813 void process_halted_qtd(struct whc *whc, struct whc_qset *qset,
  814 			       struct whc_qtd *qtd)
  815 {
  816 	struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
  817 	struct urb *urb = std->urb;
  818 	int urb_status;
  819 
  820 	urb_status = get_urb_status_from_qtd(urb, le32_to_cpu(qtd->status));
  821 
  822 	qset_remove_qtds(whc, qset, urb);
  823 	qset_remove_urb(whc, qset, urb, urb_status);
  824 
  825 	list_for_each_entry(std, &qset->stds, list_node) {
  826 		if (qset->ntds == 0)
  827 			break;
  828 		qset_remove_qtd(whc, qset);
  829 		std->qtd = NULL;
  830 	}
  831 
  832 	qset->remove = 1;
  833 }
  834 
  835 void qset_free(struct whc *whc, struct whc_qset *qset)
  836 {
  837 	dma_pool_free(whc->qset_pool, qset, qset->qset_dma);
  838 }
  839 
  840 /**
  841  * qset_delete - wait for a qset to be unused, then free it.
  842  */
  843 void qset_delete(struct whc *whc, struct whc_qset *qset)
  844 {
  845 	wait_for_completion(&qset->remove_complete);
  846 	qset_free(whc, qset);
  847 }
  848 
  849 #line 9 "/home/cluser/ldv/ref_launch/work/current--X--drivers--X--defaultlinux-4.5-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.5-rc1.tar.xz/csd_deg_dscv/2256/dscv_tempdir/dscv/ri/331_1a/drivers/usb/host/whci/qset.o.c.prepared"                 1 
    2  #include <linux/types.h>
    3  #include <linux/dma-direction.h>
    4  #include <verifier/rcv.h>
    5  #include <verifier/set.h>
    6  #include <verifier/map.h>
    7 
    8  Set LDV_DMA_MAP_CALLS;
    9 
   10  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_map_page') maps page */
   11  dma_addr_t ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir) {
   12   dma_addr_t nonedetermined;
   13 
   14   nonedetermined = ldv_undef_ptr();
   15 
   16   /* LDV_COMMENT_ASSERT Check that previos dma_mapping call was checked*/
   17   ldv_assert(ldv_set_is_empty(LDV_DMA_MAP_CALLS));
   18 
   19   ldv_set_add(LDV_DMA_MAP_CALLS, nonedetermined);
   20 
   21   return nonedetermined;
   22  }
   23 
   24  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_mapping_error') unmaps page */
   25  int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr) {
   26 
   27   /* LDV_COMMENT_ASSERT No dma_mapping calls to verify */
   28   ldv_assert(ldv_set_contains(LDV_DMA_MAP_CALLS, dma_addr));
   29   ldv_set_remove(LDV_DMA_MAP_CALLS, dma_addr);
   30 
   31   int nonedetermined;
   32 
   33   nonedetermined = ldv_undef_int();
   34 
   35   return nonedetermined;
   36  }
   37 
   38 
   39 
   40  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_map_single') maps pci_dma */
   41  dma_addr_t ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir) {
   42   dma_addr_t nonedetermined;
   43 
   44   nonedetermined = ldv_undef_ptr();
   45 
   46   /* LDV_COMMENT_ASSERT Check that previos dma_mapping call was checked*/
   47   ldv_assert(ldv_set_is_empty(LDV_DMA_MAP_CALLS));
   48 
   49   ldv_set_add(LDV_DMA_MAP_CALLS, nonedetermined);
   50 
   51   return nonedetermined;
   52  }
   53 
   54  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_dma_map_single_attrs') maps pci_dma */
   55  dma_addr_t ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs) {
   56   dma_addr_t nonedetermined;
   57 
   58   nonedetermined = ldv_undef_ptr();
   59 
   60   /* LDV_COMMENT_ASSERT Check that previos dma_mapping call was checked*/
   61   ldv_assert(ldv_set_is_empty(LDV_DMA_MAP_CALLS));
   62 
   63   ldv_set_add(LDV_DMA_MAP_CALLS, nonedetermined);
   64 
   65   return nonedetermined;
   66  }
   67 
   68  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_initialize') Initialize all module reference counters at the beginning */
   69  void ldv_initialize(void) {
   70   /* LDV_COMMENT_CHANGE_STATE All module reference counters have some initial value at the beginning */
   71   ldv_set_init(LDV_DMA_MAP_CALLS);
   72  }
   73 
   74  /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_check_final_state') Check that all module reference counters have their initial values at the end */
   75  void ldv_check_final_state(void) {
   76   /* LDV_COMMENT_ASSERT All incremented module reference counters should be decremented before module unloading*/
   77   ldv_assert(ldv_set_is_empty(LDV_DMA_MAP_CALLS));
   78  }                 1 #ifndef _LDV_RCV_H_
    2 #define _LDV_RCV_H_
    3 
    4 /* If expr evaluates to zero, ldv_assert() causes a program to reach the error
    5    label like the standard assert(). */
    6 #define ldv_assert(expr) ((expr) ? 0 : ldv_error())
    7 
    8 /* The error label wrapper. It is used because of some static verifiers (like
    9    BLAST) don't accept multiple error labels through a program. */
   10 static inline void ldv_error(void)
   11 {
   12   LDV_ERROR: goto LDV_ERROR;
   13 }
   14 
   15 /* If expr evaluates to zero, ldv_assume() causes an infinite loop that is
   16    avoided by verifiers. */
   17 #define ldv_assume(expr) ((expr) ? 0 : ldv_stop())
   18 
   19 /* Infinite loop, that causes verifiers to skip such paths. */
   20 static inline void ldv_stop(void) {
   21   LDV_STOP: goto LDV_STOP;
   22 }
   23 
   24 /* Special nondeterministic functions. */
   25 int ldv_undef_int(void);
   26 void *ldv_undef_ptr(void);
   27 unsigned long ldv_undef_ulong(void);
   28 long ldv_undef_long(void);
   29 /* Return nondeterministic negative integer number. */
   30 static inline int ldv_undef_int_negative(void)
   31 {
   32   int ret = ldv_undef_int();
   33 
   34   ldv_assume(ret < 0);
   35 
   36   return ret;
   37 }
   38 /* Return nondeterministic nonpositive integer number. */
   39 static inline int ldv_undef_int_nonpositive(void)
   40 {
   41   int ret = ldv_undef_int();
   42 
   43   ldv_assume(ret <= 0);
   44 
   45   return ret;
   46 }
   47 
   48 /* Add explicit model for __builin_expect GCC function. Without the model a
   49    return value will be treated as nondetermined by verifiers. */
   50 static inline long __builtin_expect(long exp, long c)
   51 {
   52   return exp;
   53 }
   54 
   55 /* This function causes the program to exit abnormally. GCC implements this
   56 function by using a target-dependent mechanism (such as intentionally executing
   57 an illegal instruction) or by calling abort. The mechanism used may vary from
   58 release to release so you should not rely on any particular implementation.
   59 http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
   60 static inline void __builtin_trap(void)
   61 {
   62   ldv_assert(0);
   63 }
   64 
   65 /* The constant is for simulating an error of ldv_undef_ptr() function. */
   66 #define LDV_PTR_MAX 2012
   67 
   68 #endif /* _LDV_RCV_H_ */                 1 #ifndef __LINUX_COMPILER_H
    2 #define __LINUX_COMPILER_H
    3 
    4 #ifndef __ASSEMBLY__
    5 
    6 #ifdef __CHECKER__
    7 # define __user		__attribute__((noderef, address_space(1)))
    8 # define __kernel	__attribute__((address_space(0)))
    9 # define __safe		__attribute__((safe))
   10 # define __force	__attribute__((force))
   11 # define __nocast	__attribute__((nocast))
   12 # define __iomem	__attribute__((noderef, address_space(2)))
   13 # define __must_hold(x)	__attribute__((context(x,1,1)))
   14 # define __acquires(x)	__attribute__((context(x,0,1)))
   15 # define __releases(x)	__attribute__((context(x,1,0)))
   16 # define __acquire(x)	__context__(x,1)
   17 # define __release(x)	__context__(x,-1)
   18 # define __cond_lock(x,c)	((c) ? ({ __acquire(x); 1; }) : 0)
   19 # define __percpu	__attribute__((noderef, address_space(3)))
   20 # define __pmem		__attribute__((noderef, address_space(5)))
   21 #ifdef CONFIG_SPARSE_RCU_POINTER
   22 # define __rcu		__attribute__((noderef, address_space(4)))
   23 #else
   24 # define __rcu
   25 #endif
   26 extern void __chk_user_ptr(const volatile void __user *);
   27 extern void __chk_io_ptr(const volatile void __iomem *);
   28 #else
   29 # define __user
   30 # define __kernel
   31 # define __safe
   32 # define __force
   33 # define __nocast
   34 # define __iomem
   35 # define __chk_user_ptr(x) (void)0
   36 # define __chk_io_ptr(x) (void)0
   37 # define __builtin_warning(x, y...) (1)
   38 # define __must_hold(x)
   39 # define __acquires(x)
   40 # define __releases(x)
   41 # define __acquire(x) (void)0
   42 # define __release(x) (void)0
   43 # define __cond_lock(x,c) (c)
   44 # define __percpu
   45 # define __rcu
   46 # define __pmem
   47 #endif
   48 
   49 /* Indirect macros required for expanded argument pasting, eg. __LINE__. */
   50 #define ___PASTE(a,b) a##b
   51 #define __PASTE(a,b) ___PASTE(a,b)
   52 
   53 #ifdef __KERNEL__
   54 
   55 #ifdef __GNUC__
   56 #include <linux/compiler-gcc.h>
   57 #endif
   58 
   59 #if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__)
   60 #define notrace __attribute__((hotpatch(0,0)))
   61 #else
   62 #define notrace __attribute__((no_instrument_function))
   63 #endif
   64 
   65 /* Intel compiler defines __GNUC__. So we will overwrite implementations
   66  * coming from above header files here
   67  */
   68 #ifdef __INTEL_COMPILER
   69 # include <linux/compiler-intel.h>
   70 #endif
   71 
   72 /* Clang compiler defines __GNUC__. So we will overwrite implementations
   73  * coming from above header files here
   74  */
   75 #ifdef __clang__
   76 #include <linux/compiler-clang.h>
   77 #endif
   78 
   79 /*
   80  * Generic compiler-dependent macros required for kernel
   81  * build go below this comment. Actual compiler/compiler version
   82  * specific implementations come from the above header files
   83  */
   84 
   85 struct ftrace_branch_data {
   86 	const char *func;
   87 	const char *file;
   88 	unsigned line;
   89 	union {
   90 		struct {
   91 			unsigned long correct;
   92 			unsigned long incorrect;
   93 		};
   94 		struct {
   95 			unsigned long miss;
   96 			unsigned long hit;
   97 		};
   98 		unsigned long miss_hit[2];
   99 	};
  100 };
  101 
  102 /*
  103  * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
  104  * to disable branch tracing on a per file basis.
  105  */
  106 #if defined(CONFIG_TRACE_BRANCH_PROFILING) \
  107     && !defined(DISABLE_BRANCH_PROFILING) && !defined(__CHECKER__)
  108 void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
  109 
  110 #define likely_notrace(x)	__builtin_expect(!!(x), 1)
  111 #define unlikely_notrace(x)	__builtin_expect(!!(x), 0)
  112 
  113 #define __branch_check__(x, expect) ({					\
  114 			int ______r;					\
  115 			static struct ftrace_branch_data		\
  116 				__attribute__((__aligned__(4)))		\
  117 				__attribute__((section("_ftrace_annotated_branch"))) \
  118 				______f = {				\
  119 				.func = __func__,			\
  120 				.file = __FILE__,			\
  121 				.line = __LINE__,			\
  122 			};						\
  123 			______r = likely_notrace(x);			\
  124 			ftrace_likely_update(&______f, ______r, expect); \
  125 			______r;					\
  126 		})
  127 
  128 /*
  129  * Using __builtin_constant_p(x) to ignore cases where the return
  130  * value is always the same.  This idea is taken from a similar patch
  131  * written by Daniel Walker.
  132  */
  133 # ifndef likely
  134 #  define likely(x)	(__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))
  135 # endif
  136 # ifndef unlikely
  137 #  define unlikely(x)	(__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))
  138 # endif
  139 
  140 #ifdef CONFIG_PROFILE_ALL_BRANCHES
  141 /*
  142  * "Define 'is'", Bill Clinton
  143  * "Define 'if'", Steven Rostedt
  144  */
  145 #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
  146 #define __trace_if(cond) \
  147 	if (__builtin_constant_p((cond)) ? !!(cond) :			\
  148 	({								\
  149 		int ______r;						\
  150 		static struct ftrace_branch_data			\
  151 			__attribute__((__aligned__(4)))			\
  152 			__attribute__((section("_ftrace_branch")))	\
  153 			______f = {					\
  154 				.func = __func__,			\
  155 				.file = __FILE__,			\
  156 				.line = __LINE__,			\
  157 			};						\
  158 		______r = !!(cond);					\
  159 		______f.miss_hit[______r]++;					\
  160 		______r;						\
  161 	}))
  162 #endif /* CONFIG_PROFILE_ALL_BRANCHES */
  163 
  164 #else
  165 # define likely(x)	__builtin_expect(!!(x), 1)
  166 # define unlikely(x)	__builtin_expect(!!(x), 0)
  167 #endif
  168 
  169 /* Optimization barrier */
  170 #ifndef barrier
  171 # define barrier() __memory_barrier()
  172 #endif
  173 
  174 #ifndef barrier_data
  175 # define barrier_data(ptr) barrier()
  176 #endif
  177 
  178 /* Unreachable code */
  179 #ifndef unreachable
  180 # define unreachable() do { } while (1)
  181 #endif
  182 
  183 #ifndef RELOC_HIDE
  184 # define RELOC_HIDE(ptr, off)					\
  185   ({ unsigned long __ptr;					\
  186      __ptr = (unsigned long) (ptr);				\
  187     (typeof(ptr)) (__ptr + (off)); })
  188 #endif
  189 
  190 #ifndef OPTIMIZER_HIDE_VAR
  191 #define OPTIMIZER_HIDE_VAR(var) barrier()
  192 #endif
  193 
  194 /* Not-quite-unique ID. */
  195 #ifndef __UNIQUE_ID
  196 # define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __LINE__)
  197 #endif
  198 
  199 #include <uapi/linux/types.h>
  200 
  201 #define __READ_ONCE_SIZE						\
  202 ({									\
  203 	switch (size) {							\
  204 	case 1: *(__u8 *)res = *(volatile __u8 *)p; break;		\
  205 	case 2: *(__u16 *)res = *(volatile __u16 *)p; break;		\
  206 	case 4: *(__u32 *)res = *(volatile __u32 *)p; break;		\
  207 	case 8: *(__u64 *)res = *(volatile __u64 *)p; break;		\
  208 	default:							\
  209 		barrier();						\
  210 		__builtin_memcpy((void *)res, (const void *)p, size);	\
  211 		barrier();						\
  212 	}								\
  213 })
  214 
  215 static __always_inline
  216 void __read_once_size(const volatile void *p, void *res, int size)
  217 {
  218 	__READ_ONCE_SIZE;
  219 }
  220 
  221 #ifdef CONFIG_KASAN
  222 /*
  223  * This function is not 'inline' because __no_sanitize_address confilcts
  224  * with inlining. Attempt to inline it may cause a build failure.
  225  * 	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
  226  * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
  227  */
  228 static __no_sanitize_address __maybe_unused
  229 void __read_once_size_nocheck(const volatile void *p, void *res, int size)
  230 {
  231 	__READ_ONCE_SIZE;
  232 }
  233 #else
  234 static __always_inline
  235 void __read_once_size_nocheck(const volatile void *p, void *res, int size)
  236 {
  237 	__READ_ONCE_SIZE;
  238 }
  239 #endif
  240 
  241 static __always_inline void __write_once_size(volatile void *p, void *res, int size)
  242 {
  243 	switch (size) {
  244 	case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
  245 	case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
  246 	case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
  247 	case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
  248 	default:
  249 		barrier();
  250 		__builtin_memcpy((void *)p, (const void *)res, size);
  251 		barrier();
  252 	}
  253 }
  254 
  255 /*
  256  * Prevent the compiler from merging or refetching reads or writes. The
  257  * compiler is also forbidden from reordering successive instances of
  258  * READ_ONCE, WRITE_ONCE and ACCESS_ONCE (see below), but only when the
  259  * compiler is aware of some particular ordering.  One way to make the
  260  * compiler aware of ordering is to put the two invocations of READ_ONCE,
  261  * WRITE_ONCE or ACCESS_ONCE() in different C statements.
  262  *
  263  * In contrast to ACCESS_ONCE these two macros will also work on aggregate
  264  * data types like structs or unions. If the size of the accessed data
  265  * type exceeds the word size of the machine (e.g., 32 bits or 64 bits)
  266  * READ_ONCE() and WRITE_ONCE()  will fall back to memcpy and print a
  267  * compile-time warning.
  268  *
  269  * Their two major use cases are: (1) Mediating communication between
  270  * process-level code and irq/NMI handlers, all running on the same CPU,
  271  * and (2) Ensuring that the compiler does not  fold, spindle, or otherwise
  272  * mutilate accesses that either do not require ordering or that interact
  273  * with an explicit memory barrier or atomic instruction that provides the
  274  * required ordering.
  275  */
  276 
  277 #define __READ_ONCE(x, check)						\
  278 ({									\
  279 	union { typeof(x) __val; char __c[1]; } __u;			\
  280 	if (check)							\
  281 		__read_once_size(&(x), __u.__c, sizeof(x));		\
  282 	else								\
  283 		__read_once_size_nocheck(&(x), __u.__c, sizeof(x));	\
  284 	__u.__val;							\
  285 })
  286 #define READ_ONCE(x) __READ_ONCE(x, 1)
  287 
  288 /*
  289  * Use READ_ONCE_NOCHECK() instead of READ_ONCE() if you need
  290  * to hide memory access from KASAN.
  291  */
  292 #define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0)
  293 
  294 #define WRITE_ONCE(x, val) \
  295 ({							\
  296 	union { typeof(x) __val; char __c[1]; } __u =	\
  297 		{ .__val = (__force typeof(x)) (val) }; \
  298 	__write_once_size(&(x), __u.__c, sizeof(x));	\
  299 	__u.__val;					\
  300 })
  301 
  302 /**
  303  * smp_cond_acquire() - Spin wait for cond with ACQUIRE ordering
  304  * @cond: boolean expression to wait for
  305  *
  306  * Equivalent to using smp_load_acquire() on the condition variable but employs
  307  * the control dependency of the wait to reduce the barrier on many platforms.
  308  *
  309  * The control dependency provides a LOAD->STORE order, the additional RMB
  310  * provides LOAD->LOAD order, together they provide LOAD->{LOAD,STORE} order,
  311  * aka. ACQUIRE.
  312  */
  313 #define smp_cond_acquire(cond)	do {		\
  314 	while (!(cond))				\
  315 		cpu_relax();			\
  316 	smp_rmb(); /* ctrl + rmb := acquire */	\
  317 } while (0)
  318 
  319 #endif /* __KERNEL__ */
  320 
  321 #endif /* __ASSEMBLY__ */
  322 
  323 #ifdef __KERNEL__
  324 /*
  325  * Allow us to mark functions as 'deprecated' and have gcc emit a nice
  326  * warning for each use, in hopes of speeding the functions removal.
  327  * Usage is:
  328  * 		int __deprecated foo(void)
  329  */
  330 #ifndef __deprecated
  331 # define __deprecated		/* unimplemented */
  332 #endif
  333 
  334 #ifdef MODULE
  335 #define __deprecated_for_modules __deprecated
  336 #else
  337 #define __deprecated_for_modules
  338 #endif
  339 
  340 #ifndef __must_check
  341 #define __must_check
  342 #endif
  343 
  344 #ifndef CONFIG_ENABLE_MUST_CHECK
  345 #undef __must_check
  346 #define __must_check
  347 #endif
  348 #ifndef CONFIG_ENABLE_WARN_DEPRECATED
  349 #undef __deprecated
  350 #undef __deprecated_for_modules
  351 #define __deprecated
  352 #define __deprecated_for_modules
  353 #endif
  354 
  355 /*
  356  * Allow us to avoid 'defined but not used' warnings on functions and data,
  357  * as well as force them to be emitted to the assembly file.
  358  *
  359  * As of gcc 3.4, static functions that are not marked with attribute((used))
  360  * may be elided from the assembly file.  As of gcc 3.4, static data not so
  361  * marked will not be elided, but this may change in a future gcc version.
  362  *
  363  * NOTE: Because distributions shipped with a backported unit-at-a-time
  364  * compiler in gcc 3.3, we must define __used to be __attribute__((used))
  365  * for gcc >=3.3 instead of 3.4.
  366  *
  367  * In prior versions of gcc, such functions and data would be emitted, but
  368  * would be warned about except with attribute((unused)).
  369  *
  370  * Mark functions that are referenced only in inline assembly as __used so
  371  * the code is emitted even though it appears to be unreferenced.
  372  */
  373 #ifndef __used
  374 # define __used			/* unimplemented */
  375 #endif
  376 
  377 #ifndef __maybe_unused
  378 # define __maybe_unused		/* unimplemented */
  379 #endif
  380 
  381 #ifndef __always_unused
  382 # define __always_unused	/* unimplemented */
  383 #endif
  384 
  385 #ifndef noinline
  386 #define noinline
  387 #endif
  388 
  389 /*
  390  * Rather then using noinline to prevent stack consumption, use
  391  * noinline_for_stack instead.  For documentation reasons.
  392  */
  393 #define noinline_for_stack noinline
  394 
  395 #ifndef __always_inline
  396 #define __always_inline inline
  397 #endif
  398 
  399 #endif /* __KERNEL__ */
  400 
  401 /*
  402  * From the GCC manual:
  403  *
  404  * Many functions do not examine any values except their arguments,
  405  * and have no effects except the return value.  Basically this is
  406  * just slightly more strict class than the `pure' attribute above,
  407  * since function is not allowed to read global memory.
  408  *
  409  * Note that a function that has pointer arguments and examines the
  410  * data pointed to must _not_ be declared `const'.  Likewise, a
  411  * function that calls a non-`const' function usually must not be
  412  * `const'.  It does not make sense for a `const' function to return
  413  * `void'.
  414  */
  415 #ifndef __attribute_const__
  416 # define __attribute_const__	/* unimplemented */
  417 #endif
  418 
  419 /*
  420  * Tell gcc if a function is cold. The compiler will assume any path
  421  * directly leading to the call is unlikely.
  422  */
  423 
  424 #ifndef __cold
  425 #define __cold
  426 #endif
  427 
  428 /* Simple shorthand for a section definition */
  429 #ifndef __section
  430 # define __section(S) __attribute__ ((__section__(#S)))
  431 #endif
  432 
  433 #ifndef __visible
  434 #define __visible
  435 #endif
  436 
  437 /*
  438  * Assume alignment of return value.
  439  */
  440 #ifndef __assume_aligned
  441 #define __assume_aligned(a, ...)
  442 #endif
  443 
  444 
  445 /* Are two types/vars the same type (ignoring qualifiers)? */
  446 #ifndef __same_type
  447 # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
  448 #endif
  449 
  450 /* Is this type a native word size -- useful for atomic operations */
  451 #ifndef __native_word
  452 # define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
  453 #endif
  454 
  455 /* Compile time object size, -1 for unknown */
  456 #ifndef __compiletime_object_size
  457 # define __compiletime_object_size(obj) -1
  458 #endif
  459 #ifndef __compiletime_warning
  460 # define __compiletime_warning(message)
  461 #endif
  462 #ifndef __compiletime_error
  463 # define __compiletime_error(message)
  464 /*
  465  * Sparse complains of variable sized arrays due to the temporary variable in
  466  * __compiletime_assert. Unfortunately we can't just expand it out to make
  467  * sparse see a constant array size without breaking compiletime_assert on old
  468  * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether.
  469  */
  470 # ifndef __CHECKER__
  471 #  define __compiletime_error_fallback(condition) \
  472 	do {  } while (0)
  473 # endif
  474 #endif
  475 #ifndef __compiletime_error_fallback
  476 # define __compiletime_error_fallback(condition) do { } while (0)
  477 #endif
  478 
  479 #define __compiletime_assert(condition, msg, prefix, suffix)		\
  480 	do {								\
  481 		bool __cond = !(condition);				\
  482 		extern void prefix ## suffix(void) __compiletime_error(msg); \
  483 		if (__cond)						\
  484 			prefix ## suffix();				\
  485 		__compiletime_error_fallback(__cond);			\
  486 	} while (0)
  487 
  488 #define _compiletime_assert(condition, msg, prefix, suffix) \
  489 	__compiletime_assert(condition, msg, prefix, suffix)
  490 
  491 /**
  492  * compiletime_assert - break build and emit msg if condition is false
  493  * @condition: a compile-time constant condition to check
  494  * @msg:       a message to emit if condition is false
  495  *
  496  * In tradition of POSIX assert, this macro will break the build if the
  497  * supplied condition is *false*, emitting the supplied error message if the
  498  * compiler has support to do so.
  499  */
  500 #define compiletime_assert(condition, msg) \
  501 	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
  502 
  503 #define compiletime_assert_atomic_type(t)				\
  504 	compiletime_assert(__native_word(t),				\
  505 		"Need native word sized stores/loads for atomicity.")
  506 
  507 /*
  508  * Prevent the compiler from merging or refetching accesses.  The compiler
  509  * is also forbidden from reordering successive instances of ACCESS_ONCE(),
  510  * but only when the compiler is aware of some particular ordering.  One way
  511  * to make the compiler aware of ordering is to put the two invocations of
  512  * ACCESS_ONCE() in different C statements.
  513  *
  514  * ACCESS_ONCE will only work on scalar types. For union types, ACCESS_ONCE
  515  * on a union member will work as long as the size of the member matches the
  516  * size of the union and the size is smaller than word size.
  517  *
  518  * The major use cases of ACCESS_ONCE used to be (1) Mediating communication
  519  * between process-level code and irq/NMI handlers, all running on the same CPU,
  520  * and (2) Ensuring that the compiler does not  fold, spindle, or otherwise
  521  * mutilate accesses that either do not require ordering or that interact
  522  * with an explicit memory barrier or atomic instruction that provides the
  523  * required ordering.
  524  *
  525  * If possible use READ_ONCE()/WRITE_ONCE() instead.
  526  */
  527 #define __ACCESS_ONCE(x) ({ \
  528 	 __maybe_unused typeof(x) __var = (__force typeof(x)) 0; \
  529 	(volatile typeof(x) *)&(x); })
  530 #define ACCESS_ONCE(x) (*__ACCESS_ONCE(x))
  531 
  532 /**
  533  * lockless_dereference() - safely load a pointer for later dereference
  534  * @p: The pointer to load
  535  *
  536  * Similar to rcu_dereference(), but for situations where the pointed-to
  537  * object's lifetime is managed by something other than RCU.  That
  538  * "something other" might be reference counting or simple immortality.
  539  */
  540 #define lockless_dereference(p) \
  541 ({ \
  542 	typeof(p) _________p1 = READ_ONCE(p); \
  543 	smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
  544 	(_________p1); \
  545 })
  546 
  547 /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */
  548 #ifdef CONFIG_KPROBES
  549 # define __kprobes	__attribute__((__section__(".kprobes.text")))
  550 # define nokprobe_inline	__always_inline
  551 #else
  552 # define __kprobes
  553 # define nokprobe_inline	inline
  554 #endif
  555 #endif /* __LINUX_COMPILER_H */                 1 #ifndef _LINUX_LIST_H
    2 #define _LINUX_LIST_H
    3 
    4 #include <linux/types.h>
    5 #include <linux/stddef.h>
    6 #include <linux/poison.h>
    7 #include <linux/const.h>
    8 #include <linux/kernel.h>
    9 
   10 /*
   11  * Simple doubly linked list implementation.
   12  *
   13  * Some of the internal functions ("__xxx") are useful when
   14  * manipulating whole lists rather than single entries, as
   15  * sometimes we already know the next/prev entries and we can
   16  * generate better code by using them directly rather than
   17  * using the generic single-entry routines.
   18  */
   19 
   20 #define LIST_HEAD_INIT(name) { &(name), &(name) }
   21 
   22 #define LIST_HEAD(name) \
   23 	struct list_head name = LIST_HEAD_INIT(name)
   24 
   25 static inline void INIT_LIST_HEAD(struct list_head *list)
   26 {
   27 	WRITE_ONCE(list->next, list);
   28 	list->prev = list;
   29 }
   30 
   31 /*
   32  * Insert a new entry between two known consecutive entries.
   33  *
   34  * This is only for internal list manipulation where we know
   35  * the prev/next entries already!
   36  */
   37 #ifndef CONFIG_DEBUG_LIST
   38 static inline void __list_add(struct list_head *new,
   39 			      struct list_head *prev,
   40 			      struct list_head *next)
   41 {
   42 	next->prev = new;
   43 	new->next = next;
   44 	new->prev = prev;
   45 	WRITE_ONCE(prev->next, new);
   46 }
   47 #else
   48 extern void __list_add(struct list_head *new,
   49 			      struct list_head *prev,
   50 			      struct list_head *next);
   51 #endif
   52 
   53 /**
   54  * list_add - add a new entry
   55  * @new: new entry to be added
   56  * @head: list head to add it after
   57  *
   58  * Insert a new entry after the specified head.
   59  * This is good for implementing stacks.
   60  */
   61 static inline void list_add(struct list_head *new, struct list_head *head)
   62 {
   63 	__list_add(new, head, head->next);
   64 }
   65 
   66 
   67 /**
   68  * list_add_tail - add a new entry
   69  * @new: new entry to be added
   70  * @head: list head to add it before
   71  *
   72  * Insert a new entry before the specified head.
   73  * This is useful for implementing queues.
   74  */
   75 static inline void list_add_tail(struct list_head *new, struct list_head *head)
   76 {
   77 	__list_add(new, head->prev, head);
   78 }
   79 
   80 /*
   81  * Delete a list entry by making the prev/next entries
   82  * point to each other.
   83  *
   84  * This is only for internal list manipulation where we know
   85  * the prev/next entries already!
   86  */
   87 static inline void __list_del(struct list_head * prev, struct list_head * next)
   88 {
   89 	next->prev = prev;
   90 	WRITE_ONCE(prev->next, next);
   91 }
   92 
   93 /**
   94  * list_del - deletes entry from list.
   95  * @entry: the element to delete from the list.
   96  * Note: list_empty() on entry does not return true after this, the entry is
   97  * in an undefined state.
   98  */
   99 #ifndef CONFIG_DEBUG_LIST
  100 static inline void __list_del_entry(struct list_head *entry)
  101 {
  102 	__list_del(entry->prev, entry->next);
  103 }
  104 
  105 static inline void list_del(struct list_head *entry)
  106 {
  107 	__list_del(entry->prev, entry->next);
  108 	entry->next = LIST_POISON1;
  109 	entry->prev = LIST_POISON2;
  110 }
  111 #else
  112 extern void __list_del_entry(struct list_head *entry);
  113 extern void list_del(struct list_head *entry);
  114 #endif
  115 
  116 #ifdef CONFIG_DEBUG_LIST
  117 /*
  118  * See devm_memremap_pages() which wants DEBUG_LIST=y to assert if one
  119  * of the pages it allocates is ever passed to list_add()
  120  */
  121 extern void list_force_poison(struct list_head *entry);
  122 #else
  123 /* fallback to the less strict LIST_POISON* definitions */
  124 #define list_force_poison list_del
  125 #endif
  126 
  127 /**
  128  * list_replace - replace old entry by new one
  129  * @old : the element to be replaced
  130  * @new : the new element to insert
  131  *
  132  * If @old was empty, it will be overwritten.
  133  */
  134 static inline void list_replace(struct list_head *old,
  135 				struct list_head *new)
  136 {
  137 	new->next = old->next;
  138 	new->next->prev = new;
  139 	new->prev = old->prev;
  140 	new->prev->next = new;
  141 }
  142 
  143 static inline void list_replace_init(struct list_head *old,
  144 					struct list_head *new)
  145 {
  146 	list_replace(old, new);
  147 	INIT_LIST_HEAD(old);
  148 }
  149 
  150 /**
  151  * list_del_init - deletes entry from list and reinitialize it.
  152  * @entry: the element to delete from the list.
  153  */
  154 static inline void list_del_init(struct list_head *entry)
  155 {
  156 	__list_del_entry(entry);
  157 	INIT_LIST_HEAD(entry);
  158 }
  159 
  160 /**
  161  * list_move - delete from one list and add as another's head
  162  * @list: the entry to move
  163  * @head: the head that will precede our entry
  164  */
  165 static inline void list_move(struct list_head *list, struct list_head *head)
  166 {
  167 	__list_del_entry(list);
  168 	list_add(list, head);
  169 }
  170 
  171 /**
  172  * list_move_tail - delete from one list and add as another's tail
  173  * @list: the entry to move
  174  * @head: the head that will follow our entry
  175  */
  176 static inline void list_move_tail(struct list_head *list,
  177 				  struct list_head *head)
  178 {
  179 	__list_del_entry(list);
  180 	list_add_tail(list, head);
  181 }
  182 
  183 /**
  184  * list_is_last - tests whether @list is the last entry in list @head
  185  * @list: the entry to test
  186  * @head: the head of the list
  187  */
  188 static inline int list_is_last(const struct list_head *list,
  189 				const struct list_head *head)
  190 {
  191 	return list->next == head;
  192 }
  193 
  194 /**
  195  * list_empty - tests whether a list is empty
  196  * @head: the list to test.
  197  */
  198 static inline int list_empty(const struct list_head *head)
  199 {
  200 	return READ_ONCE(head->next) == head;
  201 }
  202 
  203 /**
  204  * list_empty_careful - tests whether a list is empty and not being modified
  205  * @head: the list to test
  206  *
  207  * Description:
  208  * tests whether a list is empty _and_ checks that no other CPU might be
  209  * in the process of modifying either member (next or prev)
  210  *
  211  * NOTE: using list_empty_careful() without synchronization
  212  * can only be safe if the only activity that can happen
  213  * to the list entry is list_del_init(). Eg. it cannot be used
  214  * if another CPU could re-list_add() it.
  215  */
  216 static inline int list_empty_careful(const struct list_head *head)
  217 {
  218 	struct list_head *next = head->next;
  219 	return (next == head) && (next == head->prev);
  220 }
  221 
  222 /**
  223  * list_rotate_left - rotate the list to the left
  224  * @head: the head of the list
  225  */
  226 static inline void list_rotate_left(struct list_head *head)
  227 {
  228 	struct list_head *first;
  229 
  230 	if (!list_empty(head)) {
  231 		first = head->next;
  232 		list_move_tail(first, head);
  233 	}
  234 }
  235 
  236 /**
  237  * list_is_singular - tests whether a list has just one entry.
  238  * @head: the list to test.
  239  */
  240 static inline int list_is_singular(const struct list_head *head)
  241 {
  242 	return !list_empty(head) && (head->next == head->prev);
  243 }
  244 
  245 static inline void __list_cut_position(struct list_head *list,
  246 		struct list_head *head, struct list_head *entry)
  247 {
  248 	struct list_head *new_first = entry->next;
  249 	list->next = head->next;
  250 	list->next->prev = list;
  251 	list->prev = entry;
  252 	entry->next = list;
  253 	head->next = new_first;
  254 	new_first->prev = head;
  255 }
  256 
  257 /**
  258  * list_cut_position - cut a list into two
  259  * @list: a new list to add all removed entries
  260  * @head: a list with entries
  261  * @entry: an entry within head, could be the head itself
  262  *	and if so we won't cut the list
  263  *
  264  * This helper moves the initial part of @head, up to and
  265  * including @entry, from @head to @list. You should
  266  * pass on @entry an element you know is on @head. @list
  267  * should be an empty list or a list you do not care about
  268  * losing its data.
  269  *
  270  */
  271 static inline void list_cut_position(struct list_head *list,
  272 		struct list_head *head, struct list_head *entry)
  273 {
  274 	if (list_empty(head))
  275 		return;
  276 	if (list_is_singular(head) &&
  277 		(head->next != entry && head != entry))
  278 		return;
  279 	if (entry == head)
  280 		INIT_LIST_HEAD(list);
  281 	else
  282 		__list_cut_position(list, head, entry);
  283 }
  284 
  285 static inline void __list_splice(const struct list_head *list,
  286 				 struct list_head *prev,
  287 				 struct list_head *next)
  288 {
  289 	struct list_head *first = list->next;
  290 	struct list_head *last = list->prev;
  291 
  292 	first->prev = prev;
  293 	prev->next = first;
  294 
  295 	last->next = next;
  296 	next->prev = last;
  297 }
  298 
  299 /**
  300  * list_splice - join two lists, this is designed for stacks
  301  * @list: the new list to add.
  302  * @head: the place to add it in the first list.
  303  */
  304 static inline void list_splice(const struct list_head *list,
  305 				struct list_head *head)
  306 {
  307 	if (!list_empty(list))
  308 		__list_splice(list, head, head->next);
  309 }
  310 
  311 /**
  312  * list_splice_tail - join two lists, each list being a queue
  313  * @list: the new list to add.
  314  * @head: the place to add it in the first list.
  315  */
  316 static inline void list_splice_tail(struct list_head *list,
  317 				struct list_head *head)
  318 {
  319 	if (!list_empty(list))
  320 		__list_splice(list, head->prev, head);
  321 }
  322 
  323 /**
  324  * list_splice_init - join two lists and reinitialise the emptied list.
  325  * @list: the new list to add.
  326  * @head: the place to add it in the first list.
  327  *
  328  * The list at @list is reinitialised
  329  */
  330 static inline void list_splice_init(struct list_head *list,
  331 				    struct list_head *head)
  332 {
  333 	if (!list_empty(list)) {
  334 		__list_splice(list, head, head->next);
  335 		INIT_LIST_HEAD(list);
  336 	}
  337 }
  338 
  339 /**
  340  * list_splice_tail_init - join two lists and reinitialise the emptied list
  341  * @list: the new list to add.
  342  * @head: the place to add it in the first list.
  343  *
  344  * Each of the lists is a queue.
  345  * The list at @list is reinitialised
  346  */
  347 static inline void list_splice_tail_init(struct list_head *list,
  348 					 struct list_head *head)
  349 {
  350 	if (!list_empty(list)) {
  351 		__list_splice(list, head->prev, head);
  352 		INIT_LIST_HEAD(list);
  353 	}
  354 }
  355 
  356 /**
  357  * list_entry - get the struct for this entry
  358  * @ptr:	the &struct list_head pointer.
  359  * @type:	the type of the struct this is embedded in.
  360  * @member:	the name of the list_head within the struct.
  361  */
  362 #define list_entry(ptr, type, member) \
  363 	container_of(ptr, type, member)
  364 
  365 /**
  366  * list_first_entry - get the first element from a list
  367  * @ptr:	the list head to take the element from.
  368  * @type:	the type of the struct this is embedded in.
  369  * @member:	the name of the list_head within the struct.
  370  *
  371  * Note, that list is expected to be not empty.
  372  */
  373 #define list_first_entry(ptr, type, member) \
  374 	list_entry((ptr)->next, type, member)
  375 
  376 /**
  377  * list_last_entry - get the last element from a list
  378  * @ptr:	the list head to take the element from.
  379  * @type:	the type of the struct this is embedded in.
  380  * @member:	the name of the list_head within the struct.
  381  *
  382  * Note, that list is expected to be not empty.
  383  */
  384 #define list_last_entry(ptr, type, member) \
  385 	list_entry((ptr)->prev, type, member)
  386 
  387 /**
  388  * list_first_entry_or_null - get the first element from a list
  389  * @ptr:	the list head to take the element from.
  390  * @type:	the type of the struct this is embedded in.
  391  * @member:	the name of the list_head within the struct.
  392  *
  393  * Note that if the list is empty, it returns NULL.
  394  */
  395 #define list_first_entry_or_null(ptr, type, member) \
  396 	(!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL)
  397 
  398 /**
  399  * list_next_entry - get the next element in list
  400  * @pos:	the type * to cursor
  401  * @member:	the name of the list_head within the struct.
  402  */
  403 #define list_next_entry(pos, member) \
  404 	list_entry((pos)->member.next, typeof(*(pos)), member)
  405 
  406 /**
  407  * list_prev_entry - get the prev element in list
  408  * @pos:	the type * to cursor
  409  * @member:	the name of the list_head within the struct.
  410  */
  411 #define list_prev_entry(pos, member) \
  412 	list_entry((pos)->member.prev, typeof(*(pos)), member)
  413 
  414 /**
  415  * list_for_each	-	iterate over a list
  416  * @pos:	the &struct list_head to use as a loop cursor.
  417  * @head:	the head for your list.
  418  */
  419 #define list_for_each(pos, head) \
  420 	for (pos = (head)->next; pos != (head); pos = pos->next)
  421 
  422 /**
  423  * list_for_each_prev	-	iterate over a list backwards
  424  * @pos:	the &struct list_head to use as a loop cursor.
  425  * @head:	the head for your list.
  426  */
  427 #define list_for_each_prev(pos, head) \
  428 	for (pos = (head)->prev; pos != (head); pos = pos->prev)
  429 
  430 /**
  431  * list_for_each_safe - iterate over a list safe against removal of list entry
  432  * @pos:	the &struct list_head to use as a loop cursor.
  433  * @n:		another &struct list_head to use as temporary storage
  434  * @head:	the head for your list.
  435  */
  436 #define list_for_each_safe(pos, n, head) \
  437 	for (pos = (head)->next, n = pos->next; pos != (head); \
  438 		pos = n, n = pos->next)
  439 
  440 /**
  441  * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
  442  * @pos:	the &struct list_head to use as a loop cursor.
  443  * @n:		another &struct list_head to use as temporary storage
  444  * @head:	the head for your list.
  445  */
  446 #define list_for_each_prev_safe(pos, n, head) \
  447 	for (pos = (head)->prev, n = pos->prev; \
  448 	     pos != (head); \
  449 	     pos = n, n = pos->prev)
  450 
  451 /**
  452  * list_for_each_entry	-	iterate over list of given type
  453  * @pos:	the type * to use as a loop cursor.
  454  * @head:	the head for your list.
  455  * @member:	the name of the list_head within the struct.
  456  */
  457 #define list_for_each_entry(pos, head, member)				\
  458 	for (pos = list_first_entry(head, typeof(*pos), member);	\
  459 	     &pos->member != (head);					\
  460 	     pos = list_next_entry(pos, member))
  461 
  462 /**
  463  * list_for_each_entry_reverse - iterate backwards over list of given type.
  464  * @pos:	the type * to use as a loop cursor.
  465  * @head:	the head for your list.
  466  * @member:	the name of the list_head within the struct.
  467  */
  468 #define list_for_each_entry_reverse(pos, head, member)			\
  469 	for (pos = list_last_entry(head, typeof(*pos), member);		\
  470 	     &pos->member != (head); 					\
  471 	     pos = list_prev_entry(pos, member))
  472 
  473 /**
  474  * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
  475  * @pos:	the type * to use as a start point
  476  * @head:	the head of the list
  477  * @member:	the name of the list_head within the struct.
  478  *
  479  * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
  480  */
  481 #define list_prepare_entry(pos, head, member) \
  482 	((pos) ? : list_entry(head, typeof(*pos), member))
  483 
  484 /**
  485  * list_for_each_entry_continue - continue iteration over list of given type
  486  * @pos:	the type * to use as a loop cursor.
  487  * @head:	the head for your list.
  488  * @member:	the name of the list_head within the struct.
  489  *
  490  * Continue to iterate over list of given type, continuing after
  491  * the current position.
  492  */
  493 #define list_for_each_entry_continue(pos, head, member) 		\
  494 	for (pos = list_next_entry(pos, member);			\
  495 	     &pos->member != (head);					\
  496 	     pos = list_next_entry(pos, member))
  497 
  498 /**
  499  * list_for_each_entry_continue_reverse - iterate backwards from the given point
  500  * @pos:	the type * to use as a loop cursor.
  501  * @head:	the head for your list.
  502  * @member:	the name of the list_head within the struct.
  503  *
  504  * Start to iterate over list of given type backwards, continuing after
  505  * the current position.
  506  */
  507 #define list_for_each_entry_continue_reverse(pos, head, member)		\
  508 	for (pos = list_prev_entry(pos, member);			\
  509 	     &pos->member != (head);					\
  510 	     pos = list_prev_entry(pos, member))
  511 
  512 /**
  513  * list_for_each_entry_from - iterate over list of given type from the current point
  514  * @pos:	the type * to use as a loop cursor.
  515  * @head:	the head for your list.
  516  * @member:	the name of the list_head within the struct.
  517  *
  518  * Iterate over list of given type, continuing from current position.
  519  */
  520 #define list_for_each_entry_from(pos, head, member) 			\
  521 	for (; &pos->member != (head);					\
  522 	     pos = list_next_entry(pos, member))
  523 
  524 /**
  525  * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  526  * @pos:	the type * to use as a loop cursor.
  527  * @n:		another type * to use as temporary storage
  528  * @head:	the head for your list.
  529  * @member:	the name of the list_head within the struct.
  530  */
  531 #define list_for_each_entry_safe(pos, n, head, member)			\
  532 	for (pos = list_first_entry(head, typeof(*pos), member),	\
  533 		n = list_next_entry(pos, member);			\
  534 	     &pos->member != (head); 					\
  535 	     pos = n, n = list_next_entry(n, member))
  536 
  537 /**
  538  * list_for_each_entry_safe_continue - continue list iteration safe against removal
  539  * @pos:	the type * to use as a loop cursor.
  540  * @n:		another type * to use as temporary storage
  541  * @head:	the head for your list.
  542  * @member:	the name of the list_head within the struct.
  543  *
  544  * Iterate over list of given type, continuing after current point,
  545  * safe against removal of list entry.
  546  */
  547 #define list_for_each_entry_safe_continue(pos, n, head, member) 		\
  548 	for (pos = list_next_entry(pos, member), 				\
  549 		n = list_next_entry(pos, member);				\
  550 	     &pos->member != (head);						\
  551 	     pos = n, n = list_next_entry(n, member))
  552 
  553 /**
  554  * list_for_each_entry_safe_from - iterate over list from current point safe against removal
  555  * @pos:	the type * to use as a loop cursor.
  556  * @n:		another type * to use as temporary storage
  557  * @head:	the head for your list.
  558  * @member:	the name of the list_head within the struct.
  559  *
  560  * Iterate over list of given type from current point, safe against
  561  * removal of list entry.
  562  */
  563 #define list_for_each_entry_safe_from(pos, n, head, member) 			\
  564 	for (n = list_next_entry(pos, member);					\
  565 	     &pos->member != (head);						\
  566 	     pos = n, n = list_next_entry(n, member))
  567 
  568 /**
  569  * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
  570  * @pos:	the type * to use as a loop cursor.
  571  * @n:		another type * to use as temporary storage
  572  * @head:	the head for your list.
  573  * @member:	the name of the list_head within the struct.
  574  *
  575  * Iterate backwards over list of given type, safe against removal
  576  * of list entry.
  577  */
  578 #define list_for_each_entry_safe_reverse(pos, n, head, member)		\
  579 	for (pos = list_last_entry(head, typeof(*pos), member),		\
  580 		n = list_prev_entry(pos, member);			\
  581 	     &pos->member != (head); 					\
  582 	     pos = n, n = list_prev_entry(n, member))
  583 
  584 /**
  585  * list_safe_reset_next - reset a stale list_for_each_entry_safe loop
  586  * @pos:	the loop cursor used in the list_for_each_entry_safe loop
  587  * @n:		temporary storage used in list_for_each_entry_safe
  588  * @member:	the name of the list_head within the struct.
  589  *
  590  * list_safe_reset_next is not safe to use in general if the list may be
  591  * modified concurrently (eg. the lock is dropped in the loop body). An
  592  * exception to this is if the cursor element (pos) is pinned in the list,
  593  * and list_safe_reset_next is called after re-taking the lock and before
  594  * completing the current iteration of the loop body.
  595  */
  596 #define list_safe_reset_next(pos, n, member)				\
  597 	n = list_next_entry(pos, member)
  598 
  599 /*
  600  * Double linked lists with a single pointer list head.
  601  * Mostly useful for hash tables where the two pointer list head is
  602  * too wasteful.
  603  * You lose the ability to access the tail in O(1).
  604  */
  605 
  606 #define HLIST_HEAD_INIT { .first = NULL }
  607 #define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
  608 #define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
  609 static inline void INIT_HLIST_NODE(struct hlist_node *h)
  610 {
  611 	h->next = NULL;
  612 	h->pprev = NULL;
  613 }
  614 
  615 static inline int hlist_unhashed(const struct hlist_node *h)
  616 {
  617 	return !h->pprev;
  618 }
  619 
  620 static inline int hlist_empty(const struct hlist_head *h)
  621 {
  622 	return !READ_ONCE(h->first);
  623 }
  624 
  625 static inline void __hlist_del(struct hlist_node *n)
  626 {
  627 	struct hlist_node *next = n->next;
  628 	struct hlist_node **pprev = n->pprev;
  629 
  630 	WRITE_ONCE(*pprev, next);
  631 	if (next)
  632 		next->pprev = pprev;
  633 }
  634 
  635 static inline void hlist_del(struct hlist_node *n)
  636 {
  637 	__hlist_del(n);
  638 	n->next = LIST_POISON1;
  639 	n->pprev = LIST_POISON2;
  640 }
  641 
  642 static inline void hlist_del_init(struct hlist_node *n)
  643 {
  644 	if (!hlist_unhashed(n)) {
  645 		__hlist_del(n);
  646 		INIT_HLIST_NODE(n);
  647 	}
  648 }
  649 
  650 static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
  651 {
  652 	struct hlist_node *first = h->first;
  653 	n->next = first;
  654 	if (first)
  655 		first->pprev = &n->next;
  656 	WRITE_ONCE(h->first, n);
  657 	n->pprev = &h->first;
  658 }
  659 
  660 /* next must be != NULL */
  661 static inline void hlist_add_before(struct hlist_node *n,
  662 					struct hlist_node *next)
  663 {
  664 	n->pprev = next->pprev;
  665 	n->next = next;
  666 	next->pprev = &n->next;
  667 	WRITE_ONCE(*(n->pprev), n);
  668 }
  669 
  670 static inline void hlist_add_behind(struct hlist_node *n,
  671 				    struct hlist_node *prev)
  672 {
  673 	n->next = prev->next;
  674 	WRITE_ONCE(prev->next, n);
  675 	n->pprev = &prev->next;
  676 
  677 	if (n->next)
  678 		n->next->pprev  = &n->next;
  679 }
  680 
  681 /* after that we'll appear to be on some hlist and hlist_del will work */
  682 static inline void hlist_add_fake(struct hlist_node *n)
  683 {
  684 	n->pprev = &n->next;
  685 }
  686 
  687 static inline bool hlist_fake(struct hlist_node *h)
  688 {
  689 	return h->pprev == &h->next;
  690 }
  691 
  692 /*
  693  * Move a list from one list head to another. Fixup the pprev
  694  * reference of the first entry if it exists.
  695  */
  696 static inline void hlist_move_list(struct hlist_head *old,
  697 				   struct hlist_head *new)
  698 {
  699 	new->first = old->first;
  700 	if (new->first)
  701 		new->first->pprev = &new->first;
  702 	old->first = NULL;
  703 }
  704 
  705 #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
  706 
  707 #define hlist_for_each(pos, head) \
  708 	for (pos = (head)->first; pos ; pos = pos->next)
  709 
  710 #define hlist_for_each_safe(pos, n, head) \
  711 	for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
  712 	     pos = n)
  713 
  714 #define hlist_entry_safe(ptr, type, member) \
  715 	({ typeof(ptr) ____ptr = (ptr); \
  716 	   ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
  717 	})
  718 
  719 /**
  720  * hlist_for_each_entry	- iterate over list of given type
  721  * @pos:	the type * to use as a loop cursor.
  722  * @head:	the head for your list.
  723  * @member:	the name of the hlist_node within the struct.
  724  */
  725 #define hlist_for_each_entry(pos, head, member)				\
  726 	for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
  727 	     pos;							\
  728 	     pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
  729 
  730 /**
  731  * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
  732  * @pos:	the type * to use as a loop cursor.
  733  * @member:	the name of the hlist_node within the struct.
  734  */
  735 #define hlist_for_each_entry_continue(pos, member)			\
  736 	for (pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member);\
  737 	     pos;							\
  738 	     pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
  739 
  740 /**
  741  * hlist_for_each_entry_from - iterate over a hlist continuing from current point
  742  * @pos:	the type * to use as a loop cursor.
  743  * @member:	the name of the hlist_node within the struct.
  744  */
  745 #define hlist_for_each_entry_from(pos, member)				\
  746 	for (; pos;							\
  747 	     pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
  748 
  749 /**
  750  * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  751  * @pos:	the type * to use as a loop cursor.
  752  * @n:		another &struct hlist_node to use as temporary storage
  753  * @head:	the head for your list.
  754  * @member:	the name of the hlist_node within the struct.
  755  */
  756 #define hlist_for_each_entry_safe(pos, n, head, member) 		\
  757 	for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\
  758 	     pos && ({ n = pos->member.next; 1; });			\
  759 	     pos = hlist_entry_safe(n, typeof(*pos), member))
  760 
  761 #endif                 1 /*
    2  * Written by Mark Hemment, 1996 (markhe@nextd.demon.co.uk).
    3  *
    4  * (C) SGI 2006, Christoph Lameter
    5  * 	Cleaned up and restructured to ease the addition of alternative
    6  * 	implementations of SLAB allocators.
    7  * (C) Linux Foundation 2008-2013
    8  *      Unified interface for all slab allocators
    9  */
   10 
   11 #ifndef _LINUX_SLAB_H
   12 #define	_LINUX_SLAB_H
   13 
   14 #include <linux/gfp.h>
   15 #include <linux/types.h>
   16 #include <linux/workqueue.h>
   17 
   18 
   19 /*
   20  * Flags to pass to kmem_cache_create().
   21  * The ones marked DEBUG are only valid if CONFIG_DEBUG_SLAB is set.
   22  */
   23 #define SLAB_DEBUG_FREE		0x00000100UL	/* DEBUG: Perform (expensive) checks on free */
   24 #define SLAB_RED_ZONE		0x00000400UL	/* DEBUG: Red zone objs in a cache */
   25 #define SLAB_POISON		0x00000800UL	/* DEBUG: Poison objects */
   26 #define SLAB_HWCACHE_ALIGN	0x00002000UL	/* Align objs on cache lines */
   27 #define SLAB_CACHE_DMA		0x00004000UL	/* Use GFP_DMA memory */
   28 #define SLAB_STORE_USER		0x00010000UL	/* DEBUG: Store the last owner for bug hunting */
   29 #define SLAB_PANIC		0x00040000UL	/* Panic if kmem_cache_create() fails */
   30 /*
   31  * SLAB_DESTROY_BY_RCU - **WARNING** READ THIS!
   32  *
   33  * This delays freeing the SLAB page by a grace period, it does _NOT_
   34  * delay object freeing. This means that if you do kmem_cache_free()
   35  * that memory location is free to be reused at any time. Thus it may
   36  * be possible to see another object there in the same RCU grace period.
   37  *
   38  * This feature only ensures the memory location backing the object
   39  * stays valid, the trick to using this is relying on an independent
   40  * object validation pass. Something like:
   41  *
   42  *  rcu_read_lock()
   43  * again:
   44  *  obj = lockless_lookup(key);
   45  *  if (obj) {
   46  *    if (!try_get_ref(obj)) // might fail for free objects
   47  *      goto again;
   48  *
   49  *    if (obj->key != key) { // not the object we expected
   50  *      put_ref(obj);
   51  *      goto again;
   52  *    }
   53  *  }
   54  *  rcu_read_unlock();
   55  *
   56  * This is useful if we need to approach a kernel structure obliquely,
   57  * from its address obtained without the usual locking. We can lock
   58  * the structure to stabilize it and check it's still at the given address,
   59  * only if we can be sure that the memory has not been meanwhile reused
   60  * for some other kind of object (which our subsystem's lock might corrupt).
   61  *
   62  * rcu_read_lock before reading the address, then rcu_read_unlock after
   63  * taking the spinlock within the structure expected at that address.
   64  */
   65 #define SLAB_DESTROY_BY_RCU	0x00080000UL	/* Defer freeing slabs to RCU */
   66 #define SLAB_MEM_SPREAD		0x00100000UL	/* Spread some memory over cpuset */
   67 #define SLAB_TRACE		0x00200000UL	/* Trace allocations and frees */
   68 
   69 /* Flag to prevent checks on free */
   70 #ifdef CONFIG_DEBUG_OBJECTS
   71 # define SLAB_DEBUG_OBJECTS	0x00400000UL
   72 #else
   73 # define SLAB_DEBUG_OBJECTS	0x00000000UL
   74 #endif
   75 
   76 #define SLAB_NOLEAKTRACE	0x00800000UL	/* Avoid kmemleak tracing */
   77 
   78 /* Don't track use of uninitialized memory */
   79 #ifdef CONFIG_KMEMCHECK
   80 # define SLAB_NOTRACK		0x01000000UL
   81 #else
   82 # define SLAB_NOTRACK		0x00000000UL
   83 #endif
   84 #ifdef CONFIG_FAILSLAB
   85 # define SLAB_FAILSLAB		0x02000000UL	/* Fault injection mark */
   86 #else
   87 # define SLAB_FAILSLAB		0x00000000UL
   88 #endif
   89 #if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
   90 # define SLAB_ACCOUNT		0x04000000UL	/* Account to memcg */
   91 #else
   92 # define SLAB_ACCOUNT		0x00000000UL
   93 #endif
   94 
   95 /* The following flags affect the page allocator grouping pages by mobility */
   96 #define SLAB_RECLAIM_ACCOUNT	0x00020000UL		/* Objects are reclaimable */
   97 #define SLAB_TEMPORARY		SLAB_RECLAIM_ACCOUNT	/* Objects are short-lived */
   98 /*
   99  * ZERO_SIZE_PTR will be returned for zero sized kmalloc requests.
  100  *
  101  * Dereferencing ZERO_SIZE_PTR will lead to a distinct access fault.
  102  *
  103  * ZERO_SIZE_PTR can be passed to kfree though in the same way that NULL can.
  104  * Both make kfree a no-op.
  105  */
  106 #define ZERO_SIZE_PTR ((void *)16)
  107 
  108 #define ZERO_OR_NULL_PTR(x) ((unsigned long)(x) <= \
  109 				(unsigned long)ZERO_SIZE_PTR)
  110 
  111 #include <linux/kmemleak.h>
  112 #include <linux/kasan.h>
  113 
  114 struct mem_cgroup;
  115 /*
  116  * struct kmem_cache related prototypes
  117  */
  118 void __init kmem_cache_init(void);
  119 bool slab_is_available(void);
  120 
  121 struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
  122 			unsigned long,
  123 			void (*)(void *));
  124 void kmem_cache_destroy(struct kmem_cache *);
  125 int kmem_cache_shrink(struct kmem_cache *);
  126 
  127 void memcg_create_kmem_cache(struct mem_cgroup *, struct kmem_cache *);
  128 void memcg_deactivate_kmem_caches(struct mem_cgroup *);
  129 void memcg_destroy_kmem_caches(struct mem_cgroup *);
  130 
  131 /*
  132  * Please use this macro to create slab caches. Simply specify the
  133  * name of the structure and maybe some flags that are listed above.
  134  *
  135  * The alignment of the struct determines object alignment. If you
  136  * f.e. add ____cacheline_aligned_in_smp to the struct declaration
  137  * then the objects will be properly aligned in SMP configurations.
  138  */
  139 #define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\
  140 		sizeof(struct __struct), __alignof__(struct __struct),\
  141 		(__flags), NULL)
  142 
  143 /*
  144  * Common kmalloc functions provided by all allocators
  145  */
  146 void * __must_check __krealloc(const void *, size_t, gfp_t);
  147 void * __must_check krealloc(const void *, size_t, gfp_t);
  148 void kfree(const void *);
  149 void kzfree(const void *);
  150 size_t ksize(const void *);
  151 
  152 /*
  153  * Some archs want to perform DMA into kmalloc caches and need a guaranteed
  154  * alignment larger than the alignment of a 64-bit integer.
  155  * Setting ARCH_KMALLOC_MINALIGN in arch headers allows that.
  156  */
  157 #if defined(ARCH_DMA_MINALIGN) && ARCH_DMA_MINALIGN > 8
  158 #define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
  159 #define KMALLOC_MIN_SIZE ARCH_DMA_MINALIGN
  160 #define KMALLOC_SHIFT_LOW ilog2(ARCH_DMA_MINALIGN)
  161 #else
  162 #define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
  163 #endif
  164 
  165 /*
  166  * Setting ARCH_SLAB_MINALIGN in arch headers allows a different alignment.
  167  * Intended for arches that get misalignment faults even for 64 bit integer
  168  * aligned buffers.
  169  */
  170 #ifndef ARCH_SLAB_MINALIGN
  171 #define ARCH_SLAB_MINALIGN __alignof__(unsigned long long)
  172 #endif
  173 
  174 /*
  175  * kmalloc and friends return ARCH_KMALLOC_MINALIGN aligned
  176  * pointers. kmem_cache_alloc and friends return ARCH_SLAB_MINALIGN
  177  * aligned pointers.
  178  */
  179 #define __assume_kmalloc_alignment __assume_aligned(ARCH_KMALLOC_MINALIGN)
  180 #define __assume_slab_alignment __assume_aligned(ARCH_SLAB_MINALIGN)
  181 #define __assume_page_alignment __assume_aligned(PAGE_SIZE)
  182 
  183 /*
  184  * Kmalloc array related definitions
  185  */
  186 
  187 #ifdef CONFIG_SLAB
  188 /*
  189  * The largest kmalloc size supported by the SLAB allocators is
  190  * 32 megabyte (2^25) or the maximum allocatable page order if that is
  191  * less than 32 MB.
  192  *
  193  * WARNING: Its not easy to increase this value since the allocators have
  194  * to do various tricks to work around compiler limitations in order to
  195  * ensure proper constant folding.
  196  */
  197 #define KMALLOC_SHIFT_HIGH	((MAX_ORDER + PAGE_SHIFT - 1) <= 25 ? \
  198 				(MAX_ORDER + PAGE_SHIFT - 1) : 25)
  199 #define KMALLOC_SHIFT_MAX	KMALLOC_SHIFT_HIGH
  200 #ifndef KMALLOC_SHIFT_LOW
  201 #define KMALLOC_SHIFT_LOW	5
  202 #endif
  203 #endif
  204 
  205 #ifdef CONFIG_SLUB
  206 /*
  207  * SLUB directly allocates requests fitting in to an order-1 page
  208  * (PAGE_SIZE*2).  Larger requests are passed to the page allocator.
  209  */
  210 #define KMALLOC_SHIFT_HIGH	(PAGE_SHIFT + 1)
  211 #define KMALLOC_SHIFT_MAX	(MAX_ORDER + PAGE_SHIFT)
  212 #ifndef KMALLOC_SHIFT_LOW
  213 #define KMALLOC_SHIFT_LOW	3
  214 #endif
  215 #endif
  216 
  217 #ifdef CONFIG_SLOB
  218 /*
  219  * SLOB passes all requests larger than one page to the page allocator.
  220  * No kmalloc array is necessary since objects of different sizes can
  221  * be allocated from the same page.
  222  */
  223 #define KMALLOC_SHIFT_HIGH	PAGE_SHIFT
  224 #define KMALLOC_SHIFT_MAX	30
  225 #ifndef KMALLOC_SHIFT_LOW
  226 #define KMALLOC_SHIFT_LOW	3
  227 #endif
  228 #endif
  229 
  230 /* Maximum allocatable size */
  231 #define KMALLOC_MAX_SIZE	(1UL << KMALLOC_SHIFT_MAX)
  232 /* Maximum size for which we actually use a slab cache */
  233 #define KMALLOC_MAX_CACHE_SIZE	(1UL << KMALLOC_SHIFT_HIGH)
  234 /* Maximum order allocatable via the slab allocagtor */
  235 #define KMALLOC_MAX_ORDER	(KMALLOC_SHIFT_MAX - PAGE_SHIFT)
  236 
  237 /*
  238  * Kmalloc subsystem.
  239  */
  240 #ifndef KMALLOC_MIN_SIZE
  241 #define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW)
  242 #endif
  243 
  244 /*
  245  * This restriction comes from byte sized index implementation.
  246  * Page size is normally 2^12 bytes and, in this case, if we want to use
  247  * byte sized index which can represent 2^8 entries, the size of the object
  248  * should be equal or greater to 2^12 / 2^8 = 2^4 = 16.
  249  * If minimum size of kmalloc is less than 16, we use it as minimum object
  250  * size and give up to use byte sized index.
  251  */
  252 #define SLAB_OBJ_MIN_SIZE      (KMALLOC_MIN_SIZE < 16 ? \
  253                                (KMALLOC_MIN_SIZE) : 16)
  254 
  255 #ifndef CONFIG_SLOB
  256 extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
  257 #ifdef CONFIG_ZONE_DMA
  258 extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
  259 #endif
  260 
  261 /*
  262  * Figure out which kmalloc slab an allocation of a certain size
  263  * belongs to.
  264  * 0 = zero alloc
  265  * 1 =  65 .. 96 bytes
  266  * 2 = 129 .. 192 bytes
  267  * n = 2^(n-1)+1 .. 2^n
  268  */
  269 static __always_inline int kmalloc_index(size_t size)
  270 {
  271 	if (!size)
  272 		return 0;
  273 
  274 	if (size <= KMALLOC_MIN_SIZE)
  275 		return KMALLOC_SHIFT_LOW;
  276 
  277 	if (KMALLOC_MIN_SIZE <= 32 && size > 64 && size <= 96)
  278 		return 1;
  279 	if (KMALLOC_MIN_SIZE <= 64 && size > 128 && size <= 192)
  280 		return 2;
  281 	if (size <=          8) return 3;
  282 	if (size <=         16) return 4;
  283 	if (size <=         32) return 5;
  284 	if (size <=         64) return 6;
  285 	if (size <=        128) return 7;
  286 	if (size <=        256) return 8;
  287 	if (size <=        512) return 9;
  288 	if (size <=       1024) return 10;
  289 	if (size <=   2 * 1024) return 11;
  290 	if (size <=   4 * 1024) return 12;
  291 	if (size <=   8 * 1024) return 13;
  292 	if (size <=  16 * 1024) return 14;
  293 	if (size <=  32 * 1024) return 15;
  294 	if (size <=  64 * 1024) return 16;
  295 	if (size <= 128 * 1024) return 17;
  296 	if (size <= 256 * 1024) return 18;
  297 	if (size <= 512 * 1024) return 19;
  298 	if (size <= 1024 * 1024) return 20;
  299 	if (size <=  2 * 1024 * 1024) return 21;
  300 	if (size <=  4 * 1024 * 1024) return 22;
  301 	if (size <=  8 * 1024 * 1024) return 23;
  302 	if (size <=  16 * 1024 * 1024) return 24;
  303 	if (size <=  32 * 1024 * 1024) return 25;
  304 	if (size <=  64 * 1024 * 1024) return 26;
  305 	BUG();
  306 
  307 	/* Will never be reached. Needed because the compiler may complain */
  308 	return -1;
  309 }
  310 #endif /* !CONFIG_SLOB */
  311 
  312 void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment;
  313 void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment;
  314 void kmem_cache_free(struct kmem_cache *, void *);
  315 
  316 /*
  317  * Bulk allocation and freeing operations. These are accellerated in an
  318  * allocator specific way to avoid taking locks repeatedly or building
  319  * metadata structures unnecessarily.
  320  *
  321  * Note that interrupts must be enabled when calling these functions.
  322  */
  323 void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
  324 int kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
  325 
  326 #ifdef CONFIG_NUMA
  327 void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment;
  328 void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node) __assume_slab_alignment;
  329 #else
  330 static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node)
  331 {
  332 	return __kmalloc(size, flags);
  333 }
  334 
  335 static __always_inline void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node)
  336 {
  337 	return kmem_cache_alloc(s, flags);
  338 }
  339 #endif
  340 
  341 #ifdef CONFIG_TRACING
  342 extern void *kmem_cache_alloc_trace(struct kmem_cache *, gfp_t, size_t) __assume_slab_alignment;
  343 
  344 #ifdef CONFIG_NUMA
  345 extern void *kmem_cache_alloc_node_trace(struct kmem_cache *s,
  346 					   gfp_t gfpflags,
  347 					   int node, size_t size) __assume_slab_alignment;
  348 #else
  349 static __always_inline void *
  350 kmem_cache_alloc_node_trace(struct kmem_cache *s,
  351 			      gfp_t gfpflags,
  352 			      int node, size_t size)
  353 {
  354 	return kmem_cache_alloc_trace(s, gfpflags, size);
  355 }
  356 #endif /* CONFIG_NUMA */
  357 
  358 #else /* CONFIG_TRACING */
  359 static __always_inline void *kmem_cache_alloc_trace(struct kmem_cache *s,
  360 		gfp_t flags, size_t size)
  361 {
  362 	void *ret = kmem_cache_alloc(s, flags);
  363 
  364 	kasan_kmalloc(s, ret, size);
  365 	return ret;
  366 }
  367 
  368 static __always_inline void *
  369 kmem_cache_alloc_node_trace(struct kmem_cache *s,
  370 			      gfp_t gfpflags,
  371 			      int node, size_t size)
  372 {
  373 	void *ret = kmem_cache_alloc_node(s, gfpflags, node);
  374 
  375 	kasan_kmalloc(s, ret, size);
  376 	return ret;
  377 }
  378 #endif /* CONFIG_TRACING */
  379 
  380 extern void *kmalloc_order(size_t size, gfp_t flags, unsigned int order) __assume_page_alignment;
  381 
  382 #ifdef CONFIG_TRACING
  383 extern void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order) __assume_page_alignment;
  384 #else
  385 static __always_inline void *
  386 kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order)
  387 {
  388 	return kmalloc_order(size, flags, order);
  389 }
  390 #endif
  391 
  392 static __always_inline void *kmalloc_large(size_t size, gfp_t flags)
  393 {
  394 	unsigned int order = get_order(size);
  395 	return kmalloc_order_trace(size, flags, order);
  396 }
  397 
  398 /**
  399  * kmalloc - allocate memory
  400  * @size: how many bytes of memory are required.
  401  * @flags: the type of memory to allocate.
  402  *
  403  * kmalloc is the normal method of allocating memory
  404  * for objects smaller than page size in the kernel.
  405  *
  406  * The @flags argument may be one of:
  407  *
  408  * %GFP_USER - Allocate memory on behalf of user.  May sleep.
  409  *
  410  * %GFP_KERNEL - Allocate normal kernel ram.  May sleep.
  411  *
  412  * %GFP_ATOMIC - Allocation will not sleep.  May use emergency pools.
  413  *   For example, use this inside interrupt handlers.
  414  *
  415  * %GFP_HIGHUSER - Allocate pages from high memory.
  416  *
  417  * %GFP_NOIO - Do not do any I/O at all while trying to get memory.
  418  *
  419  * %GFP_NOFS - Do not make any fs calls while trying to get memory.
  420  *
  421  * %GFP_NOWAIT - Allocation will not sleep.
  422  *
  423  * %__GFP_THISNODE - Allocate node-local memory only.
  424  *
  425  * %GFP_DMA - Allocation suitable for DMA.
  426  *   Should only be used for kmalloc() caches. Otherwise, use a
  427  *   slab created with SLAB_DMA.
  428  *
  429  * Also it is possible to set different flags by OR'ing
  430  * in one or more of the following additional @flags:
  431  *
  432  * %__GFP_COLD - Request cache-cold pages instead of
  433  *   trying to return cache-warm pages.
  434  *
  435  * %__GFP_HIGH - This allocation has high priority and may use emergency pools.
  436  *
  437  * %__GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail
  438  *   (think twice before using).
  439  *
  440  * %__GFP_NORETRY - If memory is not immediately available,
  441  *   then give up at once.
  442  *
  443  * %__GFP_NOWARN - If allocation fails, don't issue any warnings.
  444  *
  445  * %__GFP_REPEAT - If allocation fails initially, try once more before failing.
  446  *
  447  * There are other flags available as well, but these are not intended
  448  * for general use, and so are not documented here. For a full list of
  449  * potential flags, always refer to linux/gfp.h.
  450  */
  451 static __always_inline void *kmalloc(size_t size, gfp_t flags)
  452 {
  453 	if (__builtin_constant_p(size)) {
  454 		if (size > KMALLOC_MAX_CACHE_SIZE)
  455 			return kmalloc_large(size, flags);
  456 #ifndef CONFIG_SLOB
  457 		if (!(flags & GFP_DMA)) {
  458 			int index = kmalloc_index(size);
  459 
  460 			if (!index)
  461 				return ZERO_SIZE_PTR;
  462 
  463 			return kmem_cache_alloc_trace(kmalloc_caches[index],
  464 					flags, size);
  465 		}
  466 #endif
  467 	}
  468 	return __kmalloc(size, flags);
  469 }
  470 
  471 /*
  472  * Determine size used for the nth kmalloc cache.
  473  * return size or 0 if a kmalloc cache for that
  474  * size does not exist
  475  */
  476 static __always_inline int kmalloc_size(int n)
  477 {
  478 #ifndef CONFIG_SLOB
  479 	if (n > 2)
  480 		return 1 << n;
  481 
  482 	if (n == 1 && KMALLOC_MIN_SIZE <= 32)
  483 		return 96;
  484 
  485 	if (n == 2 && KMALLOC_MIN_SIZE <= 64)
  486 		return 192;
  487 #endif
  488 	return 0;
  489 }
  490 
  491 static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
  492 {
  493 #ifndef CONFIG_SLOB
  494 	if (__builtin_constant_p(size) &&
  495 		size <= KMALLOC_MAX_CACHE_SIZE && !(flags & GFP_DMA)) {
  496 		int i = kmalloc_index(size);
  497 
  498 		if (!i)
  499 			return ZERO_SIZE_PTR;
  500 
  501 		return kmem_cache_alloc_node_trace(kmalloc_caches[i],
  502 						flags, node, size);
  503 	}
  504 #endif
  505 	return __kmalloc_node(size, flags, node);
  506 }
  507 
  508 struct memcg_cache_array {
  509 	struct rcu_head rcu;
  510 	struct kmem_cache *entries[0];
  511 };
  512 
  513 /*
  514  * This is the main placeholder for memcg-related information in kmem caches.
  515  * Both the root cache and the child caches will have it. For the root cache,
  516  * this will hold a dynamically allocated array large enough to hold
  517  * information about the currently limited memcgs in the system. To allow the
  518  * array to be accessed without taking any locks, on relocation we free the old
  519  * version only after a grace period.
  520  *
  521  * Child caches will hold extra metadata needed for its operation. Fields are:
  522  *
  523  * @memcg: pointer to the memcg this cache belongs to
  524  * @root_cache: pointer to the global, root cache, this cache was derived from
  525  *
  526  * Both root and child caches of the same kind are linked into a list chained
  527  * through @list.
  528  */
  529 struct memcg_cache_params {
  530 	bool is_root_cache;
  531 	struct list_head list;
  532 	union {
  533 		struct memcg_cache_array __rcu *memcg_caches;
  534 		struct {
  535 			struct mem_cgroup *memcg;
  536 			struct kmem_cache *root_cache;
  537 		};
  538 	};
  539 };
  540 
  541 int memcg_update_all_caches(int num_memcgs);
  542 
  543 /**
  544  * kmalloc_array - allocate memory for an array.
  545  * @n: number of elements.
  546  * @size: element size.
  547  * @flags: the type of memory to allocate (see kmalloc).
  548  */
  549 static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
  550 {
  551 	if (size != 0 && n > SIZE_MAX / size)
  552 		return NULL;
  553 	return __kmalloc(n * size, flags);
  554 }
  555 
  556 /**
  557  * kcalloc - allocate memory for an array. The memory is set to zero.
  558  * @n: number of elements.
  559  * @size: element size.
  560  * @flags: the type of memory to allocate (see kmalloc).
  561  */
  562 static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
  563 {
  564 	return kmalloc_array(n, size, flags | __GFP_ZERO);
  565 }
  566 
  567 /*
  568  * kmalloc_track_caller is a special version of kmalloc that records the
  569  * calling function of the routine calling it for slab leak tracking instead
  570  * of just the calling function (confusing, eh?).
  571  * It's useful when the call to kmalloc comes from a widely-used standard
  572  * allocator where we care about the real place the memory allocation
  573  * request comes from.
  574  */
  575 extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long);
  576 #define kmalloc_track_caller(size, flags) \
  577 	__kmalloc_track_caller(size, flags, _RET_IP_)
  578 
  579 #ifdef CONFIG_NUMA
  580 extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long);
  581 #define kmalloc_node_track_caller(size, flags, node) \
  582 	__kmalloc_node_track_caller(size, flags, node, \
  583 			_RET_IP_)
  584 
  585 #else /* CONFIG_NUMA */
  586 
  587 #define kmalloc_node_track_caller(size, flags, node) \
  588 	kmalloc_track_caller(size, flags)
  589 
  590 #endif /* CONFIG_NUMA */
  591 
  592 /*
  593  * Shortcuts
  594  */
  595 static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
  596 {
  597 	return kmem_cache_alloc(k, flags | __GFP_ZERO);
  598 }
  599 
  600 /**
  601  * kzalloc - allocate memory. The memory is set to zero.
  602  * @size: how many bytes of memory are required.
  603  * @flags: the type of memory to allocate (see kmalloc).
  604  */
  605 static inline void *kzalloc(size_t size, gfp_t flags)
  606 {
  607 	return kmalloc(size, flags | __GFP_ZERO);
  608 }
  609 
  610 /**
  611  * kzalloc_node - allocate zeroed memory from a particular memory node.
  612  * @size: how many bytes of memory are required.
  613  * @flags: the type of memory to allocate (see kmalloc).
  614  * @node: memory node from which to allocate
  615  */
  616 static inline void *kzalloc_node(size_t size, gfp_t flags, int node)
  617 {
  618 	return kmalloc_node(size, flags | __GFP_ZERO, node);
  619 }
  620 
  621 unsigned int kmem_cache_size(struct kmem_cache *s);
  622 void __init kmem_cache_init_late(void);
  623 
  624 #endif	/* _LINUX_SLAB_H */                 1 #ifndef __LINUX_SPINLOCK_H
    2 #define __LINUX_SPINLOCK_H
    3 
    4 /*
    5  * include/linux/spinlock.h - generic spinlock/rwlock declarations
    6  *
    7  * here's the role of the various spinlock/rwlock related include files:
    8  *
    9  * on SMP builds:
   10  *
   11  *  asm/spinlock_types.h: contains the arch_spinlock_t/arch_rwlock_t and the
   12  *                        initializers
   13  *
   14  *  linux/spinlock_types.h:
   15  *                        defines the generic type and initializers
   16  *
   17  *  asm/spinlock.h:       contains the arch_spin_*()/etc. lowlevel
   18  *                        implementations, mostly inline assembly code
   19  *
   20  *   (also included on UP-debug builds:)
   21  *
   22  *  linux/spinlock_api_smp.h:
   23  *                        contains the prototypes for the _spin_*() APIs.
   24  *
   25  *  linux/spinlock.h:     builds the final spin_*() APIs.
   26  *
   27  * on UP builds:
   28  *
   29  *  linux/spinlock_type_up.h:
   30  *                        contains the generic, simplified UP spinlock type.
   31  *                        (which is an empty structure on non-debug builds)
   32  *
   33  *  linux/spinlock_types.h:
   34  *                        defines the generic type and initializers
   35  *
   36  *  linux/spinlock_up.h:
   37  *                        contains the arch_spin_*()/etc. version of UP
   38  *                        builds. (which are NOPs on non-debug, non-preempt
   39  *                        builds)
   40  *
   41  *   (included on UP-non-debug builds:)
   42  *
   43  *  linux/spinlock_api_up.h:
   44  *                        builds the _spin_*() APIs.
   45  *
   46  *  linux/spinlock.h:     builds the final spin_*() APIs.
   47  */
   48 
   49 #include <linux/typecheck.h>
   50 #include <linux/preempt.h>
   51 #include <linux/linkage.h>
   52 #include <linux/compiler.h>
   53 #include <linux/irqflags.h>
   54 #include <linux/thread_info.h>
   55 #include <linux/kernel.h>
   56 #include <linux/stringify.h>
   57 #include <linux/bottom_half.h>
   58 #include <asm/barrier.h>
   59 
   60 
   61 /*
   62  * Must define these before including other files, inline functions need them
   63  */
   64 #define LOCK_SECTION_NAME ".text..lock."KBUILD_BASENAME
   65 
   66 #define LOCK_SECTION_START(extra)               \
   67         ".subsection 1\n\t"                     \
   68         extra                                   \
   69         ".ifndef " LOCK_SECTION_NAME "\n\t"     \
   70         LOCK_SECTION_NAME ":\n\t"               \
   71         ".endif\n"
   72 
   73 #define LOCK_SECTION_END                        \
   74         ".previous\n\t"
   75 
   76 #define __lockfunc __attribute__((section(".spinlock.text")))
   77 
   78 /*
   79  * Pull the arch_spinlock_t and arch_rwlock_t definitions:
   80  */
   81 #include <linux/spinlock_types.h>
   82 
   83 /*
   84  * Pull the arch_spin*() functions/declarations (UP-nondebug doesn't need them):
   85  */
   86 #ifdef CONFIG_SMP
   87 # include <asm/spinlock.h>
   88 #else
   89 # include <linux/spinlock_up.h>
   90 #endif
   91 
   92 #ifdef CONFIG_DEBUG_SPINLOCK
   93   extern void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
   94 				   struct lock_class_key *key);
   95 # define raw_spin_lock_init(lock)				\
   96 do {								\
   97 	static struct lock_class_key __key;			\
   98 								\
   99 	__raw_spin_lock_init((lock), #lock, &__key);		\
  100 } while (0)
  101 
  102 #else
  103 # define raw_spin_lock_init(lock)				\
  104 	do { *(lock) = __RAW_SPIN_LOCK_UNLOCKED(lock); } while (0)
  105 #endif
  106 
  107 #define raw_spin_is_locked(lock)	arch_spin_is_locked(&(lock)->raw_lock)
  108 
  109 #ifdef CONFIG_GENERIC_LOCKBREAK
  110 #define raw_spin_is_contended(lock) ((lock)->break_lock)
  111 #else
  112 
  113 #ifdef arch_spin_is_contended
  114 #define raw_spin_is_contended(lock)	arch_spin_is_contended(&(lock)->raw_lock)
  115 #else
  116 #define raw_spin_is_contended(lock)	(((void)(lock), 0))
  117 #endif /*arch_spin_is_contended*/
  118 #endif
  119 
  120 /*
  121  * Despite its name it doesn't necessarily has to be a full barrier.
  122  * It should only guarantee that a STORE before the critical section
  123  * can not be reordered with LOADs and STOREs inside this section.
  124  * spin_lock() is the one-way barrier, this LOAD can not escape out
  125  * of the region. So the default implementation simply ensures that
  126  * a STORE can not move into the critical section, smp_wmb() should
  127  * serialize it with another STORE done by spin_lock().
  128  */
  129 #ifndef smp_mb__before_spinlock
  130 #define smp_mb__before_spinlock()	smp_wmb()
  131 #endif
  132 
  133 /**
  134  * raw_spin_unlock_wait - wait until the spinlock gets unlocked
  135  * @lock: the spinlock in question.
  136  */
  137 #define raw_spin_unlock_wait(lock)	arch_spin_unlock_wait(&(lock)->raw_lock)
  138 
  139 #ifdef CONFIG_DEBUG_SPINLOCK
  140  extern void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock);
  141 #define do_raw_spin_lock_flags(lock, flags) do_raw_spin_lock(lock)
  142  extern int do_raw_spin_trylock(raw_spinlock_t *lock);
  143  extern void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock);
  144 #else
  145 static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
  146 {
  147 	__acquire(lock);
  148 	arch_spin_lock(&lock->raw_lock);
  149 }
  150 
  151 static inline void
  152 do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags) __acquires(lock)
  153 {
  154 	__acquire(lock);
  155 	arch_spin_lock_flags(&lock->raw_lock, *flags);
  156 }
  157 
  158 static inline int do_raw_spin_trylock(raw_spinlock_t *lock)
  159 {
  160 	return arch_spin_trylock(&(lock)->raw_lock);
  161 }
  162 
  163 static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
  164 {
  165 	arch_spin_unlock(&lock->raw_lock);
  166 	__release(lock);
  167 }
  168 #endif
  169 
  170 /*
  171  * Define the various spin_lock methods.  Note we define these
  172  * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The
  173  * various methods are defined as nops in the case they are not
  174  * required.
  175  */
  176 #define raw_spin_trylock(lock)	__cond_lock(lock, _raw_spin_trylock(lock))
  177 
  178 #define raw_spin_lock(lock)	_raw_spin_lock(lock)
  179 
  180 #ifdef CONFIG_DEBUG_LOCK_ALLOC
  181 # define raw_spin_lock_nested(lock, subclass) \
  182 	_raw_spin_lock_nested(lock, subclass)
  183 # define raw_spin_lock_bh_nested(lock, subclass) \
  184 	_raw_spin_lock_bh_nested(lock, subclass)
  185 
  186 # define raw_spin_lock_nest_lock(lock, nest_lock)			\
  187 	 do {								\
  188 		 typecheck(struct lockdep_map *, &(nest_lock)->dep_map);\
  189 		 _raw_spin_lock_nest_lock(lock, &(nest_lock)->dep_map);	\
  190 	 } while (0)
  191 #else
  192 /*
  193  * Always evaluate the 'subclass' argument to avoid that the compiler
  194  * warns about set-but-not-used variables when building with
  195  * CONFIG_DEBUG_LOCK_ALLOC=n and with W=1.
  196  */
  197 # define raw_spin_lock_nested(lock, subclass)		\
  198 	_raw_spin_lock(((void)(subclass), (lock)))
  199 # define raw_spin_lock_nest_lock(lock, nest_lock)	_raw_spin_lock(lock)
  200 # define raw_spin_lock_bh_nested(lock, subclass)	_raw_spin_lock_bh(lock)
  201 #endif
  202 
  203 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
  204 
  205 #define raw_spin_lock_irqsave(lock, flags)			\
  206 	do {						\
  207 		typecheck(unsigned long, flags);	\
  208 		flags = _raw_spin_lock_irqsave(lock);	\
  209 	} while (0)
  210 
  211 #ifdef CONFIG_DEBUG_LOCK_ALLOC
  212 #define raw_spin_lock_irqsave_nested(lock, flags, subclass)		\
  213 	do {								\
  214 		typecheck(unsigned long, flags);			\
  215 		flags = _raw_spin_lock_irqsave_nested(lock, subclass);	\
  216 	} while (0)
  217 #else
  218 #define raw_spin_lock_irqsave_nested(lock, flags, subclass)		\
  219 	do {								\
  220 		typecheck(unsigned long, flags);			\
  221 		flags = _raw_spin_lock_irqsave(lock);			\
  222 	} while (0)
  223 #endif
  224 
  225 #else
  226 
  227 #define raw_spin_lock_irqsave(lock, flags)		\
  228 	do {						\
  229 		typecheck(unsigned long, flags);	\
  230 		_raw_spin_lock_irqsave(lock, flags);	\
  231 	} while (0)
  232 
  233 #define raw_spin_lock_irqsave_nested(lock, flags, subclass)	\
  234 	raw_spin_lock_irqsave(lock, flags)
  235 
  236 #endif
  237 
  238 #define raw_spin_lock_irq(lock)		_raw_spin_lock_irq(lock)
  239 #define raw_spin_lock_bh(lock)		_raw_spin_lock_bh(lock)
  240 #define raw_spin_unlock(lock)		_raw_spin_unlock(lock)
  241 #define raw_spin_unlock_irq(lock)	_raw_spin_unlock_irq(lock)
  242 
  243 #define raw_spin_unlock_irqrestore(lock, flags)		\
  244 	do {							\
  245 		typecheck(unsigned long, flags);		\
  246 		_raw_spin_unlock_irqrestore(lock, flags);	\
  247 	} while (0)
  248 #define raw_spin_unlock_bh(lock)	_raw_spin_unlock_bh(lock)
  249 
  250 #define raw_spin_trylock_bh(lock) \
  251 	__cond_lock(lock, _raw_spin_trylock_bh(lock))
  252 
  253 #define raw_spin_trylock_irq(lock) \
  254 ({ \
  255 	local_irq_disable(); \
  256 	raw_spin_trylock(lock) ? \
  257 	1 : ({ local_irq_enable(); 0;  }); \
  258 })
  259 
  260 #define raw_spin_trylock_irqsave(lock, flags) \
  261 ({ \
  262 	local_irq_save(flags); \
  263 	raw_spin_trylock(lock) ? \
  264 	1 : ({ local_irq_restore(flags); 0; }); \
  265 })
  266 
  267 /**
  268  * raw_spin_can_lock - would raw_spin_trylock() succeed?
  269  * @lock: the spinlock in question.
  270  */
  271 #define raw_spin_can_lock(lock)	(!raw_spin_is_locked(lock))
  272 
  273 /* Include rwlock functions */
  274 #include <linux/rwlock.h>
  275 
  276 /*
  277  * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
  278  */
  279 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
  280 # include <linux/spinlock_api_smp.h>
  281 #else
  282 # include <linux/spinlock_api_up.h>
  283 #endif
  284 
  285 /*
  286  * Map the spin_lock functions to the raw variants for PREEMPT_RT=n
  287  */
  288 
  289 static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
  290 {
  291 	return &lock->rlock;
  292 }
  293 
  294 #define spin_lock_init(_lock)				\
  295 do {							\
  296 	spinlock_check(_lock);				\
  297 	raw_spin_lock_init(&(_lock)->rlock);		\
  298 } while (0)
  299 
  300 static __always_inline void spin_lock(spinlock_t *lock)
  301 {
  302 	raw_spin_lock(&lock->rlock);
  303 }
  304 
  305 static __always_inline void spin_lock_bh(spinlock_t *lock)
  306 {
  307 	raw_spin_lock_bh(&lock->rlock);
  308 }
  309 
  310 static __always_inline int spin_trylock(spinlock_t *lock)
  311 {
  312 	return raw_spin_trylock(&lock->rlock);
  313 }
  314 
  315 #define spin_lock_nested(lock, subclass)			\
  316 do {								\
  317 	raw_spin_lock_nested(spinlock_check(lock), subclass);	\
  318 } while (0)
  319 
  320 #define spin_lock_bh_nested(lock, subclass)			\
  321 do {								\
  322 	raw_spin_lock_bh_nested(spinlock_check(lock), subclass);\
  323 } while (0)
  324 
  325 #define spin_lock_nest_lock(lock, nest_lock)				\
  326 do {									\
  327 	raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock);	\
  328 } while (0)
  329 
  330 static __always_inline void spin_lock_irq(spinlock_t *lock)
  331 {
  332 	raw_spin_lock_irq(&lock->rlock);
  333 }
  334 
  335 #define spin_lock_irqsave(lock, flags)				\
  336 do {								\
  337 	raw_spin_lock_irqsave(spinlock_check(lock), flags);	\
  338 } while (0)
  339 
  340 #define spin_lock_irqsave_nested(lock, flags, subclass)			\
  341 do {									\
  342 	raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \
  343 } while (0)
  344 
  345 static __always_inline void spin_unlock(spinlock_t *lock)
  346 {
  347 	raw_spin_unlock(&lock->rlock);
  348 }
  349 
  350 static __always_inline void spin_unlock_bh(spinlock_t *lock)
  351 {
  352 	raw_spin_unlock_bh(&lock->rlock);
  353 }
  354 
  355 static __always_inline void spin_unlock_irq(spinlock_t *lock)
  356 {
  357 	raw_spin_unlock_irq(&lock->rlock);
  358 }
  359 
  360 static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
  361 {
  362 	raw_spin_unlock_irqrestore(&lock->rlock, flags);
  363 }
  364 
  365 static __always_inline int spin_trylock_bh(spinlock_t *lock)
  366 {
  367 	return raw_spin_trylock_bh(&lock->rlock);
  368 }
  369 
  370 static __always_inline int spin_trylock_irq(spinlock_t *lock)
  371 {
  372 	return raw_spin_trylock_irq(&lock->rlock);
  373 }
  374 
  375 #define spin_trylock_irqsave(lock, flags)			\
  376 ({								\
  377 	raw_spin_trylock_irqsave(spinlock_check(lock), flags); \
  378 })
  379 
  380 static __always_inline void spin_unlock_wait(spinlock_t *lock)
  381 {
  382 	raw_spin_unlock_wait(&lock->rlock);
  383 }
  384 
  385 static __always_inline int spin_is_locked(spinlock_t *lock)
  386 {
  387 	return raw_spin_is_locked(&lock->rlock);
  388 }
  389 
  390 static __always_inline int spin_is_contended(spinlock_t *lock)
  391 {
  392 	return raw_spin_is_contended(&lock->rlock);
  393 }
  394 
  395 static __always_inline int spin_can_lock(spinlock_t *lock)
  396 {
  397 	return raw_spin_can_lock(&lock->rlock);
  398 }
  399 
  400 #define assert_spin_locked(lock)	assert_raw_spin_locked(&(lock)->rlock)
  401 
  402 /*
  403  * Pull the atomic_t declaration:
  404  * (asm-mips/atomic.h needs above definitions)
  405  */
  406 #include <linux/atomic.h>
  407 /**
  408  * atomic_dec_and_lock - lock on reaching reference count zero
  409  * @atomic: the atomic counter
  410  * @lock: the spinlock in question
  411  *
  412  * Decrements @atomic by 1.  If the result is 0, returns true and locks
  413  * @lock.  Returns false for all other cases.
  414  */
  415 extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
  416 #define atomic_dec_and_lock(atomic, lock) \
  417 		__cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
  418 
  419 #endif /* __LINUX_SPINLOCK_H */            | 
Here is an explanation of a rule violation arisen while checking your driver against a corresponding kernel.
Note that it may be false positive, i.e. there isn't a real error indeed. Please analyze a given error trace and related source code to understand whether there is an error in your driver.
Error trace column contains a path on which the given rule is violated. You can expand/collapse some entity classes by clicking on corresponding checkboxes in a main menu or in an advanced Others menu. Also you can expand/collapse each particular entity by clicking on +/-. In hovering on some entities you can see some tips. Also the error trace is bound with related source code. Line numbers may be shown as links on the left. You can click on them to open corresponding lines in source code.
Source code column contains a content of files related with the error trace. There is source code of your driver (note that there are some LDV modifications at the end), kernel headers and rule model. Tabs show a currently opened file and other available files. In hovering on them you can see full file names. On clicking a corresponding file content will be shown.
| Ядро | Модуль | Правило | Верификатор | Вердикт | Статус | Время создания | Описание проблемы | 
| linux-4.5-rc1.tar.xz | drivers/usb/host/whci/whci-hcd.ko | 331_1a | CPAchecker | Bug | Fixed | 2016-03-25 23:36:30 | L0224 | 
Комментарий
Reported: 25 Mar 2016
[В начало]