10 May, 2007

1 commit


08 May, 2007

1 commit

  • Architectures that don't support DMA can say so by adding a config NO_DMA
    to their Kconfig file. This will prevent compilation of some dma specific
    driver code. Also dma-mapping-broken.h isn't needed anymore on at least
    s390. This avoids compilation and linking of otherwise dead/broken code.

    Other architectures that include dma-mapping-broken.h are arm26, h8300,
    m68k, m68knommu and v850. If these could be converted as well we could get
    rid of the header file.

    Signed-off-by: Heiko Carstens
    "John W. Linville"
    Cc: Kyle McMartin
    Cc:
    Cc: Tejun Heo
    Cc: Jeff Garzik
    Cc: Martin Schwidefsky
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Heiko Carstens
     

27 Apr, 2007

2 commits

  • s390 machines provide hardware support for creating Linux dumps on SCSI
    disks. For creating a dump a special purpose dump Linux is used. The first
    32 MB of memory are saved by the hardware before the dump Linux is
    booted. Via an SCLP interface, the saved memory can be accessed from
    Linux. This patch exports memory and registers of the crashed Linux to
    userspace via a debugfs file. For more information refer to
    Documentation/s390/zfcpdump.txt, which is included in this patch.

    Signed-off-by: Michael Holzheu
    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Heiko Carstens

    Michael Holzheu
     
  • Generic bug implementation for s390. Will increase the value of the
    console output on BUG() statements since registers r0-r5,r14 will
    not be clobbered by a printk() call that was previously done before
    the illegal instruction of BUG() was hit.
    Also implements an architecture specific WARN_ON(). Output of that
    could be increased but requires common code change.

    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Heiko Carstens

    Heiko Carstens
     

06 Mar, 2007

1 commit


21 Feb, 2007

1 commit


12 Feb, 2007

3 commits

  • Martin Schwidefsky wrote:
    "s390 does not even need (in|out)b(_p|). I wondered what else from
    io.h do we not need. The answer is: almost nothing. With the devres
    patch from Al and the dma-mapping patch from Heiko we can get rid of
    iomem and all associated definitions."

    So we'll just need to replace NO_IOPORT with NO_IOMEM in Kconfig and
    kill arch/s390/mm/ioremap.c.

    BTW, there's an annoying bit of junk in there - IO_SPACE_LIMIT. We
    only need it for /proc/ioports, which AFAICS shouldn't even be there
    on s390 (or uml). OTOH, removing that thing would mean a user-visible
    change - we go from "empty file in /proc" to "no such file in /proc"...

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • * Split the implementation-agnostic stuff in separate files.
    * Make sure that targets using non-default request_irq() pull
    kernel/irq/devres.o
    * Introduce new symbols (HAS_IOPORT and HAS_IOMEM) defaulting to positive;
    allow architectures to turn them off (we needed these symbols anyway for
    dependencies of quite a few drivers).
    * protect the ioport-related parts of lib/devres.o with CONFIG_HAS_IOPORT.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • This patch simply defines CONFIG_ZONE_DMA for all arches. We later do special
    things with CONFIG_ZONE_DMA after the VM and an arch are prepared to work
    without ZONE_DMA.

    CONFIG_ZONE_DMA can be defined in two ways depending on how an architecture
    handles ISA DMA.

    First if CONFIG_GENERIC_ISA_DMA is set by the arch then we know that the arch
    needs ZONE_DMA because ISA DMA devices are supported. We can catch this in
    mm/Kconfig and do not need to modify arch code.

    Second, arches may use ZONE_DMA in an unknown way. We set CONFIG_ZONE_DMA for
    all arches that do not set CONFIG_GENERIC_ISA_DMA in order to insure backwards
    compatibility. The arches may later undefine ZONE_DMA if their arch code has
    been verified to not depend on ZONE_DMA.

    Signed-off-by: Christoph Lameter
    Cc: Andi Kleen
    Cc: "Luck, Tony"
    Cc: Kyle McMartin
    Cc: Matthew Wilcox
    Cc: James Bottomley
    Cc: Paul Mundt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

06 Feb, 2007

