]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 12 Oct 2007 02:40:14 +0000 (19:40 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 12 Oct 2007 02:40:14 +0000 (19:40 -0700)
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (867 commits)
  [SKY2]: status polling loop (post merge)
  [NET]: Fix NAPI completion handling in some drivers.
  [TCP]: Limit processing lost_retrans loop to work-to-do cases
  [TCP]: Fix lost_retrans loop vs fastpath problems
  [TCP]: No need to re-count fackets_out/sacked_out at RTO
  [TCP]: Extract tcp_match_queue_to_sack from sacktag code
  [TCP]: Kill almost unused variable pcount from sacktag
  [TCP]: Fix mark_head_lost to ignore R-bit when trying to mark L
  [TCP]: Add bytes_acked (ABC) clearing to FRTO too
  [IPv6]: Update setsockopt(IPV6_MULTICAST_IF) to support RFC 3493, try2
  [NETFILTER]: x_tables: add missing ip6t_modulename aliases
  [NETFILTER]: nf_conntrack_tcp: fix connection reopening
  [QETH]: fix qeth_main.c
  [NETLINK]: fib_frontend build fixes
  [IPv6]: Export userland ND options through netlink (RDNSS support)
  [9P]: build fix with !CONFIG_SYSCTL
  [NET]: Fix dev_put() and dev_hold() comments
  [NET]: make netlink user -> kernel interface synchronious
  [NET]: unify netlink kernel socket recognition
  [NET]: cleanup 3rd argument in netlink_sendskb
  ...

Fix up conflicts manually in Documentation/feature-removal-schedule.txt
and my new least favourite crap, the "mod_devicetable" support in the
files include/linux/mod_devicetable.h and scripts/mod/file2alias.c.

(The latter files seem to be explicitly _designed_ to get conflicts when
different subsystems work with them - that have an absolutely horrid
lack of subsystem separation!)

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
12 files changed:
1  2 
Documentation/feature-removal-schedule.txt
MAINTAINERS
arch/mips/configs/bigsur_defconfig
arch/mips/configs/sb1250-swarm_defconfig
arch/x86/kernel/irq_32.c
arch/x86/kernel/irq_64.c
drivers/block/aoe/aoecmd.c
drivers/media/dvb/dvb-core/dvb_net.c
fs/compat_ioctl.c
include/linux/mod_devicetable.h
include/linux/pci_ids.h
scripts/mod/file2alias.c

index 675f75601ae632a694fe06a0e8658b5039bf586f,64831def40abe9b17043af9726762b7c2de3e251..63df2262d41a2625da0816a0383aaaece00963bc
@@@ -307,10 -307,11 +307,23 @@@ Who:    Stephen Hemminger <shemminger@l
  
  ---------------------------
  
 +What: i386/x86_64 bzImage symlinks
 +When: April 2008
 +
 +Why:  The i386/x86_64 merge provides a symlink to the old bzImage
 +      location so not yet updated user space tools, e.g. package
 +      scripts, do not break.
 +Who:  Thomas Gleixner <tglx@linutronix.de>
++
++---------------------------
++
+ What: shaper network driver
+ When: January 2008
+ Files:        drivers/net/shaper.c, include/linux/if_shaper.h
+ Why:  This driver has been marked obsolete for many years.
+       It was only designed to work on lower speed links and has design
+       flaws that lead to machine crashes. The qdisc infrastructure in
+       2.4 or later kernels, provides richer features and is more robust.
+ Who:  Stephen Hemminger <shemminger@linux-foundation.org>
++
++---------------------------
diff --combined MAINTAINERS
index 60162706716fff315fe667aaf3d8394b7f361ca3,16646801105c87f165d9cebb7f29a70facd0a6b0..8a1360045c2d65024b5cc5ff14db6ca214148bbe
@@@ -284,6 -284,14 +284,14 @@@ M:       corentin.labbe@geomatys.f
  L:    lm-sensors@lm-sensors.org
  S:    Maintained
  
+ ADM8211 WIRELESS DRIVER
+ P:    Michael Wu
+ M:    flamingice@sourmilk.net
+ L:    linux-wireless@vger.kernel.org
+ W:    http://linuxwireless.org/
+ T:    git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
+ S:    Maintained
  ADT746X FAN DRIVER
  P:    Colin Leroy
  M:    colin@colino.net
@@@ -718,8 -726,34 +726,8 @@@ M:        rpurdie@rpsys.ne
  S:    Maintained
  
  BLACKFIN ARCHITECTURE
 -P:    Aubrey Li
 -M:    aubrey.li@analog.com
 -P:    Bernd Schmidt
 -M:    bernd.schmidt@analog.com
  P:    Bryan Wu
  M:    bryan.wu@analog.com
 -P:    Grace Pan
 -M:    grace.pan@analog.com
 -P:    Marc Hoffman
 -M:    marc.hoffman@analog.com
 -P:    Michael Hennerich
 -M:    michael.hennerich@analog.com
 -P:    Mike Frysinger
 -M:    michael.frysinger@analog.com
 -P:    Jerry Zeng
 -M:    jerry.zeng@analog.com
 -P:    Jie Zhang
 -M:    jie.zhang@analog.com
 -P:    Robin Getz
 -M:    robin.getz@analog.com
 -P:    Roy Huang
 -M:    roy.huang@analog.com
 -P:    Sonic Zhang
 -M:    sonic.zhang@analog.com
 -P:    Vivi Li
 -M:    vivi.li@analog.com
 -P:    Yi Li
 -M:    yi.li@analog.com
  L:    uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
  W:    http://blackfin.uclinux.org
  S:    Supported
@@@ -761,6 -795,22 +769,22 @@@ L:       linux-hams@vger.kernel.or
  W:    http://www.baycom.org/~tom/ham/ham.html
  S:    Maintained
  
+ B43 WIRELESS DRIVER
+ P:    Michael Buesch
+ M:    mb@bu3sch.de
+ P:    Stefano Brivio
+ M:    st3@riseup.net
+ L:    linux-wireless@vger.kernel.org
+ W:    http://bcm43xx.berlios.de/
+ S:    Maintained
+ B43LEGACY WIRELESS DRIVER
+ P:    Larry Finger
+ M:    Larry.Finger@lwfinger.net
+ L:    linux-wireless@vger.kernel.org
+ W:    http://bcm43xx.berlios.de/
+ S:    Maintained
  BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION)
  P:    Larry Finger
  M:    Larry.Finger@lwfinger.net
@@@ -1224,12 -1274,6 +1248,6 @@@ L:     Eng.Linux@digi.co
  W:    http://www.digi.com
  S:    Orphaned
  
- DIGI RIGHTSWITCH NETWORK DRIVER
- P:    Rick Richardson
- L:    netdev@vger.kernel.org
- W:    http://www.digi.com
- S:    Orphaned
  DIRECTORY NOTIFICATION
  P:    Stephen Rothwell
  M:    sfr@canb.auug.org.au
@@@ -1996,16 -2040,14 +2014,14 @@@ W:   http://sourceforge.net/projects/e100
  S:    Supported
  
  INTEL PRO/10GbE SUPPORT
- P:    Jeff Kirsher
- M:    jeffrey.t.kirsher@intel.com
  P:    Ayyappan Veeraiyan
  M:    ayyappan.veeraiyan@intel.com
- P:    John Ronciak
- M:    john.ronciak@intel.com
- P:    Jesse Brandeburg
- M:    jesse.brandeburg@intel.com
  P:    Auke Kok
  M:    auke-jan.h.kok@intel.com
+ P:    Jesse Brandeburg
+ M:    jesse.brandeburg@intel.com
+ P:    John Ronciak
+ M:    john.ronciak@intel.com
  L:    e1000-devel@lists.sourceforge.net
  W:    http://sourceforge.net/projects/e1000/
  S:    Supported
@@@ -2032,6 -2074,15 +2048,15 @@@ L:    http://lists.sourceforge.net/mailman
  W:    http://ipw2200.sourceforge.net
  S:    Supported
  
