]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 9 May 2007 19:54:17 +0000 (12:54 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 9 May 2007 19:54:17 +0000 (12:54 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial: (25 commits)
  sound: convert "sound" subdirectory to UTF-8
  MAINTAINERS: Add cxacru website/mailing list
  include files: convert "include" subdirectory to UTF-8
  general: convert "kernel" subdirectory to UTF-8
  documentation: convert the Documentation directory to UTF-8
  Convert the toplevel files CREDITS and MAINTAINERS to UTF-8.
  remove broken URLs from net drivers' output
  Magic number prefix consistency change to Documentation/magic-number.txt
  trivial: s/i_sem /i_mutex/
  fix file specification in comments
  drivers/base/platform.c: fix small typo in doc
  misc doc and kconfig typos
  Remove obsolete fat_cvf help text
  Fix occurrences of "the the "
  Fix minor typoes in kernel/module.c
  Kconfig: Remove reference to external mqueue library
  Kconfig: A couple of grammatical fixes in arch/i386/Kconfig
  Correct comments in genrtc.c to refer to correct /proc file.
  Fix more "deprecated" spellos.
  Fix "deprecated" typoes.
  ...

Fix trivial comment conflict in kernel/relay.c.

1  2 
arch/i386/kernel/cpu/mcheck/therm_throt.c
block/ll_rw_blk.c
drivers/char/pcmcia/cm4000_cs.c
drivers/char/tty_io.c
fs/direct-io.c
init/Kconfig
kernel/relay.c
kernel/sys.c

index 5b0a040213c2f0d8baecdae3eb3ea34d052e381f,2f28540caae2a784a47c834171adba09373f940a..7ba7c3abd3a4a74866899b7d6d6cae38f3113b93
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * linux/arch/i386/kerne/cpu/mcheck/therm_throt.c
+  * linux/arch/i386/kernel/cpu/mcheck/therm_throt.c
   *
   * Thermal throttle event support code (such as syslog messaging and rate
   * limiting) that was factored out from x86_64 (mce_intel.c) and i386 (p4.c).
@@@ -137,12 -137,10 +137,12 @@@ static __cpuinit int thermal_throttle_c
        mutex_lock(&therm_cpu_lock);
        switch (action) {
        case CPU_ONLINE:
 +      case CPU_ONLINE_FROZEN:
                err = thermal_throttle_add_dev(sys_dev);
                WARN_ON(err);
                break;
        case CPU_DEAD:
 +      case CPU_DEAD_FROZEN:
                thermal_throttle_remove_dev(sys_dev);
                break;
        }
diff --combined block/ll_rw_blk.c
index cd54672da99f215634f3aa3519041b1ebe8fa344,f294f1538f1ee123832e90fe5f86d8c6c90ff137..17e18897342841887ec25b45585cfe49478bf77a
@@@ -1704,7 -1704,7 +1704,7 @@@ EXPORT_SYMBOL(blk_stop_queue)
   *     on a queue, such as calling the unplug function after a timeout.
   *     A block device may call blk_sync_queue to ensure that any
   *     such activity is cancelled, thus allowing it to release resources
-  *     the the callbacks might use. The caller must already have made sure
+  *     that the callbacks might use. The caller must already have made sure
   *     that its ->make_request_fn will not re-add plugging prior to calling
   *     this function.
   *
  void blk_sync_queue(struct request_queue *q)
  {
        del_timer_sync(&q->unplug_timer);
 -      kblockd_flush();
  }
  EXPORT_SYMBOL(blk_sync_queue);
  
@@@ -3507,7 -3508,7 +3507,7 @@@ static int blk_cpu_notify(struct notifi
         * If a CPU goes away, splice its entries to the current CPU
         * and trigger a run of the softirq
         */
 -      if (action == CPU_DEAD) {
 +      if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) {
                int cpu = (unsigned long) hcpu;
  
                local_irq_disable();
@@@ -3631,11 -3632,11 +3631,11 @@@ int kblockd_schedule_work(struct work_s
  
  EXPORT_SYMBOL(kblockd_schedule_work);
  
 -void kblockd_flush(void)
 +void kblockd_flush_work(struct work_struct *work)
  {
 -      flush_workqueue(kblockd_workqueue);
 +      cancel_work_sync(work);
  }
 -EXPORT_SYMBOL(kblockd_flush);
 +EXPORT_SYMBOL(kblockd_flush_work);
  
  int __init blk_dev_init(void)
  {
index 561d0e151d0f65e4daf91e7a48fc6ddb7b43790d,4ea587983aef49af6d24ba52b6278c7be2f48687..fee58e03dbe2bb30e5d8d715e9fab42be3b04e85
@@@ -31,7 -31,6 +31,7 @@@
  #include <linux/init.h>
  #include <linux/fs.h>
  #include <linux/delay.h>
 +#include <linux/bitrev.h>
  #include <asm/uaccess.h>
  #include <asm/io.h>
  
@@@ -195,17 -194,41 +195,17 @@@ static inline unsigned char xinb(unsign
  }
  #endif
  
 -#define       b_0000  15
 -#define       b_0001  14
 -#define       b_0010  13
 -#define       b_0011  12
 -#define       b_0100  11
 -#define       b_0101  10
 -#define       b_0110  9
 -#define       b_0111  8
 -#define       b_1000  7
 -#define       b_1001  6
 -#define       b_1010  5
 -#define       b_1011  4
 -#define       b_1100  3
 -#define       b_1101  2
 -#define       b_1110  1
 -#define       b_1111  0
 -
 -static unsigned char irtab[16] = {
 -      b_0000, b_1000, b_0100, b_1100,
 -      b_0010, b_1010, b_0110, b_1110,
 -      b_0001, b_1001, b_0101, b_1101,
 -      b_0011, b_1011, b_0111, b_1111
 -};
 +static inline unsigned char invert_revert(unsigned char ch)
 +{
 +      return bitrev8(~ch);
 +}
  
  static void str_invert_revert(unsigned char *b, int len)
  {
        int i;
  
        for (i = 0; i < len; i++)
 -              b[i] = (irtab[b[i] & 0x0f] << 4) | irtab[b[i] >> 4];
 -}
 -
 -static unsigned char invert_revert(unsigned char ch)
 -{
 -      return (irtab[ch & 0x0f] << 4) | irtab[ch >> 4];
 +              b[i] = invert_revert(b[i]);
  }
  
  #define       ATRLENCK(dev,pos) \
@@@ -1091,7 -1114,7 +1091,7 @@@ static ssize_t cmm_write(struct file *f
        /*
         * wait for atr to become valid.
         * note: it is important to lock this code. if we dont, the monitor
-        * could be run between test_bit and the the call the sleep on the
+        * could be run between test_bit and the call to sleep on the
         * atr-queue.  if *then* the monitor detects atr valid, it will wake up
         * any process on the atr-queue, *but* since we have been interrupted,
         * we do not yet sleep on this queue. this would result in a missed
@@@ -1858,11 -1881,8 +1858,11 @@@ static int cm4000_probe(struct pcmcia_d
        init_waitqueue_head(&dev->readq);
  
        ret = cm4000_config(link, i);
 -      if (ret)
 +      if (ret) {
 +              dev_table[i] = NULL;
 +              kfree(dev);
                return ret;
 +      }
  
        class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
                            "cmm%d", i);
@@@ -1887,7 -1907,7 +1887,7 @@@ static void cm4000_detach(struct pcmcia
        cm4000_release(link);
  
        dev_table[devno] = NULL;
 -      kfree(dev);
 +      kfree(dev);
  
        class_device_destroy(cmm_class, MKDEV(major, devno));
  
@@@ -1936,14 -1956,12 +1936,14 @@@ static int __init cmm_init(void
        if (major < 0) {
                printk(KERN_WARNING MODULE_NAME
                        ": could not get major number\n");
 +              class_destroy(cmm_class);
                return major;
        }
  
        rc = pcmcia_register_driver(&cm4000_driver);
        if (rc < 0) {
                unregister_chrdev(major, DEVICE_NAME);
 +              class_destroy(cmm_class);
                return rc;
        }
  
diff --combined drivers/char/tty_io.c
index bf5a00145c0b01796adb5f318b7489828baa7209,f6ac1d316ea4a71659dd214ca9c5e9e1779eb7ef..fc662e4ce58aebd0f4995c2b880b417549b294fe
@@@ -933,6 -933,13 +933,6 @@@ restart
        if (ld == NULL)
                return -EINVAL;
  
 -      /*
 -       *      No more input please, we are switching. The new ldisc
 -       *      will update this value in the ldisc open function
 -       */
 -
 -      tty->receive_room = 0;
 -
        /*
         *      Problem: What do we do if this blocks ?
         */
                return 0;
        }
  
 +      /*
 +       *      No more input please, we are switching. The new ldisc
 +       *      will update this value in the ldisc open function
 +       */
 +
 +      tty->receive_room = 0;
 +
        o_ldisc = tty->ldisc;
        o_tty = tty->link;
  
@@@ -1573,11 -1573,11 +1573,11 @@@ void no_tty(void
  
  
  /**
-  *    stop_tty        -       propogate flow control
+  *    stop_tty        -       propagate flow control
   *    @tty: tty to stop
   *
   *    Perform flow control to the driver. For PTY/TTY pairs we
-  *    must also propogate the TIOCKPKT status. May be called
+  *    must also propagate the TIOCKPKT status. May be called
   *    on an already stopped device and will not re-call the driver
   *    method.
   *
@@@ -1607,11 -1607,11 +1607,11 @@@ void stop_tty(struct tty_struct *tty
  EXPORT_SYMBOL(stop_tty);
  
  /**
-  *    start_tty       -       propogate flow control
+  *    start_tty       -       propagate flow control
   *    @tty: tty to start
   *
   *    Start a tty that has been stopped if at all possible. Perform
-  *    any neccessary wakeups and propogate the TIOCPKT status. If this
+  *    any neccessary wakeups and propagate the TIOCPKT status. If this
   *    is the tty was previous stopped and is being started then the
   *    driver start method is invoked and the line discipline woken.
   *
diff --combined fs/direct-io.c
index 8aa2d8b04ef155ea91a718939aa15abe020a845e,1e88d8d1d2a973524b6fdb7aee1410a0b394a364..8593f3dfd2990a013b6fd580e22e1e82b83d4fbf
@@@ -439,7 -439,7 +439,7 @@@ static int dio_bio_complete(struct dio 
   * Wait on and process all in-flight BIOs.  This must only be called once
   * all bios have been issued so that the refcount can only decrease.
   * This just waits for all bios to make it through dio_bio_complete.  IO
-  * errors are propogated through dio->io_error and should be propogated via
+  * errors are propagated through dio->io_error and should be propagated via
   * dio_complete().
   */
  static void dio_await_completion(struct dio *dio)
@@@ -867,6 -867,7 +867,6 @@@ static int do_direct_IO(struct dio *dio
  do_holes:
                        /* Handle holes */
                        if (!buffer_mapped(map_bh)) {
 -                              char *kaddr;
                                loff_t i_size_aligned;
  
                                /* AKPM: eargh, -ENOTBLK is a hack */
                                        page_cache_release(page);
                                        goto out;
                                }
 -                              kaddr = kmap_atomic(page, KM_USER0);
 -                              memset(kaddr + (block_in_page << blkbits),
 -                                              0, 1 << blkbits);
 -                              flush_dcache_page(page);
 -                              kunmap_atomic(kaddr, KM_USER0);
 +                              zero_user_page(page, block_in_page << blkbits,
 +                                              1 << blkbits, KM_USER0);
                                dio->block_in_file++;
                                block_in_page++;
                                goto next_block;
diff --combined init/Kconfig
index 4ad6de163238f2bfc252e0cc9ef6c6dc2548e34b,a7e48796d571f5bc02f76aeafc54df8ddd6a8cbc..e63a017c391eb23b11ae5769f19cabf5cfb7dae8
@@@ -143,9 -143,7 +143,7 @@@ config POSIX_MQUEU
          queues every message has a priority which decides about succession
          of receiving it by a process. If you want to compile and run
          programs written e.g. for Solaris with use of its POSIX message
-         queues (functions mq_*) say Y here. To use this feature you will
-         also need mqueue library, available from
-         <http://www.mat.uni.torun.pl/~wrona/posix_ipc/>
+         queues (functions mq_*) say Y here.
  
          POSIX message queues are visible as a filesystem called 'mqueue'
          and can be mounted somewhere if you want to do filesystem
@@@ -308,7 -306,7 +306,7 @@@ config SYSFS_DEPRECATE
          releases.
  
          If enabled, this option will also move any device structures
-         that belong to a class, back into the /sys/class heirachy, in
+         that belong to a class, back into the /sys/class hierarchy, in
          order to support older versions of udev.
  
          If you are using a distro that was released in 2006 or later,
@@@ -504,15 -502,6 +502,15 @@@ config VM_EVENT_COUNTER
          on EMBEDDED systems.  /proc/vmstat will only show page counts
          if VM event counters are disabled.
  
 +config SLUB_DEBUG
 +      default y
 +      bool "Enable SLUB debugging support" if EMBEDDED
 +      help
 +        SLUB has extensive debug support features. Disabling these can
 +        result in significant savings in code size. This also disables
 +        SLUB sysfs support. /sys/slab will not exist and there will be
 +        no support for cache validation etc.
 +
  choice
        prompt "Choose SLAB allocator"
        default SLAB
@@@ -523,9 -512,9 +521,9 @@@ config SLA
        bool "SLAB"
        help
          The regular slab allocator that is established and known to work
 -        well in all environments. It organizes chache hot objects in
 +        well in all environments. It organizes cache hot objects in
          per cpu and per node queues. SLAB is the default choice for
 -        slab allocator.
 +        slab allocator.
  
  config SLUB
        depends on EXPERIMENTAL && !ARCH_USES_SLAB_PAGE_STRUCT
           instead of managing queues of cached objects (SLAB approach).
           Per cpu caching is realized using slabs of objects instead
           of queues of objects. SLUB can use memory efficiently
 -         way and has enhanced diagnostics.
 +         and has enhanced diagnostics.
  
  config SLOB
  #
 -#     SLOB cannot support SMP because SLAB_DESTROY_BY_RCU does not work
 -#     properly.
 +#     SLOB does not support SMP because SLAB_DESTROY_BY_RCU is unsupported
  #
        depends on EMBEDDED && !SMP && !SPARSEMEM
        bool "SLOB (Simple Allocator)"
        help
           SLOB replaces the SLAB allocator with a drastically simpler
           allocator.  SLOB is more space efficient that SLAB but does not
 -         scale well (single lock for all operations) and is more susceptible
 -         to fragmentation. SLOB it is a great choice to reduce
 -         memory usage and code size for embedded systems.
 +         scale well (single lock for all operations) and is also highly
 +         susceptible to fragmentation. SLUB can accomplish a higher object
 +         density. It is usually better to use SLUB instead of SLOB.
  
  endchoice
  
diff --combined kernel/relay.c
index 61a504900eaa5ba5acb5f3362d5d8105bafe9745,d24395e8b6e599ed3649fbf43926fdd8ffc8e594..4311101b0ca75a46206a2e9a50f82bffd5683fa5
@@@ -310,13 -310,16 +310,13 @@@ static struct rchan_callbacks default_c
  
  /**
   *    wakeup_readers - wake up readers waiting on a channel
-  *    @data: contains the the channel buffer
 - *    @work: work struct that contains the channel buffer
++ *    @data: contains the channel buffer
   *
 - *    This is the work function used to defer reader waking.  The
 - *    reason waking is deferred is that calling directly from write
 - *    causes problems if you're writing from say the scheduler.
 + *    This is the timer function used to defer reader waking.
   */
 -static void wakeup_readers(struct work_struct *work)
 +static void wakeup_readers(unsigned long data)
  {
 -      struct rchan_buf *buf =
 -              container_of(work, struct rchan_buf, wake_readers.work);
 +      struct rchan_buf *buf = (struct rchan_buf *)data;
        wake_up_interruptible(&buf->read_wait);
  }
  
@@@ -334,9 -337,11 +334,9 @@@ static void __relay_reset(struct rchan_
        if (init) {
                init_waitqueue_head(&buf->read_wait);
                kref_init(&buf->kref);
 -              INIT_DELAYED_WORK(&buf->wake_readers, NULL);
 -      } else {
 -              cancel_delayed_work(&buf->wake_readers);
 -              flush_scheduled_work();
 -      }
 +              setup_timer(&buf->timer, wakeup_readers, (unsigned long)buf);
 +      } else
 +              del_timer_sync(&buf->timer);
  
        buf->subbufs_produced = 0;
        buf->subbufs_consumed = 0;
@@@ -442,7 -447,8 +442,7 @@@ end
  static void relay_close_buf(struct rchan_buf *buf)
  {
        buf->finalized = 1;
 -      cancel_delayed_work(&buf->wake_readers);
 -      flush_scheduled_work();
 +      del_timer_sync(&buf->timer);
        kref_put(&buf->kref, relay_remove_buf);
  }
  
@@@ -484,7 -490,6 +484,7 @@@ static int __cpuinit relay_hotcpu_callb
  
        switch(action) {
        case CPU_UP_PREPARE:
 +      case CPU_UP_PREPARE_FROZEN:
                mutex_lock(&relay_channels_mutex);
                list_for_each_entry(chan, &relay_channels, list) {
                        if (chan->buf[hotcpu])
                mutex_unlock(&relay_channels_mutex);
                break;
        case CPU_DEAD:
 +      case CPU_DEAD_FROZEN:
                /* No need to flush the cpu : will be flushed upon
                 * final relay_flush() call. */
                break;
@@@ -604,14 -608,11 +604,14 @@@ size_t relay_switch_subbuf(struct rchan
                buf->dentry->d_inode->i_size += buf->chan->subbuf_size -
                        buf->padding[old_subbuf];
                smp_mb();
 -              if (waitqueue_active(&buf->read_wait)) {
 -                      PREPARE_DELAYED_WORK(&buf->wake_readers,
 -                                           wakeup_readers);
 -                      schedule_delayed_work(&buf->wake_readers, 1);
 -              }
 +              if (waitqueue_active(&buf->read_wait))
 +                      /*
 +                       * Calling wake_up_interruptible() from here
 +                       * will deadlock if we happen to be logging
 +                       * from the scheduler (trying to re-grab
 +                       * rq->lock), so defer it.
 +                       */
 +                      __mod_timer(&buf->timer, jiffies + 1);
        }
  
        old = buf->data;
diff --combined kernel/sys.c
index d4985df21b60cd7b4b14a14c9070d048c7da1a7c,0742c938dfa70d4554d9d6b4ef37482259a0c776..cdb7e9457ba6596336b2618282f418bf13626e30
@@@ -134,39 -134,19 +134,39 @@@ static int notifier_chain_unregister(st
        return -ENOENT;
  }
  
 +/**
 + * notifier_call_chain - Informs the registered notifiers about an event.
 + *    @nl:            Pointer to head of the blocking notifier chain
 + *    @val:           Value passed unmodified to notifier function
 + *    @v:             Pointer passed unmodified to notifier function
 + *    @nr_to_call:    Number of notifier functions to be called. Don't care
 + *                    value of this parameter is -1.
 + *    @nr_calls:      Records the number of notifications sent. Don't care
 + *                    value of this field is NULL.
 + *    @returns:       notifier_call_chain returns the value returned by the
 + *                    last notifier function called.
 + */
 +
  static int __kprobes notifier_call_chain(struct notifier_block **nl,
 -              unsigned long val, void *v)
 +                                      unsigned long val, void *v,
 +                                      int nr_to_call, int *nr_calls)
  {
        int ret = NOTIFY_DONE;
        struct notifier_block *nb, *next_nb;
  
        nb = rcu_dereference(*nl);
 -      while (nb) {
 +
 +      while (nb && nr_to_call) {
                next_nb = rcu_dereference(nb->next);
                ret = nb->notifier_call(nb, val, v);
 +
 +              if (nr_calls)
 +                      (*nr_calls)++;
 +
                if ((ret & NOTIFY_STOP_MASK) == NOTIFY_STOP_MASK)
                        break;
                nb = next_nb;
 +              nr_to_call--;
        }
        return ret;
  }
@@@ -225,12 -205,10 +225,12 @@@ int atomic_notifier_chain_unregister(st
  EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister);
  
  /**
 - *    atomic_notifier_call_chain - Call functions in an atomic notifier chain
 + *    __atomic_notifier_call_chain - Call functions in an atomic notifier chain
   *    @nh: Pointer to head of the atomic notifier chain
   *    @val: Value passed unmodified to notifier function
   *    @v: Pointer passed unmodified to notifier function
 + *    @nr_to_call: See the comment for notifier_call_chain.
 + *    @nr_calls: See the comment for notifier_call_chain.
   *
   *    Calls each function in a notifier chain in turn.  The functions
   *    run in an atomic context, so they must not block.
   *    of the last notifier function called.
   */
   
 -int __kprobes atomic_notifier_call_chain(struct atomic_notifier_head *nh,
 -              unsigned long val, void *v)
 +int __kprobes __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
 +                                      unsigned long val, void *v,
 +                                      int nr_to_call, int *nr_calls)
  {
        int ret;
  
        rcu_read_lock();
 -      ret = notifier_call_chain(&nh->head, val, v);
 +      ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
        rcu_read_unlock();
        return ret;
  }
  
 -EXPORT_SYMBOL_GPL(atomic_notifier_call_chain);
 +EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain);
 +
 +int __kprobes atomic_notifier_call_chain(struct atomic_notifier_head *nh,
 +              unsigned long val, void *v)
 +{
 +      return __atomic_notifier_call_chain(nh, val, v, -1, NULL);
 +}
  
 +EXPORT_SYMBOL_GPL(atomic_notifier_call_chain);
  /*
   *    Blocking notifier chain routines.  All access to the chain is
   *    synchronized by an rwsem.
@@@ -334,12 -304,10 +334,12 @@@ int blocking_notifier_chain_unregister(
  EXPORT_SYMBOL_GPL(blocking_notifier_chain_unregister);
  
  /**
 - *    blocking_notifier_call_chain - Call functions in a blocking notifier chain
 + *    __blocking_notifier_call_chain - Call functions in a blocking notifier chain
   *    @nh: Pointer to head of the blocking notifier chain
   *    @val: Value passed unmodified to notifier function
   *    @v: Pointer passed unmodified to notifier function
 + *    @nr_to_call: See comment for notifier_call_chain.
 + *    @nr_calls: See comment for notifier_call_chain.
   *
   *    Calls each function in a notifier chain in turn.  The functions
   *    run in a process context, so they are allowed to block.
   *    of the last notifier function called.
   */
   
 -int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
 -              unsigned long val, void *v)
 +int __blocking_notifier_call_chain(struct blocking_notifier_head *nh,
 +                                 unsigned long val, void *v,
 +                                 int nr_to_call, int *nr_calls)
  {
        int ret = NOTIFY_DONE;
  
         */
        if (rcu_dereference(nh->head)) {
                down_read(&nh->rwsem);
 -              ret = notifier_call_chain(&nh->head, val, v);
 +              ret = notifier_call_chain(&nh->head, val, v, nr_to_call,
 +                                      nr_calls);
                up_read(&nh->rwsem);
        }
        return ret;
  }
 +EXPORT_SYMBOL_GPL(__blocking_notifier_call_chain);
  
 +int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
 +              unsigned long val, void *v)
 +{
 +      return __blocking_notifier_call_chain(nh, val, v, -1, NULL);
 +}
  EXPORT_SYMBOL_GPL(blocking_notifier_call_chain);
  
  /*
@@@ -423,12 -383,10 +423,12 @@@ int raw_notifier_chain_unregister(struc
  EXPORT_SYMBOL_GPL(raw_notifier_chain_unregister);
  
  /**
 - *    raw_notifier_call_chain - Call functions in a raw notifier chain
 + *    __raw_notifier_call_chain - Call functions in a raw notifier chain
   *    @nh: Pointer to head of the raw notifier chain
   *    @val: Value passed unmodified to notifier function
   *    @v: Pointer passed unmodified to notifier function
 + *    @nr_to_call: See comment for notifier_call_chain.
 + *    @nr_calls: See comment for notifier_call_chain
   *
   *    Calls each function in a notifier chain in turn.  The functions
   *    run in an undefined context.
   *    of the last notifier function called.
   */
  
 +int __raw_notifier_call_chain(struct raw_notifier_head *nh,
 +                            unsigned long val, void *v,
 +                            int nr_to_call, int *nr_calls)
 +{
 +      return notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
 +}
 +
 +EXPORT_SYMBOL_GPL(__raw_notifier_call_chain);
 +
  int raw_notifier_call_chain(struct raw_notifier_head *nh,
                unsigned long val, void *v)
  {
 -      return notifier_call_chain(&nh->head, val, v);
 +      return __raw_notifier_call_chain(nh, val, v, -1, NULL);
  }
  
  EXPORT_SYMBOL_GPL(raw_notifier_call_chain);
@@@ -529,12 -478,10 +529,12 @@@ int srcu_notifier_chain_unregister(stru
  EXPORT_SYMBOL_GPL(srcu_notifier_chain_unregister);
  
  /**
 - *    srcu_notifier_call_chain - Call functions in an SRCU notifier chain
 + *    __srcu_notifier_call_chain - Call functions in an SRCU notifier chain
   *    @nh: Pointer to head of the SRCU notifier chain
   *    @val: Value passed unmodified to notifier function
   *    @v: Pointer passed unmodified to notifier function
 + *    @nr_to_call: See comment for notifier_call_chain.
 + *    @nr_calls: See comment for notifier_call_chain
   *
   *    Calls each function in a notifier chain in turn.  The functions
   *    run in a process context, so they are allowed to block.
   *    of the last notifier function called.
   */
  
 -int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 -              unsigned long val, void *v)
 +int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 +                             unsigned long val, void *v,
 +                             int nr_to_call, int *nr_calls)
  {
        int ret;
        int idx;
  
        idx = srcu_read_lock(&nh->srcu);
 -      ret = notifier_call_chain(&nh->head, val, v);
 +      ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
        srcu_read_unlock(&nh->srcu, idx);
        return ret;
  }
 +EXPORT_SYMBOL_GPL(__srcu_notifier_call_chain);
  
 +int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 +              unsigned long val, void *v)
 +{
 +      return __srcu_notifier_call_chain(nh, val, v, -1, NULL);
 +}
  EXPORT_SYMBOL_GPL(srcu_notifier_call_chain);
  
  /**
@@@ -941,7 -881,7 +941,7 @@@ asmlinkage long sys_reboot(int magic1, 
  #ifdef CONFIG_SOFTWARE_SUSPEND
        case LINUX_REBOOT_CMD_SW_SUSPEND:
                {
 -                      int ret = pm_suspend(PM_SUSPEND_DISK);
 +                      int ret = hibernate();
                        unlock_kernel();
                        return ret;
                }
@@@ -1352,7 -1292,7 +1352,7 @@@ asmlinkage long sys_setfsuid(uid_t uid
  }
  
  /*
-  * Samma på svenska..
+  * Samma på svenska..
   */
  asmlinkage long sys_setfsgid(gid_t gid)
  {