2 commits

  • Preset the bogomips number to the cpu capacity value reported by
    store system information in SYSIB 1.2.2. This value is constant
    for a particular machine model and can be used to determine
    relative performance differences between machines.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • This provides a noexec protection on s390 hardware. Our hardware does
    not have any bits left in the pte for a hw noexec bit, so this is a
    different approach using shadow page tables and a special addressing
    mode that allows separate address spaces for code and data.

    As a special feature of our "secondary-space" addressing mode, separate
    page tables can be specified for the translation of data addresses
    (storage operands) and instruction addresses. The shadow page table is
    used for the instruction addresses and the standard page table for the
    data addresses.
    The shadow page table is linked to the standard page table by a pointer
    in page->lru.next of the struct page corresponding to the page that
    contains the standard page table (since page->private is not really
    private with the pte_lock and the page table pages are not in the LRU
    list).
    Depending on the software bits of a pte, it is either inserted into
    both page tables or just into the standard (data) page table. Pages of
    a vma that does not have the VM_EXEC bit set get mapped only in the
    data address space. Any try to execute code on such a page will cause a
    page translation exception. The standard reaction to this is a SIGSEGV
    with two exceptions: the two system call opcodes 0x0a77 (sys_sigreturn)
    and 0x0aad (sys_rt_sigreturn) are allowed. They are stored by the
    kernel to the signal stack frame. Unfortunately, the signal return
    mechanism cannot be modified to use an SA_RESTORER because the
    exception unwinding code depends on the system call opcode stored
    behind the signal stack frame.

    This feature requires that user space is executed in secondary-space
    mode and the kernel in home-space mode, which means that the addressing
    modes need to be switched and that the noexec protection only works
    for user space.
    After switching the addressing modes, we cannot use the mvcp/mvcs
    instructions anymore to copy between kernel and user space. A new
    mvcos instruction has been added to the z9 EC/BC hardware which allows
    to copy between arbitrary address spaces, but on older hardware the
    page tables need to be walked manually.

    Signed-off-by: Gerald Schaefer
    Signed-off-by: Martin Schwidefsky

    Gerald Schaefer
     

14 Dec, 2006

1 commit


09 Dec, 2006

2 commits

  • * 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
    [S390] Poison init section before freeing it.
    [S390] Use add_active_range() and free_area_init_nodes().
    [S390] Virtual memmap for s390.
    [S390] Update documentation for dynamic subchannel mapping.
    [S390] Use dev->groups for adding/removing the subchannel attribute group.
    [S390] Support for disconnected devices reappearing on another subchannel.
    [S390] subchannel lock conversion.
    [S390] Some preparations for the dynamic subchannel mapping patch.
    [S390] runtime switch for qdio performance statistics
    [S390] New DASD feature for ERP related logging
    [S390] add reset call handler to the ap bus.
    [S390] more workqueue fixes.
    [S390] workqueue fixes.
    [S390] uaccess_pt: add missing down_read() and convert to is_init().

    Linus Torvalds
     
  • This facility provides three entry points:

    ilog2() Log base 2 of unsigned long
    ilog2_u32() Log base 2 of u32
    ilog2_u64() Log base 2 of u64

    These facilities can either be used inside functions on dynamic data:

    int do_something(long q)
    {
    ...;
    y = ilog2(x)
    ...;
    }

    Or can be used to statically initialise global variables with constant values:

    unsigned n = ilog2(27);

    When performing static initialisation, the compiler will report "error:
    initializer element is not constant" if asked to take a log of zero or of
    something not reducible to a constant. They treat negative numbers as
    unsigned.

    When not dealing with a constant, they fall back to using fls() which permits
    them to use arch-specific log calculation instructions - such as BSR on
    x86/x86_64 or SCAN on FRV - if available.

    [akpm@osdl.org: MMC fix]
    Signed-off-by: David Howells
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Herbert Xu
    Cc: David Howells
    Cc: Wojtek Kaniewski
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     

08 Dec, 2006

3 commits

  • Size zones and holes in an architecture independent manner for s390.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • Virtual memmap support for s390. Inspired by the ia64 implementation.

    Unlike ia64 we need a mechanism which allows us to dynamically attach
    shared memory regions.
    These memory regions are accessed via the dcss device driver. dcss
    implements the 'direct_access' operation, which requires struct pages
    for every single shared page.
    Therefore this implementation provides an interface to attach/detach
    shared memory:

    int add_shared_memory(unsigned long start, unsigned long size);
    int remove_shared_memory(unsigned long start, unsigned long size);

    The purpose of the add_shared_memory function is to add the given
    memory range to the 1:1 mapping and to make sure that the
    corresponding range in the vmemmap is backed with physical pages.
    It also initialises the new struct pages.

    remove_shared_memory in turn only invalidates the page table
    entries in the 1:1 mapping. The page tables and the memory used for
    struct pages in the vmemmap are currently not freed. They will be
    reused when the next segment will be attached.
    Given that the maximum size of a shared memory region is 2GB and
    in addition all regions must reside below 2GB this is not too much of
    a restriction, but there is room for improvement.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • Remove CONFIG_QETH_PERF_STATS and use a sysfs attribute instead.
    We want to have the ability to turn the statistics on/off at runtime.

    Signed-off-by: Ursula Braun
    Signed-off-by: Martin Schwidefsky

    Ursula Braun
     

