27 Mar, 2015

5 commits

  • This patch separates the PMU driver code from the low level
    CCI driver code and enables the PMU driver for ARM64.

    Introduces config options for both.

    ARM_CCI400_PORT_CTRL - controls the low level driver code for
    CCI400 ports.
    ARM_CCI400_PMU - controls the PMU driver code
    ARM_CCI400_COMMON - Common defintions for CCI400

    This patch also changes:
    ARM_CCI - common code for probing the CCI devices. This can be
    used for adding support for newer CCI versions(e.g, CCI-500).

    Cc: Bartlomiej Zolnierkiewicz
    Cc: Kukjin Kim
    Cc: Abhilash Kesavan
    Cc: Liviu Dudau
    Cc: Lorenzo Pieralisi
    Cc: Sudeep Holla
    Cc: Nicolas Pitre
    Cc: Punit Agrawal
    Acked-by: Sudeep Holla
    Acked-by: Nicolas Pitre
    Acked-by: Punit Agrawal
    Signed-off-by: Suzuki K. Poulose
    Signed-off-by: Will Deacon

    Suzuki K. Poulose
     
  • Avoid secure transactions while probing the CCI PMU. The
    existing code makes use of the Peripheral ID2 (PID2) register
    to determine the revision of the CCI400, which requires a
    secure transaction. This puts a limitation on the usage of the
    driver on systems running non-secure Linux(e.g, ARM64).

    Updated the device-tree binding for cci pmu node to add the explicit
    revision number for the compatible field.

    The supported strings are :
    arm,cci-400-pmu,r0
    arm,cci-400-pmu,r1
    arm,cci-400-pmu - DEPRECATED. See NOTE below

    NOTE: If the revision is not mentioned, we need to probe the cci revision,
    which could be fatal on a platform running non-secure. We need a reliable way
    to know if we can poke the CCI registers at runtime on ARM32. We depend on
    'mcpm_is_available()' when it is available. mcpm_is_available() returns true
    only when there is a registered driver for mcpm. Otherwise, we assume that we
    don't have secure access, and skips probing the revision number(ARM64 case).

    The MCPM should figure out if it is safe to access the CCI. Unfortunately
    there isn't a reliable way to indicate the same via dtb. This patch doesn't
    address/change the current situation. It only deals with the CCI-PMU, leaving
    the assumptions about the secure access as it has been, prior to this patch.

    Cc: devicetree@vger.kernel.org
    Cc: Punit Agrawal
    Tested-by: Sudeep Holla
    Acked-by: Nicolas Pitre
    Acked-by: Mark Rutland
    Signed-off-by: Suzuki K. Poulose
    Signed-off-by: Will Deacon

    Suzuki K. Poulose
     
  • CCI400 has different event specifications for PMU, for revsion
    0 and revision 1. As of now, we check the revision every single
    time before using the parameters for the PMU. This patch abstracts
    the details of the pmu models in a struct (cci_pmu_model) and
    stores the information in cci_pmu at initialisation time, avoiding
    multiple probe operations.

    Tested-by: Sudeep Holla
    Acked-by: Punit Agrawal
    Reviewed-by: Will Deacon
    Signed-off-by: Suzuki K. Poulose
    Signed-off-by: Will Deacon

    Suzuki K. Poulose
     
  • No functional changes, only code re-arrangements for easier split of the
    PMU code vs low level driver code. Extracts the port handling code
    to cci_probe_ports().

    Tested-by: Sudeep Holla
    Acked-by: Nicolas Pitre
    Acked-by: Punit Agrawal
    Signed-off-by: Suzuki K. Poulose
    Signed-off-by: Will Deacon

    Suzuki K. Poulose
     
  • The perf core implicitly rejects events spanning multiple HW PMUs, as in
    these cases the event->ctx will differ. However this validation is
    performed after pmu::event_init() is called in perf_init_event(), and
    thus pmu::event_init() may be called with a group leader from a
    different HW PMU.

    The CCI PMU driver does not take this fact into account, and assumes
    that the any other hardware event belongs to the CCI. There are two
    issues with it :

    1) It is wrong and we should reject such groups.
    2) Validation allocates an temporary idx for this non-cci event, which leads
    to wrong calculation of the counter availability, and eventually lesser
    number of events in the group.

    This patch updates the CCI PMU driver to first test for and reject
    events from other PMUs, which is the right thing to do.

    Cc: Will Deacon
    Acked-by: Mark Rutland
    Acked-by: Peter Ziljstra (Intel)
    Signed-off-by: Suzuki K. Poulose
    Signed-off-by: Will Deacon

    Suzuki K. Poulose
     

