Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 11 Sep 2009 16:19:35 +0000 (09:19 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 11 Sep 2009 16:19:35 +0000 (09:19 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (377 commits)
  ASoC: au1x: PSC-AC97 bugfixes
  ALSA: dummy - Increase MAX_PCM_SUBSTREAMS to 128
  ALSA: dummy - Add debug proc file
  ALSA: Add const prefix to proc helper functions
  ALSA: Re-export snd_pcm_format_name() function
  ALSA: hda - Use auto model for HP laptops with ALC268 codec
  ALSA: cs46xx - Fix minimum period size
  ASoC: Fix WM835x Out4 capture enumeration
  ALSA: Remove unneeded ifdef from sound/core.h
  ALSA: Remove struct snd_monitor_file from public sound/core.h
  ASoC: Remove unuused hw_read_t
  sound: oxygen: work around MCE when changing volume
  ALSA: dummy - Fake buffer allocations
  ALSA: hda/realtek: Added support for CLEVO M540R subsystem, 6 channel + digital
  ASoC: fix pxa2xx-ac97.c breakage
  ALSA: dummy - Fix the timer calculation in systimer mode
  ALSA: dummy - Add more description
  ALSA: dummy - Better jiffies handling
  ALSA: dummy - Support high-res timer mode
  ALSA: Release v1.0.21
  ...

1  2 
fs/char_dev.c
include/linux/fs.h

diff --combined fs/char_dev.c
index 7c27a8ebef6a573a0f7210f4a6474f7919340ff2,2f18c1e4e3013ccb059713cda2de1eacb2459a35..3cbc57f932d26a32d8fc8761e3bfe8465ddab9ae
@@@ -31,7 -31,6 +31,7 @@@
   * - no readahead or I/O queue unplugging required
   */
  struct backing_dev_info directly_mappable_cdev_bdi = {
 +      .name = "char",
        .capabilities   = (
  #ifdef CONFIG_MMU
                /* permit private copies of the data to be taken */
@@@ -238,8 -237,10 +238,10 @@@ int alloc_chrdev_region(dev_t *dev, uns
  }
  
  /**
-  * register_chrdev() - Register a major number for character devices.
+  * __register_chrdev() - create and register a cdev occupying a range of minors
   * @major: major device number or 0 for dynamic allocation
+  * @baseminor: first of the requested range of minor numbers
+  * @count: the number of minor numbers required
   * @name: name of this range of devices
   * @fops: file operations associated with this devices
   *
   * /dev. It only helps to keep track of the different owners of devices. If
   * your module name has only one type of devices it's ok to use e.g. the name
   * of the module here.
-  *
-  * This function registers a range of 256 minor numbers. The first minor number
-  * is 0.
   */
- int register_chrdev(unsigned int major, const char *name,
-                   const struct file_operations *fops)
+ int __register_chrdev(unsigned int major, unsigned int baseminor,
+                     unsigned int count, const char *name,
+                     const struct file_operations *fops)
  {
        struct char_device_struct *cd;
        struct cdev *cdev;
        char *s;
        int err = -ENOMEM;
  
-       cd = __register_chrdev_region(major, 0, 256, name);
+       cd = __register_chrdev_region(major, baseminor, count, name);
        if (IS_ERR(cd))
                return PTR_ERR(cd);
        
        for (s = strchr(kobject_name(&cdev->kobj),'/'); s; s = strchr(s, '/'))
                *s = '!';
                
-       err = cdev_add(cdev, MKDEV(cd->major, 0), 256);
+       err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
        if (err)
                goto out;
  
  out:
        kobject_put(&cdev->kobj);
  out2:
-       kfree(__unregister_chrdev_region(cd->major, 0, 256));
+       kfree(__unregister_chrdev_region(cd->major, baseminor, count));
        return err;
  }
  
@@@ -317,10 -316,23 +317,23 @@@ void unregister_chrdev_region(dev_t fro
        }
  }
  
- void unregister_chrdev(unsigned int major, const char *name)
+ /**
+  * __unregister_chrdev - unregister and destroy a cdev
+  * @major: major device number
+  * @baseminor: first of the range of minor numbers
+  * @count: the number of minor numbers this cdev is occupying
+  * @name: name of this range of devices
+  *
+  * Unregister and destroy the cdev occupying the region described by
+  * @major, @baseminor and @count.  This function undoes what
+  * __register_chrdev() did.
+  */
+ void __unregister_chrdev(unsigned int major, unsigned int baseminor,
+                        unsigned int count, const char *name)
  {
        struct char_device_struct *cd;
-       cd = __unregister_chrdev_region(major, 0, 256);
+       cd = __unregister_chrdev_region(major, baseminor, count);
        if (cd && cd->cdev)
                cdev_del(cd->cdev);
        kfree(cd);
@@@ -569,6 -581,6 +582,6 @@@ EXPORT_SYMBOL(cdev_alloc)
  EXPORT_SYMBOL(cdev_del);
  EXPORT_SYMBOL(cdev_add);
  EXPORT_SYMBOL(cdev_index);
- EXPORT_SYMBOL(register_chrdev);
- EXPORT_SYMBOL(unregister_chrdev);
+ EXPORT_SYMBOL(__register_chrdev);
+ EXPORT_SYMBOL(__unregister_chrdev);
  EXPORT_SYMBOL(directly_mappable_cdev_bdi);
diff --combined include/linux/fs.h
index 26da98f61116f848c5e73bd6cd4fa16aea34a6b0,3972ffb597c58c1a41bf9483c231593bd43783e5..a79f48373e7ed1f03c7aa1447111d11bb662d1c9
@@@ -715,7 -715,7 +715,7 @@@ struct posix_acl
  
  struct inode {
        struct hlist_node       i_hash;
 -      struct list_head        i_list;
 +      struct list_head        i_list;         /* backing dev IO list */
        struct list_head        i_sb_list;
        struct list_head        i_dentry;
        unsigned long           i_ino;
@@@ -1336,6 -1336,9 +1336,6 @@@ struct super_block 
        struct xattr_handler    **s_xattr;
  
        struct list_head        s_inodes;       /* all inodes */
 -      struct list_head        s_dirty;        /* dirty inodes */
 -      struct list_head        s_io;           /* parked for writeback */
 -      struct list_head        s_more_io;      /* parked for more writeback */
        struct hlist_head       s_anon;         /* anonymous dentries for (nfs) exporting */
        struct list_head        s_files;
        /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */
@@@ -1525,7 -1528,6 +1525,7 @@@ struct inode_operations 
        void (*put_link) (struct dentry *, struct nameidata *, void *);
        void (*truncate) (struct inode *);
        int (*permission) (struct inode *, int);
 +      int (*check_acl)(struct inode *, int);
        int (*setattr) (struct dentry *, struct iattr *);
        int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
        int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
@@@ -1786,7 -1788,6 +1786,7 @@@ extern int get_sb_pseudo(struct file_sy
        struct vfsmount *mnt);
  extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
  int __put_super_and_need_restart(struct super_block *sb);
 +void put_super(struct super_block *sb);
  
  /* Alas, no aliases. Too much hassle with bringing module.h everywhere */
  #define fops_get(fops) \
@@@ -1997,12 -1998,25 +1997,25 @@@ extern void bd_release_from_disk(struc
  #define CHRDEV_MAJOR_HASH_SIZE        255
  extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
  extern int register_chrdev_region(dev_t, unsigned, const char *);
- extern int register_chrdev(unsigned int, const char *,
-                          const struct file_operations *);
- extern void unregister_chrdev(unsigned int, const char *);
+ extern int __register_chrdev(unsigned int major, unsigned int baseminor,
+                            unsigned int count, const char *name,
+                            const struct file_operations *fops);
+ extern void __unregister_chrdev(unsigned int major, unsigned int baseminor,
+                               unsigned int count, const char *name);
  extern void unregister_chrdev_region(dev_t, unsigned);
  extern void chrdev_show(struct seq_file *,off_t);
  
+ static inline int register_chrdev(unsigned int major, const char *name,
+                                 const struct file_operations *fops)
+ {
+       return __register_chrdev(major, 0, 256, name, fops);
+ }
+ static inline void unregister_chrdev(unsigned int major, const char *name)
+ {
+       __unregister_chrdev(major, 0, 256, name);
+ }
  /* fs/block_dev.c */
  #define BDEVNAME_SIZE 32      /* Largest string for a blockdev identifier */
  #define BDEVT_SIZE    10      /* Largest string for MAJ:MIN for blkdev */
@@@ -2069,6 -2083,8 +2082,6 @@@ static inline void invalidate_remote_in
  extern int invalidate_inode_pages2(struct address_space *mapping);
  extern int invalidate_inode_pages2_range(struct address_space *mapping,
                                         pgoff_t start, pgoff_t end);
 -extern void generic_sync_sb_inodes(struct super_block *sb,
 -                              struct writeback_control *wbc);
  extern int write_inode_now(struct inode *, int);
  extern int filemap_fdatawrite(struct address_space *);
  extern int filemap_flush(struct address_space *);
@@@ -2183,6 -2199,7 +2196,6 @@@ extern int bdev_read_only(struct block_
  extern int set_blocksize(struct block_device *, int);
  extern int sb_set_blocksize(struct super_block *, int);
  extern int sb_min_blocksize(struct super_block *, int);
 -extern int sb_has_dirty_inodes(struct super_block *);
  
  extern int generic_file_mmap(struct file *, struct vm_area_struct *);
  extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);