+ INTEL WIRELESS WIFI LINK (iwlwifi)
+ P:    Zhu Yi
+ M:    yi.zhu@intel.com
+ L:    linux-wireless@vger.kernel.org
+ L:    ipw3945-devel@lists.sourceforge.net
+ W:    http://intellinuxwireless.org
+ T:    git git://intellinuxwireless.org/repos/iwlwifi
+ S:    Supported
  IOC3 ETHERNET DRIVER
  P:    Ralf Baechle
  M:    ralf@linux-mips.org
@@@ -2049,6 -2100,16 +2074,16 @@@ P:    Juanjo Ciarlant
  M:    jjciarla@raiz.uncu.edu.ar
  S:    Maintained
  
+ IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER
+ P:    Francois Romieu
+ M:    romieu@fr.zoreil.com
+ P:    Sorbica Shieh
+ M:    sorbica@icplus.com.tw
+ P:    Jesse Huang
+ M:    jesse@icplus.com.tw
+ L:    netdev@vger.kernel.org
+ S:    Maintained
  IPATH DRIVER:
  P:    Arthur Jones
  M:    infinipath@qlogic.com
@@@ -2535,18 -2596,12 +2570,18 @@@ L:   linux-kernel@vger.kernel.or
  W:    http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
  S:    Maintained
  
 -MULTIMEDIA CARD (MMC) AND SECURE DIGITAL (SD) SUBSYSTEM
 +MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
  P:    Pierre Ossman
  M:    drzeus-mmc@drzeus.cx
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
 +MULTIMEDIA CARD (MMC) ETC. OVER SPI
 +P:    David Brownell
 +M:    dbrownell@users.sourceforge.net
 +L:    linux-kernel@vger.kernel.org
 +S:    Odd fixes
 +
  MULTISOUND SOUND DRIVER
  P:    Andrew Veliath
  M:    andrewtv@usa.net
@@@ -2999,6 -3054,14 +3034,14 @@@ L:    kpreempt-tech@lists.sourceforge.ne
  W:    ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
  S:    Supported
  
+ P54 WIRELESS DRIVER
+ P:    Michael Wu
+ M:    flamingice@sourmilk.net
+ L:    linux-wireless@vger.kernel.org
+ W:    http://prism54.org
+ T:    git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
+ S:    Maintained
  PRISM54 WIRELESS DRIVER
  P:    Luis R. Rodriguez
  M:    mcgrof@gmail.com
@@@ -3086,6 -3149,14 +3129,14 @@@ M:    corey@world.std.co
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  
+ RALINK RT2X00 WLAN DRIVER
+ P:    rt2x00 project
+ L:    linux-wireless@vger.kernel.org
+ L:    rt2400-devel@lists.sourceforge.net
+ W:    http://rt2x00.serialmonkey.com/
+ S:    Maintained
+ F:    drivers/net/wireless/rt2x00/
  RANDOM NUMBER DRIVER
  P:    Matt Mackall
  M:    mpm@selenic.com
@@@ -3171,8 -3242,8 +3222,8 @@@ W:      http://www.ibm.com/developerworks/li
  S:    Supported
  
  S390 NETWORK DRIVERS
- P:    Frank Pavlic
- M:    fpavlic@de.ibm.com
+ P:    Ursula Braun
+ M:    ubraun@linux.vnet.ibm.com
  M:    linux390@de.ibm.com
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -3186,6 -3257,14 +3237,14 @@@ L:    linux-s390@vger.kernel.or
  W:    http://www.ibm.com/developerworks/linux/linux390/
  S:    Supported
  
+ S390 IUCV NETWORK LAYER
+ P:    Ursula Braun
+ M:    ubraun@linux.vnet.ibm.com
+ M:    linux390@de.ibm.com
+ L:    linux-s390@vger.kernel.org
+ W:    http://www.ibm.com/developerworks/linux/linux390/
+ S:    Supported
  SAA7146 VIDEO4LINUX-2 DRIVER
  P:    Michael Hunold
  M:    michael@mihu.de
@@@ -3410,6 -3489,12 +3469,12 @@@ M:    tsbogend@alpha.franken.d
  L:    netdev@vger.kernel.org
  S:    Maintained
  
+ SONICS SILICON BACKPLANE DRIVER (SSB)
+ P:    Michael Buesch
+ M:    mb@bu3sch.de
+ L:    netdev@vger.kernel.org
+ S:    Maintained
  SONY VAIO CONTROL DEVICE DRIVER
  P:    Mattia Dongili
  M:    malattia@linux.it
@@@ -3594,6 -3679,14 +3659,14 @@@ M:    hlhung3i@gmail.co
  W:    http://tcp-lp-mod.sourceforge.net/
  S:    Maintained
  
+ TEHUTI ETHERNET DRIVER
+ P:    Alexander Indenbaum
+ M:    baum@tehutinetworks.net
+ P:    Andy Gospodarek
+ M:    andy@greyhouse.net
+ L:    netdev@vger.kernel.org
+ S:    Supported
  TI FLASH MEDIA INTERFACE DRIVER
  P:      Alex Dubov
  M:      oakad@yahoo.com
@@@ -4156,13 -4249,6 +4229,13 @@@ W:    http://oss.sgi.com/projects/xf
  T:    git git://oss.sgi.com:8090/xfs/xfs-2.6.git
  S:    Supported
  
 +XILINX SYSTEMACE DRIVER
 +P:    Grant Likely
 +M:    grant.likely@secretlab.ca
 +W:    http://www.secretlab.ca/
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +
  XILINX UARTLITE SERIAL DRIVER
  P:    Peter Korsgaard
  M:    jacmet@sunsite.dk
index 30f3e9a2466ff11cff7596a40730aeafe8dff41d,9861fe670d89d9639ab5b361276455897eb9bd9b..80b0c99c2cfb9af113a3e79518a33825a6e249d2
@@@ -69,6 -69,7 +69,6 @@@ CONFIG_SIBYTE_SB1xxx_SOC=
  CONFIG_SIBYTE_CFE=y
  # CONFIG_SIBYTE_CFE_CONSOLE is not set
  # CONFIG_SIBYTE_BUS_WATCHER is not set
 -# CONFIG_SIBYTE_SB1250_PROF is not set
  # CONFIG_SIBYTE_TBPROF is not set
  CONFIG_RWSEM_GENERIC_SPINLOCK=y
  # CONFIG_ARCH_HAS_ILOG2_U32 is not set
@@@ -573,7 -574,7 +573,7 @@@ CONFIG_MII=
  # CONFIG_HAMACHI is not set
  # CONFIG_YELLOWFIN is not set
  # CONFIG_R8169 is not set
- CONFIG_NET_SB1250_MAC=y
+ CONFIG_SB1250_MAC=y
  # CONFIG_SIS190 is not set
  # CONFIG_SKGE is not set
  # CONFIG_SKY2 is not set
index 3d1b6281d887b0ee4b28269b49a3995c089042d7,2f28557f3d724ea207a6dd6c833c58f1e68d88c5..3ed991ae0ebe180d5942f42bab47f5573594620b
@@@ -70,6 -70,7 +70,6 @@@ CONFIG_SIBYTE_HAS_LDT=
  CONFIG_SIBYTE_CFE=y
  # CONFIG_SIBYTE_CFE_CONSOLE is not set
  # CONFIG_SIBYTE_BUS_WATCHER is not set
 -# CONFIG_SIBYTE_SB1250_PROF is not set
  # CONFIG_SIBYTE_TBPROF is not set
  CONFIG_RWSEM_GENERIC_SPINLOCK=y
  # CONFIG_ARCH_HAS_ILOG2_U32 is not set
@@@ -565,7 -566,7 +565,7 @@@ CONFIG_MII=
  # CONFIG_HAMACHI is not set
  # CONFIG_YELLOWFIN is not set
  # CONFIG_R8169 is not set
- CONFIG_NET_SB1250_MAC=y
+ CONFIG_SB1250_MAC=y
  # CONFIG_SIS190 is not set
  # CONFIG_SKGE is not set
  # CONFIG_SKY2 is not set
diff --combined arch/x86/kernel/irq_32.c
index dd2b97fc00b2ad8c76fe2f7bce0a2164e4866ae6,4f681bcdb1fc3b1afac4676359ff1116dc3454bf..4f681bcdb1fc3b1afac4676359ff1116dc3454bf
@@@ -231,8 -231,6 +231,6 @@@ asmlinkage void do_softirq(void
  
        local_irq_restore(flags);
  }