16 Mar, 2015

6 commits

  • Linus Torvalds
     
  • Pull drm fix from Dave Airlie:
    "An oops snuck in in an -rc3 patch, this fixes it"

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    [PATCH] drm/mm: Fix support 4 GiB and larger ranges

    Linus Torvalds
     
  • Pull clock framework fixes from Michael Turquette:
    "The clk fixes for 4.0-rc4 comprise three themes.

    First are the usual driver fixes for new regressions since v3.19.

    Second are fixes to the common clock divider type caused by recent
    changes to how we round clock rates. This affects many clock drivers
    that use this common code.

    Finally there are fixes for drivers that improperly compared struct
    clk pointers (drivers must not deref these pointers). While some of
    these drivers have done this for a long time, this did not cause a
    problem until we started generating unique struct clk pointers for
    every consumer. A new function, clk_is_match was introduced to get
    these drivers working again and they are fixed up to no longer deref
    the pointers themselves"

    * tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
    ASoC: kirkwood: fix struct clk pointer comparing
    ASoC: fsl_spdif: fix struct clk pointer comparing
    ARM: imx: fix struct clk pointer comparing
    clk: introduce clk_is_match
    clk: don't export static symbol
    clk: divider: fix calculation of initial best divider when rounding to closest
    clk: divider: fix selection of divider when rounding to closest
    clk: divider: fix calculation of maximal parent rate for a given divider
    clk: divider: return real rate instead of divider value
    clk: qcom: fix platform_no_drv_owner.cocci warnings
    clk: qcom: fix platform_no_drv_owner.cocci warnings
    clk: qcom: Add PLL4 vote clock
    clk: qcom: lcc-msm8960: Fix PLL rate detection
    clk: qcom: Fix slimbus n and m val offsets
    clk: ti: Fix FAPLL parent enable bit handling

    Linus Torvalds
     
  • bad argument if(tmp)... in check_free_hole

    fix oops: kernel BUG at drivers/gpu/drm/drm_mm.c:305!

    [airlied: excellent, this was my task for today].

    Signed-off-by: Krzysztof Kolasa
    Reviewed-by: Chris wilson
    Signed-off-by: Dave Airlie

    Krzysztof Kolasa
     
  • Pull ARM SoC fixes from Arnd Bergmann:
    "This is a rather unpleasantly large set of bug fixes for arm-soc, Most
    of them because of cross-tree dependencies for Exynos where we should
    have figured out the right path to merge things before the merge
    window, and then the maintainer being unable to sort things out in
    time during a business trip.

    The other changes contained here are the usual collection:

    MAINTAINERS file updates
    - Gregory Clement is now a co-maintainer for the legacy Marvell EBU
    platforms
    - A MAINTAINERS entry for the Freescale Vybrid platform that was
    added last year
    - Matt Porter no longer works as a maintainer on Broadcom SoCs

    Build-time issues
    - A compile-time error for at91
    - Several minor DT fixes on at91, imx, exynos, socfpga, and omap
    - The new digicolor platform was not correctly enabled at all

    Configuration issues
    - Two defconfig fix for regressions using USB on versatile express
    and on OMAP3
    - Enabling all 8 CPUs on Allwinner/SUNxi
    - Enabling the new STiH410 platform to be usable

    Bug fixes in platform code
    - A missing barrier for socfpga
    - Fixing LPDDR1 self-refresh mode on at91
    - Fixing RTC interrupt numbers on Exynos3250
    - Fixing a cache-coherency issues in CPU power-down on Exynos5
    - Multiple small OMAP power management fixes"

    * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (69 commits)
    MAINTAINERS: Add myself as co-maintainer to the legacy support of the mvebu SoCs
    ARM: at91: pm_slowclock: fix the compilation error
    ARM: at91/dt: fix USB high-speed clock to select UTMI
    ARM: at91/dt: fix at91 udc compatible strings
    ARM: at91/dt: declare matrix node as a syscon device
    ARM: vexpress: update CONFIG_USB_ISP1760 option
    ARM: digicolor: add the machine directory to Makefile
    ARM: STi: Add STiH410 SoC support
    MAINTAINERS: add Freescale Vybrid SoC
    MAINTAINERS: Remove self as ARM mach-bcm co-maintainer
    ARM: imx6sl-evk: set swbst_reg as vbus's parent reg
    ARM: imx6qdl-sabresd: set swbst_reg as vbus's parent reg
    ARM: at91/dt: at91sam9261: fix clocks and clock-names in udc definition
    ARM: OMAP2+: Fix wl12xx on dm3730-evm with mainline u-boot
    ARM: OMAP: enable TWL4030_USB in omap2plus_defconfig
    ARM: dts: dra7x-evm: avoid possible contention while muxing on CAN lines
    ARM: dts: dra7x-evm: Don't use dcan1_rx.gpio1_15 in DCAN pinctrl
    ARM: dts: am43xx: fix SLEWCTRL_FAST pinctrl binding
    ARM: dts: am33xx: fix SLEWCTRL_FAST pinctrl binding
    ARM: dts: OMAP5: fix polling intervals for thermal zones
    ...

    Linus Torvalds
     
  • Pull irqchip fixes from Jason Cooper:
    "armada-370-xp:
    - Chained per-cpu interrupts

    gic{,-v3,v3-its}"
    - Various fixes for safer operation"

    * tag 'irqchip-fixes-4.0' of git://git.infradead.org/users/jcooper/linux:
    irqchip: gicv3-its: Support safe initialization
    irqchip: gicv3-its: Define macros for GITS_CTLR fields
    irqchip: gicv3-its: Add limitation to page order
    irqchip: gicv3-its: Use 64KB page as default granule
    irqchip: gicv3-its: Zero itt before handling to hardware
    irqchip: gic-v3: Fix out of bounds access to cpu_logical_map
    irqchip: gic: Fix unsafe locking reported by lockdep
    irqchip: gicv3-its: Fix unsafe locking reported by lockdep
    irqchip: gicv3-its: Iterate over PCI aliases to generate ITS configuration
    irqchip: gicv3-its: Allocate enough memory for the full range of DeviceID
    irqchip: gicv3-its: Fix ITS CPU init
    irqchip: armada-370-xp: Fix chained per-cpu interrupts

    Linus Torvalds
     