04 Dec, 2006

2 commits


06 Nov, 2006

1 commit

  • Commit 7676bef9c183fd573822cac9992927ef596d584c breaks DCSS support on
    s390. DCSS needs initialized struct pages to work. With the usage of
    add_active_range() only the struct pages for physically present pages
    are initialized.
    This could be fixed if the DCSS driver would initiliaze the struct pages
    itself, but this doesn't work too. This is because the mem_map array
    does not include holes after the last present memory area and therefore
    there is nothing that could be initialized.
    To fix this and to avoid some dirty hacks revert this patch for now.
    Will be added later when we move to a virtual mem_map.

    Cc: Carsten Otte
    Cc: Adrian Bunk
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

06 Oct, 2006

1 commit


05 Oct, 2006

1 commit


28 Sep, 2006

2 commits

  • Add a kernel config option for the IBM System z9. This will produce
    faster code on newer compilers using the -march=z9-109 option.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     
  • The clocksource infrastructure introduced with commit
    ad596171ed635c51a9eef829187af100cbf8dcf7 broke 31 bit s390.
    The reason is that the do_div() primitive for 31 bit always
    had a restriction: it could only divide an unsigned 64 bit
    integer by an unsigned 31 bit integer. The clocksource code
    now uses do_div() with a base value that has the most
    significant bit set. The result is that clock->cycle_interval
    has a funny value which causes the linux time to jump around
    like mad.
    The solution is "obvious": implement a proper __div64_32
    function for 31 bit s390.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     

20 Sep, 2006

2 commits


12 Sep, 2006

1 commit


11 Jul, 2006

2 commits

  • Remove BINFMT_ELF32 config option. Support should be always compiled in if
    CONFIG_COMPAT is set.

    Cc: Martin Schwidefsky
    Signed-off-by: Heiko Carstens
    Cc: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Heiko Carstens
     
  • Currently most architectures either always build binfmt_elf32 in the kernel
    image or make it a boolean option. Only sparc64 and s390 allow to build it
    modularly. This patch turns the option into a boolean aswell because elf
    requires various symbols that shouldn't be available to modules. The most
    urgent one is tasklist_lock whos export this patch series kills, but there
    are others like force_sgi aswell.

    Note that sparc doesn't allow a modular 32bit a.out handler either, and
    that would be the more useful case as only few people want 32bit sunos
    compatibility and 99.9% of all sparc64 users need 32bit linux native elf
    support.

    Signed-off-by: Christoph Hellwig
    Acked-by: "David S. Miller"
    Cc: Martin Schwidefsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     

04 Jul, 2006

2 commits


23 Jun, 2006

1 commit

  • On zSeries machines there exists an interface which allows the operating
    system to retrieve LPAR hypervisor accounting data. For example, it is
    possible to get usage data for physical and virtual cpus. In order to
    provide this information to user space programs, I implemented a new
    virtual Linux file system named 's390_hypfs' using the Linux 2.6 libfs
    framework. The name 's390_hypfs' stands for 'S390 Hypervisor Filesystem'.
    All the accounting information is put into different virtual files which
    can be accessed from user space. All data is represented as ASCII strings.

    When the file system is mounted the accounting information is retrieved and
    a file system tree is created with the attribute files containing the cpu
    information. The content of the files remains unchanged until a new update
    is made. An update can be triggered from user space through writing
    'something' into a special purpose update file.

    We create the following directory structure:

    /
    update
    cpus/

    type
    mgmtime

    ...
    hyp/
    type
    systems/

    cpus/

    type
    mgmtime
    cputime
    onlinetime

    ...

    cpus/
    ...

    - update: File to trigger update
    - cpus/: Directory for all physical cpus
    - cpus//: Directory for one physical cpu.
    - cpus//type: Type name of physical zSeries cpu.
    - cpus//mgmtime: Physical-LPAR-management time in microseconds.
    - hyp/: Directory for hypervisor information
    - hyp/type: Typ of hypervisor (currently only 'LPAR Hypervisor')
    - systems/: Directory for all LPARs
    - systems//: Directory for one LPAR.
    - systems//cpus//: Directory for the virtual cpus
    - systems//cpus//type: Typ of cpu.
    - systems//cpus//mgmtime:
    Accumulated number of microseconds during which a physical
    CPU was assigned to the logical cpu and the cpu time was
    consumed by the hypervisor and was not provided to
    the LPAR (LPAR overhead).

    - systems//cpus//cputime:
    Accumulated number of microseconds during which a physical CPU
    was assigned to the logical cpu and the cpu time was consumed
    by the LPAR.

    - systems//cpus//onlinetime:
    Accumulated number of microseconds during which the logical CPU
    has been online.

    As mount point for the filesystem /sys/hypervisor/s390 is created.

    The update process is triggered when writing 'something' into the
    'update' file at the top level hypfs directory. You can do this e.g.
    with 'echo 1 > update'. During the update the whole directory structure
    is deleted and built up again.

    Cc: Pekka Enberg
    Cc: Ingo Oeser
    Cc: Joern Engel
    Acked-by: Martin Schwidefsky
    Signed-off-by: Michael Holzheu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Holzheu
     

