19 Oct, 2007

34 commits

  • Hell knows what happened in commit 63b05203af57e7de4f3bb63b8b81d43bc196d32b
    during 2.6.9 development. Commit introduced io_wait field which remained
    write-only than and still remains write-only.

    Also garbage collect macros which "use" io_wait.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • Make hibernation_platform_enter() execute the enter-a-sleep-state sequence
    instead of the mixed shutdown-with-entering-S4 thing.

    Replace the shutting down of devices done by kernel_shutdown_prepare(), before
    entering the ACPI S4 sleep state, with suspending them and the shutting down
    of sysdevs with calling device_power_down(PMSG_SUSPEND) (just like before
    entering S1 or S3, but the target state is now S4).  Also, disable the
    nonboot CPUs before entering the sleep state (S4), which generally always is a
    good idea.

    This is known to fix the "double disk spin down during hibernation" on some
    machines, eg. HPC nx6325 (ref. http://lkml.org/lkml/2007/8/7/316 and the
    following thread).  Moreover, it has been reported to make
    /sys/class/rtc/rtc0/wakealarm work correctly with hibernation for some users.
    It also generally causes the hibernation state (ACPI S4) to be entered faster.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • The following scenario leads to total confusion of the platform firmware on
    some boxes (eg. HPC nx6325):
    * Hibernate with ACPI enabled
    * Resume passing "acpi=off" to the boot kernel

    To prevent this from happening it's necessary to check if ACPI is enabled (and
    enable it if that's not the case) _right_ _after_ control has been transfered
    from the boot kernel to the image kernel, before device_power_up() is called
    (ie. with interrupts disabled).  Enabling ACPI after calling
    device_power_up() turns out to be insufficient.

    For this reason, introduce new hibernation callback ->leave() that will be
    executed before device_power_up() by the restored image kernel.  To make it
    work, it also is necessary to move swsusp_suspend() from swsusp.c to disk.c
    (it's name is changed to "create_image", which is more up to the point).

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Use temporary page tables for the kernel text mapping during hibernation
    restore on x86_64.

    Without the patch, the original boot kernel's page tables that represent the
    kernel text mapping are used while the core of the image kernel is being
    restored. However, in principle, if the boot kernel is not identical to the
    image kernel, the location of these page tables in the image kernel need not
    be the same, so we should create a safe copy of the kernel text mapping prior
    to restoring the core of the image kernel.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Since we already pass the address of restore_registers() in the image header,
    we can also pass the value of the CR3 register from before the hibernation in
    the same way. This will allow us to avoid using init_level4_pgt page tables
    during the restore.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Make it possible to restore a hibernation image on x86_64 with the help of a
    kernel different from the one in the image.

    The idea is to split the core restoration code into two separate parts and to
    place each of them in a different page.  The first part belongs to the boot
    kernel and is executed as the last step of the image kernel's memory
    restoration procedure.  Before being executed, it is relocated to a safe page
    that won't be overwritten while copying the image kernel pages.

    The final operation performed by it is a jump to the second part of the core
    restoration code that belongs to the image kernel and has just been restored.
    This code makes the CPU switch to the image kernel's page tables and restores
    the state of general purpose registers (including the stack pointer) from
    before the hibernation.

    The main issue with this idea is that in order to jump to the second part of
    the core restoration code the boot kernel needs to know its address.
     However, this address may be passed to it in the image header.  Namely, the
    part of the image header previously used for checking if the version of the
    image kernel is correct can be replaced with some architecture specific data
    that will allow the boot kernel to jump to the right address within the image
    kernel.  These data should also be used for checking if the image kernel is
    compatible with the boot kernel (as far as the memory restroration procedure
    is concerned). It can be done, for example, with the help of a "magic" value
    that has to be equal in both kernels, so that they can be regarded as
    compatible.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Add the bits needed for supporting arbitrary boot kernels to the common
    hibernation code.

    To support arbitrary boot kernels, make it possible to replace the 'struct
    new_utsname' and the kernel version in the hibernation image header by some
    architecture specific data that will be used to verify if the image is valid
    and to restore the image.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • This removes old debugging stuff, that should be no longer neccessary. It
    accessed VGA hardware (which may not be ready at this point), and used LEDs
    at port 80 for debugging.

    Signed-off-by: Pavel Machek
    Acked-by: Rafael J. Wysocki
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Machek
     
  • Currently, there's a CONFIG_DISABLE_CONSOLE_SUSPEND that allows one to stop
    the serial console from being suspended when the rest of the machine goes
    to sleep. This is incredibly useful for debugging power management-related
    things; however, having it as a compile-time option has proved to be
    incredibly inconvenient for us (OLPC). There are plenty of times that we
    want serial console to not suspend, but for the most part we'd like serial
    console to be suspended.

    This drops CONFIG_DISABLE_CONSOLE_SUSPEND, and replaces it with a kernel
    boot parameter (no_console_suspend). By default, the serial console will
    be suspended along with the rest of the system; by passing
    'no_console_suspend' to the kernel during boot, serial console will remain
    alive during suspend.

    For now, this is pretty serial console specific; further fixes could be
    applied to make this work for things like netconsole.

    Signed-off-by: Andres Salomon
    Acked-by: "Rafael J. Wysocki"
    Acked-by: Pavel Machek
    Cc: Nigel Cunningham
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andres Salomon
     
  • Measure the time of the freezing of tasks, even if it doesn't fail.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Increase the freezer's verbosity a bit, so that it's easier to read problem
    reports related to it.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Nigel Cunningham
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • The way in which read_magic_time() displays the date read from the RTC is
    apparently confusing to the users (cf.
    https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=250238). Make it
    print dates in the standard way.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Dave Jones
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • This patch removes the unused EXPORT_SYMBOL(pm_power_off_prepare).

    Signed-off-by: Adrian Bunk
    Cc: "Rafael J. Wysocki"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • The freezer should not send signals to kernel threads, since that may lead to
    subtle problems. In particular, commit
    b74d0deb968e1f85942f17080eace015ce3c332c has changed recalc_sigpending_tsk()
    so that it doesn't clear TIF_SIGPENDING. For this reason, if the freezer
    continues to send fake signals to kernel threads and the freezing of kernel
    threads fails, some of them may be running with TIF_SIGPENDING set forever.

    Accordingly, recalc_sigpending_tsk() shouldn't set the task's TIF_SIGPENDING
    flag if TIF_FREEZE is set.

    Signed-off-by: Rafael J. Wysocki
    Cc: Nigel Cunningham
    Cc: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Introduce freezer-friendly wrappers around wait_event_interruptible() and
    wait_event_interruptible_timeout(), originally defined in , to
    be used in freezable kernel threads. Make some of the freezable kernel
    threads use them.

    This is necessary for the freezer to stop sending signals to kernel threads,
    which is implemented in the next patch.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Nigel Cunningham
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Tasks should go to the refrigerator only if explicitly requested to do that by
    the freezer and not as a result of inheriting the TIF_FREEZE flag set from the
    parent. Make it happen.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Acked-by: Nigel Cunningham
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • The syncing of filesystems from within the freezer is generally not needed.
    Also, if there's an ext3 filesystem loopback-mounted from a FUSE one, the
    syncing results in writes to it and deadlocks. Similarly, it will deadlock if
    FUSE implements sync.

    Change freeze_processes() so that it doesn't execute sys_sync() and make the
    suspend and hibernation code path sync filesystems independently of the
    freezer.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Nigel Cunningham
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • One important reason to freeze tasks, which is that we don't want them to
    allocate memory after freeing it for the hibernation image, has not been
    documented. Fix it.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Acked-by: Nigel Cunningham
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Rename 'struct hibernation_ops' to 'struct platform_hibernation_ops' in
    analogy with 'struct platform_suspend_ops'.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Len Brown
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • During hibernation we also need to tell the ACPI core that we're going to put
    the system into the S4 sleep state. For this reason, an additional method in
    'struct hibernation_ops' is needed, playing the role of set_target() in
    'struct platform_suspend_operations'. Moreover, the role of the .prepare()
    method is now different, so it's better to introduce another method, that in
    general may be different from .prepare(), that will be used to prepare the
    platform for creating the hibernation image (.prepare() is used anyway to
    notify the platform that we're going to enter the low power state after the
    image has been saved).

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • The variable suspend_ops representing the set of global platform-specific
    suspend-related operations, used by the PM core, need not be exported outside
    of kernel/power/main.c .  Make it static.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • There is no reason why the .prepare() and .finish() methods in 'struct
    platform_suspend_ops' should take any arguments, since architectures don't use
    these methods' argument in any practically meaningful way (ie. either the
    target system sleep state is conveyed to the platform by .set_target(), or
    there is only one suspend state supported and it is indicated to the PM core
    by .valid(), or .prepare() and .finish() aren't defined at all).  There also
    is no reason why .finish() should return any result.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Len Brown
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • The name of 'struct pm_ops' suggests that it is related to the power
    management in general, but in fact it is only related to suspend.  Moreover,
    its name should indicate what this structure is used for, so it seems
    reasonable to change it to 'struct platform_suspend_ops'.  In that case, the
    name of the global variable of this type used by the PM core and the names of
    related functions should be changed accordingly.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Len Brown
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • Move the definition of 'struct pm_ops' and related functions from
    to .

    There are, at least, the following reasons to do that:
    * 'struct pm_ops' is specifically related to suspend and not to the power
    management in general.
    * As long as 'struct pm_ops' is defined in , any modification of it
    causes the entire kernel to be recompiled, which is unnecessary and annoying.
    * Some suspend-related features are already defined in , so it
    is logical to move the definition of 'struct pm_ops' into there.
    * 'struct hibernation_ops', being the hibernation-related counterpart of
    'struct pm_ops', is defined in .

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Cc: Len Brown
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     
  • suspend_enter() can now become static.

    Signed-off-by: Adrian Bunk
    Cc: "Rafael J. Wysocki"
    Cc: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • This has not been any serious user of this ill conceived thing since the
    original invention in like '95 so I recently deleted this from everywhere
    except the last instance in logo.c. This patch removes the last two
    instances in logo.c. They conditions were not useful anyway as when
    compiled in they would always evaluate as true.

    Last not least this is necessary to get the SGI IP22 and DECstation kernels
    to compile again.

    Signed-off-by: Ralf Baechle
    Cc: "Antonino A. Daplas"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ralf Baechle
     
  • Signed-off-by: Geert Uytterhoeven
    Cc: "Antonino A. Daplas"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Geert Uytterhoeven
     
  • The tty_termios_encode_baud_rate() function as defined by tty_ioctl.c has a
    problem with the baud_table within. The comparison operators are reversed
    and as a result this table's entries never match and BOTHER is always used.

    Signed-off-by: Maciej W. Rozycki
    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Maciej W. Rozycki
     
  • Since default_utf8 is already a sysfs attribute, having an extra
    CONFIG_VT_UNICODE compile-time option is redundant, since sysfs attributes can
    be set at boot and run time.

    Also let Linux VCs default to UTF-8 (as per the discussion at
    http://lkml.org/lkml/2007/9/6/99).

    Signed-off-by: Jan Engelhardt
    Cc: Bill Nottingham
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Engelhardt
     
  • I'm not sure that the new URL satifies the requirement of status/info, but
    it does at least as good a job as the old URL, and contains current
    releases of kexec-tools, rather than somewhat ancient versions.

    Signed-off-by: Simon Horman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Signed-off-by@vergenet.net":Simon
     
  • The patch
    - Includes the call to capilib_data_b3_req in the spinlock. This routine
    in turn calls the offending mq_enqueue routine that triggered the
    freeze if not locked. This should also fix other indicators of
    incosistent capilib_msgidqueue list, that trigger messages like:
    Oct 5 03:05:57 BERL0 kernel: kcapi: msgid 3019 ncci 0x30301 not on queue
    that we saw several times a day (usually several in a row).
    - Fixes all occurrences of c4_dispatch_tx to be called with active
    spinlock, there were some instances where no lock was active. Mostly
    these are in very infrequently called routines, so the additional
    performance penalty is minimal.

    Signed-off-by: Karsten Keil
    Signed-off-by: Rainer Brestan
    Signed-off-by: Ralf Schlatterbeck
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Karsten Keil
     
  • This fix the same issue which was debbuged for the C4 controller for the B1
    versions.

    The capilib_ function modify or traverse a linked list without locking.

    This patch extends the existing locking to the calls of these function to
    prevent access to a list which is in the middle of a modification.

    Signed-off-by: Karsten Keil
    C:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Karsten Keil
     
  • MODPOST vmlinux.o
    WARNING: vmlinux.o(.text+0x170be8): Section mismatch: reference to .init.data:au1100fb_fix (between 'au1100fb_drv_probe' and 'read_null')
    WARNING: vmlinux.o(.text+0x170dc4): Section mismatch: reference to .init.data:au1100fb_var (between 'au1100fb_drv_probe' and 'read_null')
    WARNING: vmlinux.o(.text+0x170dd0): Section mismatch: reference to .init.data:au1100fb_fix (between 'au1100fb_drv_probe' and 'read_null')
    WARNING: vmlinux.o(.text+0x170de0): Section mismatch: reference to .init.data:au1100fb_var (between 'au1100fb_drv_probe' and 'read_null')
    WARNING: vmlinux.o(.text+0x170e70): Section mismatch: reference to .init.data:au1100fb_var (between 'au1100fb_drv_probe' and 'read_null')

    Signed-off-by: Ralf Baechle
    Cc: "Antonino A. Daplas"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ralf Baechle
     
  • Fix build broken by accaa24c492f1aa3b9c37226d868dc59c3007531:

    CC drivers/video/console/newport_con.o
    drivers/video/console/newport_con.c: In function 'newport_show_logo':
    drivers/video/console/newport_con.c:111: error: assignment of read-only location
    drivers/video/console/newport_con.c:111: warning: assignment makes integer from pointer without a cast
    drivers/video/console/newport_con.c:112: error: assignment of read-only location
    drivers/video/console/newport_con.c:112: warning: assignment makes integer from pointer without a cast

    Signed-off-by: Ralf Baechle
    Cc: "Randy.Dunlap"
    Cc: "Antonino A. Daplas"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ralf Baechle
     

18 Oct, 2007

6 commits

  • When resizing online, setup_new_group_blocks attempts to reserve a
    potentially very large transaction, depending on the current filesystem
    geometry. For some journal sizes, there may not be enough room for this
    transaction, and the online resize will fail.

    The patch below resizes & restarts the transaction as necessary while
    setting up the new group, and should work with even the smallest journal.

    Tested with something like:

    [root@newbox ~]# dd if=/dev/zero of=fsfile bs=1024 count=32768
    [root@newbox ~]# mkfs.ext3 -b 1024 fsfile 16384
    [root@newbox ~]# mount -o loop fsfile mnt/
    [root@newbox ~]# resize2fs /dev/loop0
    resize2fs 1.40.2 (12-Jul-2007)
    Filesystem at /dev/loop0 is mounted on /root/mnt; on-line resizing required
    old desc_blocks = 1, new_desc_blocks = 1
    Performing an on-line resize of /dev/loop0 to 32768 (1k) blocks.
    resize2fs: No space left on device While trying to add group #2
    [root@newbox ~]# dmesg | tail -n 1
    JBD: resize2fs wants too many credits (258 > 256)
    [root@newbox ~]#

    With the below change, it works.

    Signed-off-by: Eric Sandeen
    Signed-off-by: Mingming Cao
    Acked-by: Andreas Dilger

    Eric Sandeen
     
  • setup_new_group_blocks() manipulates the group descriptor block bh
    under the block_bitmap bh's lock. It shouldn't matter since nobody
    but resize should be touching these blocks, but it's worth fixing up.

    Signed-off-by: Eric Sandeen
    Signed-off-by: Mingming Cao

    Eric Sandeen
     
  • Signed-off-by: Aneesh Kumar K.V

    Aneesh Kumar K.V
     
  • Convert ext4_extent_idx.ei_leaf ext4_extent_idx.ei_leaf_lo
    This helps in finding BUGs due to direct partial access of
    these split 48 bit values.

    Signed-off-by: Aneesh Kumar K.V

    Aneesh Kumar K.V
     
  • Convert ext4_extent.ee_start to ext4_extent.ee_start_lo
    This helps in finding BUGs due to direct partial access of
    these split 48 bit values

    Also fix direct partial access in ext4 code

    Signed-off-by: Aneesh Kumar K.V

    Aneesh Kumar K.V
     
  • Convert s_r_blocks_count and s_free_blocks_count to
    s_r_blocks_count_lo and s_free_blocks_count_lo

    This helps in finding BUGs due to direct partial access of
    these split 64 bit values

    Also fix direct partial access in ext4 code

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: "Theodore Ts'o"

    Aneesh Kumar K.V