19 Nov, 2015

1 commit

  • Pull s390 fixes from Martin Schwidefsky:
    "Assorted bug fixes, the mlock2 system call gets added, and one
    improvement. The boot from dasd devices is now possible from a wider
    range of devices"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
    s390: remove SALIPL loader
    s390: wire up mlock2 system call
    s390: remove g5 elf platform support
    s390: avoid cache aliasing under z/VM and KVM
    s390/sclp: _sclp_wait_int(): retain full PSW mask
    s390/zcrypt: Fix initialisation when zcrypt is built-in
    s390/zcrypt: Fix kernel crash on systems without AP bus support
    s390: add support for ipl devices in subchannel sets > 0
    s390/ipl: fix out of bounds access in scpdata_write
    s390/pci_dma: improve debugging of errors during dma map
    s390/pci_dma: handle dma table failures
    s390/pci_dma: unify label of invalid translation table entries
    s390/syscalls: remove system call number calculation
    s390/cio: simplify css_generate_pgid
    s390/diag: add a s390 prefix to the diagnose trace point
    s390/head: fix error message on unsupported hardware

    Linus Torvalds
     

11 Nov, 2015

3 commits

  • ap_bus and zcrypt_api assumed module information to always be present
    and initialisation to be done in module loading order (symbol
    dependencies). These assumptions don't hold if zcrypt is built-in;
    THIS_MODULE will be NULL in this case and init call order is linker
    order, i.e. Makefile order.

    Fix initialisation order by ordering the object files in the Makefile
    according to their dependencies, like the module loader would do.

    Fix message type registration by using a dedicated "name" field rather
    than piggy-backing on the module ("owner") information. There's no
    change to the requirement that module name and msgtype name are
    identical. The existing name macros are used.

    We don't need any special code for dealing with the drivers being
    built-in; the generic module support code already does the right
    thing.

    Test results:
    1. CONFIG_MODULES=y, CONFIG_ZCRYPT=y

    KVM: boots, no /sys/bus/ap (expected)
    LPAR with CEX5: boots, /sys/bus/ap/devices/card*/type present

    2. CONFIG_MODULES=y, CONFIG_ZCRYPT=m=:

    KVM: boots, loading zcrypt_cex4 (and ap) fails (expected)
    LPAR with CEX5: boots, loading =zcrypt_cex4= succeeds,
    /sys/bus/ap/devices/card*/type present after explicit module
    loading

    3. CONFIG_MODULES unset, CONFIG_ZCRYPT=y:
    KVM: boots, no /sys/bus/ap (expected)
    LPAR with CEX5: boots, /sys/bus/ap/devices/card*/type present

    No further testing (user-space functionality) was done.

    Fixes: 3b6245fd303f ("s390/zcrypt: Separate msgtype implementation from card modules.")
    Signed-off-by: Sascha Silbe
    Signed-off-by: Martin Schwidefsky

    Sascha Silbe
     
  • On systems without AP bus (e.g. KVM) the kernel crashes during init
    calls when zcrypt is built-in:

    kernel BUG at drivers/base/driver.c:153!
    illegal operation: 0001 ilc:1 [#1] SMP
    Modules linked in:
    CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.2.0+ #221
    task: 0000000010a40000 ti: 0000000010a48000 task.ti:0000000010a48000
    Krnl PSW : 0704c00180000000 0000000000592bd6(driver_register+0x106/0x140)
    R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 EA:3
    0000000000000012 0000000000000000 0000000000c45328 0000000000c44e30
    00000000009ef63c 000000000067f598 0000000000cf3c58 0000000000000000
    000000000000007b 0000000000cb1030 0000000000000002 0000000000000000
    0000000000ca8580 0000000010306700 00000000001001d8 0000000010a4bd88
    Krnl Code: 0000000000592bc6: f0b00004ebcf srp 4(12,%r0),3023(%r14),0
    0000000000592bcc: f0a0000407f4 srp 4(11,%r0),2036,0
    #0000000000592bd2: a7f40001 brc 15,592bd4
    >0000000000592bd6: e330d0000004 lg %r3,0(%r13)
    0000000000592bdc: c0200021edfd larl %r2,9d07d6
    0000000000592be2: c0e500126d8f brasl %r14,7e0700
    0000000000592be8: e330d0080004 lg %r3,8(%r13)
    0000000000592bee: a7f4ffab brc 15,592b44
    Call Trace:
    ([] do_one_initcall+0x90/0x1d0)
    [] kernel_init_freeable+0x1e4/0x2a0
    [] kernel_init+0x2a/0x120
    [] kernel_thread_starter+0x6/0xc
    [] kernel_thread_starter+0x0/0xc
    Last Breaking-Event-Address:
    [] driver_register+0x102/0x140

    When zcrypt is built as a module, the module loader ensures that the
    driver modules cannot be loaded if the AP bus module returns an error
    during initialisation. But if zcrypt and the driver are built-in, the
    driver is getting initialised even if the AP bus initialisation
    failed. The driver invokes ap_driver_register() during initialisation,
    which then causes operations on uninitialised data structures to be
    performed.

    Explicitly protect ap_driver_register() by introducing an
    "initialised" flag that gets set iff the AP bus initialisation was
    successful. When the AP bus initialisation failed,
    ap_driver_register() will error out with -ENODEV, causing the driver
    initialisation to fail as well.

    Test results:
    1. Inside KVM (no AP bus), zcrypt built-in

    Boots. /sys/bus/ap not present (expected).

    2. Inside KVM (no AP bus), zcrypt as module

    Boots. Loading zcrypt_cex4 fails because loading ap_bus fails
    (expected).

    3. On LPAR with CEX5, zcrypt built-in

    Boots. /sys/bus/ap/devices/card* present but .../card*/type missing
    (i.e. zcrypt_device_register() fails, unrelated issue).

    4. On LPAR with CEX5, zcrypt as module

    Boots. Loading zcrypt_cex4 successful,
    /sys/bus/ap/devices/card*/type present. No further testing
    (user-space functionality) was done.

    Signed-off-by: Sascha Silbe
    Signed-off-by: Martin Schwidefsky

    Sascha Silbe
     
  • Allow to ipl from CCW based devices residing in any subchannel set.

    Reviewed-by: Michael Holzheu
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     

09 Nov, 2015

1 commit

  • Simplify the css_generate_pgid code by using stap() independent of
    CONFIG_SMP. For !CONFIG_SMP builds stap() will deliver the address
    of the cpu we IPL'ed from (which can be != 0).

    Note: the ifdef was likely added to be compatible with _very_ old
    machines which we don't support anyway.

    Reviewed-by: Peter Oberparleiter
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     

08 Nov, 2015

1 commit


05 Nov, 2015

1 commit

  • Pull s390 updates from Martin Schwidefsky:
    "There is only one new feature in this pull for the 4.4 merge window,
    most of it is small enhancements, cleanup and bug fixes:

    - Add the s390 backend for the software dirty bit tracking. This
    adds two new pgtable functions pte_clear_soft_dirty and
    pmd_clear_soft_dirty which is why there is a hit to
    arch/x86/include/asm/pgtable.h in this pull request.

    - A series of cleanup patches for the AP bus, this includes the
    removal of the support for two outdated crypto cards (PCICC and
    PCICA).

    - The irq handling / signaling on buffer full in the runtime
    instrumentation code is dropped.

    - Some micro optimizations: remove unnecessary memory barriers for a
    couple of functions: [smb_]rmb, [smb_]wmb, atomics, bitops, and for
    spin_unlock. Use the builtin bswap if available and make
    test_and_set_bit_lock more cache friendly.

    - Statistics and a tracepoint for the diagnose calls to the
    hypervisor.

    - The CPU measurement facility support to sample KVM guests is
    improved.

    - The vector instructions are now always enabled for user space
    processes if the hardware has the vector facility. This simplifies
    the FPU handling code. The fpu-internal.h header is split into fpu
    internals, api and types just like x86.

    - Cleanup and improvements for the common I/O layer.

    - Rework udelay to solve a problem with kprobe. udelay has busy loop
    semantics but still uses an idle processor state for the wait"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (66 commits)
    s390: remove runtime instrumentation interrupts
    s390/cio: de-duplicate subchannel validation
    s390/css: unneeded initialization in for_each_subchannel
    s390/Kconfig: use builtin bswap
    s390/dasd: fix disconnected device with valid path mask
    s390/dasd: fix invalid PAV assignment after suspend/resume
    s390/dasd: fix double free in dasd_eckd_read_conf
    s390/kernel: fix ptrace peek/poke for floating point registers
    s390/cio: move ccw_device_stlck functions
    s390/cio: move ccw_device_call_handler
    s390/topology: reduce per_cpu() invocations
    s390/nmi: reduce size of percpu variable
    s390/nmi: fix terminology
    s390/nmi: remove casts
    s390/nmi: remove pointless error strings
    s390: don't store registers on disabled wait anymore
    s390: get rid of __set_psw_mask()
    s390/fpu: split fpu-internal.h into fpu internals, api, and type headers
    s390/dasd: fix list_del corruption after lcu changes
    s390/spinlock: remove unneeded serializations at unlock
    ...

    Linus Torvalds
     

03 Nov, 2015

5 commits

  • cio_validate_io_subchannel() and cio_validate_msg_subchannel() are
    identical, as the called functions already take care about the
    differences between subchannel types.

    Just inline the code into the only user,
    cio_validate_subchannel(), instead.

    Signed-off-by: Pierre Morel
    Reviewed-by: Cornelia Huck
    Acked-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Pierre Morel
     
  • The ret variable is always set by the fn function.
    There is no need to initialize it.

    Signed-off-by: Pierre Morel
    Reviewed-By: Sascha Silbe
    Acked-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Pierre Morel
     
  • Path verification is either done via dasd_eckd_read_conf() which is
    triggered during online processing and resume or via
    do_path_verification_work() which is triggered after path events.
    The dasd_eckd_read_conf() version added paths unconditionally and did
    not check if the path mask was empty. This led to devices having the
    disconnected stop flag set but a valid path mask. So they where not
    working although they had paths validated successfully. After a resume
    this state could even not be solved with additional paths added.

    Fix by checking for an empty path mask in dasd_eckd_read_conf() and
    clearing the device stop bits for a newly added channel path.

    Reviewed-by: Sebastian Ott
    Signed-off-by: Stefan Haberland
    Signed-off-by: Martin Schwidefsky

    Stefan Haberland
     
  • For a valid PAV assignment the DASD driver needs to notice possibly
    changed configuration data. Thus the failing of read configuration
    data should also fail the device restore to prevent invalid PAV
    assignment. The failed device may get restored after additional paths
    get available later on.
    If the restore fails after the device was added to the lcu alias
    handling it needs to be removed from the alias handling before exiting
    the restore function.

    Reviewed-by: Sebastian Ott
    Signed-off-by: Stefan Haberland
    Signed-off-by: Martin Schwidefsky

    Stefan Haberland
     
  • The configuration data is stored per path and also the first valid
    configuration data per device. When dasd_eckd_read_conf is called
    again after a path got lost the device configuration data is cleared
    but possibly not the per path configuration data. This might lead to a
    double free when the lost path gets operational again.

    Fix by clearing all per path configuration data when the first valid
    configuration data is received and stored.

    Reviewed-by: Sebastian Ott
    Signed-off-by: Stefan Haberland
    Signed-off-by: Martin Schwidefsky

    Stefan Haberland
     

27 Oct, 2015

3 commits

  • device_ops.c should only contain functions that are called by ccw device
    drivers. Move the cio internal functions that handle unconditional
    reserve + release to device_pgid.c

    Acked-by: Peter Oberparleiter
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • device_ops.c should only contain functions that are called by ccw device
    drivers. Move the cio internal function ccw_device_call_handler to
    device_fsm.c where it's used. Remove some useless comments while at it.

    Acked-by: Peter Oberparleiter
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Remove all the casts to and from the machine check interruption code.
    This patch changes struct mci to a union, which contains an anonymous
    structure with the already known bits and in addition an unsigned
    long field, which contains the raw machine check interruption code.

    This allows to simply assign and decoce the interruption code value
    without the need for all those casts we had all the time.

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

    Heiko Carstens
     

15 Oct, 2015

1 commit

  • A summary unit check occurs when the lcu updates the PAV configuration
    e.g. base PAV assignment or PAV mode at all. This requires the reset
    of the drivers internal pavgroups. Therefore the alias devices are
    flushed and moved via a temporary list to the active_devices list
    where they are not associated with a pavgroup. In conjunction with
    updates to the base device the pavgroup may be removed since both
    base_list and alias_list are empty. Unfortunately during alias flush
    and move to the active_device list from alias_list the pavgroup
    pointer is not deleted in the device private structure. This leads to
    a list del_corruption if another lcu_update tries to move the device
    in the non existent pavgroup.

    Fix by removing the pavgroup pointer after the alias device was moved
    to the active_devices list.

    Signed-off-by: Stefan Haberland
    Signed-off-by: Martin Schwidefsky

    Stefan Haberland
     

14 Oct, 2015

21 commits

  • There is a system work queue system_long_wq for long running work.
    Use this work queue for the AP bus scan loop.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • Remove the code for really old crypt cards, PCICC and PCICA.
    These cards have been out of service for several years.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • Replace the two fields 'unregistered' and 'reset' with a device
    state with 5 possible values. Introduce two events for the AP devices,
    device poll and device timeout. With the state machine it is easier
    to deal with device initialization and suspend/resume. Device polling
    is simpler as well, the arkane 'flags' passing is gone.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • If a AP device is removed while messages are still pending, the requests
    are cancelled by calling the message receive function with an error pointer
    for the reply. The message type receive handler recognize this and create
    a fake hardware error TYPE82_RSP_CODE / REP82_ERROR_MACHINE_FAILURE.
    The message with the hardware error then causes a printk and a return
    code of -EAGAIN.

    Replace the intricate scheme with an explicit return code for this sitation
    and avoid the error message.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • Set the configuration timer at the end of the ap_scan_bus function.
    Make use of setup_timer and remove some unnecessary add_timer, mod_timer
    and del_timer_sync calls. Replace the complicated timer_pending, mod_timer
    and add_timer code in ap_config_time_store with a simple mod_timer.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • If there are no devices on the AP bus there will not be a single
    call to the per-device ap_bus_suspend function. Even worse,
    there will not be a call to the per-device ap_bus_resume either
    and the AP will fail so resume correctly.

    Introduce a bus specific dev_pm_ops to suspend / resume the AP
    bus related things. While we are at it, simplify the power management
    code of the AP bus.

    Reviewd-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • The ap_queue_messsage function will call device_unregister if the
    unregistered field of the device has been set while trying to queue
    a message. This races with other device_unregister calls, e.g. from
    the ap_scan_bus. Remove the call to device_unregister from
    ap_queue_message and let ap_scan_bus deal with it.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • The ap_query_configuration function allocates the ap_config_info
    structure, but there is no code to free the structure.
    Allocate the structure in the module_init function and free it
    again in module_exit.

    While we are at it simplify a few functions in regard to the
    ap configuration data.

    Reviewed-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • ap_test_queue, ap_query_facilities, __ap_query_functions all use
    the same PQAP(TAPQ) command. Consolidate the three into a single
    ap_test_queue function that returns the AP status and the 64-bit
    result. The exception table entry for PQAP(TAPQ) can be avoided
    if the T bit for the APFT facility is set only if test_facility(15)
    indicated that the facility is present.

    Integrate ap_query_function into ap_query queue to avoid calling
    PQAP(TAPQ) twice.

    Reviewed-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • The sclp console and tty code currently uses several message text
    objects in a single message event to print several lines with one
    SCCB. This causes the output of these lines to be fused into a
    block which is noticeable when selecting text in the operating system
    message panel.

    Instead use several message events with a single message text object
    each to print every line on its own. This changes the SCCB layout
    from

    struct sccb_header
    struct evbuf_header
    struct mdb_header
    struct go
    struct mto
    ...
    struct mto

    to

    struct sccb_header
    struct evbuf_header
    struct mdb_header
    struct go
    struct mto
    ...
    struct evbuf_header
    struct mdb_header
    struct go
    struct mto

    Reviewed-by: Peter Oberparleiter
    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • Introduce /sys/debug/kernel/diag_stat with a statistic how many diagnose
    calls have been done by each CPU in the system.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • We often need to correlate an 8 bit path mask with the position
    in a channel path array. Introduce and use pathmask_to_pos for
    that task.

    Reviewed-by: Peter Oberparleiter
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • During resume from hibernate we already reenable measurement block
    updates on a per device basis. In addition to that we also need to
    activate channel measurement globally using the set channel monitor
    instruction.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Martin Schwidefsky
    Reviewed-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Extended measurement blocks need to be 64 byte aligned. To achieve that
    128 bytes for each measurement block are allocated and an align callback
    returns a 64 byte aligned address inside this area.

    Replace this code with kmem_cache allocations.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Martin Schwidefsky
    Reviewed-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • The measurement block for the extended measurement data is not freed when
    switching off per device measurement. Free the measurement block after HW
    stopped accessing it.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Martin Schwidefsky
    Reviewed-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • During allocation of extended measurement blocks we check if the device is
    already active for channel measurement and add the device to a list of
    devices with active channel measurement. The check is done under ccwlock
    protection and the list modification is guarded by a different lock.

    To guarantee that both states are in sync make sure that both locks
    are held during the allocation process (like it's already done for the
    "normal" measurement block allocation).

    Signed-off-by: Sebastian Ott
    Reviewed-by: Martin Schwidefsky
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Devices with active channel measurement are included in a list. When a
    device is removed without deactivating channel measurement first the
    list_head is freed but still used. Fix this by making sure that
    channel measurement is deactivated during device deregistration.

    For devices that we deregister because they are no longer accessible
    deactivating channel measurement will fail. In this case we can report
    success because the FW will no longer access the measurement block.

    In addition to these steps keep an extra device reference while
    channel measurement is active.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Hold the device_lock during [de]activation of the channel measurement
    block to synchronize concurrent usage of these functions.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Martin Schwidefsky
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Ensure that we hold the ccwlock when accessing private data. Return errors
    that occur during measurement enabling to userspace. Apply some cleanups
    while at it.

    Signed-off-by: Sebastian Ott
    Reviewed-by: Cornelia Huck
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • We were able to reduce the CPU overhead of big paging scenarios
    when announcing our paging disks as non-rotational.
    Almost all dasd devices are implemented in storage servers with
    cache, raid, striping and lots of magic. There is no point in
    optimizing the disk schedulers and swap code for a single platter
    moving arm rotational disks. Given the complexity of the setup
    and the fact that this change is mostly to disable the additional
    overhead in swap code, lets keep the other functionality unchanged
    and do not disable the this device as entropy source - unlike other
    non-rotational devices.

    Suggested-by: Christian Ehrhardt
    Reviewed-by: David Hildenbrand
    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     
  • In the past only even modulus sizes were allowed for RSA keys in
    CRT format. This restriction was based on limited RSA key generation
    on older crypto adapters that provides only even modulus sizes. This
    restriction is not valid any more.

    Revoke restrictions that crypto requests can be serviced with odd
    RSA modulus length in CRT format.

    Signed-off-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Ingo Tuchscherer
     

07 Oct, 2015

3 commits

  • If HiperSockets Completion Queueing is enabled, qdio always
    issues a warning, since the condition is always met.
    This patch fixes the condition in WARN_ON_ONCE that was always
    true.

    Signed-off-by: Eugene Crosser
    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Eugene Crosser
     
  • In layer2 mode of the qeth driver, MAC address lists
    from struct net_device require mapping to the OSA-card.
    The existing implementation is inefficient for lists with
    more than several MAC addresses, since for every
    ndo_set_rx_mode callback it removes all MAC addresses first,
    and then registers the current MAC address list.
    This patch changes implementation of ndo_set_rx_mode callback
    in qeth, only performing hardware registration/removal for
    new/deleted addresses. To shorten lookup of MAC addresses
    registered addresses are kept in a hashtable instead of a
    linear list.

    Signed-off-by: Lakhvich Dmitriy
    Signed-off-by: Ursula Braun
    Reviewed-by: Eugene Crosser
    Reviewed-by: Thomas Richter
    Tested-by: Christian Borntraeger
    Signed-off-by: David S. Miller

    Lakhvich Dmitriy
     
  • Add support for GRO (generic receive offload) in the layer 2
    part of device driver qeth. This results in a performance
    improvement when GRO and RX is turned on.

    Signed-off-by: Thomas Richter
    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Thomas Richter