]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Oct 2008 16:33:18 +0000 (09:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Oct 2008 16:33:18 +0000 (09:33 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1075 commits)
  myri10ge: update driver version number to 1.4.3-1.369
  r8169: add shutdown handler
  r8169: preliminary 8168d support
  r8169: support additional 8168cp chipset
  r8169: change default behavior for mildly identified 8168c chipsets
  r8169: add a new 8168cp flavor
  r8169: add a new 8168c flavor (bis)
  r8169: add a new 8168c flavor
  r8169: sync existing 8168 device hardware start sequences with vendor driver
  r8169: 8168b Tx performance tweak
  r8169: make room for more specific 8168 hardware start procedure
  r8169: shuffle some registers handling around (8168 operation only)
  r8169: new phy init parameters for the 8168b
  r8169: update phy init parameters
  r8169: wake up the PHY of the 8168
  af_key: fix SADB_X_SPDDELETE response
  ath9k: Fix return code when ath9k_hw_setpower() fails on reset
  ath9k: remove nasty FAIL macro from ath9k_hw_reset()
  gre: minor cleanups in netlink interface
  gre: fix copy and paste error
  ...

1  2 
MAINTAINERS
drivers/block/aoe/aoeblk.c
drivers/block/aoe/aoecmd.c
drivers/block/aoe/aoedev.c
drivers/s390/net/qeth_core_main.c
include/linux/Kbuild

diff --combined MAINTAINERS
index ece4e27f997217d6fe82d63dff85f7b1e23e5461,0e2f1e18be87bb5f56d42b87f2d8b8acf42feb43..46d94ff340c69b1e556b6cc2a325d2dd5551384e
@@@ -1048,6 -1048,13 +1048,13 @@@ L:    cbe-oss-dev@ozlabs.or
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  
+ CISCO 10G ETHERNET DRIVER
+ P:    Scott Feldman
+ M:    scofeldm@cisco.com
+ P:    Joe Eykholt
+ M:    jeykholt@cisco.com
+ S:    Supported
  CFAG12864B LCD DRIVER
  P:    Miguel Ojeda Sandonis
  M:    miguel.ojeda.sandonis@gmail.com
@@@ -2319,6 -2326,12 +2326,12 @@@ L:    video4linux-list@redhat.co
  W:    http://www.ivtvdriver.org
  S:    Maintained
  
+ JME NETWORK DRIVER
+ P:    Guo-Fu Tseng
+ M:    cooldavid@cooldavid.org
+ L:    netdev@vger.kernel.org
+ S:    Maintained
  JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
  P:    David Woodhouse
  M:    dwmw2@infradead.org
@@@ -3384,6 -3397,13 +3397,13 @@@ M:    linux-driver@qlogic.co
  L:    netdev@vger.kernel.org
  S:    Supported
  
+ QLOGIC QLGE 10Gb ETHERNET DRIVER
+ P:    Ron Mercer
+ M:    linux-driver@qlogic.com
+ M:    ron.mercer@qlogic.com
+ L:    netdev@vger.kernel.org
+ S:    Supported
  QNX4 FILESYSTEM
  P:    Anders Larsen
  M:    al@alarsen.net
@@@ -3649,9 -3669,8 +3669,9 @@@ M:      jmorris@namei.or
  P:    Eric Paris
  M:    eparis@parisplace.org
  L:    linux-kernel@vger.kernel.org (kernel issues)
 -L:    selinux@tycho.nsa.gov (subscribers-only, general discussion)
 -W:    http://www.nsa.gov/selinux
 +L:    selinux@tycho.nsa.gov (subscribers-only, general discussion)
 +W:    http://selinuxproject.org
 +T:    git kernel.org:pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
  S:    Supported
  
  SENSABLE PHANTOM
@@@ -3828,8 -3847,6 +3848,8 @@@ S:      Maintaine
  SOUND
  P:    Jaroslav Kysela
  M:    perex@perex.cz
 +P:    Takashi Iwai
 +M:    tiwai@suse.de
  L:    alsa-devel@alsa-project.org (subscribers-only)
  S:    Maintained
  
@@@ -4336,6 -4353,12 +4356,12 @@@ L:    linux-usb@vger.kernel.or
  W:    http://www.connecttech.com
  S:    Supported
  
+ USB SMSC95XX ETHERNET DRIVER
+ P:    Steve Glendinning
+ M:    steve.glendinning@smsc.com
+ L:    netdev@vger.kernel.org
+ S:    Supported
  USB SN9C1xx DRIVER
  P:    Luca Risolia
  M:    luca.risolia@studio.unibo.it
index aa69556c34857bddb120fdb8f378afa6fff8adaa,fd2cf5439a1c274a097118952f4f25dc9f101fd4..b82654e883a759f10d46dd67f311eab59a35fec6
@@@ -109,12 -109,12 +109,12 @@@ static const struct attribute_group att
  static int
  aoedisk_add_sysfs(struct aoedev *d)
  {
 -      return sysfs_create_group(&d->gd->dev.kobj, &attr_group);
 +      return sysfs_create_group(&disk_to_dev(d->gd)->kobj, &attr_group);
  }
  void
  aoedisk_rm_sysfs(struct aoedev *d)
  {
 -      sysfs_remove_group(&d->gd->dev.kobj, &attr_group);
 +      sysfs_remove_group(&disk_to_dev(d->gd)->kobj, &attr_group);
  }
  
  static int
@@@ -158,9 -158,9 +158,9 @@@ aoeblk_release(struct inode *inode, str
  static int
  aoeblk_make_request(struct request_queue *q, struct bio *bio)
  {
+       struct sk_buff_head queue;
        struct aoedev *d;
        struct buf *buf;
-       struct sk_buff *sl;
        ulong flags;
  
        blk_queue_bounce(q, &bio);
        list_add_tail(&buf->bufs, &d->bufq);
  
        aoecmd_work(d);
-       sl = d->sendq_hd;
-       d->sendq_hd = d->sendq_tl = NULL;
+       __skb_queue_head_init(&queue);
+       skb_queue_splice_init(&d->sendq, &queue);
  
        spin_unlock_irqrestore(&d->lock, flags);
-       aoenet_xmit(sl);
+       aoenet_xmit(&queue);
  
        return 0;
  }
@@@ -276,7 -276,7 +276,7 @@@ aoeblk_gdalloc(void *vp
        gd->first_minor = d->sysminor * AOE_PARTITIONS;
        gd->fops = &aoe_bdops;
        gd->private_data = d;
 -      gd->capacity = d->ssize;
 +      set_capacity(gd, d->ssize);
        snprintf(gd->disk_name, sizeof gd->disk_name, "etherd/e%ld.%d",
                d->aoemajor, d->aoeminor);
  
index 961d29a53cab5461a1421d1b236fdccdb43d52e6,e33da30be4c4cc62a88f99e5b9799614e9e731ec..71ff78c9e4d6c24a3d752cc35956645aa752eb34
@@@ -114,29 -114,22 +114,22 @@@ ifrotate(struct aoetgt *t
  static void
  skb_pool_put(struct aoedev *d, struct sk_buff *skb)
  {
-       if (!d->skbpool_hd)
-               d->skbpool_hd = skb;
-       else
-               d->skbpool_tl->next = skb;
-       d->skbpool_tl = skb;
+       __skb_queue_tail(&d->skbpool, skb);
  }
  
  static struct sk_buff *
  skb_pool_get(struct aoedev *d)
  {
-       struct sk_buff *skb;
+       struct sk_buff *skb = skb_peek(&d->skbpool);
  
-       skb = d->skbpool_hd;
        if (skb && atomic_read(&skb_shinfo(skb)->dataref) == 1) {
-               d->skbpool_hd = skb->next;
-               skb->next = NULL;
+               __skb_unlink(skb, &d->skbpool);
                return skb;
        }
-       if (d->nskbpool < NSKBPOOLMAX
-       && (skb = new_skb(ETH_ZLEN))) {
-               d->nskbpool++;
+       if (skb_queue_len(&d->skbpool) < NSKBPOOLMAX &&
+           (skb = new_skb(ETH_ZLEN)))
                return skb;
-       }
        return NULL;
  }
  
@@@ -293,29 -286,22 +286,22 @@@ aoecmd_ata_rw(struct aoedev *d
  
        skb->dev = t->ifp->nd;
        skb = skb_clone(skb, GFP_ATOMIC);
-       if (skb) {
-               if (d->sendq_hd)
-                       d->sendq_tl->next = skb;
-               else
-                       d->sendq_hd = skb;
-               d->sendq_tl = skb;
-       }
+       if (skb)
+               __skb_queue_tail(&d->sendq, skb);
        return 1;
  }
  
  /* some callers cannot sleep, and they can call this function,
   * transmitting the packets later, when interrupts are on
   */
- static struct sk_buff *
- aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff **tail)
+ static void
+ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff_head *queue)
  {
        struct aoe_hdr *h;
        struct aoe_cfghdr *ch;
-       struct sk_buff *skb, *sl, *sl_tail;
+       struct sk_buff *skb;
        struct net_device *ifp;
  
-       sl = sl_tail = NULL;
        read_lock(&dev_base_lock);
        for_each_netdev(&init_net, ifp) {
                dev_hold(ifp);
                }
                skb_put(skb, sizeof *h + sizeof *ch);
                skb->dev = ifp;
-               if (sl_tail == NULL)
-                       sl_tail = skb;
+               __skb_queue_tail(queue, skb);
                h = (struct aoe_hdr *) skb_mac_header(skb);
                memset(h, 0, sizeof *h + sizeof *ch);
  
                h->minor = aoeminor;
                h->cmd = AOECMD_CFG;
  
-               skb->next = sl;
-               sl = skb;
  cont:
                dev_put(ifp);
        }
        read_unlock(&dev_base_lock);
-       if (tail != NULL)
-               *tail = sl_tail;
-       return sl;
  }
  
  static void
@@@ -406,11 -385,7 +385,7 @@@ resend(struct aoedev *d, struct aoetgt 
        skb = skb_clone(skb, GFP_ATOMIC);
        if (skb == NULL)
                return;
-       if (d->sendq_hd)
-               d->sendq_tl->next = skb;
-       else
-               d->sendq_hd = skb;
-       d->sendq_tl = skb;
+       __skb_queue_tail(&d->sendq, skb);
  }
  
  static int
@@@ -508,16 -483,15 +483,15 @@@ ata_scnt(unsigned char *packet) 
  static void
  rexmit_timer(ulong vp)
  {
+       struct sk_buff_head queue;
        struct aoedev *d;
        struct aoetgt *t, **tt, **te;
        struct aoeif *ifp;
        struct frame *f, *e;
-       struct sk_buff *sl;
        register long timeout;
        ulong flags, n;
  
        d = (struct aoedev *) vp;
-       sl = NULL;
  
        /* timeout is always ~150% of the moving average */
        timeout = d->rttavg;
                }
        }
  
