18 Apr, 2008

11 commits

  • libata lets low level drivers build ata_port_operations table and
    register it with libata core layer. This allows low level drivers
    high level of flexibility but also burdens them with lots of
    boilerplate entries.

    This becomes worse for drivers which support related similar
    controllers which differ slightly. They share most of the operations
    except for a few. However, the driver still needs to list all
    operations for each variant. This results in large number of
    duplicate entries, which is not only inefficient but also error-prone
    as it becomes very difficult to tell what the actual differences are.

    This duplicate boilerplates all over the low level drivers also make
    updating the core layer exteremely difficult and error-prone. When
    compounded with multi-branched development model, it ends up
    accumulating inconsistencies over time. Some of those inconsistencies
    cause immediate problems and fixed. Others just remain there dormant
    making maintenance increasingly difficult.

    To rectify the problem, this patch implements ata_port_operations
    inheritance. To allow LLDs to easily re-use their own ops tables
    overriding only specific methods, this patch implements poor man's
    class inheritance. An ops table has ->inherits field which can be set
    to any ops table as long as it doesn't create a loop. When the host
    is started, the inheritance chain is followed and any operation which
    isn't specified is taken from the nearest ancestor which has it
    specified. This operation is called finalization and done only once
    per an ops table and the LLD doesn't have to do anything special about
    it other than making the ops table non-const such that libata can
    update it.

    libata provides four base ops tables lower drivers can inherit from -
    base, sata, pmp, sff and bmdma. To avoid overriding these ops
    accidentaly, these ops are declared const and LLDs should always
    inherit these instead of using them directly.

    After finalization, all the ops table are identical before and after
    the patch except for setting .irq_handler to ata_interrupt in drivers
    which didn't use to. The .irq_handler doesn't have any actual effect
    and the field will soon be removed by later patch.

    * sata_sx4 is still using old style EH and currently doesn't take
    advantage of ops inheritance.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • libata lets low level drivers build scsi_host_template and register it
    to the SCSI layer. This allows low level drivers high level of
    flexibility but also burdens them with lots of boilerplate entries.

    This patch implements SHT initializers which can be used to initialize
    all the boilerplate entries in a sht. Three variants of them are
    implemented - BASE, BMDMA and NCQ - for different types of drivers.
    Note that entries can be overriden by putting individual initializers
    after the helper macro.

    All sht tables are identical before and after this patch.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Over the time, port info, ops and sht structures developed quite a bit
    of inconsistencies. This patch updates drivers.

    * Enable/disable_pm callbacks added to all ahci ops tables.

    * Every driver for SFF controllers now uses ata_sff_port_start()
    instead of ata_port_start() unless the driver has custom
    implementation.

    * Every driver for SFF controllers now uses ata_pci_default_filter()
    unless the driver has custom implementation.

    * Removed an odd port_info->sht initialization from ata_piix.c.
    Likely a merge byproduct.

    * A port which has ATA_FLAG_SATA set doesn't need to set cable_detect
    to ata_cable_sata(). Remove it from via and mv port ops.

    * Some drivers had unnecessary .max_sectors initialization which is
    ignored and was missing .slave_destroy callback. Fixed.

    * Removed unnecessary sht initializations port_info's.

    * Removed onsolete scsi device suspend/resume callbacks from
    pata_bf54x.

    * No reason to set ata_pci_default_filter() and bmdma functions for
    PIO-only drivers. Remove those callbacks and replace
    ata_bmdma_irq_clear with ata_noop_irq_clear.

    * pata_platform sets port_start to ata_dummy_ret0. port_start can
    just be set to NULL.

    * sata_fsl supports NCQ but was missing qc_defer. Fixed.

    * pata_rb600_cf implements dummy port_start. Removed.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • ->irq_clear() is used to clear IRQ bit of a SFF controller and isn't
    useful for drivers which don't use libata SFF HSM implementation.
    However, it's a required callback and many drivers implement their own
    noop version as placeholder. This patch implements ata_noop_irq_clear
    and use it to replace those custom placeholders.

    Also, SFF drivers which don't support BMDMA don't need to use
    ata_bmdma_irq_clear(). It becomes noop if BMDMA address isn't
    initialized. Convert them to use ata_noop_irq_clear().

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Over the time, ops in ata_port_operations has become a bit confusing.
    Reorganize. SFF/BMDMA ops are separated into separate a group as they
    will be taken out of ata_port_operations later.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • PCI device should be powered up or powered up before its PCI regsiters
    are accessed. Although PCI configuration register access is allowed
    in D3hot, PCI device is free to reset its status when transiting from
    D3hot to D0 causing configuration data to change.

    Many libata SFF drivers which use ata_pci_init_one() read and update
    configuration registers before calling ata_pci_init_one() which
    enables the PCI device. Also, in resume paths, some drivers access
    registers without resuming the PCI device.

    This patch adds a call to pcim_enable_device() in init path if
    register is accessed before calling ata_pci_init_one() and make resume
    paths first resume PCI devices, access PCI configuration regiters then
    resume ATA host.

    While at it...

    * cmd640 was strange in that it set ->resume even when CONFIG_PM is
    not. This is by-product of minimal build fix. Updated.

    * In cs5530, Don't BUG() on reinit failure. Just whine and fail
    resume.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • ata_ehi_schedule_probe() was created to hide details of link-resuming
    reset magic. Now that all the softreset workarounds are gone,
    scheduling probe is very simple - set probe_mask and request RESET.
    Kill ata_ehi_schedule_probe() and open code it. This also increases
    consistency as ata_ehi_schedule_probe() couldn't cover individual
    device probings so they were open-coded even when the helper existed.

    While at it, define ATA_ALL_DEVICES as mask of all possible devices on
    a link and always use it when requesting probe on link level for
    simplicity and consistency. Setting extra bits in the probe_mask
    doesn't hurt anybody.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Some controllers can't reliably record the initial D2H FIS after SATA
    link is brought online for whatever reason. Advanced controllers
    which don't have traditional TF register based interface often have
    this problem as they don't really have the TF registers to update
    while the controller and link are being initialized.

    SKIP_D2H_BSY works around the problem by skipping the wait for device
    readiness before issuing SRST, so for such controllers libata issues
    SRST blindly and hopes for the best.

    Now that libata defaults to hardreset, this workaround is no longer
    necessary. For controllers which have support for hardreset, SRST is
    never issued by itself. It is only issued as follow-up SRST for
    device classification and PMP initialization, so there's no need to
    wait for it from prereset.

    Kill ATA_LFLAG_SKIP_D2H_BSY.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • ATA_EHI_RESUME_LINK has two functions - promote reset to hardreset if
    ATA_LFLAG_HRST_TO_RESUME is set and preventing EH from shortcutting
    reset action when probing is requested. The former is gone now and
    the latter can easily be achieved by making EH to perform at least one
    reset if reset is requested, which also makes more sense than
    depending on RESUME_LINK flag.

    As ATA_EHI_RESUME_LINK was the only EHI reset modifier, this also
    kills reset modifier handling.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Now that hardreset is the preferred method of resetting, there's no
    need for ATA_LFLAG_HRST_TO_RESUME flag. Kill it.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • When both soft and hard resets are available, libata preferred
    softreset till now. The logic behind it was to be softer to devices;
    however, this doesn't really help much. Rationales for the change:

    * BIOS may freeze lock certain things during boot and softreset can't
    unlock those. This by itself is okay but during operation PHY event
    or other error conditions can trigger hardreset and the device may
    end up with different configuration.

    For example, after a hardreset, previously unlockable HPA can be
    unlocked resulting in different device size and thus revalidation
    failure. Similar condition can occur during or after resume.

    * Certain ATAPI devices require hardreset to recover after certain
    error conditions. On PATA, this is done by issuing the DEVICE RESET
    command. On SATA, COMRESET has equivalent effect. The problem is
    that DEVICE RESET needs its own execution protocol.

    For SFF controllers with bare TF access, it can be easily
    implemented but more advanced controllers (e.g. ahci and sata_sil24)
    require specialized implementations. Simply using hardreset solves
    the problem nicely.

    * COMRESET initialization sequence is the norm in SATA land and many
    SATA devices don't work properly if only SRST is used. For example,
    some PMPs behave this way and libata works around by always issuing
    hardreset if the host supports PMP.

    Like the above example, libata has developed a number of mechanisms
    aiming to promote softreset to hardreset if softreset is not going
    to work. This approach is time consuming and error prone.

    Also, note that, dependingon how you read the specs, it could be
    argued that PMP fan-out ports require COMRESET to start operation.
    In fact, all the PMPs on the market except one don't work properly
    if COMRESET is not issued to fan-out ports after PMP reset.

    * COMRESET is an integral part of SATA connection and any working
    device should be able to handle COMRESET properly. After all, it's
    the way to signal hardreset during reboot. This is the most used
    and recommended (at least by the ahci spec) method of resetting
    devices.

    So, this patch makes libata prefer hardreset over softreset by making
    the following changes.

    * Rename ATA_EH_RESET_MASK to ATA_EH_RESET and use it whereever
    ATA_EH_{SOFT|HARD}RESET used to be used. ATA_EH_{SOFT|HARD}RESET is
    now only used to tell prereset whether soft or hard reset will be
    issued.

    * Strip out now unneeded promote-to-hardreset logics from
    ata_eh_reset(), ata_std_prereset(), sata_pmp_std_prereset() and
    other places.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