15 Mar, 2015

7 commits


14 Mar, 2015

11 commits

  • It's possible that "fl" won't point at a valid lock at this point, so
    use "victim" instead which is either a valid lock or NULL.

    Signed-off-by: Jeff Layton

    Jeff Layton
     
  • Another one for the big head.S spring cleaning: the label should
    be after the .align or it may point to the padding.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Catalin Marinas

    Ard Biesheuvel
     
  • If UEFI Runtime Services are available, they are preferred over direct
    PSCI calls or other methods to reset the system.

    For the reset case, we need to hook into machine_restart(), as the
    arm_pm_restart function pointer may be overwritten by modules.

    Tested-by: Mark Rutland
    Reviewed-by: Mark Rutland
    Reviewed-by: Matt Fleming
    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Catalin Marinas

    Ard Biesheuvel
     
  • The ARM architecture allows the caching of intermediate page table
    levels and page table freeing requires a sequence like:

    pmd_clear()
    TLB invalidation
    pte page freeing

    With commit 5e5f6dc10546 (arm64: mm: enable HAVE_RCU_TABLE_FREE logic),
    the page table freeing batching was moved from tlb_remove_page() to
    tlb_remove_table(). The former takes care of TLB invalidation as this is
    also shared with pte clearing and page cache page freeing. The latter,
    however, does not invalidate the TLBs for intermediate page table levels
    as it probably relies on the architecture code to do it if required.
    When the mm->mm_users < 2, tlb_remove_table() does not do any batching
    and page table pages are freed before tlb_finish_mmu() which performs
    the actual TLB invalidation.

    This patch introduces __tlb_flush_pgtable() for arm64 and calls it from
    the {pte,pmd,pud}_free_tlb() directly without relying on deferred page
    table freeing.

    Fixes: 5e5f6dc10546 arm64: mm: enable HAVE_RCU_TABLE_FREE logic
    Reported-by: Jon Masters
    Tested-by: Jon Masters
    Tested-by: Steve Capper
    Signed-off-by: Catalin Marinas

    Catalin Marinas
     
  • Pull power management and ACPI fixes from Rafael Wysocki:
    "Just two fixes, one for an ACPI LPSS driver issue introduced during
    the 3.17 cycle and one revert of a recent commit that sort of broke
    the cpupower tool.

    Specifics:

    - Fix an ACPI LPSS (Low-Power Subsystem) driver issue causing the
    8250_dw driver to confuse an LPSS clock with another one it is
    supposed to handle due to the lack of identification allowing it to
    tell those clocks apart (Heikki Krogerus).

    - Revert a recent commit that was supposed to improve the usability
    of the cpupower tool, but clearly did the opposite (Josh Boyer)"

    * tag 'pm+acpi-4.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    Revert "cpupower Makefile change to help run the tool without 'make install'"
    ACPI / LPSS: provide con_id for the clkdev

    Linus Torvalds
     
  • I will also take care of the legacy support(not fully converted to DT)
    of the mvebu SoCs.

    Signed-off-by: Gregory CLEMENT
    Acked-by: Andrew Lunn
    Acked-by: Jason Cooper
    Signed-off-by: Arnd Bergmann

    Gregory CLEMENT
     
  • * pm-tools:
    Revert "cpupower Makefile change to help run the tool without 'make install'"

    Rafael J. Wysocki
     
  • Pull xen bug fixes from David Vrabel:

    - fix a PV regression in 3.19.

    - fix a dom0 crash on hosts with large numbers of PIRQs.

    - prevent pcifront from disabling memory or I/O port access, which may
    trigger host crashes.

    * tag 'stable/for-linus-4.0-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
    xen-pciback: limit guest control of command register
    xen/events: avoid NULL pointer dereference in dom0 on large machines
    xen: Remove trailing semicolon from xenbus_register_frontend() definition
    x86/xen: correct bug in p2m list initialization

    Linus Torvalds
     
  • Pull sound fixes from Takashi Iwai:
    "This is a round of HD-audio fixes: there are a long-standing
    regression fix and a few more device/codec-specific quirks.

    In addition, a couple of FireWire regression fixes, a USB-audio quirk
    for Roland UA-22 and a sanity check in API for user-defined control
    elements"

    * tag 'sound-4.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda - Don't access stereo amps for mono channel widgets
    ALSA: hda - Add workaround for MacBook Air 5,2 built-in mic
    ALSA: hda - Set single_adc_amp flag for CS420x codecs
    ALSA: snd-usb: add quirks for Roland UA-22
    ALSA: control: Add sanity checks for user ctl id name string
    ALSA: hda - Fix built-in mic on Compaq Presario CQ60
    ALSA: firewire-lib: leave unit reference counting completely
    Revert "ALSA: dice: fix wrong offsets for Dice interface"
    ALSA: hda - Fix regression of HD-audio controller fallback modes

    Linus Torvalds
     
  • Pull DeviceTree fixes from Rob Herring:

    - fix for stdout-path option parsing with added unittest

    - fix for stdout-path interaction with earlycon

    - several DT unittest fixes

    - fix Sparc allmodconfig build error on of_platform_register_reconfig_notifier

    - several DT overlay kconfig and build warning fixes

    - several DT binding documentation updates

    * tag 'devicetree-fixes-for-4.0' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
    of/platform: Fix sparc:allmodconfig build
    of: unittest: Add options string testcase variants
    of: fix handling of '/' in options for of_find_node_by_path()
    of/unittest: Fix the wrong expected value in of_selftest_property_string
    of/unittest: remove the duplicate of_changeset_init
    dt: submitting-patches: clarify that DT maintainers are to be cced on bindings
    of: unittest: fix I2C dependency
    of/overlay: Remove unused variable
    Documentation: DT: Renamed of-serial.txt to 8250.txt
    of: Fix premature bootconsole disable with 'stdout-path'
    serial: add device tree binding documentation for ETRAX FS UART
    of/overlay: Directly include idr.h
    of: Drop superfluous dependance for OF_OVERLAY
    of: Add vendor prefix for Arasan
    of: Add prompt for OF_OVERLAY config

    Linus Torvalds
     
  • Pull gadgetfs fixes from Al Viro:
    "Assorted fixes around AIO on gadgetfs: leaks, use-after-free, troubles
    caused by ->f_op flipping"

    * 'gadget' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    gadgetfs: really get rid of switching ->f_op
    gadgetfs: get rid of flipping ->f_op in ep_config()
    gadget: switch ep_io_operations to ->read_iter/->write_iter
    gadgetfs: use-after-free in ->aio_read()
    gadget/function/f_fs.c: switch to ->{read,write}_iter()
    gadget/function/f_fs.c: use put iov_iter into io_data
    gadget/function/f_fs.c: close leaks
    move iov_iter.c from mm/ to lib/
    new helper: dup_iter()

    Linus Torvalds
     