-       if (d->sendq_hd) {
+       if (!skb_queue_empty(&d->sendq)) {
                n = d->rttavg <<= 1;
                if (n > MAXTIMER)
                        d->rttavg = MAXTIMER;
                aoecmd_work(d);
        }
  
-       sl = d->sendq_hd;
-       d->sendq_hd = d->sendq_tl = NULL;
+       __skb_queue_head_init(&queue);
+       skb_queue_splice_init(&d->sendq, &queue);
  
        d->timer.expires = jiffies + TIMERTICK;
        add_timer(&d->timer);
  
        spin_unlock_irqrestore(&d->lock, flags);
  
-       aoenet_xmit(sl);
+       aoenet_xmit(&queue);
  }
  
  /* enters with d->lock held */
@@@ -645,7 -619,7 +619,7 @@@ aoecmd_sleepwork(struct work_struct *wo
                unsigned long flags;
                u64 ssize;
  
 -              ssize = d->gd->capacity;
 +              ssize = get_capacity(d->gd);
                bd = bdget_disk(d->gd, 0);
  
                if (bd) {
@@@ -707,7 -681,7 +681,7 @@@ ataid_complete(struct aoedev *d, struc
        if (d->flags & (DEVFL_GDALLOC|DEVFL_NEWSIZE))
                return;
        if (d->gd != NULL) {
 -              d->gd->capacity = ssize;
 +              set_capacity(d->gd, ssize);
                d->flags |= DEVFL_NEWSIZE;
        } else
                d->flags |= DEVFL_GDALLOC;
@@@ -756,28 -730,23 +730,28 @@@ diskstats(struct gendisk *disk, struct 
        unsigned long n_sect = bio->bi_size >> 9;
        const int rw = bio_data_dir(bio);
        struct hd_struct *part;
 +      int cpu;
  
 -      part = get_part(disk, sector);
 -      all_stat_inc(disk, part, ios[rw], sector);
 -      all_stat_add(disk, part, ticks[rw], duration, sector);
 -      all_stat_add(disk, part, sectors[rw], n_sect, sector);
 -      all_stat_add(disk, part, io_ticks, duration, sector);
 +      cpu = part_stat_lock();
 +      part = disk_map_sector_rcu(disk, sector);
 +
 +      part_stat_inc(cpu, part, ios[rw]);
 +      part_stat_add(cpu, part, ticks[rw], duration);
 +      part_stat_add(cpu, part, sectors[rw], n_sect);
 +      part_stat_add(cpu, part, io_ticks, duration);
 +
 +      part_stat_unlock();
  }
  
  void
  aoecmd_ata_rsp(struct sk_buff *skb)
  {
+       struct sk_buff_head queue;
        struct aoedev *d;
        struct aoe_hdr *hin, *hout;
        struct aoe_atahdr *ahin, *ahout;
        struct frame *f;
        struct buf *buf;
-       struct sk_buff *sl;
        struct aoetgt *t;
        struct aoeif *ifp;
        register long n;
  
        aoecmd_work(d);
  xmit:
-       sl = d->sendq_hd;
-       d->sendq_hd = d->sendq_tl = NULL;
+       __skb_queue_head_init(&queue);
+       skb_queue_splice_init(&d->sendq, &queue);
  
        spin_unlock_irqrestore(&d->lock, flags);
-       aoenet_xmit(sl);
+       aoenet_xmit(&queue);
  }
  
  void
  aoecmd_cfg(ushort aoemajor, unsigned char aoeminor)
  {
-       struct sk_buff *sl;
-       sl = aoecmd_cfg_pkts(aoemajor, aoeminor, NULL);
+       struct sk_buff_head queue;
  
-       aoenet_xmit(sl);
+       __skb_queue_head_init(&queue);
+       aoecmd_cfg_pkts(aoemajor, aoeminor, &queue);
+       aoenet_xmit(&queue);
  }
   
  struct sk_buff *
@@@ -1081,7 -1050,12 +1055,12 @@@ aoecmd_cfg_rsp(struct sk_buff *skb
  
        spin_unlock_irqrestore(&d->lock, flags);
  
-       aoenet_xmit(sl);
+       if (sl) {
+               struct sk_buff_head queue;
+               __skb_queue_head_init(&queue);
+               __skb_queue_tail(&queue, sl);
+               aoenet_xmit(&queue);
+       }
  }
  
  void
index 6a8038d115b5948805e2f18a7b6d0a6b90f7e583,75a610adf515006def51ceab921e9b405af5004c..cc250577d405e6d061054b268ddc54b96ddd0cdc
@@@ -91,7 -91,7 +91,7 @@@ aoedev_downdev(struct aoedev *d
        }
  
        if (d->gd)
 -              d->gd->capacity = 0;
 +              set_capacity(d->gd, 0);
  
        d->flags &= ~DEVFL_UP;
  }
@@@ -188,14 -188,12 +188,12 @@@ skbfree(struct sk_buff *skb
  static void
  skbpoolfree(struct aoedev *d)
  {
-       struct sk_buff *skb;
+       struct sk_buff *skb, *tmp;
  
-       while ((skb = d->skbpool_hd)) {
-               d->skbpool_hd = skb->next;
-               skb->next = NULL;
+       skb_queue_walk_safe(&d->skbpool, skb, tmp)
                skbfree(skb);
-       }
-       d->skbpool_tl = NULL;
+       __skb_queue_head_init(&d->skbpool);
  }
  
  /* find it or malloc it */
@@@ -217,6 -215,8 +215,8 @@@ aoedev_by_sysminor_m(ulong sysminor
                goto out;
        INIT_WORK(&d->work, aoecmd_sleepwork);
        spin_lock_init(&d->lock);
+       skb_queue_head_init(&d->sendq);
+       skb_queue_head_init(&d->skbpool);
        init_timer(&d->timer);
        d->timer.data = (ulong) d;
        d->timer.function = dummy_timer;
index 141b2bb7b3cf44513f6674e9f9d72ec9e9a1b14c,908f50b17e269cfb6159cbf84a77c06abde7d50a..7de410d5be4a8cd95dfc9fd4a61e7aadb5432800
@@@ -745,7 -745,7 +745,7 @@@ static int qeth_get_problem(struct ccw_
                     SCHN_STAT_PROT_CHECK | SCHN_STAT_PROG_CHECK)) {
                QETH_DBF_TEXT(TRACE, 2, "CGENCHK");
                PRINT_WARN("check on device %s, dstat=x%x, cstat=x%x ",
 -                         cdev->dev.bus_id, dstat, cstat);
 +                         dev_name(&cdev->dev), dstat, cstat);
                print_hex_dump(KERN_WARNING, "qeth: irb ", DUMP_PREFIX_OFFSET,
                                16, 1, irb, 64, 1);
                return 1;
                if (sense[SENSE_COMMAND_REJECT_BYTE] &
                    SENSE_COMMAND_REJECT_FLAG) {
                        QETH_DBF_TEXT(TRACE, 2, "CMDREJi");
-                       return 0;
+                       return 1;
                }
                if ((sense[2] == 0xaf) && (sense[3] == 0xfe)) {
                        QETH_DBF_TEXT(TRACE, 2, "AFFE");
@@@ -784,12 -784,12 +784,12 @@@ static long __qeth_check_irb_error(stru
  
        switch (PTR_ERR(irb)) {
        case -EIO:
 -              PRINT_WARN("i/o-error on device %s\n", cdev->dev.bus_id);
 +              PRINT_WARN("i/o-error on device %s\n", dev_name(&cdev->dev));
                QETH_DBF_TEXT(TRACE, 2, "ckirberr");
                QETH_DBF_TEXT_(TRACE, 2, "  rc%d", -EIO);
                break;
        case -ETIMEDOUT:
 -              PRINT_WARN("timeout on device %s\n", cdev->dev.bus_id);
 +              PRINT_WARN("timeout on device %s\n", dev_name(&cdev->dev));
                QETH_DBF_TEXT(TRACE, 2, "ckirberr");
                QETH_DBF_TEXT_(TRACE, 2, "  rc%d", -ETIMEDOUT);
                if (intparm == QETH_RCD_PARM) {
                break;
        default:
                PRINT_WARN("unknown error %ld on device %s\n", PTR_ERR(irb),
 -                         cdev->dev.bus_id);
 +                         dev_name(&cdev->dev));
                QETH_DBF_TEXT(TRACE, 2, "ckirberr");
                QETH_DBF_TEXT(TRACE, 2, "  rc???");
        }
@@@ -884,6 -884,7 +884,7 @@@ static void qeth_irq(struct ccw_device 
                }
                rc = qeth_get_problem(cdev, irb);
                if (rc) {
+                       qeth_clear_ipacmd_list(card);
                        qeth_schedule_recovery(card);
                        goto out;
                }
@@@ -4081,7 -4082,7 +4082,7 @@@ static int qeth_core_probe_device(struc
        if (!get_device(dev))
                return -ENODEV;
  
 -      QETH_DBF_TEXT_(SETUP, 2, "%s", gdev->dev.bus_id);
 +      QETH_DBF_TEXT_(SETUP, 2, "%s", dev_name(&gdev->dev));
  
        card = qeth_alloc_card();
        if (!card) {
@@@ -4147,6 -4148,7 +4148,7 @@@ static void qeth_core_remove_device(str
        unsigned long flags;
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
  
+       QETH_DBF_TEXT(SETUP, 2, "removedv");
        if (card->discipline.ccwgdriver) {
                card->discipline.ccwgdriver->remove(gdev);
                qeth_core_free_discipline(card);
diff --combined include/linux/Kbuild
index 31474e89c59adfd241dfd64db4fbdc1a4a8bc779,f431e40725d666da967faa28420acb92056bd694..282a504bd1dbefed45609eae5c5bf02edd1bc49b
@@@ -126,6 -126,7 +126,7 @@@ header-y += pci_regs.
  header-y += pfkeyv2.h
  header-y += pg.h
  header-y += phantom.h
+ header-y += phonet.h
  header-y += pkt_cls.h
  header-y += pkt_sched.h
  header-y += posix_types.h
@@@ -180,7 -181,6 +181,7 @@@ unifdef-y += audit.
  unifdef-y += auto_fs.h
  unifdef-y += auxvec.h
  unifdef-y += binfmts.h
 +unifdef-y += blktrace_api.h
  unifdef-y += capability.h
  unifdef-y += capi.h
  unifdef-y += cciss_ioctl.h
@@@ -233,6 -233,7 +234,7 @@@ unifdef-y += if_fddi.
  unifdef-y += if_frad.h
  unifdef-y += if_ltalk.h
  unifdef-y += if_link.h
+ unifdef-y += if_phonet.h
  unifdef-y += if_pppol2tp.h
  unifdef-y += if_pppox.h
  unifdef-y += if_tr.h