07 Mar, 2010

40 commits

  • My next patch will replace ELF_CORE_EXTRA_* macros by functions, putting
    them into other newly created *.c files. Then, each files will contain
    dump_write(), where each pair of binfmt_*.c and elfcore.c should be the
    same. So, this patch moves them into a header file with dump_seek().
    Also, the patch deletes confusing DUMP_WRITE macros in each files.

    Signed-off-by: Daisuke HATAYAMA
    Cc: "Luck, Tony"
    Cc: Jeff Dike
    Cc: David Howells
    Cc: Greg Ungerer
    Cc: Roland McGrath
    Cc: Oleg Nesterov
    Cc: Ingo Molnar
    Cc: Alexander Viro
    Cc: Andi Kleen
    Cc: Alan Cox
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daisuke HATAYAMA
     
  • The current ELF dumper can produce broken corefiles if program headers
    exceed 65535. In particular, the program in 64-bit environment often
    demands more than 65535 mmaps. If you google max_map_count, then you can
    find many users facing this problem.

    Solaris has already dealt with this issue, and other OSes have also
    adopted the same method as in Solaris. Currently, Sun's document and AMD
    64 ABI include the description for the extension, where they call the
    extension Extended Numbering. See Reference for further information.

    I believe that linux kernel should adopt the same way as they did, so I've
    written this patch.

    I am also preparing for patches of GDB and binutils.

    How to fix
    ==========

    In new dumping process, there are two cases according to weather or
    not the number of program headers is equal to or more than 65535.

    - if less than 65535, the produced corefile format is exactly the same
    as the ordinary one.

    - if equal to or more than 65535, then e_phnum field is set to newly
    introduced constant PN_XNUM(0xffff) and the actual number of program
    headers is set to sh_info field of the section header at index 0.

    Compatibility Concern
    =====================

    * As already mentioned in Summary, Sun and AMD64 has already adopted
    this. See Reference.

    * There are four combinations according to whether kernel and userland
    tools are respectively modified or not. The next table summarizes
    shortly for each combination.

    ---------------------------------------------
    Original Kernel | Modified Kernel
    ---------------------------------------------
    < 65535 | >= 65535 | < 65535 | >= 65535
    -------------------------------------------------------------
    Original Tools | OK | broken | OK | broken (#)
    -------------------------------------------------------------
    Modified Tools | OK | broken | OK | OK
    -------------------------------------------------------------

    Note that there is no case that `OK' changes to `broken'.

    (#) Although this case remains broken, O-M behaves better than
    O-O. That is, while in O-O case e_phnum field would be extremely
    small due to integer overflow, in O-M case it is guaranteed to be at
    least 65535 by being set to PN_XNUM(0xFFFF), much closer to the
    actual correct value than the O-O case.

    Test Program
    ============

    Here is a test program mkmmaps.c that is useful to produce the
    corefile with many mmaps. To use this, please take the following
    steps:

    $ ulimit -c unlimited
    $ sysctl vm.max_map_count=70000 # default 65530 is too small
    $ sysctl fs.file-max=70000
    $ mkmmaps 65535

    Then, the program will abort and a corefile will be generated.

    If failed, there are two cases according to the error message
    displayed.

    * ``out of memory'' means vm.max_map_count is still smaller

    * ``too many open files'' means fs.file-max is still smaller

    So, please change it to a larger value, and then retry it.

    mkmmaps.c
    ==
    #include
    #include
    #include
    #include
    #include
    int main(int argc, char **argv)
    {
    int maps_num;
    if (argc < 2) {
    fprintf(stderr, "mkmmaps [number of maps to be created]\n");
    exit(1);
    }
    if (sscanf(argv[1], "%d", &maps_num) == EOF) {
    perror("sscanf");
    exit(2);
    }
    if (maps_num < 0) {
    fprintf(stderr, "%d is invalid\n", maps_num);
    exit(3);
    }
    for (; maps_num > 0; --maps_num) {
    if (MAP_FAILED == mmap((void *)NULL, (size_t) 1, PROT_READ,
    MAP_SHARED | MAP_ANONYMOUS, (int) -1,
    (off_t) NULL)) {
    perror("mmap");
    exit(4);
    }
    }
    abort();
    {
    char buffer[128];
    sprintf(buffer, "wc -l /proc/%u/maps", getpid());
    system(buffer);
    }
    return 0;
    }

    Tested on i386, ia64 and um/sys-i386.
    Built on sh4 (which covers fs/binfmt_elf_fdpic.c)

    References
    ==========

    - Sun microsystems: Linker and Libraries.
    Part No: 817-1984-17, September 2008.
    URL: http://docs.sun.com/app/docs/doc/817-1984

    - System V ABI AMD64 Architecture Processor Supplement
    Draft Version 0.99., May 11, 2009.
    URL: http://www.x86-64.org/

    This patch:

    There are three different definitions for dump_seek() functions in
    binfmt_aout.c, binfmt_elf.c and binfmt_elf_fdpic.c, respectively. The
    only for binfmt_elf.c.

    My next patch will move dump_seek() into a header file in order to share
    the same implementations for dump_write() and dump_seek(). As the first
    step, this patch unify these three definitions for dump_seek() by applying
    the past commits that have been applied only for binfmt_elf.c.

    Specifically, the modification made here is part of the following commits:

    * d025c9db7f31fc0554ce7fb2dfc78d35a77f3487
    * 7f14daa19ea36b200d237ad3ac5826ae25360461

    This patch does not change a shape of corefiles.

    Signed-off-by: Daisuke HATAYAMA
    Cc: "Luck, Tony"
    Cc: Jeff Dike
    Cc: David Howells
    Cc: Greg Ungerer
    Cc: Roland McGrath
    Cc: Oleg Nesterov
    Cc: Ingo Molnar
    Cc: Alexander Viro
    Cc: Andi Kleen
    Cc: Alan Cox
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daisuke HATAYAMA
     
  • * warn if creation goes on to non-existent directory
    * warn if removal goes on from non-existing directory
    * warn if non-existing proc entry is removed

    Signed-off-by: Alexey Dobriyan
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • remove_proc_entry() does

    lock
    lookup parent
    unlock
    lock
    unlink proc entry from lists
    unlock

    which can be made bit more correct by doing parent translation + unlink
    without dropping lock.

    Signed-off-by: Alexey Dobriyan
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • While testing an ADC121S021 in an embedded board with a S3C2142 SoC (ARM
    core), I have found that the 'adcxx' driver does not handle correctly
    single channel ADCs from this chip family. For single channel chips you
    must only issue one read transfer for correct measurement.

    Signed-off-by: Jose Miguel Goncalves
    Cc: Marc Pignat
    Cc: Anton Vorontsov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    José Miguel Gonçalves
     
  • String constants that are continued on subsequent lines with \ will cause
    spurious whitespace in the resulting output.

    Signed-off-by: Joe Perches
    Cc: Roger Lucas
    Cc: Jean Delvare
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • Signed-off-by: Joakim Tjernlund
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joakim Tjernlund
     
  • Signed-off-by: Joe Perches
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • Signed-off-by: Alberto Panizzo
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alberto Panizzo
     
  • Based on Arjan's suggestion, extend the list of ops structures that should
    be const.

    Signed-off-by: Emese Revfy
    Cc: Andy Whitcroft
    Cc: Arjan van de Ven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Emese Revfy
     
  • Here is a small code snippet, which will be complained about by
    checkpatch.pl:

    #define __STRUCT_KFIFO_COMMON(recsize, ptrtype) \
    union { \
    struct { \
    unsigned int in; \
    unsigned int out; \
    }; \
    char rectype[recsize]; \
    ptrtype *ptr; \
    const ptrtype *ptr_const; \
    };

    This construct is legal and safe, so checkpatch.pl should accept this. It
    should be also true for struct defined in a macro.

    Add the `struct' and `union' keywords to the exceptions list of the
    checkpatch.pl script, to prevent error message "Macros with multiple
    statements should be enclosed in a do - while loop". Otherwise it is not
    possible to build a struct or union with a macro.

    Signed-off-by: Stefani Seibold
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stefani Seibold
     
  • checkpatch falsely complained about '__initconst' because it thought the
    'const' needed a space before. Fix this by changing the list of
    attributes:

    - add '__initconst'
    - force plain 'init' to contain a word-boundary at the end

    Signed-off-by: Wolfram Sang
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfram Sang
     
  • Signed-off-by: Joe Perches
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • In case if the statement and the conditional are in one line, the line
    appears in the report doubly.

    And items of this check have no blank line before the next item.

    This patch fixes these trivial problems, to improve readability of the
    report.

    [sample.c]
    > if (cond1
    > && cond2
    > && cond3) func_foo();
    >
    > if (cond4) func_bar();

    Before:
    > ERROR: trailing statements should be on next line
    > #1: FILE: sample.c:1:
    > +if (cond1
    > [...]
    > + && cond3) func_foo();
    > ERROR: trailing statements should be on next line
    > #5: FILE: sample.c:5:
    > +if (cond4) func_bar();
    > +if (cond4) func_bar();
    > total: 2 errors, 0 warnings, 5 lines checked

    After:
    > ERROR: trailing statements should be on next line
    > #1: FILE: sample.c:1:
    > +if (cond1
    > [...]
    > + && cond3) func_foo();
    >
    > ERROR: trailing statements should be on next line
    > #5: FILE: sample.c:5:
    > +if (cond4) func_bar();
    >
    > total: 2 errors, 0 warnings, 5 lines checked

    Signed-off-by: Hidetoshi Seto
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hidetoshi Seto
     
  • sizeof(&foo) is frequently an error. Warn on its use.

    Signed-off-by: Joe Perches
    Cc: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • This card reader doesn't advertise, however DMA works well. Probably
    windows SDHCI driver assumes that all readers support DMA and thus we see
    that bug.

    Signed-off-by: Vasily Khoruzhick
    Tested-by: Maxim Levitsky
    Signed-off-by: Maxim Levitsky
    Cc: Harald Welte
    Cc: Norbert Preining
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vasily Khoruzhick
     
  • kunmap_atomic() accepts a pointer to any location in the page so we do not
    need the subtraction and cast.

    Signed-off-by: Nicolas Ferre
    Cc: Wolfgang Muees
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Ferre
     
  • We used to manage features and differences on a per-cpu basis. As several
    cpus share the same mci revision, this patch aggregates cpus that have the
    same IP revision in one defined constant. We use the
    at91mci_is_mci1rev2xx() funtion name not to mess with newer Atmel sd/mmc
    IP called "MCI2". _rev2 naming could have been confusing...

    Signed-off-by: Nicolas Ferre
    Cc: Wolfgang Muees
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Ferre
     
  • According to the datasheets AT91SAM9261 does not support SDIO interrupts,
    and AT91SAM9260/9263 have an erratum requiring 4bit mode while using slot
    B for the interrupt to work.

    Signed-off-by: Nicolas Ferre
    Cc: Wolfgang Muees
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Ferre
     
  • This patch is setting some max_ variables for the IO elevator, so the
    elevator will put requests for large data blocks to the driver. This is
    critical for

    a) speed

    and

    b) wear leveling of the flash chip controller: Otherwise the controller
    will treat the SD card badly with millions of single 4 KByte write
    commands. This will lead to a shorter life time for the SD cards.

    Signed-off-by: Wolfgang Muees
    Signed-off-by: Nicolas Ferre
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfgang Muees
     
  • Convert the read to use the DMA buffer as well. The old code was doing
    double-buffering DMA with the PDC; no way to make it work. Replace it
    with a single-PDC approach. It also simplify things removing the need for
    a pre_dma_read() function.

    [nicolas.ferre@atmel.com coding style modifications]
    Signed-off-by: Wolfgang Muees
    Signed-off-by: Nicolas Ferre
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfgang Muees
     
  • The TX DMA buffer is allocated only once, because the
    allocation/deallocation of the buffer for EACH chunk of data is
    time-consuming and prone to memory fragmentation.

    Using a coherent DMA buffer avoids extra data cache calls.

    [nicolas.ferre@atmel.com: coding style modifications]
    Signed-off-by: Wolfgang Muees
    Signed-off-by: Nicolas Ferre
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfgang Muees
     
  • Fix two timeout errors, one for slow SDHC cards and one for slow users
    while inserting SD cards.

    Signed-off-by: Wolfgang Muees
    Signed-off-by: Nicolas Ferre
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfgang Muees
     
  • Fixes two pointer errors, one which leads to memory overwrites if used
    with large chunks of data.

    Signed-off-by: Wolfgang Muees
    Signed-off-by: Nicolas Ferre
    Cc: Andrew Victor
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wolfgang Muees
     
  • Signed-off-by: Lars-Peter Clausen
    Cc: Ben Dooks
    Cc:
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Lars-Peter Clausen
     
  • If no platform_data was givin to the device it's going to use it's default
    platform data struct which has all fields initialized to zero. As a
    result the driver is going to try to request gpio0 both as write protect
    and card detect pin. Which of course will fail and makes the driver
    unusable

    Previously to the introduction of no_wprotect and no_detect the behavior
    was to assume that if no platform data was given there is no write protect
    or card detect pin. This patch restores that behavior.

    Signed-off-by: Lars-Peter Clausen
    Cc: Ben Dooks
    Cc:
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Lars-Peter Clausen
     
  • And bring them back to 4-bit mode during resume.

    Signed-off-by: Daniel Drake
    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Drake
     
  • Some SDIO cards may suspend while keeping function interrupts active
    especially in the powered suspend case. Upon resume we need to kick the
    SDIO interrupt thread to check for pending interrupts and to restart card
    IRQ detection at the host controller level.

    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Pitre
     
  • Seen on a Marvell 8686 SDIO card and Via VX855 controller: we must avoid
    sending CMD3/5/7 on a resume where power has been maintained, because the
    8686 will refuse to respond to them and the MMC stack will give up on the
    card.

    Signed-off-by: Chris Ball
    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Ball
     
  • Tested with an XO v1.5 from OLPC.

    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Pitre
     
  • This patch series provides the core changes needed to allow SDIO cards to
    remain powered and active while the host system is suspended, and let them
    wake up the host system when needed. This is used to implement
    wake-on-lan with SDIO wireless cards at the moment. Patches to add that
    support to the libertas driver will be posted separately.

    This patch:

    Some SDIO cards have the ability to keep on running autonomously when the
    host system is suspended, and wake it up when needed. This however
    requires that the host controller preserve power to the card, and
    configure itself appropriately for wake-up.

    There is however 4 layers of abstractions involved: the host controller
    driver, the MMC core code, the SDIO card management code, and the actual
    SDIO function driver. To make things simple and manageable, host drivers
    must advertise their PM capabilities with a feature bitmask, then function
    drivers can query and set those features from their suspend method. Then
    each layer in the suspend call chain is expected to act upon those bits
    accordingly.

    [akpm@linux-foundation.org: fix typo in comment]
    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Pitre
     
  • sdhci_set_adma_desc() is using byte-writes to write data in a specified
    order into memory. Change to using __le16 for the two byte and __le32 for
    the four byte cases and use the cpu_to_{le16,le32} to do the conversion
    before writing.

    This will reduce the size of the code and the number of writes as we no
    longer need to chop the data up before writing.

    As an example on ARM S3C64XX SoC, in little-endian configuration:

    000000d4 :
    - d8: e1a0c423 lsr ip, r3, #8
    - dc: e1a0ec21 lsr lr, r1, #24
    - e0: e1a04821 lsr r4, r1, #16
    - e4: e1a05421 lsr r5, r1, #8
    - e8: e1a06442 asr r6, r2, #8
    - ec: e5c0c001 strb ip, [r0, #1]
    - f0: e5c0e007 strb lr, [r0, #7]
    - f4: e5c04006 strb r4, [r0, #6]
    - f8: e5c05005 strb r5, [r0, #5]
    - fc: e5c01004 strb r1, [r0, #4]
    - 100: e5c06003 strb r6, [r0, #3]
    - 104: e5c02002 strb r2, [r0, #2]
    - 108: e5c03000 strb r3, [r0]
    + d4: e5801004 str r1, [r0, #4]
    + d8: e1c030b0 strh r3, [r0]
    + dc: e1c020b2 strh r2, [r0, #2]

    Signed-off-by: Ben Dooks
    Cc: Pierre Ossman
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • The code to write the ADMA descriptor into memory is repeated several
    times throughout sdhci_adma_table_pre, and thus should be moved into a
    common function. This will also be useful if the patch to make the write
    more efficient is accepted.

    Signed-off-by: Ben Dooks
    Cc: Pierre Ossman
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • Some SDIO cards expect byte transfers not to exceed the configured block
    transfer size. Add a quirk to that effect.

    Patches to make use of this quirk will be sent separately.

    Signed-off-by: Bing Zhao
    Signed-off-by: Nicolas Pitre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bing Zhao
     
  • The hardcoded value doesn't really work for all cards.

    Signed-off-by: Cliff Cai
    Signed-off-by: Mike Frysinger
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Cliff Cai
     
  • The host/Kconfig file is only included when MMC is selected.

    Signed-off-by: Mike Frysinger
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Frysinger
     
  • The local sg variable is only used with BF54x code.

    Signed-off-by: Mike Frysinger
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Frysinger
     
  • This prevents those without an Atmel chip having a line in kernel
    configuration which says "Atmel SD/MMC Driver" without any option.

    Signed-off-by: Jonathan Cameron
    Signed-off-by: Nicolas Ferre
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Ferre
     
  • Add support for 8bit MMC cards. The controller data width is configurable
    depending on the wires setting in the platform data structure.

    MMC 8bit is tested on OMAPL137 and MMC 4bit is tested on OMAPL138 EVM.

    Signed-off-by: Vipin Bhandari
    Cc: David Brownell
    Cc: Chaithrika U S
    Cc: Sudhakar Rajashekhara
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vipin Bhandari
     
  • This patch solves nasty problem original driver has.

    Original goal of the ricoh_mmc was to disable this device because then,
    mmc cards can be read using standard SDHCI controller, thus avoiding
    writing of yet another driver.

    However, the act of disablement, makes other pci functions that belong to
    this controller (xD and memstick) shift up one level, thus pci core has
    now wrong idea about these devices.

    To fix this issue, this patch moves the driver into the pci quirk section,
    thus it is executes before the pci is enumerated, and therefore solving
    that issue, also same sequence of commands is performed on resume for same
    reasons.

    Also regardless of the above, this way is cleaner. You still need to set
    CONFIG_MMC_RICOH_MMC to enable this quirk

    Signed-off-by: Maxim Levitsky
    Acked-by: Philip Langdale
    Acked-by: Wolfram Sang
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Maxim Levitsky