- EXPORT_SYMBOL(do_softirq);
  #endif
  
  /*
diff --combined arch/x86/kernel/irq_64.c
index 39cb3fa83ebbe3e68af877a0f43074189b1c027a,bd11e42b22bfa6b66ebf2dcf897845a1baaa25f9..bd11e42b22bfa6b66ebf2dcf897845a1baaa25f9
@@@ -210,4 -210,3 +210,3 @@@ asmlinkage void do_softirq(void
        }
        local_irq_restore(flags);
  }
- EXPORT_SYMBOL(do_softirq);
index 5abae34ad65baad472fcfee487bf354953c23dd4,30394f78cac2bd7928cc1f8b26d662c668f354d1..99672017ca56f5212229db8fb9312e7c81842e7b
@@@ -9,6 -9,7 +9,7 @@@
  #include <linux/skbuff.h>
  #include <linux/netdevice.h>
  #include <linux/genhd.h>
+ #include <net/net_namespace.h>
  #include <asm/unaligned.h>
  #include "aoe.h"
  
@@@ -194,7 -195,7 +195,7 @@@ aoecmd_cfg_pkts(ushort aoemajor, unsign
        sl = sl_tail = NULL;
  
        read_lock(&dev_base_lock);
-       for_each_netdev(ifp) {
+       for_each_netdev(&init_net, ifp) {
                dev_hold(ifp);
                if (!is_aoe_netif(ifp))
                        goto cont;
@@@ -652,7 -653,7 +653,7 @@@ aoecmd_ata_rsp(struct sk_buff *skb
                        disk_stat_add(disk, sectors[rw], n_sect);
                        disk_stat_add(disk, io_ticks, duration);
                        n = (buf->flags & BUFFL_FAIL) ? -EIO : 0;
 -                      bio_endio(buf->bio, buf->bio->bi_size, n);
 +                      bio_endio(buf->bio, n);
                        mempool_free(buf, d->bufpool);
                }
        }
index 2117377c141d206cce3d2710a1deeb93916efdb1,06800e5a0770185f25023e6188fe88e5e86dda45..a33eb5988c42e8aa1fcf64c1959084617c3d8e8e
@@@ -357,6 -357,11 +357,6 @@@ static void dvb_net_ule( struct net_dev
        static unsigned char *ule_where = ule_hist, ule_dump = 0;
  #endif
  
 -      if (dev == NULL) {
 -              printk( KERN_ERR "NO netdev struct!\n" );
 -              return;
 -      }
 -
        /* For all TS cells in current buffer.
         * Appearently, we are called for every single TS cell.
         */
@@@ -795,8 -800,8 +795,8 @@@ static int dvb_net_ts_callback(const u
  }
  
  
 -static void dvb_net_sec(struct net_device *dev, const u8 *pkt, int
 -pkt_len)
 +static void dvb_net_sec(struct net_device *dev,
 +                      const u8 *pkt, int pkt_len)
  {
        u8 *eth;
        struct sk_buff *skb;
@@@ -1220,10 -1225,17 +1220,17 @@@ static struct net_device_stats * dvb_ne
        return &((struct dvb_net_priv*) dev->priv)->stats;
  }
  
+ static const struct header_ops dvb_header_ops = {
+       .create         = eth_header,
+       .parse          = eth_header_parse,
+       .rebuild        = eth_rebuild_header,
+ };
  static void dvb_net_setup(struct net_device *dev)
  {
        ether_setup(dev);
  
+       dev->header_ops         = &dvb_header_ops;
        dev->open               = dvb_net_open;
        dev->stop               = dvb_net_stop;
        dev->hard_start_xmit    = dvb_net_tx;
        dev->set_mac_address    = dvb_net_set_mac;
        dev->mtu                = 4096;
        dev->mc_count           = 0;
-       dev->hard_header_cache  = NULL;
        dev->flags |= IFF_NOARP;
  }
  