17 Apr, 2008

7 commits

  • Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
    it821x: do not describe noraid parameter with its value
    Pb1200/DBAu1200: fix bad IDE resource size
    Au1200: IDE driver build fix
    Au1200: kill IDE driver function prototypes
    avr32 mustn't select HAVE_IDE

    Linus Torvalds
     
  • Describe noraid parameter with its name (and not its value).

    Signed-off-by: Paul Bolle
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Paul Bolle
     
  • The header files for the Pb1200/DBAu1200 boards have wrong definition for the
    IDE interface's decoded range length -- it should be 512 bytes according to
    what the IDE driver does. In addition, the IDE platform device claims 1 byte
    too many for its memory resource -- fix the platform code and the IDE driver
    in accordance.

    Signed-off-by: Sergei Shtylyov
    Cc: Ralf Baechle
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • The driver fails to compile with CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA enabled:

    drivers/ide/mips/au1xxx-ide.c: In function `auide_build_dmatable':
    drivers/ide/mips/au1xxx-ide.c:256: error: implicit declaration of function
    `sg_virt'
    drivers/ide/mips/au1xxx-ide.c:275: error: implicit declaration of function
    `sg_next'
    drivers/ide/mips/au1xxx-ide.c:275: warning: assignment makes pointer from
    integer without a cast

    Fix this by including . While at it, remove the #include's
    without which the driver happily builds.

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • Fix these warnings emitted when compiling drivers/ide/mips/au1xxx-ide.c:

    include/asm/mach-au1x00/au1xxx_ide.h:137: warning: 'auide_tune_drive' declared
    `static' but never defined
    include/asm/mach-au1x00/au1xxx_ide.h:138: warning: 'auide_tune_chipset' declared
    `static' but never defined

    by wiping out the whole "function prototyping" section from the header file
    as it mostly declared functions that are
    already dead in the IDE driver; move the only useful prototype into the driver.

    Signed-off-by: Sergei Shtylyov
    Cc: Ralf Baechle
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • There's a libata based PATA driver for avr32, but no support for
    drivers/ide/ on avr32.

    This patch fixes the following compile error:

    ...
    CC [M] drivers/ide/ide-cd.o
    In file included from /home/bunk/linux/kernel-2.6/git/linux-2.6/drivers/ide/ide-cd.c:37:
    /home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/ide.h:209:21: error: asm/ide.h: No such file or directory
    make[3]: *** [drivers/ide/ide-cd.o] Error 1

    Signed-off-by: Adrian Bunk
    Cc: Haavard Skinnemoen
    Acked-by: Sam Ravnborg
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Adrian Bunk
     

16 Apr, 2008

22 commits

  • * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
    block: update git url for blktrace
    io context: increment task attachment count in ioc_task_link()

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
    USB: remove broken usb-serial num_endpoints check
    USB: option: Add new vendor ID and device ID for AMOI HSDPA modem
    USB: support more Huawei data card product IDs
    USB: option.c: add more device IDs
    USB: Obscure Maxon BP3-USB Device Support 16d8:6280 for option driver

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    [TCP]: Add return value indication to tcp_prune_ofo_queue().
    PS3: gelic: fix the oops on the broken IE returned from the hypervisor
    b43legacy: fix DMA mapping leakage
    mac80211: remove message on receiving unexpected unencrypted frames
    Update rt2x00 MAINTAINERS entry
    Add rfkill to MAINTAINERS file
    rfkill: Fix device type check when toggling states
    b43legacy: Fix usage of struct device used for DMAing
    ssb: Fix usage of struct device used for DMAing
    MAINTAINERS: move to generic repository for iwlwifi
    b43legacy: fix initvals loading on bcm4303
    rtl8187: Add missing priv->vif assignments
    netconsole: only set CON_PRINTBUFFER if the user specifies a netconsole
    [CAN]: Update documentation of struct sockaddr_can
    MAINTAINERS: isdn4linux@listserv.isdn4linux.de is subscribers-only
    [TCP]: Fix never pruned tcp out-of-order queue.
    [NET_SCHED] sch_api: fix qdisc_tree_decrease_qlen() loop

    Linus Torvalds
     
  • Describe debug parameters with their names (and not their values).

    Signed-off-by: Paul Bolle
    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    Paul Bolle
     
  • The num_interrupt_in, num_bulk_in, and other checks in the usb-serial
    code are just wrong, there are too many different devices out there with
    different numbers of endpoints. We need to just be sticking with the
    device ids instead of trying to catch this kind of thing. It broke too
    many different devices.

    This fixes a large number of usb-serial devices to get them working
    properly again.

    Cc: Oliver Neukum
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This patch add new vendor ID and device ID for AMOI HSDPA modem.

    From: tang kai
    Signed-off-by: Greg Kroah-Hartman

    tang kai
     
  • - declare the unusal device for Huawei data card devices in
    unusual_devs.h
    - disable the product ID matching for Huawei data card devices in
    usb_match_device function of driver.c
    - declare the product IDs in option.c.

    Signed-off-by: fangxiaozhi
    Signed-off-by: Greg Kroah-Hartman

    fangxiaozhi
     
  • Add devices by AMOI and NovatelWireless.

    Signed-Off-By: Matthias Urlichs
    Signed-off-by: Greg Kroah-Hartman

    Matthias Urlichs
     
  • The modem was detected, the ttyUSB{0,1,2} appeared, a call could be
    made, and the expected data rate was achieved. Tested for an hour or
    two, total of 100Mb. I shall do more testing.

    Signed-off-by: James Cameron
    Signed-off-by: Greg Kroah-Hartman

    James Cameron
     
  • Returns non-zero if tp->out_of_order_queue was seen non-empty.
    This allows tcp_try_rmem_schedule() to return early.

    Signed-off-by: Vitaliy Gusev
    Signed-off-by: David S. Miller

    Vitaliy Gusev
     
  • http://bugzilla.kernel.org/show_bug.cgi?id=10124

    this change:

    commit 08f1c192c3c32797068bfe97738babb3295bbf42
    Author: Muli Ben-Yehuda
    Date: Sun Jul 22 00:23:39 2007 +0300

    x86-64: introduce struct pci_sysdata to facilitate sharing of ->sysdata

    This patch introduces struct pci_sysdata to x86 and x86-64, and
    converts the existing two users (NUMA, Calgary) to use it.

    This lays the groundwork for having other users of sysdata, such as
    the PCI domains work.

    The Calgary bits are tested, the NUMA bits just look ok.

    replaces pcibios_scan_root by pci_scan_bus_parented...

    but in pcibios_scan_root we have a check about scanned busses.

    Cc:
    Cc: Stian Jordet
    Cc: Len Brown
    Cc: Greg KH
    Cc: Ingo Molnar
    Cc: "Yinghai Lu"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    yakui.zhao@intel.com
     
  • The THERMAL_MAX_TRIPS value is set to 10. It is too few for the Compaq AP550
    machine which has 12 trip points.

    Signed-off-by: Krzysztof Helt
    Cc: Len Brown
    Cc: Zhang Rui
    Cc: "Rafael J. Wysocki"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Krzysztof Helt
     
  • List could have become empty after the unlocked check that was made earlier,
    so check again inside the lock.

    Should fix https://bugzilla.redhat.com/show_bug.cgi?id=427765

    Signed-off-by: Chuck Ebbert
    Cc:
    Cc: Len Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chuck Ebbert
     
  • The SPI core now expects num_chipselect to be set correctly as due to added
    checks on the chip being selected before an transfer is allowed. This patch
    adds a num_cs field to the platform data which needs to be set correctly
    before adding the SPI platform device.

    Signed-off-by: Ben Dooks
    Signed-off-by: David Brownell
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • Pass the bus number we expect the S3C24XX SPI driver to attach to via the
    platform data.

    Signed-off-by: Ben Dooks
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • The s3c24xx_spi_txrx() function should initialise the completion each time
    before using it, otherwise we end up with the possibility of returning success
    before the interrupt handler has processed all the data.

    Signed-off-by: Ben Dooks
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • mb_cache_entry_alloc() was allocating cache entries with GFP_KERNEL. But
    filesystems are calling this function while holding xattr_sem so possible
    recursion into the fs violates locking ordering of xattr_sem and transaction
    start / i_mutex for ext2-4. Change mb_cache_entry_alloc() so that filesystems
    can specify desired gfp mask and use GFP_NOFS from all of them.

    Signed-off-by: Jan Kara
    Reported-by: Dave Jones
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kara
     
  • As shown by Gurudas Pai recently, we can put hugepages into the surplus
    state (by echo 0 > /proc/sys/vm/nr_hugepages), even when
    /proc/sys/vm/nr_overcommit_hugepages is 0. This is actually correct, to
    allow the original goal (shrink the static pool to 0) to succeed (we are
    converting hugepages to surplus because they are in use). However, the
    documentation does not accurately reflect this case. Update it.

    Signed-off-by: Nishanth Aravamudan
    Acked-by: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nishanth Aravamudan
     
  • In a5d76b54a3f3a40385d7f76069a2feac9f1bad63 (memory unplug: page isolation by
    KAMEZAWA Hiroyuki), "isolate" migratetype added. but unfortunately, it
    doesn't treat /proc/pagetypeinfo display logic.

    this patch add "Isolate" to pagetype name field.

    /proc/pagetype
    before:
    ------------------------------------------------------------------------------------------------------------------------
    Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
    Node 0, zone DMA, type Unmovable 1 2 2 2 1 2 2 1 1 0 0
    Node 0, zone DMA, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone DMA, type Movable 2 3 3 1 3 3 2 0 0 0 0
    Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone DMA, type 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone Normal, type Unmovable 1 9 7 4 1 1 1 1 0 0 0
    Node 0, zone Normal, type Reclaimable 5 2 0 0 1 1 0 0 0 1 0
    Node 0, zone Normal, type Movable 0 1 1 0 0 0 1 0 0 1 60
    Node 0, zone Normal, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone Normal, type 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone HighMem, type Unmovable 0 0 1 1 1 0 1 1 2 2 0
    Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone HighMem, type Movable 236 62 6 2 2 1 1 0 1 1 16
    Node 0, zone HighMem, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone HighMem, type 0 0 0 0 0 0 0 0 0 0 0

    Number of blocks type Unmovable Reclaimable Movable Reserve
    Node 0, zone DMA 1 0 2 1 0
    Node 0, zone Normal 10 40 169 1 0
    Node 0, zone HighMem 2 0 283 1 0

    after:
    ------------------------------------------------------------------------------------------------------------------------
    Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
    Node 0, zone DMA, type Unmovable 1 2 2 2 1 2 2 1 1 0 0
    Node 0, zone DMA, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone DMA, type Movable 2 3 3 1 3 3 2 0 0 0 0
    Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone Normal, type Unmovable 0 2 1 1 0 1 0 0 0 0 0
    Node 0, zone Normal, type Reclaimable 1 1 1 1 1 0 1 1 1 0 0
    Node 0, zone Normal, type Movable 0 1 1 1 0 1 0 1 0 0 196
    Node 0, zone Normal, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone Normal, type Isolate 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone HighMem, type Unmovable 0 1 0 0 0 1 1 1 2 2 0
    Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
    Node 0, zone HighMem, type Movable 1 0 1 1 0 0 0 0 1 0 200
    Node 0, zone HighMem, type Reserve 0 0 0 0 0 0 0 0 0 0 1
    Node 0, zone HighMem, type Isolate 0 0 0 0 0 0 0 0 0 0 0

    Number of blocks type Unmovable Reclaimable Movable Reserve Isolate
    Node 0, zone DMA 1 0 2 1 0
    Node 0, zone Normal 8 4 207 1 0
    Node 0, zone HighMem 2 0 283 1 0

    Signed-off-by: KOSAKI Motohiro
    Acked-by: KAMEZAWA Hiroyuki
    Acked-by: Mel Gorman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KOSAKI Motohiro
     
  • A couple of typos crept into the newly added document about the seq_file
    interface. This patch corrects those typos and simultaneously deletes
    unnecessary trailing spaces.

    Signed-off-by: Dmitri Vorobiev
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitri Vorobiev
     
  • This patch fixes this error:

    In file included from /home/wangcong/projects/linux-2.6/arch/um/kernel/smp.c:9:
    include2/asm/tlb.h: In function `tlb_remove_page':
    include2/asm/tlb.h:101: error: implicit declaration of function `page_cache_release'

    And since including in will break sparc,
    we add this #include in uml's own header.

    Acked-by: Jeff Dike
    Signed-off-by: WANG Cong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    WANG Cong
     
  • When I used a test program to fork mass processes and immediately move them to
    a cgroup where the memory limit is low enough to trigger oom kill, I got oops:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000808
    IP: [] _spin_lock_irqsave+0x8/0x18
    PGD 4c95f067 PUD 4406c067 PMD 0
    Oops: 0002 [1] SMP
    CPU 2
    Modules linked in:

    Pid: 11973, comm: a.out Not tainted 2.6.25-rc7 #5
    RIP: 0010:[] [] _spin_lock_irqsave+0x8/0x18
    RSP: 0018:ffff8100448c7c30 EFLAGS: 00010002
    RAX: 0000000000000202 RBX: 0000000000000009 RCX: 000000000001c9f3
    RDX: 0000000000000100 RSI: 0000000000000001 RDI: 0000000000000808
    RBP: ffff81007e444080 R08: 0000000000000000 R09: ffff8100448c7900
    R10: ffff81000105f480 R11: 00000100ffffffff R12: ffff810067c84140
    R13: 0000000000000001 R14: ffff8100441d0018 R15: ffff81007da56200
    FS: 00007f70eb1856f0(0000) GS:ffff81007fbad3c0(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 0000000000000808 CR3: 000000004498a000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process a.out (pid: 11973, threadinfo ffff8100448c6000, task ffff81007da533e0)
    Stack: ffffffff8023ef5a 00000000000000d0 ffffffff80548dc0 00000000000000d0
    ffff810067c84140 ffff81007e444080 ffffffff8026cef9 00000000000000d0
    ffff8100441d0000 00000000000000d0 ffff8100441d0000 ffff8100505445c0
    Call Trace:
    [] ? force_sig_info+0x25/0xb9
    [] ? oom_kill_task+0x77/0xe2
    [] ? mem_cgroup_out_of_memory+0x55/0x67
    [] ? mem_cgroup_charge_common+0xec/0x202
    [] ? handle_mm_fault+0x24e/0x77f
    [] ? default_wake_function+0x0/0xe
    [] ? get_user_pages+0x2ce/0x3af
    [] ? mem_cgroup_charge_common+0x2d/0x202
    [] ? make_pages_present+0x8e/0xa4
    [] ? mmap_region+0x373/0x429
    [] ? do_mmap_pgoff+0x2ff/0x364
    [] ? sys_mmap+0xe5/0x111
    [] ? tracesys+0xdc/0xe1

    Code: 00 00 01 48 8b 3c 24 e9 46 d4 dd ff f0 ff 07 48 8b 3c 24 e9 3a d4 dd ff fe 07 48 8b 3c 24 e9 2f d4 dd ff 9c 58 fa ba 00 01 00 00 66 0f c1 17 38 f2 74 06 f3 90 8a 17 eb f6 c3 fa b8 00 01 00
    RIP [] _spin_lock_irqsave+0x8/0x18
    RSP
    CR2: 0000000000000808
    ---[ end trace c3702fa668021ea4 ]---

    It's reproducable in a x86_64 box, but doesn't happen in x86_32.

    This is because tsk->sighand is not guarded by RCU, so we have to
    hold tasklist_lock, just as what out_of_memory() does.

    Signed-off-by: Li Zefan
    Cc: KAMEZAWA Hiroyuki
    Acked-by: Balbir Singh
    Cc: Pavel Emelianov
    Cc: Paul Menage
    Cc: Oleg Nesterov
    Cc: David Rientjes
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Li Zefan