30 Apr, 2014

9 commits

  • There was a very small race window where resume to kernel mode from a
    Exception Path (or pure kernel mode which is true for most of ARC
    exceptions anyways), was not disabling interrupts in restore_regs,
    clobbering the exception regs

    Anton found the culprit call flow (after many sleepless nights)

    | 1. we got a Trap from user land
    | 2. started to service it.
    | 3. While doing some stuff on user-land memory (I think it is padzero()),
    | we got a DataTlbMiss
    | 4. On return from it we are taking "resume_kernel_mode" path
    | 5. NEED_RESHED is not set, so we go to "return from exception" path in
    | restore regs.
    | 6. there seems to be IRQ happening

    Signed-off-by: Vineet Gupta
    Cc: #3.10, 3.12, 3.13, 3.14
    Cc: Anton Kolesov
    Cc: Francois Bedard
    Signed-off-by: Linus Torvalds

    Vineet Gupta
     
  • Pull sound fixes from Takashi Iwai:
    "A few collections of small eggs that have been gathered during the
    Easter holidays. Mostly small ASoC fixes, with a HD-audio quirk and a
    workaround for Nvidia controller"

    * tag 'sound-3.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda - Suppress CORBRP clear on Nvidia controller chips
    ALSA: hda - add headset mic detect quirk for a Dell laptop
    ASoC: jz4740: Remove Makefile entry for removed file
    ASoC: Intel: Fix audio crash due to negative address offset
    ASoC: dapm: Fix widget double free with auto-disable DAPM kcontrol
    ASoC: Intel: Fix incorrect sizeof() in sst_hsw_stream_get_volume()
    ASoC: Intel: some incorrect sizeof() usages
    ASoC: cs42l73: Convert to use devm_gpio_request_one
    ASoC: cs42l52: Convert to use devm_gpio_request_one
    ASoC: tlv320aic31xx: document that the regulators are mandatory
    ASoC: fsl_spdif: Fix wrong OFFSET of STC_SYSCLK_DIV
    ASoC: alc5623: Fix regmap endianness
    ASoC: tlv320aic3x: fix shared reset pin for DT
    ASoC: rsnd: fix clock prepare/unprepare

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "Smattering of fixes, i915, exynos, tegra, msm, vmwgfx.

    A bit of framebuffer reference counting fallout fixes, i915 GM45
    regression fix, DVI regression fix, vmware info leak between processes
    fix"

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/exynos: use %pad for dma_addr_t
    drm/exynos: dsi: use IS_ERR() to check devm_ioremap_resource() results
    MAINTAINERS: update maintainer entry for Exynos DP driver
    drm/exynos: balance framebuffer refcount
    drm/i915: Move all ring resets before setting the HWS page
    drm/i915: Don't WARN nor handle unexpected hpd interrupts on gmch platforms
    drm/msm/mdp4: cure for the cursor blues (v2)
    drm/msm: default to XR24 rather than AR24
    drm/msm: fix memory leak
    drm/tegra: restrict plane loops to legacy planes
    drm/i915: Allow full PPGTT with param override
    drm/i915: Discard BIOS framebuffers too small to accommodate chosen mode
    drm/vmwgfx: Make sure user-space can't DMA across buffer object boundaries v2
    drm/i915: get power domain in case the BIOS enabled eDP VDD
    drm/i915: Don't check gmch state on inherited configs
    drm/i915: Allow user modes to exceed DVI 165MHz limit

    Linus Torvalds
     
  • Use %pad for dma_addr_t, because a dma_addr_t type can vary
    based on build options. So, it prevents possible build warnings
    in printks.

    Signed-off-by: Jingoo Han
    Reviewed-by: Daniel Kurtz
    Signed-off-by: Inki Dae
    Signed-off-by: Dave Airlie

    Jingoo Han
     
  • devm_ioremap_resource() returns an error pointer, not NULL. Thus,
    the result should be checked with IS_ERR().

    Signed-off-by: Jingoo Han
    Signed-off-by: Inki Dae
    Signed-off-by: Dave Airlie

    Jingoo Han
     
  • Recently, Exynos DP driver was moved from drivers/video/exynos/
    directory to drivers/gpu/drm/exynos/ directory. So, I update
    and add maintainer entry for Exynos DP driver.

    Signed-off-by: Jingoo Han
    Signed-off-by: Inki Dae
    Signed-off-by: Dave Airlie

    Jingoo Han
     
  • exynos_drm_crtc_mode_set assigns primary framebuffer to plane without
    taking reference. Then during framebuffer removal it is dereferenced twice,
    causing oops. The patch fixes it.

    Signed-off-by: Andrzej Hajda
    Signed-off-by: Inki Dae
    Signed-off-by: Dave Airlie

    Andrzej Hajda
     
  • single security fix, cc'd stable.

    * 'vmwgfx-fixes-3.15' of git://people.freedesktop.org/~thomash/linux:
    drm/vmwgfx: Make sure user-space can't DMA across buffer object boundaries v2

    Dave Airlie
     
  • The recent commit (ca460f86521) changed the CORB RP reset procedure to
    follow the specification with a couple of sanity checks.
    Unfortunately, Nvidia controller chips seem not following this way,
    and spew the warning messages like:
    snd_hda_intel 0000:00:10.1: CORB reset timeout#1, CORBRP = 0

    This patch adds the workaround for such chips. It just skips the new
    reset procedure for the known broken chips.

    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