@@@ -1441,9 -1453,18 +1448,9 @@@ static int dvb_net_close(struct inode *
        struct dvb_device *dvbdev = file->private_data;
        struct dvb_net *dvbnet = dvbdev->priv;
  
 -      if (!dvbdev)
 -              return -ENODEV;
 -
 -      if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
 -              dvbdev->readers++;
 -      } else {
 -              dvbdev->writers++;
 -      }
 -
 -      dvbdev->users++;
 +      dvb_generic_release(inode, file);
  
 -      if(dvbdev->users == 1 && dvbnet->exit==1) {
 +      if(dvbdev->users == 1 && dvbnet->exit == 1) {
                fops_put(file->f_op);
                file->f_op = NULL;
                wake_up(&dvbdev->wait_queue);
diff --combined fs/compat_ioctl.c
index b9e3357bcc2ead562e138ea71b89d13120d03f41,d917e4a26a433f43f27e50a5f5e0a537583ff73c..9c3fd07f35e0f25b04763a021c9c636e22ce43e5
@@@ -21,6 -21,7 +21,6 @@@
  #include <linux/if.h>
  #include <linux/if_bridge.h>
  #include <linux/slab.h>
 -#include <linux/hdreg.h>
  #include <linux/raid/md.h>
  #include <linux/kd.h>
  #include <linux/dirent.h>
  #include <linux/vt.h>
  #include <linux/fs.h>
  #include <linux/file.h>
 -#include <linux/fd.h>
  #include <linux/ppp_defs.h>
  #include <linux/if_ppp.h>
  #include <linux/if_pppox.h>
  #include <linux/mtio.h>
 -#include <linux/cdrom.h>
  #include <linux/auto_fs.h>
  #include <linux/auto_fs4.h>
  #include <linux/tty.h>
@@@ -45,6 -48,7 +45,6 @@@
  #include <linux/netdevice.h>
  #include <linux/raw.h>
  #include <linux/smb_fs.h>
 -#include <linux/blkpg.h>
  #include <linux/blkdev.h>
  #include <linux/elevator.h>
  #include <linux/rtc.h>
@@@ -58,6 -62,7 +58,6 @@@
  #include <linux/i2c-dev.h>
  #include <linux/wireless.h>
  #include <linux/atalk.h>
 -#include <linux/blktrace_api.h>
  #include <linux/loop.h>
  
  #include <net/bluetooth/bluetooth.h>
@@@ -319,22 -324,21 +319,21 @@@ struct ifconf32 
  
  static int dev_ifname32(unsigned int fd, unsigned int cmd, unsigned long arg)
  {
-       struct net_device *dev;
-       struct ifreq32 ifr32;
+       struct ifreq __user *uifr;
        int err;
  
-       if (copy_from_user(&ifr32, compat_ptr(arg), sizeof(ifr32)))
+       uifr = compat_alloc_user_space(sizeof(struct ifreq));
+       if (copy_in_user(uifr, compat_ptr(arg), sizeof(struct ifreq32)));
                return -EFAULT;
  
-       dev = dev_get_by_index(ifr32.ifr_ifindex);
-       if (!dev)
-               return -ENODEV;
+       err = sys_ioctl(fd, SIOCGIFNAME, (unsigned long)uifr);
+       if (err)
+               return err;
  
-       strlcpy(ifr32.ifr_name, dev->name, sizeof(ifr32.ifr_name));
-       dev_put(dev);
-       
-       err = copy_to_user(compat_ptr(arg), &ifr32, sizeof(ifr32));
-       return (err ? -EFAULT : 0);
+       if (copy_in_user(compat_ptr(arg), uifr, sizeof(struct ifreq32)))
+               return -EFAULT;
+       return 0;
  }
  
  static int dev_ifconf(unsigned int fd, unsigned int cmd, unsigned long arg)
@@@ -663,6 -667,53 +662,6 @@@ out
  #endif
  
  #ifdef CONFIG_BLOCK
 -struct hd_geometry32 {
 -      unsigned char heads;
 -      unsigned char sectors;
 -      unsigned short cylinders;
 -      u32 start;
 -};
 -                        
 -static int hdio_getgeo(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      mm_segment_t old_fs = get_fs();
 -      struct hd_geometry geo;
 -      struct hd_geometry32 __user *ugeo;
 -      int err;
 -      
 -      set_fs (KERNEL_DS);
 -      err = sys_ioctl(fd, HDIO_GETGEO, (unsigned long)&geo);
 -      set_fs (old_fs);
 -      ugeo = compat_ptr(arg);
 -      if (!err) {
 -              err = copy_to_user (ugeo, &geo, 4);
 -              err |= __put_user (geo.start, &ugeo->start);
 -              if (err)
 -                      err = -EFAULT;
 -      }
 -      return err;
 -}
 -
 -static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      mm_segment_t old_fs = get_fs();
 -      unsigned long kval;
 -      unsigned int __user *uvp;
 -      int error;
 -
 -      set_fs(KERNEL_DS);
 -      error = sys_ioctl(fd, cmd, (long)&kval);
 -      set_fs(old_fs);
 -
 -      if(error == 0) {
 -              uvp = compat_ptr(arg);
 -              if(put_user(kval, uvp))
 -                      error = -EFAULT;
 -      }
 -      return error;
 -}
 -
 -
  typedef struct sg_io_hdr32 {
        compat_int_t interface_id;      /* [i] 'S' for SCSI generic (required) */
        compat_int_t dxfer_direction;   /* [i] data transfer direction  */
@@@ -1037,6 -1088,108 +1036,6 @@@ static int mt_ioctl_trans(unsigned int 
        return err ? -EFAULT: 0;
  }
  
 -struct cdrom_read_audio32 {
 -      union cdrom_addr        addr;
 -      u8                      addr_format;
 -      compat_int_t            nframes;
 -      compat_caddr_t          buf;
 -};
 -
 -struct cdrom_generic_command32 {
 -      unsigned char   cmd[CDROM_PACKET_SIZE];
 -      compat_caddr_t  buffer;
 -      compat_uint_t   buflen;
 -      compat_int_t    stat;
 -      compat_caddr_t  sense;
 -      unsigned char   data_direction;
 -      compat_int_t    quiet;
 -      compat_int_t    timeout;
 -      compat_caddr_t  reserved[1];
 -};
 -  
 -static int cdrom_do_read_audio(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      struct cdrom_read_audio __user *cdread_audio;
 -      struct cdrom_read_audio32 __user *cdread_audio32;
 -      __u32 data;
 -      void __user *datap;
 -
 -      cdread_audio = compat_alloc_user_space(sizeof(*cdread_audio));
 -      cdread_audio32 = compat_ptr(arg);
 -
 -      if (copy_in_user(&cdread_audio->addr,
 -                       &cdread_audio32->addr,
 -                       (sizeof(*cdread_audio32) -
 -                        sizeof(compat_caddr_t))))
 -              return -EFAULT;
 -
 -      if (get_user(data, &cdread_audio32->buf))
 -              return -EFAULT;
 -      datap = compat_ptr(data);
 -      if (put_user(datap, &cdread_audio->buf))
 -              return -EFAULT;
 -
 -      return sys_ioctl(fd, cmd, (unsigned long) cdread_audio);
 -}
 -
 -static int cdrom_do_generic_command(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      struct cdrom_generic_command __user *cgc;
 -      struct cdrom_generic_command32 __user *cgc32;
 -      u32 data;
 -      unsigned char dir;
 -      int itmp;
 -
 -      cgc = compat_alloc_user_space(sizeof(*cgc));
 -      cgc32 = compat_ptr(arg);
 -
 -      if (copy_in_user(&cgc->cmd, &cgc32->cmd, sizeof(cgc->cmd)) ||
 -          get_user(data, &cgc32->buffer) ||
 -          put_user(compat_ptr(data), &cgc->buffer) ||
 -          copy_in_user(&cgc->buflen, &cgc32->buflen,
 -                       (sizeof(unsigned int) + sizeof(int))) ||
 -          get_user(data, &cgc32->sense) ||
 -          put_user(compat_ptr(data), &cgc->sense) ||
 -          get_user(dir, &cgc32->data_direction) ||
 -          put_user(dir, &cgc->data_direction) ||
 -          get_user(itmp, &cgc32->quiet) ||
 -          put_user(itmp, &cgc->quiet) ||
 -          get_user(itmp, &cgc32->timeout) ||
 -          put_user(itmp, &cgc->timeout) ||
 -          get_user(data, &cgc32->reserved[0]) ||
 -          put_user(compat_ptr(data), &cgc->reserved[0]))
 -              return -EFAULT;
 -
 -      return sys_ioctl(fd, cmd, (unsigned long) cgc);
 -}
 -
 -static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      int err;
 -
 -      switch(cmd) {
 -      case CDROMREADAUDIO:
 -              err = cdrom_do_read_audio(fd, cmd, arg);
 -              break;
 -
 -      case CDROM_SEND_PACKET:
 -              err = cdrom_do_generic_command(fd, cmd, arg);
 -              break;
 -
 -      default:
 -              do {
 -                      static int count;
 -                      if (++count <= 20)
 -                              printk("cdrom_ioctl: Unknown cmd fd(%d) "
 -                                     "cmd(%08x) arg(%08x)\n",
 -                                     (int)fd, (unsigned int)cmd, (unsigned int)arg);
 -              } while(0);
 -              err = -EINVAL;
 -              break;
 -      };
 -
 -      return err;
 -}
  #endif /* CONFIG_BLOCK */
  
  #ifdef CONFIG_VT
@@@ -1382,11 -1535,71 +1381,11 @@@ ret_einval(unsigned int fd, unsigned in
        return -EINVAL;
  }
  
 -#ifdef CONFIG_BLOCK
 -static int broken_blkgetsize(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      /* The mkswap binary hard codes it to Intel value :-((( */
 -      return w_long(fd, BLKGETSIZE, arg);
 -}
 -
 -struct blkpg_ioctl_arg32 {
 -      compat_int_t op;
 -      compat_int_t flags;
 -      compat_int_t datalen;
 -      compat_caddr_t data;
 -};
 -
 -static int blkpg_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      struct blkpg_ioctl_arg32 __user *ua32 = compat_ptr(arg);
 -      struct blkpg_ioctl_arg __user *a = compat_alloc_user_space(sizeof(*a));
 -      compat_caddr_t udata;
 -      compat_int_t n;
 -      int err;
 -      
 -      err = get_user(n, &ua32->op);
 -      err |= put_user(n, &a->op);
 -      err |= get_user(n, &ua32->flags);
 -      err |= put_user(n, &a->flags);
 -      err |= get_user(n, &ua32->datalen);
 -      err |= put_user(n, &a->datalen);
 -      err |= get_user(udata, &ua32->data);
 -      err |= put_user(compat_ptr(udata), &a->data);
 -      if (err)
 -              return err;
 -
 -      return sys_ioctl(fd, cmd, (unsigned long)a);
 -}
 -#endif
 -
  static int ioc_settimeout(unsigned int fd, unsigned int cmd, unsigned long arg)
  {
        return rw_long(fd, AUTOFS_IOC_SETTIMEOUT, arg);
  }
  
 -#ifdef CONFIG_BLOCK
 -/* Fix sizeof(sizeof()) breakage */
 -#define BLKBSZGET_32   _IOR(0x12,112,int)
 -#define BLKBSZSET_32   _IOW(0x12,113,int)
 -#define BLKGETSIZE64_32        _IOR(0x12,114,int)
 -
 -static int do_blkbszget(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -       return sys_ioctl(fd, BLKBSZGET, (unsigned long)compat_ptr(arg));
 -}
 -
 -static int do_blkbszset(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -       return sys_ioctl(fd, BLKBSZSET, (unsigned long)compat_ptr(arg));
 -}
 -
 -static int do_blkgetsize64(unsigned int fd, unsigned int cmd,
 -                          unsigned long arg)
 -{
 -       return sys_ioctl(fd, BLKGETSIZE64, (unsigned long)compat_ptr(arg));
 -}
 -#endif
 -
  /* Bluetooth ioctls */
  #define HCIUARTSETPROTO       _IOW('U', 200, int)
  #define HCIUARTGETPROTO       _IOR('U', 201, int)
  #define HIDPGETCONNLIST       _IOR('H', 210, int)
  #define HIDPGETCONNINFO       _IOR('H', 211, int)
  
 -#ifdef CONFIG_BLOCK
 -struct floppy_struct32 {
 -      compat_uint_t   size;
 -      compat_uint_t   sect;
 -      compat_uint_t   head;
 -      compat_uint_t   track;
 -      compat_uint_t   stretch;
 -      unsigned char   gap;
 -      unsigned char   rate;
 -      unsigned char   spec1;
 -      unsigned char   fmt_gap;
 -      const compat_caddr_t name;
 -};
 -
 -struct floppy_drive_params32 {
 -      char            cmos;
 -      compat_ulong_t  max_dtr;
 -      compat_ulong_t  hlt;
 -      compat_ulong_t  hut;
 -      compat_ulong_t  srt;
 -      compat_ulong_t  spinup;
 -      compat_ulong_t  spindown;
 -      unsigned char   spindown_offset;
 -      unsigned char   select_delay;
 -      unsigned char   rps;
 -      unsigned char   tracks;
 -      compat_ulong_t  timeout;
 -      unsigned char   interleave_sect;
 -      struct floppy_max_errors max_errors;
 -      char            flags;
 -      char            read_track;
 -      short           autodetect[8];
 -      compat_int_t    checkfreq;
 -      compat_int_t    native_format;
 -};
 -
 -struct floppy_drive_struct32 {
 -      signed char     flags;
 -      compat_ulong_t  spinup_date;
 -      compat_ulong_t  select_date;
 -      compat_ulong_t  first_read_date;
 -      short           probed_format;
 -      short           track;
 -      short           maxblock;
 -      short           maxtrack;
 -      compat_int_t    generation;
 -      compat_int_t    keep_data;
 -      compat_int_t    fd_ref;
 -      compat_int_t    fd_device;
 -      compat_int_t    last_checked;
 -      compat_caddr_t dmabuf;
 -      compat_int_t    bufblocks;
 -};
 -
 -struct floppy_fdc_state32 {
 -      compat_int_t    spec1;
 -      compat_int_t    spec2;
 -      compat_int_t    dtr;
 -      unsigned char   version;
 -      unsigned char   dor;
 -      compat_ulong_t  address;
 -      unsigned int    rawcmd:2;
 -      unsigned int    reset:1;
 -      unsigned int    need_configure:1;
 -      unsigned int    perp_mode:2;
 -      unsigned int    has_fifo:1;
 -      unsigned int    driver_version;
 -      unsigned char   track[4];
 -};
 -
 -struct floppy_write_errors32 {
 -      unsigned int    write_errors;
 -      compat_ulong_t  first_error_sector;
 -      compat_int_t    first_error_generation;
 -      compat_ulong_t  last_error_sector;
 -      compat_int_t    last_error_generation;
 -      compat_uint_t   badness;
 -};
 -
 -#define FDSETPRM32 _IOW(2, 0x42, struct floppy_struct32)
 -#define FDDEFPRM32 _IOW(2, 0x43, struct floppy_struct32)
 -#define FDGETPRM32 _IOR(2, 0x04, struct floppy_struct32)
 -#define FDSETDRVPRM32 _IOW(2, 0x90, struct floppy_drive_params32)
 -#define FDGETDRVPRM32 _IOR(2, 0x11, struct floppy_drive_params32)
 -#define FDGETDRVSTAT32 _IOR(2, 0x12, struct floppy_drive_struct32)
 -#define FDPOLLDRVSTAT32 _IOR(2, 0x13, struct floppy_drive_struct32)
 -#define FDGETFDCSTAT32 _IOR(2, 0x15, struct floppy_fdc_state32)
 -#define FDWERRORGET32  _IOR(2, 0x17, struct floppy_write_errors32)
 -
 -static struct {
 -      unsigned int    cmd32;
 -      unsigned int    cmd;
 -} fd_ioctl_trans_table[] = {
 -      { FDSETPRM32, FDSETPRM },
 -      { FDDEFPRM32, FDDEFPRM },
 -      { FDGETPRM32, FDGETPRM },
 -      { FDSETDRVPRM32, FDSETDRVPRM },
 -      { FDGETDRVPRM32, FDGETDRVPRM },
 -      { FDGETDRVSTAT32, FDGETDRVSTAT },
 -      { FDPOLLDRVSTAT32, FDPOLLDRVSTAT },
 -      { FDGETFDCSTAT32, FDGETFDCSTAT },
 -      { FDWERRORGET32, FDWERRORGET }
 -};
 -
 -#define NR_FD_IOCTL_TRANS ARRAY_SIZE(fd_ioctl_trans_table)
 -
 -static int fd_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
 -{
 -      mm_segment_t old_fs = get_fs();
 -      void *karg = NULL;
 -      unsigned int kcmd = 0;
 -      int i, err;
 -
 -      for (i = 0; i < NR_FD_IOCTL_TRANS; i++)
 -              if (cmd == fd_ioctl_trans_table[i].cmd32) {
 -                      kcmd = fd_ioctl_trans_table[i].cmd;
 -                      break;
 -              }
 -      if (!kcmd)
 -              return -EINVAL;
 -
 -      switch (cmd) {
 -              case FDSETPRM32:
 -              case FDDEFPRM32:
 -              case FDGETPRM32:
 -              {
 -                      compat_uptr_t name;
 -                      struct floppy_struct32 __user *uf;
 -                      struct floppy_struct *f;
 -
 -                      uf = compat_ptr(arg);
 -                      f = karg = kmalloc(sizeof(struct floppy_struct), GFP_KERNEL);
 -                      if (!karg)
 -                              return -ENOMEM;
 -                      if (cmd == FDGETPRM32)
 -                              break;
 -                      err = __get_user(f->size, &uf->size);
 -                      err |= __get_user(f->sect, &uf->sect);
 -                      err |= __get_user(f->head, &uf->head);
 -                      err |= __get_user(f->track, &uf->track);
 -                      err |= __get_user(f->stretch, &uf->stretch);
 -                      err |= __get_user(f->gap, &uf->gap);
 -                      err |= __get_user(f->rate, &uf->rate);
 -                      err |= __get_user(f->spec1, &uf->spec1);
 -                      err |= __get_user(f->fmt_gap, &uf->fmt_gap);
 -                      err |= __get_user(name, &uf->name);
 -                      f->name = compat_ptr(name);
 -                      if (err) {
 -                              err = -EFAULT;
 -                              goto out;
 -                      }
 -                      break;
 -              }
 -              case FDSETDRVPRM32:
 -              case FDGETDRVPRM32:
 -              {
 -                      struct floppy_drive_params32 __user *uf;
 -                      struct floppy_drive_params *f;
 -
 -                      uf = compat_ptr(arg);
 -                      f = karg = kmalloc(sizeof(struct floppy_drive_params), GFP_KERNEL);
 -                      if (!karg)
 -                              return -ENOMEM;
 -                      if (cmd == FDGETDRVPRM32)
 -                              break;
 -                      err = __get_user(f->cmos, &uf->cmos);
 -                      err |= __get_user(f->max_dtr, &uf->max_dtr);
 -                      err |= __get_user(f->hlt, &uf->hlt);
 -                      err |= __get_user(f->hut, &uf->hut);
 -                      err |= __get_user(f->srt, &uf->srt);
 -                      err |= __get_user(f->spinup, &uf->spinup);
 -                      err |= __get_user(f->spindown, &uf->spindown);
 -                      err |= __get_user(f->spindown_offset, &uf->spindown_offset);
 -                      err |= __get_user(f->select_delay, &uf->select_delay);
 -                      err |= __get_user(f->rps, &uf->rps);
 -                      err |= __get_user(f->tracks, &uf->tracks);
 -                      err |= __get_user(f->timeout, &uf->timeout);
 -                      err |= __get_user(f->interleave_sect, &uf->interleave_sect);
 -                      err |= __copy_from_user(&f->max_errors, &uf->max_errors, sizeof(f->max_errors));
 -                      err |= __get_user(f->flags, &uf->flags);
 -                      err |= __get_user(f->read_track, &uf->read_track);
 -                      err |= __copy_from_user(f->autodetect, uf->autodetect, sizeof(f->autodetect));
 -                      err |= __get_user(f->checkfreq, &uf->checkfreq);
 -                      err |= __get_user(f->native_format, &uf->native_format);
 -                      if (err) {
 -                              err = -EFAULT;
 -                              goto out;
 -                      }
 -                      break;
 -              }
 -              case FDGETDRVSTAT32:
 -              case FDPOLLDRVSTAT32:
 -                      karg = kmalloc(sizeof(struct floppy_drive_struct), GFP_KERNEL);
 -                      if (!karg)
 -                              return -ENOMEM;
 -                      break;
 -              case FDGETFDCSTAT32:
 -                      karg = kmalloc(sizeof(struct floppy_fdc_state), GFP_KERNEL);
 -                      if (!karg)
 -                              return -ENOMEM;
 -                      break;
 -              case FDWERRORGET32:
 -                      karg = kmalloc(sizeof(struct floppy_write_errors), GFP_KERNEL);
 -                      if (!karg)
 -                              return -ENOMEM;
 -                      break;
 -              default:
 -                      return -EINVAL;
 -      }
 -      set_fs (KERNEL_DS);
 -      err = sys_ioctl (fd, kcmd, (unsigned long)karg);
 -      set_fs (old_fs);
 -      if (err)
 -              goto out;
 -      switch (cmd) {
 -              case FDGETPRM32:
 -              {
 -                      struct floppy_struct *f = karg;
 -                      struct floppy_struct32 __user *uf = compat_ptr(arg);
 -
 -                      err = __put_user(f->size, &uf->size);
 -                      err |= __put_user(f->sect, &uf->sect);
 -                      err |= __put_user(f->head, &uf->head);
 -                      err |= __put_user(f->track, &uf->track);
 -                      err |= __put_user(f->stretch, &uf->stretch);
 -                      err |= __put_user(f->gap, &uf->gap);
 -                      err |= __put_user(f->rate, &uf->rate);
 -                      err |= __put_user(f->spec1, &uf->spec1);
 -                      err |= __put_user(f->fmt_gap, &uf->fmt_gap);
 -                      err |= __put_user((u64)f->name, (compat_caddr_t __user *)&uf->name);
 -                      break;
 -              }
 -              case FDGETDRVPRM32:
 -              {
 -                      struct floppy_drive_params32 __user *uf;
 -                      struct floppy_drive_params *f = karg;
 -
 -                      uf = compat_ptr(arg);
 -                      err = __put_user(f->cmos, &uf->cmos);
 -                      err |= __put_user(f->max_dtr, &uf->max_dtr);
 -                      err |= __put_user(f->hlt, &uf->hlt);
 -                      err |= __put_user(f->hut, &uf->hut);
 -                      err |= __put_user(f->srt, &uf->srt);
 -                      err |= __put_user(f->spinup, &uf->spinup);
 -                      err |= __put_user(f->spindown, &uf->spindown);
 -                      err |= __put_user(f->spindown_offset, &uf->spindown_offset);
 -                      err |= __put_user(f->select_delay, &uf->select_delay);
 -                      err |= __put_user(f->rps, &uf->rps);
 -                      err |= __put_user(f->tracks, &uf->tracks);
 -                      err |= __put_user(f->timeout, &uf->timeout);
 -                      err |= __put_user(f->interleave_sect, &uf->interleave_sect);
 -                      err |= __copy_to_user(&uf->max_errors, &f->max_errors, sizeof(f->max_errors));
 -                      err |= __put_user(f->flags, &uf->flags);
 -                      err |= __put_user(f->read_track, &uf->read_track);
 -                      err |= __copy_to_user(uf->autodetect, f->autodetect, sizeof(f->autodetect));
 -                      err |= __put_user(f->checkfreq, &uf->checkfreq);
 -                      err |= __put_user(f->native_format, &uf->native_format);
 -                      break;
 -              }
 -              case FDGETDRVSTAT32:
 -              case FDPOLLDRVSTAT32:
 -              {
 -                      struct floppy_drive_struct32 __user *uf;
 -                      struct floppy_drive_struct *f = karg;
 -
 -                      uf = compat_ptr(arg);
 -                      err = __put_user(f->flags, &uf->flags);
 -                      err |= __put_user(f->spinup_date, &uf->spinup_date);
 -                      err |= __put_user(f->select_date, &uf->select_date);
 -                      err |= __put_user(f->first_read_date, &uf->first_read_date);
 -                      err |= __put_user(f->probed_format, &uf->probed_format);
 -                      err |= __put_user(f->track, &uf->track);
 -                      err |= __put_user(f->maxblock, &uf->maxblock);
 -                      err |= __put_user(f->maxtrack, &uf->maxtrack);
 -                      err |= __put_user(f->generation, &uf->generation);
 -                      err |= __put_user(f->keep_data, &uf->keep_data);
 -                      err |= __put_user(f->fd_ref, &uf->fd_ref);
 -                      err |= __put_user(f->fd_device, &uf->fd_device);
 -                      err |= __put_user(f->last_checked, &uf->last_checked);
 -                      err |= __put_user((u64)f->dmabuf, &uf->dmabuf);
 -                      err |= __put_user((u64)f->bufblocks, &uf->bufblocks);
 -                      break;
 -              }
 -              case FDGETFDCSTAT32:
 -              {
 -                      struct floppy_fdc_state32 __user *uf;
 -                      struct floppy_fdc_state *f = karg;
 -
 -                      uf = compat_ptr(arg);
 -                      err = __put_user(f->spec1, &uf->spec1);
 -                      err |= __put_user(f->spec2, &uf->spec2);
 -                      err |= __put_user(f->dtr, &uf->dtr);
 -                      err |= __put_user(f->version, &uf->version);
 -                      err |= __put_user(f->dor, &uf->dor);
 -                      err |= __put_user(f->address, &uf->address);
 -                      err |= __copy_to_user((char __user *)&uf->address + sizeof(uf->address),
 -                                         (char *)&f->address + sizeof(f->address), sizeof(int));
 -                      err |= __put_user(f->driver_version, &uf->driver_version);
 -                      err |= __copy_to_user(uf->track, f->track, sizeof(f->track));
 -                      break;
 -              }
 -              case FDWERRORGET32:
 -              {
 -                      struct floppy_write_errors32 __user *uf;
 -                      struct floppy_write_errors *f = karg;
 -
 -                      uf = compat_ptr(arg);
 -                      err = __put_user(f->write_errors, &uf->write_errors);
 -                      err |= __put_user(f->first_error_sector, &uf->first_error_sector);
 -                      err |= __put_user(f->first_error_generation, &uf->first_error_generation);
 -                      err |= __put_user(f->last_error_sector, &uf->last_error_sector);
 -                      err |= __put_user(f->last_error_generation, &uf->last_error_generation);
 -                      err |= __put_user(f->badness, &uf->badness);
 -                      break;
 -              }
 -              default:
 -                      break;
 -      }
 -      if (err)
 -              err = -EFAULT;
 -
 -out:
 -      kfree(karg);
 -      return err;
 -}
 -#endif
 -
  struct mtd_oob_buf32 {
        u_int32_t start;
        u_int32_t length;
@@@ -1965,6 -2505,60 +1964,6 @@@ COMPATIBLE_IOCTL(FIONREAD)  /* This is 
  /* 0x00 */
  COMPATIBLE_IOCTL(FIBMAP)
  COMPATIBLE_IOCTL(FIGETBSZ)
 -/* 0x03 -- HD/IDE ioctl's used by hdparm and friends.
 - *         Some need translations, these do not.
 - */
 -COMPATIBLE_IOCTL(HDIO_GET_IDENTITY)
 -COMPATIBLE_IOCTL(HDIO_DRIVE_TASK)
 -COMPATIBLE_IOCTL(HDIO_DRIVE_CMD)
 -ULONG_IOCTL(HDIO_SET_MULTCOUNT)
 -ULONG_IOCTL(HDIO_SET_UNMASKINTR)
 -ULONG_IOCTL(HDIO_SET_KEEPSETTINGS)
 -ULONG_IOCTL(HDIO_SET_32BIT)
 -ULONG_IOCTL(HDIO_SET_NOWERR)
 -ULONG_IOCTL(HDIO_SET_DMA)
 -ULONG_IOCTL(HDIO_SET_PIO_MODE)
 -ULONG_IOCTL(HDIO_SET_NICE)
 -ULONG_IOCTL(HDIO_SET_WCACHE)
 -ULONG_IOCTL(HDIO_SET_ACOUSTIC)
 -ULONG_IOCTL(HDIO_SET_BUSSTATE)
 -ULONG_IOCTL(HDIO_SET_ADDRESS)
 -COMPATIBLE_IOCTL(HDIO_SCAN_HWIF)
 -/* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */
 -COMPATIBLE_IOCTL(0x330)
 -/* 0x02 -- Floppy ioctls */
 -COMPATIBLE_IOCTL(FDMSGON)
 -COMPATIBLE_IOCTL(FDMSGOFF)
 -COMPATIBLE_IOCTL(FDSETEMSGTRESH)
 -COMPATIBLE_IOCTL(FDFLUSH)
 -COMPATIBLE_IOCTL(FDWERRORCLR)
 -COMPATIBLE_IOCTL(FDSETMAXERRS)
 -COMPATIBLE_IOCTL(FDGETMAXERRS)
 -COMPATIBLE_IOCTL(FDGETDRVTYP)
 -COMPATIBLE_IOCTL(FDEJECT)
 -COMPATIBLE_IOCTL(FDCLRPRM)
 -COMPATIBLE_IOCTL(FDFMTBEG)
 -COMPATIBLE_IOCTL(FDFMTEND)
 -COMPATIBLE_IOCTL(FDRESET)
 -COMPATIBLE_IOCTL(FDTWADDLE)
 -COMPATIBLE_IOCTL(FDFMTTRK)
 -COMPATIBLE_IOCTL(FDRAWCMD)
 -/* 0x12 */
 -#ifdef CONFIG_BLOCK
 -COMPATIBLE_IOCTL(BLKRASET)
 -COMPATIBLE_IOCTL(BLKROSET)
 -COMPATIBLE_IOCTL(BLKROGET)
 -COMPATIBLE_IOCTL(BLKRRPART)
 -COMPATIBLE_IOCTL(BLKFLSBUF)
 -COMPATIBLE_IOCTL(BLKSECTSET)
 -COMPATIBLE_IOCTL(BLKSSZGET)
 -COMPATIBLE_IOCTL(BLKTRACESTART)
 -COMPATIBLE_IOCTL(BLKTRACESTOP)
 -COMPATIBLE_IOCTL(BLKTRACESETUP)
 -COMPATIBLE_IOCTL(BLKTRACETEARDOWN)
 -ULONG_IOCTL(BLKRASET)
 -ULONG_IOCTL(BLKFRASET)
 -#endif
  /* RAID */
  COMPATIBLE_IOCTL(RAID_VERSION)
  COMPATIBLE_IOCTL(GET_ARRAY_INFO)
@@@ -2212,6 -2806,50 +2211,6 @@@ COMPATIBLE_IOCTL(PPGETMODE
  COMPATIBLE_IOCTL(PPGETPHASE)
  COMPATIBLE_IOCTL(PPGETFLAGS)
  COMPATIBLE_IOCTL(PPSETFLAGS)
 -/* CDROM stuff */
 -COMPATIBLE_IOCTL(CDROMPAUSE)
 -COMPATIBLE_IOCTL(CDROMRESUME)
 -COMPATIBLE_IOCTL(CDROMPLAYMSF)
 -COMPATIBLE_IOCTL(CDROMPLAYTRKIND)
 -COMPATIBLE_IOCTL(CDROMREADTOCHDR)
 -COMPATIBLE_IOCTL(CDROMREADTOCENTRY)
 -COMPATIBLE_IOCTL(CDROMSTOP)
 -COMPATIBLE_IOCTL(CDROMSTART)
 -COMPATIBLE_IOCTL(CDROMEJECT)
 -COMPATIBLE_IOCTL(CDROMVOLCTRL)
 -COMPATIBLE_IOCTL(CDROMSUBCHNL)
 -ULONG_IOCTL(CDROMEJECT_SW)
 -COMPATIBLE_IOCTL(CDROMMULTISESSION)
 -COMPATIBLE_IOCTL(CDROM_GET_MCN)
 -COMPATIBLE_IOCTL(CDROMRESET)
 -COMPATIBLE_IOCTL(CDROMVOLREAD)
 -COMPATIBLE_IOCTL(CDROMSEEK)
 -COMPATIBLE_IOCTL(CDROMPLAYBLK)
 -COMPATIBLE_IOCTL(CDROMCLOSETRAY)
 -ULONG_IOCTL(CDROM_SET_OPTIONS)
 -ULONG_IOCTL(CDROM_CLEAR_OPTIONS)
 -ULONG_IOCTL(CDROM_SELECT_SPEED)
 -ULONG_IOCTL(CDROM_SELECT_DISC)
 -ULONG_IOCTL(CDROM_MEDIA_CHANGED)
 -ULONG_IOCTL(CDROM_DRIVE_STATUS)
 -COMPATIBLE_IOCTL(CDROM_DISC_STATUS)
 -COMPATIBLE_IOCTL(CDROM_CHANGER_NSLOTS)
 -ULONG_IOCTL(CDROM_LOCKDOOR)
 -ULONG_IOCTL(CDROM_DEBUG)
 -COMPATIBLE_IOCTL(CDROM_GET_CAPABILITY)
 -/* Ignore cdrom.h about these next 5 ioctls, they absolutely do
 - * not take a struct cdrom_read, instead they take a struct cdrom_msf
 - * which is compatible.
 - */
 -COMPATIBLE_IOCTL(CDROMREADMODE2)
 -COMPATIBLE_IOCTL(CDROMREADMODE1)
 -COMPATIBLE_IOCTL(CDROMREADRAW)
 -COMPATIBLE_IOCTL(CDROMREADCOOKED)
 -COMPATIBLE_IOCTL(CDROMREADALL)
 -/* DVD ioctls */
 -COMPATIBLE_IOCTL(DVD_READ_STRUCT)
 -COMPATIBLE_IOCTL(DVD_WRITE_STRUCT)
 -COMPATIBLE_IOCTL(DVD_AUTH)
  /* pktcdvd */
  COMPATIBLE_IOCTL(PACKET_CTRL_CMD)
  /* Big A */
@@@ -2697,6 -3335,33 +2696,6 @@@ HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp
  HANDLE_IOCTL(SIOCGSTAMPNS, do_siocgstampns)
  #endif
  #ifdef CONFIG_BLOCK
 -HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
 -HANDLE_IOCTL(BLKRAGET, w_long)
 -HANDLE_IOCTL(BLKGETSIZE, w_long)
 -HANDLE_IOCTL(0x1260, broken_blkgetsize)
 -HANDLE_IOCTL(BLKFRAGET, w_long)
 -HANDLE_IOCTL(BLKSECTGET, w_long)
 -HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_UNMASKINTR, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_MULTCOUNT, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_KEEPSETTINGS, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_32BIT, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_NOWERR, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_DMA, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_NICE, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_WCACHE, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_ACOUSTIC, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_ADDRESS, hdio_ioctl_trans)
 -HANDLE_IOCTL(HDIO_GET_BUSSTATE, hdio_ioctl_trans)
 -HANDLE_IOCTL(FDSETPRM32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDDEFPRM32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDGETPRM32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDSETDRVPRM32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDGETDRVPRM32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDGETDRVSTAT32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDPOLLDRVSTAT32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDGETFDCSTAT32, fd_ioctl_trans)
 -HANDLE_IOCTL(FDWERRORGET32, fd_ioctl_trans)
  HANDLE_IOCTL(SG_IO,sg_ioctl_trans)
  HANDLE_IOCTL(SG_GET_REQUEST_TABLE, sg_grt_trans)
  #endif
@@@ -2707,6 -3372,8 +2706,6 @@@ HANDLE_IOCTL(PPPIOCSACTIVE32, ppp_sock_
  #ifdef CONFIG_BLOCK
  HANDLE_IOCTL(MTIOCGET32, mt_ioctl_trans)
  HANDLE_IOCTL(MTIOCPOS32, mt_ioctl_trans)
 -HANDLE_IOCTL(CDROMREADAUDIO, cdrom_ioctl_trans)
 -HANDLE_IOCTL(CDROM_SEND_PACKET, cdrom_ioctl_trans)
  #endif
  #define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
  HANDLE_IOCTL(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout)
@@@ -2747,6 -3414,9 +2746,6 @@@ HANDLE_IOCTL(SONET_GETFRAMING, do_atm_i
  HANDLE_IOCTL(SONET_GETFRSENSE, do_atm_ioctl)
  /* block stuff */
  #ifdef CONFIG_BLOCK
 -HANDLE_IOCTL(BLKBSZGET_32, do_blkbszget)
 -HANDLE_IOCTL(BLKBSZSET_32, do_blkbszset)
 -HANDLE_IOCTL(BLKGETSIZE64_32, do_blkgetsize64)
  /* Raw devices */
  HANDLE_IOCTL(RAW_SETBIND, raw_ioctl)
  HANDLE_IOCTL(RAW_GETBIND, raw_ioctl)
index e47e5951058be53593f68e9c8d955418a0e82ccf,0c522e6b0917ad84a2fc5f26423cc8efb4419702..74523d999f7a9a99f4e5890102e653c49f094ade
@@@ -340,15 -340,19 +340,30 @@@ struct parisc_device_id 
  #define PA_HVERSION_ANY_ID    0xffff
  #define PA_SVERSION_ANY_ID    0xffffffff
  
 +/* SDIO */
 +
 +#define SDIO_ANY_ID (~0)
 +
 +struct sdio_device_id {
 +      __u8    class;                  /* Standard interface or SDIO_ANY_ID */
 +      __u16   vendor;                 /* Vendor or SDIO_ANY_ID */
 +      __u16   device;                 /* Device ID or SDIO_ANY_ID */
 +      kernel_ulong_t driver_data;     /* Data private to the driver */
 +};
 +
+ /* SSB core, see drivers/ssb/ */
+ struct ssb_device_id {
+       __u16   vendor;
+       __u16   coreid;
+       __u8    revision;
+ };
+ #define SSB_DEVICE(_vendor, _coreid, _revision)  \
+       { .vendor = _vendor, .coreid = _coreid, .revision = _revision, }
+ #define SSB_DEVTABLE_END  \
+       { 0, },
+ #define SSB_ANY_VENDOR                0xFFFF
+ #define SSB_ANY_ID            0xFFFF
+ #define SSB_ANY_REV           0xFF
  #endif /* LINUX_MOD_DEVICETABLE_H */
diff --combined include/linux/pci_ids.h
index cfee06bca2d3e615c7bfcc6c2b3d6d670f666496,27363bf2979185cf79657da13356d5b66f20c2fc..8acae4eeaa763373f6908c52189218c228e5f23d
  #define PCI_DEVICE_ID_RICOH_RL5C476   0x0476
  #define PCI_DEVICE_ID_RICOH_RL5C478   0x0478
  #define PCI_DEVICE_ID_RICOH_R5C822    0x0822
 +#define PCI_DEVICE_ID_RICOH_R5C832    0x0832
 +#define PCI_DEVICE_ID_RICOH_R5C843    0x0843
  
  #define PCI_VENDOR_ID_DLINK           0x1186
  #define PCI_DEVICE_ID_DLINK_DGE510T   0x4c00
  
  #define PCI_VENDOR_ID_RADISYS         0x1331
  
 +#define PCI_VENDOR_ID_MICRO_MEMORY            0x1332
 +#define PCI_DEVICE_ID_MICRO_MEMORY_5415CN     0x5415
 +#define PCI_DEVICE_ID_MICRO_MEMORY_5425CN     0x5425
 +#define PCI_DEVICE_ID_MICRO_MEMORY_6155               0x6155
 +
  #define PCI_VENDOR_ID_DOMEX           0x134a
  #define PCI_DEVICE_ID_DOMEX_DMX3191D  0x0001
  
  #define PCI_VENDOR_ID_ABOCOM          0x13D1
  #define PCI_DEVICE_ID_ABOCOM_2BD1       0x2BD1
  
+ #define PCI_VENDOR_ID_SUNDANCE                0x13f0
  #define PCI_VENDOR_ID_CMEDIA          0x13f6
  #define PCI_DEVICE_ID_CMEDIA_CM8338A  0x0100
  #define PCI_DEVICE_ID_CMEDIA_CM8338B  0x0101
  #define PCI_DEVICE_ID_TIGON3_5751M    0x167d
  #define PCI_DEVICE_ID_TIGON3_5751F    0x167e
  #define PCI_DEVICE_ID_TIGON3_5787F    0x167f
+ #define PCI_DEVICE_ID_TIGON3_5761E    0x1680
+ #define PCI_DEVICE_ID_TIGON3_5761     0x1681
+ #define PCI_DEVICE_ID_TIGON3_5764     0x1684
  #define PCI_DEVICE_ID_TIGON3_5787M    0x1693
  #define PCI_DEVICE_ID_TIGON3_5782     0x1696
+ #define PCI_DEVICE_ID_TIGON3_5784     0x1698
  #define PCI_DEVICE_ID_TIGON3_5786     0x169a
  #define PCI_DEVICE_ID_TIGON3_5787     0x169b
  #define PCI_DEVICE_ID_TIGON3_5788     0x169c
  #define PCI_VENDOR_ID_TEKRAM          0x1de1
  #define PCI_DEVICE_ID_TEKRAM_DC290    0xdc29
  
+ #define PCI_VENDOR_ID_TEHUTI          0x1fc9
+ #define PCI_DEVICE_ID_TEHUTI_3009     0x3009
+ #define PCI_DEVICE_ID_TEHUTI_3010     0x3010
+ #define PCI_DEVICE_ID_TEHUTI_3014     0x3014
  #define PCI_VENDOR_ID_HINT             0x3388
  #define PCI_DEVICE_ID_HINT_VXPROII_IDE 0x8013
  
diff --combined scripts/mod/file2alias.c
index 1e5d4d6931955bbf9432b3309c13b0ef0b8192c5,895ba3ac62082bbeb48d46fc6390a9a888a82821..36e3754db53a5b0951fb0a6c180f111ae2f9c54a
@@@ -484,19 -484,18 +484,33 @@@ static int do_parisc_entry(const char *
        return 1;
  }
  
 +/* Looks like: sdio:cNvNdN. */
 +static int do_sdio_entry(const char *filename,
 +                      struct sdio_device_id *id, char *alias)
 +{
 +      id->class = TO_NATIVE(id->class);
 +      id->vendor = TO_NATIVE(id->vendor);
 +      id->device = TO_NATIVE(id->device);
 +
 +      strcpy(alias, "sdio:");
 +      ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class);
 +      ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor);
 +      ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device);
++      return 1;
++}
++
+ /* Looks like: ssb:vNidNrevN. */
+ static int do_ssb_entry(const char *filename,
+                       struct ssb_device_id *id, char *alias)
+ {
+       id->vendor = TO_NATIVE(id->vendor);
+       id->coreid = TO_NATIVE(id->coreid);
+       id->revision = TO_NATIVE(id->revision);
  
+       strcpy(alias, "ssb:");
+       ADD(alias, "v", id->vendor != SSB_ANY_VENDOR, id->vendor);
+       ADD(alias, "id", id->coreid != SSB_ANY_ID, id->coreid);
+       ADD(alias, "rev", id->revision != SSB_ANY_REV, id->revision);
        return 1;
  }
  
@@@ -615,10 -614,10 +629,14 @@@ void handle_moddevtable(struct module *
                do_table(symval, sym->st_size,
                         sizeof(struct parisc_device_id), "parisc",
                         do_parisc_entry, mod);
 +      else if (sym_is(symname, "__mod_sdio_device_table"))
 +              do_table(symval, sym->st_size,
 +                       sizeof(struct sdio_device_id), "sdio",
 +                       do_sdio_entry, mod);
+       else if (sym_is(symname, "__mod_ssb_device_table"))
+               do_table(symval, sym->st_size,
+                        sizeof(struct ssb_device_id), "ssb",
+                        do_ssb_entry, mod);
  }
  
  /* Now add out buffered information to the generated C source */