13 Mar, 2015

11 commits

  • sparc:allmodconfig fails to build with:

    drivers/built-in.o: In function `platform_bus_init':
    (.init.text+0x3684): undefined reference to `of_platform_register_reconfig_notifier'

    of_platform_register_reconfig_notifier is only declared if both OF_ADDRESS
    and OF_DYNAMIC are configured. Yet, the include file only declares a dummy
    function if OF_DYNAMIC is not configured. The sparc architecture does not
    configure OF_ADDRESS, but does configure OF_DYNAMIC, causing above error.

    Fixes: 801d728c10db ("of/reconfig: Add OF_DYNAMIC notifier for platform_bus_type")
    Cc: Pantelis Antoniou
    Signed-off-by: Guenter Roeck
    Signed-off-by: Rob Herring

    Guenter Roeck
     
  • The current HDA generic parser initializes / modifies the amp values
    always in stereo, but this seems causing the problem on ALC3229 codec
    that has a few mono channel widgets: namely, these mono widgets react
    to actions for both channels equally.

    In the driver code, we do care the mono channel and create a control
    only for the left channel (as defined in HD-audio spec) for such a
    node. When the control is updated, only the left channel value is
    changed. However, in the resume, the right channel value is also
    restored from the initial value we took as stereo, and this overwrites
    the left channel value. This ends up being the silent output as the
    right channel has been never touched and remains muted.

    This patch covers the places where unconditional stereo amp accesses
    are done and converts to the conditional accesses.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=94581
    Cc:
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Merge misc fixes from Andrew Morton:
    "13 fixes"

    * emailed patches from Andrew Morton :
    memcg: disable hierarchy support if bound to the legacy cgroup hierarchy
    mm: reorder can_do_mlock to fix audit denial
    kasan, module: move MODULE_ALIGN macro into
    kasan, module, vmalloc: rework shadow allocation for modules
    fanotify: fix event filtering with FAN_ONDIR set
    mm/nommu.c: export symbol max_mapnr
    arch/c6x/include/asm/pgtable.h: define dummy pgprot_writecombine for !MMU
    nilfs2: fix deadlock of segment constructor during recovery
    mm: cma: fix CMA aligned offset calculation
    mm, hugetlb: close race when setting PageTail for gigantic pages
    mm, oom: do not fail __GFP_NOFAIL allocation if oom killer is disabled
    drivers/rtc/rtc-s3c.c: add .needs_src_clk to s3c6410 RTC data
    ocfs2: make append_dio an incompat feature

    Linus Torvalds
     
  • If the memory cgroup controller is initially mounted in the scope of the
    default cgroup hierarchy and then remounted to a legacy hierarchy, it will
    still have hierarchy support enabled, which is incorrect. We should
    disable hierarchy support if bound to the legacy cgroup hierarchy.

    Signed-off-by: Vladimir Davydov
    Signed-off-by: Johannes Weiner
    Acked-by: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vladimir Davydov
     
  • A userspace call to mmap(MAP_LOCKED) may result in the successful locking
    of memory while also producing a confusing audit log denial. can_do_mlock
    checks capable and rlimit. If either of these return positive
    can_do_mlock returns true. The capable check leads to an LSM hook used by
    apparmour and selinux which produce the audit denial. Reordering so
    rlimit is checked first eliminates the denial on success, only recording a
    denial when the lock is unsuccessful as a result of the denial.

    Signed-off-by: Jeff Vander Stoep
    Acked-by: Nick Kralevich
    Cc: Jeff Vander Stoep
    Cc: Sasha Levin
    Cc: "Paul E. McKenney"
    Cc: Rik van Riel
    Cc: Vlastimil Babka
    Cc: Paul Cassella
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Vander Stoep
     
  • include/linux/moduleloader.h is more suitable place for this macro.
    Also change alignment to PAGE_SIZE for CONFIG_KASAN=n as such
    alignment already assumed in several places.

    Signed-off-by: Andrey Ryabinin
    Cc: Dmitry Vyukov
    Acked-by: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrey Ryabinin
     
  • Current approach in handling shadow memory for modules is broken.

    Shadow memory could be freed only after memory shadow corresponds it is no
    longer used. vfree() called from interrupt context could use memory its
    freeing to store 'struct llist_node' in it:

    void vfree(const void *addr)
    {
    ...
    if (unlikely(in_interrupt())) {
    struct vfree_deferred *p = this_cpu_ptr(&vfree_deferred);
    if (llist_add((struct llist_node *)addr, &p->list))
    schedule_work(&p->wq);

    Later this list node used in free_work() which actually frees memory.
    Currently module_memfree() called in interrupt context will free shadow
    before freeing module's memory which could provoke kernel crash.

    So shadow memory should be freed after module's memory. However, such
    deallocation order could race with kasan_module_alloc() in module_alloc().

    Free shadow right before releasing vm area. At this point vfree()'d
    memory is not used anymore and yet not available for other allocations.
    New VM_KASAN flag used to indicate that vm area has dynamically allocated
    shadow memory so kasan frees shadow only if it was previously allocated.

    Signed-off-by: Andrey Ryabinin
    Acked-by: Rusty Russell
    Cc: Dmitry Vyukov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrey Ryabinin
     
  • With FAN_ONDIR set, the user can end up getting events, which it hasn't
    marked. This was revealed with fanotify04 testcase failure on
    Linux-4.0-rc1, and is a regression from 3.19, revealed with 66ba93c0d7fe6
    ("fanotify: don't set FAN_ONDIR implicitly on a marks ignored mask").

    # /opt/ltp/testcases/bin/fanotify04
    [ ... ]
    fanotify04 7 TPASS : event generated properly for type 100000
    fanotify04 8 TFAIL : fanotify04.c:147: got unexpected event 30
    fanotify04 9 TPASS : No event as expected

    The testcase sets the adds the following marks : FAN_OPEN | FAN_ONDIR for
    a fanotify on a dir. Then does an open(), followed by close() of the
    directory and expects to see an event FAN_OPEN(0x20). However, the
    fanotify returns (FAN_OPEN|FAN_CLOSE_NOWRITE(0x10)). This happens due to
    the flaw in the check for event_mask in fanotify_should_send_event() which
    does:

    if (event_mask & marks_mask & ~marks_ignored_mask)
    return true;

    where, event_mask == (FAN_ONDIR | FAN_CLOSE_NOWRITE),
    marks_mask == (FAN_ONDIR | FAN_OPEN),
    marks_ignored_mask == 0

    Fix this by masking the outgoing events to the user, as we already take
    care of FAN_ONDIR and FAN_EVENT_ON_CHILD.

    Signed-off-by: Suzuki K. Poulose
    Tested-by: Lino Sanfilippo
    Reviewed-by: Jan Kara
    Cc: Eric Paris
    Cc: Will Deacon

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

    Suzuki K. Poulose
     
  • Several modules may need max_mapnr, so export, the related error with
    allmodconfig under c6x:

    MODPOST 3327 modules
    ERROR: "max_mapnr" [fs/pstore/ramoops.ko] undefined!
    ERROR: "max_mapnr" [drivers/media/v4l2-core/videobuf2-dma-contig.ko] undefined!

    Signed-off-by: Chen Gang
    Cc: Mark Salter
    Cc: Aurelien Jacquiot
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    gchen gchen
     
  • When !MMU, asm-generic will not define default pgprot_writecombine, so c6x
    needs to define it by itself. The related error:

    CC [M] fs/pstore/ram_core.o
    fs/pstore/ram_core.c: In function 'persistent_ram_vmap':
    fs/pstore/ram_core.c:399:10: error: implicit declaration of function 'pgprot_writecombine' [-Werror=implicit-function-declaration]
    prot = pgprot_writecombine(PAGE_KERNEL);
    ^
    fs/pstore/ram_core.c:399:8: error: incompatible types when assigning to type 'pgprot_t {aka struct }' from type 'int'
    prot = pgprot_writecombine(PAGE_KERNEL);
    ^

    Signed-off-by: Chen Gang
    Cc: Mark Salter
    Cc: Aurelien Jacquiot
    Cc: "Kirill A. Shutemov"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chen Gang
     
  • According to a report from Yuxuan Shui, nilfs2 in kernel 3.19 got stuck
    during recovery at mount time. The code path that caused the deadlock was
    as follows:

    nilfs_fill_super()
    load_nilfs()
    nilfs_salvage_orphan_logs()
    * Do roll-forwarding, attach segment constructor for recovery,
    and kick it.

    nilfs_segctor_thread()
    nilfs_segctor_thread_construct()
    * A lock is held with nilfs_transaction_lock()
    nilfs_segctor_do_construct()
    nilfs_segctor_drop_written_files()
    iput()
    iput_final()
    write_inode_now()
    writeback_single_inode()
    __writeback_single_inode()
    do_writepages()
    nilfs_writepage()
    nilfs_construct_dsync_segment()
    nilfs_transaction_lock() --> deadlock

    This can happen if commit 7ef3ff2fea8b ("nilfs2: fix deadlock of segment
    constructor over I_SYNC flag") is applied and roll-forward recovery was
    performed at mount time. The roll-forward recovery can happen if datasync
    write is done and the file system crashes immediately after that. For
    instance, we can reproduce the issue with the following steps:

    < nilfs2 is mounted on /nilfs (device: /dev/sdb1) >
    # dd if=/dev/zero of=/nilfs/test bs=4k count=1 && sync
    # dd if=/dev/zero of=/nilfs/test conv=notrunc oflag=dsync bs=4k
    count=1 && reboot -nfh
    < the system will immediately reboot >
    # mount -t nilfs2 /dev/sdb1 /nilfs

    The deadlock occurs because iput() can run segment constructor through
    writeback_single_inode() if MS_ACTIVE flag is not set on sb->s_flags. The
    above commit changed segment constructor so that it calls iput()
    asynchronously for inodes with i_nlink == 0, but that change was
    imperfect.

    This fixes the another deadlock by deferring iput() in segment constructor
    even for the case that mount is not finished, that is, for the case that
    MS_ACTIVE flag is not set.

    Signed-off-by: Ryusuke Konishi
    Reported-by: Yuxuan Shui
    Tested-by: Ryusuke Konishi
    Cc: Al Viro
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ryusuke Konishi