27 Mar, 2006

1 commit

  • - remove generic_ffs()
    - remove generic_fls()
    - remove generic_fls64()
    - remove generic_hweight{64,32,16,8}()
    - remove minix_{test,set,test_and_clear,test,find_first_zero}_bit()

    Signed-off-by: Akinobu Mita
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

24 Mar, 2006

1 commit


18 Feb, 2006

1 commit

  • Heiko Carstens wrote:

    The boot sequence on s390 sometimes takes ages and we spend a very long
    time (up to one or two minutes) in calibrate_migration_costs. The time
    spent there differs from boot to boot. Also the calculated costs differ
    a lot. I've seen differences by up to a factor of 15 (yes, factor not
    percent). Also I doubt that making these measurements make much sense on
    a completely virtualized architecture where you cannot tell how much cpu
    time you will get anyway.

    So introduce the CONFIG_DEFAULT_MIGRATION_COST method for an architecture
    to set the scheduler migration costs. This turns off automatic detection
    of migration costs. Makes sense on virtual platforms, where migration
    costs are hard to measure accurately.

    Signed-off-by: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

11 Jan, 2006

1 commit

  • It seems the "make UID16 support optional" patch was checked when it
    edited the -tiny tree some time ago, but it wasn't checked whether it
    still matches the current situation when it was submitted for inclusion
    in -mm. This patch fixes the following bugs:
    - ARCH_S390X does no longer exist, nowadays this has to be expressed
    through (S390 && 64BIT)
    - in five architecture specific Kconfig files the UID16 options
    weren't removed

    Additionally, it changes the fragile negative dependencies of UID16 to
    positive dependencies (new architectures are more likely to not require
    UID16 support).

    Signed-off-by: Adrian Bunk
    Acked-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     

07 Jan, 2006

2 commits

  • Sanitize some s390 Kconfig options. We have ARCH_S390, ARCH_S390X,
    ARCH_S390_31, 64BIT, S390_SUPPORT and COMPAT. Replace these 6 options by
    S390, 64BIT and COMPAT.

    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Martin Schwidefsky
     
  • New feature V=V qdio pass-through.

    QDIO and HiperSockets processing in z/VM V=V guest environments (as well as
    V=R with z/VM running in LPAR mode) requires shadowing of all QDIO
    architecture queue elements. Especially the shadowing of SBALs and SLSBs
    structures in the hypervisor, and the need to issue SIGA SYNC operations to
    observe state changes, eventually causes significant CPU processing overhead
    in the hypervisor.

    The QDIO pass-through support for V=V guests avoids the shadowing of SBALs and
    SLSBs. This significantly reduces the hypervisor overhead for QDIO based I/O.

    Signed-off-by: Frank Pavlic
    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Frank Pavlic
     

12 Jul, 2005

1 commit

  • Create a new top-level menu named "Networking" thus moving
    net related options and protocol selection way from the drivers
    menu and up on the top-level where they belong.

    To implement this all architectures has to source "net/Kconfig" before
    drivers/*/Kconfig in their Kconfig file. This change has been
    implemented for all architectures.

    Device drivers for ordinary NIC's are still to be found
    in the Device Drivers section, but Bluetooth, IrDA and ax25
    are located with their corresponding menu entries under the new
    networking menu item.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

26 Jun, 2005

1 commit

  • Add kexec support for s390 architecture.

    From: Milton Miller

    - Fix passing of first argument to relocate_kernel assembly.
    - Fix Kconfig description.
    - Remove wrong comment and comments that describe obvious things.
    - Allow only KEXEC_TYPE_DEFAULT as image type -> dump not supported.

    Acked-by: Martin Schwidefsky
    Signed-off-by: Heiko Carstens
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Heiko Carstens