29 Apr, 2014

4 commits

  • …it/rostedt/linux-trace

    Pull ftrace bugfix from Steven Rostedt:
    "Takao Indoh reported that he was able to cause a ftrace bug while
    loading a module and enabling function tracing at the same time.

    He uncovered a race where the module when loaded will convert the
    calls to mcount into nops, and expects the module's text to be RW.
    But when function tracing is enabled, it will convert all kernel text
    (core and module) from RO to RW to convert the nops to calls to ftrace
    to record the function. After the convertion, it will convert all the
    text back from RW to RO.

    The issue is, it will also convert the module's text that is loading.
    If it converts it to RO before ftrace does its conversion, it will
    cause ftrace to fail and require a reboot to fix it again.

    This patch moves the ftrace module update that converts calls to
    mcount into nops to be done when the module state is still
    MODULE_STATE_UNFORMED. This will ignore the module when the text is
    being converted from RW back to RO"

    * tag 'trace-fixes-v3.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
    ftrace/module: Hardcode ftrace_module_init() call into load_module()

    Linus Torvalds
     
  • Pull devicetree bug fixes from Grant Likely:
    "These are some important bug fixes that need to get into v3.15.

    This branch contains a pair of important bug fixes for the DT code:

    - Fix some incorrect binding property names before they enter common
    usage

    - Fix bug where some platform devices will be unable to get their
    interrupt number when they depend on an interrupt controller that
    is not available at device creation time. This is a problem
    causing mainline to fail on a number of ARM platforms"

    * tag 'dt-for-linus' of git://git.secretlab.ca/git/linux:
    of/irq: do irq resolution in platform_get_irq
    of: selftest: add deferred probe interrupt test
    dt: Fix binding typos in clock-names and interrupt-names

    Linus Torvalds
     
  • Pull powerpc fixes from Ben Herrenschmidt:
    "Here is a bunch of post-merge window fixes that have been accumulating
    in patchwork while I was on vacation or buried under other stuff last
    week.

    We have the now usual batch of LE fixes from Anton (sadly some new
    stuff that went into this merge window had endian issues, we'll try to
    make sure we do better next time)

    Some fixes and cleanups to the new 24x7 performance monitoring stuff
    (mostly typos and cleaning up printk's)

    A series of fixes for an issue with our runlatch bit, which wasn't set
    properly for offlined threads/cores and under KVM, causing potentially
    some counters to misbehave along with possible power management
    issues.

    A fix for kexec nasty race where the new kernel wouldn't "see" the
    secondary processors having reached back into firmware in time.

    And finally a few other misc (and pretty simple) bug fixes"

    * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (33 commits)
    powerpc/4xx: Fix section mismatch in ppc4xx_pci.c
    ppc/kvm: Clear the runlatch bit of a vcpu before napping
    ppc/kvm: Set the runlatch bit of a CPU just before starting guest
    ppc/powernv: Set the runlatch bits correctly for offline cpus
    powerpc/pseries: Protect remove_memory() with device hotplug lock
    powerpc: Fix error return in rtas_flash module init
    powerpc: Bump BOOT_COMMAND_LINE_SIZE to 2048
    powerpc: Bump COMMAND_LINE_SIZE to 2048
    powerpc: Rename duplicate COMMAND_LINE_SIZE define
    powerpc/perf/hv-24x7: Catalog version number is be64, not be32
    powerpc/perf/hv-24x7: Remove [static 4096], sparse chokes on it
    powerpc/perf/hv-24x7: Use (unsigned long) not (u32) values when calling plpar_hcall_norets()
    powerpc/perf/hv-gpci: Make device attr static
    powerpc/perf/hv_gpci: Probe failures use pr_debug(), and padding reduced
    powerpc/perf/hv_24x7: Probe errors changed to pr_debug(), padding fixed
    powerpc/mm: Fix tlbie to add AVAL fields for 64K pages
    powerpc/powernv: Fix little endian issues in OPAL dump code
    powerpc/powernv: Create OPAL sglist helper functions and fix endian issues
    powerpc/powernv: Fix little endian issues in OPAL error log code
    powerpc/powernv: Fix little endian issues with opal_do_notifier calls
    ...

    Linus Torvalds
     
  • BUG_ON() is a big hammer, and should be used _only_ if there is some
    major corruption that you cannot possibly recover from, making it
    imperative that the current process (and possibly the whole machine) be
    terminated with extreme prejudice.

    The trivial sanity check in the vmacache code is *not* such a fatal
    error. Recovering from it is absolutely trivial, and using BUG_ON()
    just makes it harder to debug for no actual advantage.

    To make matters worse, the placement of the BUG_ON() (only if the range
    check matched) actually makes it harder to hit the sanity check to begin
    with, so _if_ there is a bug (and we just got a report from Srivatsa
    Bhat that this can indeed trigger), it is harder to debug not just
    because the machine is possibly dead, but because we don't have better
    coverage.

    BUG_ON() must *die*. Maybe we should add a checkpatch warning for it,
    because it is simply just about the worst thing you can ever do if you
    hit some "this cannot happen" situation.

    Reported-by: Srivatsa S. Bhat
    Cc: Davidlohr Bueso
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

28 Apr, 2014

27 commits

  • A race exists between module loading and enabling of function tracer.

    CPU 1 CPU 2
    ----- -----
    load_module()
    module->state = MODULE_STATE_COMING

    register_ftrace_function()
    mutex_lock(&ftrace_lock);
    ftrace_startup()
    update_ftrace_function();
    ftrace_arch_code_modify_prepare()
    set_all_module_text_rw();

    ftrace_arch_code_modify_post_process()
    set_all_module_text_ro();

    [ here all module text is set to RO,
    including the module that is
    loading!! ]

    blocking_notifier_call_chain(MODULE_STATE_COMING);
    ftrace_init_module()

    [ tries to modify code, but it's RO, and fails!
    ftrace_bug() is called]

    When this race happens, ftrace_bug() will produces a nasty warning and
    all of the function tracing features will be disabled until reboot.

    The simple solution is to treate module load the same way the core
    kernel is treated at boot. To hardcode the ftrace function modification
    of converting calls to mcount into nops. This is done in init/main.c
    there's no reason it could not be done in load_module(). This gives
    a better control of the changes and doesn't tie the state of the
    module to its notifiers as much. Ftrace is special, it needs to be
    treated as such.

    The reason this would work, is that the ftrace_module_init() would be
    called while the module is in MODULE_STATE_UNFORMED, which is ignored
    by the set_all_module_text_ro() call.

    Link: http://lkml.kernel.org/r/1395637826-3312-1-git-send-email-indou.takao@jp.fujitsu.com

    Reported-by: Takao Indoh
    Acked-by: Rusty Russell
    Cc: stable@vger.kernel.org # 2.6.38+
    Signed-off-by: Steven Rostedt

    Steven Rostedt (Red Hat)
     
  • When we plug a 3-ring headset on the Dell machine (VID: 0x10ec0255,
    SID: 0x10280674), the headset mic can't be detected, after apply this
    patch, the headset mic can work well.

    BugLink: https://bugs.launchpad.net/bugs/1297581
    Cc: David Henningsson
    Cc: stable@vger.kernel.org
    Signed-off-by: Hui Wang
    Signed-off-by: Takashi Iwai

    Hui Wang
     
  • …nie/sound into for-linus

    ASoC: Fixes for v3.15

    A smattering of driver-specific fixes here, nothing generic. The Cirrus
    CODEC conversions to devm_ are leak fixes - the conversion adds missing
    error handling code.

    Takashi Iwai
     
  • This patch fixes this section mismatch:

    WARNING: vmlinux.o(.text+0x1efc4): Section mismatch in reference from
    the function apm821xx_pciex_init_port_hw() to the function
    .init.text:ppc4xx_pciex_wait_on_sdr.isra.9()

    The function apm821xx_pciex_init_port_hw() references the function
    __init ppc4xx_pciex_wait_on_sdr.isra.9(). This is often because
    apm821xx_pciex_init_port_hw lacks a __init annotation or the
    annotation of ppc4xx_pciex_wait_on_sdr.isra.9 is wrong.

    apm821xx_pciex_init_port_hw is only referenced by a struct in
    __initdata, so it should be safe to add __init to
    apm821xx_pciex_init_port_hw.

    Signed-off-by: Alistair Popple
    Signed-off-by: Benjamin Herrenschmidt

    Alistair Popple
     
  • When the guest cedes the vcpu or the vcpu has no guest to
    run it naps. Clear the runlatch bit of the vcpu before
    napping to indicate an idle cpu.

    Signed-off-by: Preeti U Murthy
    Acked-by: Paul Mackerras
    Reviewed-by: Srivatsa S. Bhat
    Signed-off-by: Benjamin Herrenschmidt

    Preeti U Murthy
     
  • The secondary threads in the core are kept offline before launching guests
    in kvm on powerpc: "371fefd6f2dc4666:KVM: PPC: Allow book3s_hv guests to use
    SMT processor modes."

    Hence their runlatch bits are cleared. When the secondary threads are called
    in to start a guest, their runlatch bits need to be set to indicate that they
    are busy. The primary thread has its runlatch bit set though, but there is no
    harm in setting this bit once again. Hence set the runlatch bit for all
    threads before they start guest.

    Signed-off-by: Preeti U Murthy
    Acked-by: Paul Mackerras
    Reviewed-by: Srivatsa S. Bhat
    Signed-off-by: Benjamin Herrenschmidt

    Preeti U Murthy
     
  • Up until now we have been setting the runlatch bits for a busy CPU and
    clearing it when a CPU enters idle state. The runlatch bit has thus
    been consistent with the utilization of a CPU as long as the CPU is online.

    However when a CPU is hotplugged out the runlatch bit is not cleared. It
    needs to be cleared to indicate an unused CPU. Hence this patch has the
    runlatch bit cleared for an offline CPU just before entering an idle state
    and sets it immediately after it exits the idle state.

    Signed-off-by: Preeti U Murthy
    Acked-by: Paul Mackerras
    Reviewed-by: Srivatsa S. Bhat
    Signed-off-by: Benjamin Herrenschmidt

    Preeti U Murthy
     
  • While testing memory hot-remove, I found following dead lock:

    Process #1141 is drmgr, trying to remove some memory, i.e. memory499.
    It holds the memory_hotplug_mutex, and blocks when trying to remove file
    "online" under dir memory499, in kernfs_drain(), at
    wait_event(root->deactivate_waitq,
    atomic_read(&kn->active) == KN_DEACTIVATED_BIAS);

    Process #1120 is trying to online memory499 by
    echo 1 > memory499/online

    In .kernfs_fop_write, it uses kernfs_get_active() to increase
    &kn->active, thus blocking process #1141. While itself is blocked later
    when trying to acquire memory_hotplug_mutex, which is held by process

    The backtrace of both processes are shown below:

    [] 0xc000000001b18600
    [] .__switch_to+0x144/0x200
    [] .online_pages+0x74/0x7b0
    [] .memory_subsys_online+0x9c/0x150
    [] .device_online+0xb8/0x120
    [] .online_store+0xb4/0xc0
    [] .dev_attr_store+0x64/0xa0
    [] .sysfs_kf_write+0x7c/0xb0
    [] .kernfs_fop_write+0x154/0x1e0
    [] .vfs_write+0xe0/0x260
    [] .SyS_write+0x64/0x110
    [] syscall_exit+0x0/0x7c

    [] 0xc000000001b18600
    [] .__switch_to+0x144/0x200
    [] .__kernfs_remove+0x204/0x300
    [] .kernfs_remove_by_name_ns+0x68/0xf0
    [] .sysfs_remove_file_ns+0x38/0x60
    [] .device_remove_attrs+0x54/0xc0
    [] .device_del+0x158/0x250
    [] .device_unregister+0x34/0xa0
    [] .unregister_memory_section+0x164/0x170
    [] .__remove_pages+0x108/0x4c0
    [] .arch_remove_memory+0x60/0xc0
    [] .remove_memory+0x8c/0xe0
    [] .pseries_remove_memblock+0xd4/0x160
    [] .pseries_memory_notifier+0x27c/0x290
    [] .notifier_call_chain+0x8c/0x100
    [] .__blocking_notifier_call_chain+0x6c/0xe0
    [] .of_property_notify+0x7c/0xc0
    [] .of_update_property+0x3c/0x1b0
    [] .ofdt_write+0x3dc/0x740
    [] .proc_reg_write+0xac/0x110
    [] .vfs_write+0xe0/0x260
    [] .SyS_write+0x64/0x110
    [] syscall_exit+0x0/0x7c

    This patch uses lock_device_hotplug() to protect remove_memory() called
    in pseries_remove_memblock(), which is also stated before function
    remove_memory():

    * NOTE: The caller must call lock_device_hotplug() to serialize hotplug
    * and online/offline operations before this call, as required by
    * try_offline_node().
    */
    void __ref remove_memory(int nid, u64 start, u64 size)

    With this lock held, the other process(#1120 above) trying to online the
    memory block will retry the system call when calling
    lock_device_hotplug_sysfs(), and finally find No such device error.

    Signed-off-by: Li Zhong
    Signed-off-by: Benjamin Herrenschmidt

    Li Zhong
     
  • module_init should return 0 or a negative errno.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • Bump the boot wrapper BOOT_COMMAND_LINE_SIZE to match the
    kernel.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • I've had a report that the current limit is too small for
    an automated network based installer. Bump it.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • We have two definitions of COMMAND_LINE_SIZE, one for the kernel
    and one for the boot wrapper. I assume this is so the boot
    wrapper can be self sufficient and not rely on kernel headers.

    Having two defines with the same name is confusing, I just
    updated the wrong one when trying to bump it.

    Make the boot wrapper define unique by calling it
    BOOT_COMMAND_LINE_SIZE.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • The catalog version number was changed from a be32 (with proceeding
    32bits of padding) to a be64, update the code to treat it as a be64

    Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • fixup for "powerpc/perf: Add support for the hv gpci (get performance
    counter info) interface".

    Makes the "not enabled" message less awful (and hidden unless
    debugging).

    Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • fixup for "powerpc/perf: Add support for the hv 24x7 interface"

    Makes the "not enabled" message less awful (and hides it in most cases).

    Signed-off-by: Cody P Schafer
    Signed-off-by: Benjamin Herrenschmidt

    Cody P Schafer
     
  • The if condition check was based on a draft ISA doc. Remove the same.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Benjamin Herrenschmidt

    Aneesh Kumar K.V
     
  • Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • We have two copies of code that creates an OPAL sg list. Consolidate
    these into a common set of helpers and fix the endian issues.

    The flash interface embedded a version number in the num_entries
    field, whereas the dump interface did did not. Since versioning
    wasn't added to the flash interface and it is impossible to add
    this in a backwards compatible way, just remove it.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • Fix little endian issues with the OPAL error log code.

    Signed-off-by: Anton Blanchard
    Reviewed-by: Stewart Smith
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • The bitmap in opal_poll_events and opal_handle_interrupt is
    big endian, so we need to byteswap it on little endian builds.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • We had some duplication of the internal OPAL functions.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • Using size_t in our APIs is asking for trouble, especially
    when some OPAL calls use size_t pointers.

    Signed-off-by: Anton Blanchard
    Reviewed-by: Stewart Smith
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • On PowerNV platform, we are holding an unnecessary refcount on a pci_dev, which
    leads to the pci_dev is not destroyed when hotplugging a pci device.

    This patch release the unnecessary refcount.

    Signed-off-by: Wei Yang
    Signed-off-by: Benjamin Herrenschmidt

    Wei Yang
     
  • During the EEH hotplug event, iommu_add_device() will be invoked three times
    and two of them will trigger warning or error.

    The three times to invoke the iommu_add_device() are:

    pci_device_add
    ...
    set_iommu_table_base_and_group kobj->sd is not initialized. The
    dev->kobj->sd is initialized in device_add().
    The third time's warning is triggered by the re-attach of the iommu_group.

    After applying this patch, the error

    iommu_tce: 0003:05:00.0 has not been added, ret=-14

    and the warning

    [ 204.123609] ------------[ cut here ]------------
    [ 204.123645] WARNING: at arch/powerpc/kernel/iommu.c:1125
    [ 204.123680] Modules linked in: xt_CHECKSUM nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6t_REJECT bnep bluetooth 6lowpan_iphc rfkill xt_conntrack ebtable_nat ebtable_broute bridge stp llc mlx4_ib ib_sa ib_mad ib_core ib_addr ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security iptable_raw bnx2x tg3 mlx4_core nfsd ptp mdio ses libcrc32c nfs_acl enclosure be2net pps_core shpchp lockd kvm uinput sunrpc binfmt_misc lpfc scsi_transport_fc ipr scsi_tgt
    [ 204.124356] CPU: 18 PID: 650 Comm: eehd Not tainted 3.14.0-rc5yw+ #102
    [ 204.124400] task: c0000027ed485670 ti: c0000027ed50c000 task.ti: c0000027ed50c000
    [ 204.124453] NIP: c00000000003cf80 LR: c00000000006c648 CTR: c00000000006c5c0
    [ 204.124506] REGS: c0000027ed50f440 TRAP: 0700 Not tainted (3.14.0-rc5yw+)
    [ 204.124558] MSR: 9000000000029032 CR: 88008084 XER: 20000000
    [ 204.124682] CFAR: c00000000006c644 SOFTE: 1
    GPR00: c00000000006c648 c0000027ed50f6c0 c000000001398380 c0000027ec260300
    GPR04: c0000027ea92c000 c00000000006ad00 c0000000016e41b0 0000000000000110
    GPR08: c0000000012cd4c0 0000000000000001 c0000027ec2602ff 0000000000000062
    GPR12: 0000000028008084 c00000000fdca200 c0000000000d1d90 c0000027ec281a80
    GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    GPR20: 0000000000000000 0000000000000000 0000000000000000 0000000000000001
    GPR24: 000000005342697b 0000000000002906 c000001fe6ac9800 c000001fe6ac9800
    GPR28: 0000000000000000 c0000000016e3a80 c0000027ea92c090 c0000027ea92c000
    [ 204.125353] NIP [c00000000003cf80] .iommu_add_device+0x30/0x1f0
    [ 204.125399] LR [c00000000006c648] .pnv_pci_ioda_dma_dev_setup+0x88/0xb0
    [ 204.125443] Call Trace:
    [ 204.125464] [c0000027ed50f6c0] [c0000027ed50f750] 0xc0000027ed50f750 (unreliable)
    [ 204.125526] [c0000027ed50f750] [c00000000006c648] .pnv_pci_ioda_dma_dev_setup+0x88/0xb0
    [ 204.125588] [c0000027ed50f7d0] [c000000000069cc8] .pnv_pci_dma_dev_setup+0x78/0x340
    [ 204.125650] [c0000027ed50f870] [c000000000044408] .pcibios_setup_device+0x88/0x2f0
    [ 204.125712] [c0000027ed50f940] [c000000000046040] .pcibios_setup_bus_devices+0x60/0xd0
    [ 204.125774] [c0000027ed50f9c0] [c000000000043acc] .pcibios_add_pci_devices+0xdc/0x1c0
    [ 204.125837] [c0000027ed50fa50] [c00000000086f970] .eeh_reset_device+0x36c/0x4f0
    [ 204.125939] [c0000027ed50fb20] [c00000000003a2d8] .eeh_handle_normal_event+0x448/0x480
    [ 204.126068] [c0000027ed50fbc0] [c00000000003a35c] .eeh_handle_event+0x4c/0x340
    [ 204.126192] [c0000027ed50fc80] [c00000000003a74c] .eeh_event_handler+0xfc/0x1b0
    [ 204.126319] [c0000027ed50fd30] [c0000000000d1ea0] .kthread+0x110/0x130
    [ 204.126430] [c0000027ed50fe30] [c00000000000a460] .ret_from_kernel_thread+0x5c/0x7c
    [ 204.126556] Instruction dump:
    [ 204.126610] 7c0802a6 fba1ffe8 fbc1fff0 fbe1fff8 f8010010 f821ff71 7c7e1b78 60000000
    [ 204.126787] 60000000 e87e0298 3143ffff 7d2a1910 2fa90000 40de00c8 ebfe0218
    [ 204.126966] ---[ end trace 6e7aefd80add2973 ]---

    are cleared.

    This patch removes iommu_add_device() in pnv_pci_ioda_dma_dev_setup(), which
    revert part of the change in commit d905c5df(PPC: POWERNV: move
    iommu_add_device earlier).

    Signed-off-by: Wei Yang
    Signed-off-by: Benjamin Herrenschmidt

    Wei Yang