Commit Graph

160 Commits

Author SHA1 Message Date
Ard Biesheuvel 7010a322f1 arm64: switch to relative exception tables
Instead of using absolute addresses for both the exception location
and the fixup, use offsets relative to the exception table entry values.
Not only does this cut the size of the exception table in half, it is
also a prerequisite for KASLR, since absolute exception table entries
are subject to dynamic relocation, which is incompatible with the sorting
of the exception table that occurs at build time.

This patch also introduces the _ASM_EXTABLE preprocessor macro (which
exists on x86 as well) and its _asm_extable assembly counterpart, as
shorthands to emit exception table entries.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Joe Maples <joe@frap129.org>
2019-08-26 14:20:51 +02:00
Nathan Chancellor 13d66b7b49
arm64: mm: Update backport
Since we have commit 118793e20d ("arm64: barriers: make use of
barrier options with explicit barriers"), we can use the mainline
version of commit c8f487a49a ("arm64: mm: ensure that the zero page
is visible to the page table walker").

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-01-25 17:06:34 -07:00
Nathan Chancellor 5f010c6c0b This is the 3.10.96 stable release
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJWqv2IAAoJEDjbvchgkmk+180QAKqYrypT3cyClNOHGRFRaxID
 Sxo8S9tr8apxaIeP/nfZH3fYXyoadKBwxet15PNYwGVex3jBIVO0M0kspNPu9guG
 ogM0hf558EiWpdN5kydwCyN2ukJkhPP9r1ZQ5T84UcqflIboLDYXksqW1w8JX7wm
 dumt8kbbnN42e9S1bXD79CRaBB+dkNBTg0fdfpCi7pOQvUQD9DAs/j6XM1ZkOouX
 P+/vnIWbRwzbVqlJSaWNfBotlNsydosazJD9lg8iFIRDpVGJPKYbDMP2MPpyrmyA
 mesNRIy0wD9cixXW6jMS3fkSOY27N5hZIYYVPWQ8vfCcooTej4GHw37C7Inlh8z6
 iWf/sy1Hu+vniJKAr0BD86ocZxnaMv//BQtwCJZv3TfuQ93QkaRmEznEnCHYGN4M
 thoaS7oYGfrJnsHKkh913Kr3K7QuvyFttOE058PloYzJbCPV+YVRa/UGyuR6qOCl
 SbuSMXDdUDcf/Wznr6S6p6T2GIfM8GYvfm7hzIYwHpClCQpDR3lRdonDAg82mdMh
 YCNbEZQ32+l8idBX/YG97MskMD869237yh4MLUUWoxLTbevAblkYSt81WuDO4Gya
 PcWcB+zH4t2Y25W9yVoTKmaJSJPhT4ngNFSy7V8zKgVG2Vmz4YIuLRhd6N2/fGcd
 FVSXw7uHZhrn+SEl+L6W
 =tiwo
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEJDfLduVEy2qz2d/TmXOSYMtstxYFAlpqcPkACgkQmXOSYMts
 txZ4uw/9Hej/LcL0HWcjPVYvTS/aESazHijvR4eX/nQwC5d01JjVprP63xk58W5W
 qv/6hobuEiS/L3nlvTEleQ+NXmEFnt0SXme5bBYHl/BeWwHSd5fPQpOcPm/Wul39
 L1SuaNcLkf/+dW8asr5X6R0zUrPRaUhAmIwaRy79u/vr/tdJoTygAt5xRWxYZYLT
 etUYPpZPKNm5UVZ0Zb0ppJlTrQWJPRpuhsM9hXoL37fPOk7yDbXXzmfo4VkHrFVm
 8RM7PZIa4rVkN6rH2cZyH3aPj11CRB2VHe09Zj/by86rgXFEbccO70MwPoE66w4Z
 Q7rdAo6rx0MErcTAp/zx27IcFiQD9xfeDqbWG8By5CwaEACu2PwW2jl4FTy4UY2B
 sFX05SKFnJE/tWuQCictvlJ2QMIoJCb5VLv3bjmaco2/hnrn2aPvfMReXVthWXlx
 WkUNw9LoP8f4OC2v6I+SnliN9QM1JBQ3u2cEEF2ul8wksPFsRTBUqQhXtdoUFexO
 TThtRmSkpbXe8ZHIaIFVnQWiUO28Z50lkZo+axLH+soxNVWUJD2MgzjKMLj70a9k
 2PR9gZIC9UBLGtnQm3hWommFFWCCUhfGtnWY77SRrE5CuyI00c4qmWAQRfFpa+nM
 1DWw8fIv9w7t+RJ+xxs3umwXcwBKQ8EMUMsyZhnvoFgFqy93ZYg=
 =QpjP
 -----END PGP SIGNATURE-----

Merge 3.10.96 into android-msm-bullhead-3.10-oreo-m5

Changes in 3.10.96: (54 commits)
        af_unix: fix incorrect revert of 'lock_interruptible' in stream receive code
        x86/signal: Fix restart_syscall number for x32 tasks
        xen/gntdev: Grant maps should not be subject to NUMA balancing
        x86/xen: don't reset vcpu_info on a cancelled suspend
        KVM: PPC: Book3S HV: Prohibit setting illegal transaction state in MSR
        x86/reboot/quirks: Add iMac10,1 to pci_reboot_dmi_table[]
        x86/boot: Double BOOT_HEAP_SIZE to 64KB
        ipmi: move timer init to before irq is setup
        ALSA: hda - Add Intel Lewisburg device IDs Audio
        ALSA: hda - Apply pin fixup for HP ProBook 6550b
        ALSA: rme96: Fix unexpected volume reset after rate changes
        ALSA: hda - Add inverted dmic for Packard Bell DOTS
        ALSA: hda - Set SKL+ hda controller power at freeze() and thaw()
        ALSA: hda/realtek - Fix silent headphone output on MacPro 4,1 (v2)
        ALSA: seq: Fix missing NULL check at remove_events ioctl
        ALSA: seq: Fix race at timer setup and close
        ALSA: timer: Harden slave timer list handling
        ALSA: timer: Fix race among timer ioctls
        ALSA: timer: Fix double unlink of active_list
        ALSA: seq: Fix snd_seq_call_port_info_ioctl in compat mode
        ALSA: pcm: Fix snd_pcm_hw_params struct copy in compat mode
        ALSA: hrtimer: Fix stall by hrtimer_cancel()
        ALSA: control: Avoid kernel warnings from tlv ioctl with numid 0
        ASoC: wm8962: correct addresses for HPF_C_0/1
        ASoC: arizona: Fix bclk for sample rates that are multiple of 4kHz
        ASoC: compress: Fix compress device direction check
        usb: xhci: fix config fail of FS hub behind a HS hub with MTT
        USB: ipaq.c: fix a timeout loop
        USB: cp210x: add ID for ELV Marble Sound Board 1
        xhci: refuse loading if nousb is used
        veth: don’t modify ip_summed; doing so treats packets with bad checksums as good.
        ipv6/addrlabel: fix ip6addrlbl_get()
        sctp: sctp should release assoc when sctp_make_abort_user return NULL in sctp_close
        connector: bump skb->users before callback invocation
        unix: properly account for FDs passed over unix sockets
        bridge: Only call /sbin/bridge-stp for the initial network namespace
        net: possible use after free in dst_release
        tcp_yeah: don't set ssthresh below 2
        phonet: properly unshare skbs in phonet_rcv()
        isdn_ppp: Add checks for allocation failure in isdn_ppp_open()
        ppp, slip: Validate VJ compression slot parameters completely
        team: Replace rcu_read_lock with a mutex in team_vlan_rx_kill_vid
        powerpc/tm: Block signal return setting invalid MSR state
        powerpc: Make value-returning atomics fully ordered
        powerpc: Make {cmp}xchg* and their atomic_ versions fully ordered
        scripts/recordmcount.pl: support data in text section on powerpc
        arm64: fix building without CONFIG_UID16
        arm64: Clear out any singlestep state on a ptrace detach operation
        arm64: mm: ensure that the zero page is visible to the page table walker
        parisc iommu: fix panic due to trying to allocate too large region
        HID: core: Avoid uninitialized buffer access
        openrisc: fix CONFIG_UID16 setting
        mn10300: Select CONFIG_HAVE_UID16 to fix build failure
        Linux 3.10.96

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	arch/mn10300/Kconfig
	sound/core/timer.c
2018-01-25 17:06:17 -07:00
Nathan Chancellor f55d0eed2e This is the 3.10.85 stable release
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJVv5fSAAoJEDjbvchgkmk+cCEP/08rxgFQc0/T4NHeojs8WJHm
 lJKa+EqW9zEPiuCQ9b+MpXHHnvvwCLQ/aSW0f4kg6795jXW9xmea0iUDiGHV8sck
 3M6Mg4rnrpOxfDUQYf6n1ajOGCtyCunjbekSD+qt5+gyjmj7Zn1xU+1iuyvaFouY
 mnEH5VdBpOLkYLLH5mz996yFi95cSUrXUDNWEybUG0ce+T5rAPmwrzoqs6VAQ+8f
 sPHYtWCY1Rdnww203L02Ske57GXk/yikEbEqTruVjg4i43XANfMUOYPZ6gfQV12J
 Rzfb54XhXkMfgH5BYirKcAy3h/CMqw0AlxRWazyrJGshSIlw4Ftznrr1q9ba2720
 4haXDmc5apJ0FG1Xl63+zhpQvJgKPAJ/BrFUqM7nQC4+IkcWNGfslygJCUcnoizT
 SlmohUSYyeFZtqKtr5uO7FIVP6M73g7ZBDGOgWjWXTuFlqVCEM+14Tn/2acIBuBU
 R5/c+ZNEjm/XQXHdHJIPNztG+hDxhHTrCtG8MwVabC+/2IjMyzJZFctEErKC7jI4
 +n4TG2SfU06ypVHFRmhCc7xRrC29W0GYQ2nMgWVslL2E2cT3ttZeQA0osOT7vvtO
 CgNZFub/bWXvhh9yeKeWr2tRijCcnjH4tK0Tf9SuY+JYz3lIkQb9MdaScuZKxl2g
 mwDqJkXxXNwaNI6KeL09
 =OvlT
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEJDfLduVEy2qz2d/TmXOSYMtstxYFAlpqbtgACgkQmXOSYMts
 txZsgQ/6AsdHDYDrjM4MPw0EGej1oLq3QlYuCfRSFhtPYVPimDZJ7uc+8s5Cx143
 M1ifgn9ZFXhteg0sMnwbV410CXaqc/4WZWnj0yMpTsP/SoMWPs/3gJhc+9wYnFvD
 nP95ykDsH/vXlMyLjreQTZaRRhUWhMjJ8zTkzC+HaPw71B6k+KKBDEwdkxgu8u7p
 TihWxAjqKULv41on088TdzX33lBsFD57z9JASjC27gxtlxBdYZsU3ZR1LiYHrXSb
 Mc9CiETcj7reBQZzLo+IkLQK5S3WxMo/wMAUGh+20i4iEn07HGymsSgg1YsjtJ/a
 aSmnqwPnGdcipM+RY0G4pGV4bit6OUp5La32rXnFGpp7JTYebp3C5f2NJGs/I7HY
 KVwhmbS9lfHA8fpS6IG/WF/by9DsR/VTenBkCX3sQ3fggnkmIDceVv+TdnaITik0
 /edZYK3vhENXfzeP1ZzpxE5husF9s63RwoStMvrEJot406KN72EBkrXcr0r2Jx/t
 gzq+HSua929RjwE6MNMRMXPgGZA0if7JoWMXnBVHfWDFzvjgq68nI406imPN4ENM
 kPJhclaHI+sgedO3PXlmnVSa44re37PQlUlQkmGGJjIRjWeI/GOC78+StDvRiJnn
 4rj30RgwOJPvYTCpFPCjwNlkBlBPw79XiHaqIR5uU7uMCqhZ4E4=
 =xdrR
 -----END PGP SIGNATURE-----

Merge 3.10.85 into android-msm-bullhead-3.10-oreo-m5

Changes in 3.10.85: (90 commits)
        ipr: Increase default adapter init stage change timeout
        Disable write buffering on Toshiba ToPIC95
        ALSA: hda - Add headset support to Acer Aspire V5
        ALSA: hda - Fix the dock headphone output on Fujitsu Lifebook E780
        ARC: add compiler barrier to LLSC based cmpxchg
        arm64: Do not attempt to use init_mm in reset_context()
        arm64: mm: Fix freeing of the wrong memmap entries with !SPARSEMEM_VMEMMAP
        arm64: vdso: work-around broken ELF toolchains in Makefile
        cpuidle / menu: Return (-1) if there are no suitable states
        regmap: Fix regmap_bulk_read in BE mode
        regulator: core: fix constraints output buffer
        spi: pl022: Specify 'num-cs' property as required in devicetree binding
        mtd: fix: avoid race condition when accessing mtd->usecount
        mtd: dc21285: use raw spinlock functions for nw_gpio_lock
        pinctrl: mvebu: armada-370: fix spi0 pin description
        pinctrl: mvebu: armada-xp: remove non-existing NAND pins
        pinctrl: mvebu: armada-xp: remove non-existing VDD cpu_pd functions
        pinctrl: mvebu: armada-xp: fix functions of MPP48
        Bluetooth: btusb: Fix memory leak in Intel setup routine
        ath9k: fix DMA stop sequence for AR9003+
        staging: rtl8712: prevent buffer overrun in recvbuf2recvframe
        ext4: fix race between truncate and __ext4_journalled_writepage()
        ext4: call sync_blockdev() before invalidate_bdev() in put_super()
        ext4: don't retry file block mapping on bigalloc fs with non-extent file
        ext4: fix reservation release on invalidatepage for delalloc fs
        ext4: be more strict when migrating to non-extent based file
        ext4: correctly migrate a file with a hole at the beginning
        ext4: replace open coded nofail allocation in ext4_free_blocks()
        jbd2: use GFP_NOFS in jbd2_cleanup_journal_tail()
        jbd2: fix ocfs2 corrupt when updating journal superblock fails
        i2c: at91: fix a race condition when using the DMA controller
        iio: DAC: ad5624r_spi: fix bit shift of output data value
        af9013: Don't accept invalid bandwidth
        s5h1420: fix a buffer overflow when checking userspace params
        cx24116: fix a buffer overflow when checking userspace params
        ASoC: wm8737: Fixup setting VMID Impedance control register
        ASoC: wm8955: Fix setting wrong register for WM8955_K_8_0_MASK bits
        ASoC: wm8903: Fix define for WM8903_VMID_RES_250K
        ASoC: wm8960: the enum of "DAC Polarity" should be wm8960_enum[1]
        libata: add ATA_HORKAGE_BROKEN_FPDMA_AA quirk for HP 250GB SATA disk VB0250EAVER
        libata: increase the timeout when setting transfer mode
        usb: dwc3: gadget: return error if command sent to DGCMD register fails
        usb: dwc3: gadget: return error if command sent to DEPCMD register fails
        usb: dwc3: Reset the transfer resource index on SET_INTERFACE
        USB: devio: fix a condition in async_completed()
        USB: cp210x: add ID for Aruba Networks controllers
        USB: option: add 2020:4000 ID
        usb: xhci: Bugfix for NULL pointer deference in xhci_endpoint_init() function
        dm btree remove: fix bug in redistribute3
        dm btree: silence lockdep lock inversion in dm_btree_del()
        mmc: block: Add missing mmc_blk_put() in power_ro_lock_show()
        drm/qxl: Do not cause spice-server to clean our objects
        drm/radeon: take the mode_config mutex when dealing with hpds (v2)
        drm/radeon: Don't flush the GART TLB if rdev->gart.ptr == NULL
        drm: add a check for x/y in drm_mode_setcrtc
        xfs: fix remote symlinks on V5/CRC filesystems
        vTPM: set virtual device before passing to ibmvtpm_reset_crq
        libata: add ATA_HORKAGE_NOTRIM
        libata: force disable trim for SuperSSpeed S238
        tracing/filter: Do not WARN on operand count going below zero
        tracing/filter: Do not allow infix to exceed end of string
        tracing: Have branch tracer use recursive field of task struct
        dmaengine: mv_xor: bug fix for racing condition in descriptors cleanup
        hwmon: (mcp3021) Fix broken output scaling
        md: fix a build warning
        Btrfs: use kmem_cache_free when freeing entry in inode cache
        fuse: initialize fc->release before calling it
        crush: fix a bug in tree bucket decode
        ACPICA: Tables: Fix an issue that FACS initialization is performed twice
        iscsi-target: Convert iscsi_thread_set usage to kthread.h
        iser-target: Fix possible deadlock in RDMA_CM connection error
        iser-target: release stale iser connections
        mmc: card: Fixup request missing in mmc_blk_issue_rw_rq
        __bitmap_parselist: fix bug in empty string handling
        mac80211: prevent possible crypto tx tailroom corruption
        USB: usbfs: allow URBs to be reaped after disconnection
        watchdog: omap: assert the counter being stopped before reprogramming
        NFS: Fix size of NFSACL SETACL operations
        fixing infinite OPEN loop in 4.0 stateid recovery
        nfs: increase size of EXCHANGE_ID name string buffer
        SUNRPC: Fix a memory leak in the backchannel code
        9p: forgetting to cancel request on interrupted zero-copy RPC
        9p: don't leave a half-initialized inode sitting around
        rbd: use GFP_NOIO in rbd_obj_request_create()
        agp/intel: Fix typo in needs_ilk_vtd_wa()
        hpfs: hpfs_error: Remove static buffer, use vsprintf extension %pV instead
        Fix firmware loader uevent buffer NULL pointer dereference
        qla2xxx: Mark port lost when we receive an RSCN for it.
        MIPS: KVM: Do not sign extend on unsigned MMIO load
        Linux 3.10.85

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	drivers/usb/dwc3/gadget.c
2018-01-25 16:57:12 -07:00
Marek Szyprowski 6a40b4a821 arm64: dma-mapping: always clear allocated buffers
[ Upstream commit 6829e274a623187c24f7cfc0e3d35f25d087fcc5 ]

Buffers allocated by dma_alloc_coherent() are always zeroed on Alpha,
ARM (32bit), MIPS, PowerPC, x86/x86_64 and probably other architectures.
It turned out that some drivers rely on this 'feature'. Allocated buffer
might be also exposed to userspace with dma_mmap() call, so clearing it
is desired from security point of view to avoid exposing random memory
to userspace. This patch unifies dma_alloc_coherent() behavior on ARM64
architecture with other implementations by unconditionally zeroing
allocated buffer.

Bug: 29795245
CRs-Fixed: 1041735
Change-Id: I74bf024e0f603ca8c0b05430dc2ee154d579cfb2
Cc: <stable@vger.kernel.org> # v3.14+
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Git-commit: a142e9641dcbead2c8845c949ad518acac96ed28
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
[lmark@codeaurora.org: resolve merge conflicts]
Signed-off-by: Liam Mark <lmark@codeaurora.org>
2016-08-19 23:39:16 +00:00
Patrick Tjin 4015feb8d9 Revert "arm64: Allow cache maintenance operations to trigger write faults"
This reverts commit 3fbe6bc28a.

Bug: 27265969
Change-Id: I4f855ba1f640247aad172b9ef4160a4d298370d4
Signed-off-by: Patrick Tjin <pattjin@google.com>
2016-07-29 14:28:08 -07:00
Thierry Strudel 11afac3e2c Revert "arm64: Introduce execute-only page access permissions"
This reverts commit f72129c220.

Bug: 28557020
Change-Id: Ia63cce8e2b1c847a323527ab1021ef72f4f708db
Signed-off-by: Thierry Strudel <tstrudel@google.com>
2016-05-19 19:03:22 +00:00
dcashman 7905cfc8f8 BACKPORT: FROMLIST: mm: ASLR: use get_random_long()
(cherry picked from commit https://lkml.org/lkml/2016/2/4/833)

Replace calls to get_random_int() followed by a cast to (unsigned long)
with calls to get_random_long().  Also address shifting bug which, in case
of x86 removed entropy mask for mmap_rnd_bits values > 31 bits.

Bug: 26963541
Change-Id: I78b86a343da2e48ffcfc494deaa79e3f3745d700
Signed-off-by: Daniel Cashman <dcashman@android.com>
Signed-off-by: Daniel Cashman <dcashman@google.com>
2016-03-16 23:05:34 +00:00
Will Deacon c8f487a49a arm64: mm: ensure that the zero page is visible to the page table walker
commit 32d6397805d00573ce1fa55f408ce2bca15b0ad3 upstream.

In paging_init, we allocate the zero page, memset it to zero and then
point TTBR0 to it in order to avoid speculative fetches through the
identity mapping.

In order to guarantee that the freshly zeroed page is indeed visible to
the page table walker, we need to execute a dsb instruction prior to
writing the TTBR.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-01-28 21:49:36 -08:00
dcashman fbb45643a9 BACKPORT: FROMLIST: arm64: mm: support ARCH_MMAP_RND_BITS.
(cherry picked from commit https://lkml.org/lkml/2015/12/21/340)

arm64: arch_mmap_rnd() uses STACK_RND_MASK to generate the
random offset for the mmap base address.  This value represents a
compromise between increased ASLR effectiveness and avoiding
address-space fragmentation. Replace it with a Kconfig option, which
is sensibly bounded, so that platform developers may choose where to
place this compromise. Keep default values as new minimums.

Bug: 24047224
Signed-off-by: Daniel Cashman <dcashman@android.com>
Signed-off-by: Daniel Cashman <dcashman@google.com>
Change-Id: I7caf105b838cfc3ab55f275e1a061eb2b77c9a2a
2016-01-14 11:49:15 -08:00
Mark Salyzyn 339cb27fc5 arm64: readahead: fault retry breaks mmap file read random detection
commit 569ba74a7ba69f46ce2950bf085b37fea2408385 upstream.

This is the arm64 portion of commit 45cac65b0f ("readahead: fault
retry breaks mmap file read random detection"), which was absent from
the initial port and has since gone unnoticed. The original commit says:

> .fault now can retry.  The retry can break state machine of .fault.  In
> filemap_fault, if page is miss, ra->mmap_miss is increased.  In the second
> try, since the page is in page cache now, ra->mmap_miss is decreased.  And
> these are done in one fault, so we can't detect random mmap file access.
>
> Add a new flag to indicate .fault is tried once.  In the second try, skip
> ra->mmap_miss decreasing.  The filemap_fault state machine is ok with it.

With this change, Mark reports that:

> Random read improves by 250%, sequential read improves by 40%, and
> random write by 400% to an eMMC device with dm crypto wrapped around it.

Cc: Shaohua Li <shli@kernel.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Mark Salyzyn <salyzyn@android.com>
Signed-off-by: Riley Andrews <riandrews@android.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-10-22 14:37:52 -07:00
Yann Droneaud 82c9aed33b arm64/mm: Remove hack in mmap randomize layout
commit d6c763afab142a85e4770b4bc2a5f40f256d5c5d upstream.

Since commit 8a0a9bd4db ('random: make get_random_int() more
random'), get_random_int() returns a random value for each call,
so comment and hack introduced in mmap_rnd() as part of commit
1d18c47c73 ('arm64: MMU fault handling and page table management')
are incorrects.

Commit 1d18c47c73 seems to use the same hack introduced by
commit a5adc91a4b ('powerpc: Ensure random space between stack
and mmaps'), latter copied in commit 5a0efea09f ('sparc64: Sharpen
address space randomization calculations.').

But both architectures were cleaned up as part of commit
fa8cbaaf5a ('powerpc+sparc64/mm: Remove hack in mmap randomize
layout') as hack is no more needed since commit 8a0a9bd4db.

So the present patch removes the comment and the hack around
get_random_int() on AArch64's mmap_rnd().

Cc: David S. Miller <davem@davemloft.net>
Cc: Anton Blanchard <anton@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Acked-by: Dan McGee <dpmcgee@gmail.com>
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Cc: Matthias Brugger <mbrugger@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-09-13 09:07:59 -07:00
Shaohua Li b09eb1a7c9 (fix for arm64) readahead: fault retry breaks mmap file read random detection
.fault now can retry.  The retry can break state machine of .fault.  In
filemap_fault, if page is miss, ra->mmap_miss is increased.  In the second
try, since the page is in page cache now, ra->mmap_miss is decreased.  And
these are done in one fault, so we can't detect random mmap file access.

Add a new flag to indicate .fault is tried once.  In the second try, skip
ra->mmap_miss decreasing.  The filemap_fault state machine is ok with it.

I only tested x86, didn't test other archs, but looks the change for other
archs is obvious, but who knows :)

Change-Id: Ib0d911c27f2347b2f1fa56231ff9ad518adf5988
Signed-off-by: Shaohua Li <shaohua.li@fusionio.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-08-19 17:43:47 -07:00
Dave P Martin 39ae2d098a arm64: mm: Fix freeing of the wrong memmap entries with !SPARSEMEM_VMEMMAP
commit b9bcc919931611498e856eae9bf66337330d04cc upstream.

The memmap freeing code in free_unused_memmap() computes the end of
each memblock by adding the memblock size onto the base.  However,
if SPARSEMEM is enabled then the value (start) used for the base
may already have been rounded downwards to work out which memmap
entries to free after the previous memblock.

This may cause memmap entries that are in use to get freed.

In general, you're not likely to hit this problem unless there
are at least 2 memblocks and one of them is not aligned to a
sparsemem section boundary.  Note that carve-outs can increase
the number of memblocks by splitting the regions listed in the
device tree.

This problem doesn't occur with SPARSEMEM_VMEMMAP, because the
vmemmap code deals with freeing the unused regions of the memmap
instead of requiring the arch code to do it.

This patch gets the memblock base out of the memblock directly when
computing the block end address to ensure the correct value is used.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-08-03 09:29:41 -07:00
Catalin Marinas 2b97cbc8c4 arm64: Do not attempt to use init_mm in reset_context()
commit 565630d503ef24e44c252bed55571b3a0d68455f upstream.

After secondary CPU boot or hotplug, the active_mm of the idle thread is
&init_mm. The init_mm.pgd (swapper_pg_dir) is only meant for TTBR1_EL1
and must not be set in TTBR0_EL1. Since when active_mm == &init_mm the
TTBR0_EL1 is already set to the reserved value, there is no need to
perform any context reset.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-08-03 09:29:41 -07:00
Liam Mark 39e0115012 arm64: dma-mapping: make alloc_noncoherent more robust
Large allocations can result in the arm64_swiotlb_alloc_noncoherent
call not being able to succeed because it can't find enough
contiguous memory to setup the mapping.

Make arm64_swiotlb_alloc_noncoherent more robust by using vmalloc
as a fallback.

Change-Id: I00e8c3f634dc2280f3731c6042b9dd3dc644cb73
Signed-off-by: Liam Mark <lmark@codeaurora.org>
2015-05-04 22:45:26 -07:00
Linux Build Service Account 6a27fa9e5e Merge "arm64: Improve error message for SP/PC aborts" 2014-12-26 11:51:16 -08:00
Linux Build Service Account 174faf3c6e Merge "edac: cortex_arm64: Remove misleading edac error warning" 2014-12-17 22:33:30 -08:00
Patrick Daly 87493e2c8a arm64: Improve error message for SP/PC aborts
Add a more descriptive string to be printed out by __die().

Change-Id: Ic5abc1f808d2753f6195492db32c18fd0f0fa313
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2014-12-17 16:48:09 -08:00
Patrick Daly 3db5e3d816 edac: cortex_arm64: Remove misleading edac error warning
If bad_mode() or do_bad() is called, the arm edac driver checks for an
error. Ensure that warning messages are only printed out if there is
actually an error.

Additionally, fix an issue where the warning for a single bit error could
be printed for a double bit error.

Change-Id: I6133cb298fb9e660a220434761427d6ea6adb2ba
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2014-12-12 13:09:09 -08:00
Mitchel Humpherys a03f74ef16 arm64: dma-mapping: map sg lists into the SMMU as virtually contiguous
In arm_iommu_map_sg, currently we map each individual link in the given
scatterlist into the SMMU individually such that they may or may not be
virtually contiguous.  However, in most (all?) of our use cases we
actually want the entire sg list mapped into the SMMU as a single
contiguous range.  Use iommu_map_range to accomplish this.

Change-Id: Icf72ece50c3120a0091dbfab1523ff11da20f807
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2014-12-05 14:43:14 -08:00
Mitchel Humpherys a9b6f43592 arm64: dma-mapping: fix some issues with IOMMU mapper
We haven't been compiling the IOMMU mapper for a while and some things
have gotten stale.  Fix various compilation issues.

Change-Id: Ia76264c57e5caea048b8364d345c011338465613
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2014-12-05 14:43:13 -08:00
Mitchel Humpherys 91721b71d6 arm64: dma-mapping: swap arguments to __get_dma_pgprot
The arguments to __get_dma_pgprot in arm64 are reversed from those in
the corresponding arm version. Match them up to facilitate the re-use of
some other code (like the IOMMU mapping code) from arm in arm64.

Change-Id: Idc8645c3455bda4e991f3e04eee5726b2b398092
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2014-12-03 15:45:23 -08:00
Laura Abbott 4fad4d37bd mmu: arm64: fix ability to write to protected memory
Use the mem_text_address_writeable function if
CONFIG_KERNEL_TEXT_RDONLY is specified. Modify the
page table entry rather than the pmd, depending
on pmd type.

Change-Id: I04390a9b7376b299161842e87150802da2d4d728
Signed-off-by: Neil Leeder <nleeder@codeaurora.org>
2014-11-26 15:33:32 -05:00
Johannes Weiner e2ec2c2b96 arch: mm: pass userspace fault flag to generic fault handler
commit 759496ba6407c6994d6a5ce3a5e74937d7816208 upstream.

Unlike global OOM handling, memory cgroup code will invoke the OOM killer
in any OOM situation because it has no way of telling faults occuring in
kernel context - which could be handled more gracefully - from
user-triggered faults.

Pass a flag that identifies faults originating in user space from the
architecture-specific fault handlers to generic code so that memcg OOM
handling can be improved.

Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Michal Hocko <mhocko@suse.cz>
Cc: David Rientjes <rientjes@google.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: azurIt <azurit@pobox.sk>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-11-21 09:22:56 -08:00
Johannes Weiner 086c6cc537 arch: mm: do not invoke OOM killer on kernel fault OOM
commit 871341023c771ad233620b7a1fb3d9c7031c4e5c upstream.

Kernel faults are expected to handle OOM conditions gracefully (gup,
uaccess etc.), so they should never invoke the OOM killer.  Reserve this
for faults triggered in user context when it is the only option.

Most architectures already do this, fix up the remaining few.

Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Michal Hocko <mhocko@suse.cz>
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: David Rientjes <rientjes@google.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: azurIt <azurit@pobox.sk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-11-21 09:22:55 -08:00
Linux Build Service Account 30e6149014 Merge "arm64: Check for parity errors on synchronous aborts" 2014-11-12 13:57:58 -08:00
Patrick Daly 98ceffa273 arm64: Check for parity errors on synchronous aborts
Certain types of fatal synchronous aborts may be triggered by parity
errors in the L1 or L2 caches. Check whether a parity error occured and
print out the relevant information.

Change-Id: Ibc306e12e95286d29757bac293bd0b69bf04ebc4
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2014-11-11 15:32:45 -08:00
Rohit Vaswani c45a4e6e07 arm64: Add support for KERNEL_TEXT_RDONLY
When using FORCE_PAGES to allocate the kernel memory into pages,
provide an option to mark the the kernel text section as read only.
Since the kernel text pages are always mapped in the kernel, anyone
can write to the page if they have the address.
Enable this option to mark the kernel text pages as read only to
trigger a fault if any code attempts to write to a page that is
part of the kernel text section.

Change-Id: I2a9e105a3340686b4314bb10cc2a6c7bfa19ce8e
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
2014-11-07 16:59:07 -08:00
Mitchel Humpherys b34ec8a570 arm64: dma-mapping: make dma_ops const
dma_ops should be const since they shouldn't be changing after being
defined (there's even a checkpatch warning for this). Convert existing
dma_ops to const.

Change-Id: Ic27ba9a0832b12cae43cd45c72f053335845fd8f
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2014-09-30 15:18:57 -07:00
Mitchel Humpherys 9c0a2c923e arm64: dma-mapping: add support for IOMMU mapper
On systems with IOMMUs, it's useful to handle IOMMU mappings in the
dma-mapping layer. This is currently supported on arm but not arm64. Add
support in arm64 by gratuitously lifting most of the IOMMU-related stuff
from dma-mapping.c in arm.

The original arm work was done by Marek Szyprowski in [4ce63fcd919c32:
"ARM: dma-mapping: add support for IOMMU mapper"].

Change-Id: I1c3c8fe15049fe456751074398fd179ebd2ec64e
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2014-09-30 15:04:05 -07:00
Neil Leeder 555140ca1a arm64: mmu: ensure tlb entry is flushed when making word writeable
A recent change to the tlb flush routine means it will not
flush ranges in the same page. Make the range one page long
so that the flush happens.

Change-Id: Ie7aa2065dbb7228483bb6332b3664ba18cc4d2c1
Signed-off-by: Neil Leeder <nleeder@codeaurora.org>
2014-09-03 16:10:29 -04:00
Laura Abbott 9345c54477 arm64: Don't set executable permissions for pages
For memory security requirements, we should never have
executable and writable pages at the same time. Change the
page permissions from PAGE_KERNEL_EXEC to just PAGE_KERNEL.

Change-Id: I7af470908bd02eee948a9d8934c90e9e44f06570
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
2014-08-29 12:57:40 -07:00
Laura Abbott 2e149a84e0 arm64: add support to dump the kernel page tables
In a similar manner to arm, it's useful to be able to dump the page
tables to verify permissions and memory types. Add a debugfs file
to check the page tables.

Change-Id: I319c30c27a85f1686108f3e06ea20eb686c53d09
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
2014-08-29 12:32:43 -07:00
Steve Capper 461ea8cdd0 arm64: mm: Optimise tlb flush logic where we have >4K granule
The tlb maintainence functions: __cpu_flush_user_tlb_range and
__cpu_flush_kern_tlb_range do not take into consideration the page
granule when looping through the address range, and repeatedly flush
tlb entries for the same page when operating with 64K pages.

This patch re-works the logic s.t. we instead advance the loop by
 1 << (PAGE_SHIFT - 12), so avoid repeating ourselves.

Also the routines have been converted from assembler to static inline
functions to aid with legibility and potential compiler optimisations.

The isb() has been removed from flush_tlb_kernel_range(.) as it is
only needed when changing the execute permission of a mapping. If one
needs to set an area of the kernel as execute/non-execute an isb()
must be inserted after the call to flush_tlb_kernel_range.

Cc: Laura Abbott <lauraa@codeaurora.org>
Signed-off-by: Steve Capper <steve.capper@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: fa48e6f780a681cdbc7820e33259edfe1a79b9e3
[joonwoop@codeaurora.org: moved MSM8994 v1 tlbi workaround to tlbflush.h]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 17:22:17 -07:00
Mark Salter 6867c10457 arm64: export __cpu_{clear,copy}_user_page functions
The __cpu_clear_user_page() and __cpu_copy_user_page() functions
are not currently exported. This prevents modules from using
clear_user_page() and copy_user_page().

Signed-off-by: Mark Salter <msalter@redhat.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: bec7cedc8a92bfe96d32febe72634b30c63896bd
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 17:22:15 -07:00
Steve Capper d82199a377 arm64: mm: Make icache synchronisation logic huge page aware
The __sync_icache_dcache routine will only flush the dcache for the
first page of a compound page, potentially leading to stale icache
data residing further on in a hugetlb page.

This patch addresses this issue by taking into consideration the
order of the page when flushing the dcache.

Reported-by: Mark Brown <broonie@linaro.org>
Tested-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Steve Capper <steve.capper@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: <stable@vger.kernel.org> # v3.11+
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 923b8f5044da753e4985ab15c1374ced2cdf616c
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 17:22:15 -07:00
Catalin Marinas dd4826c8a4 arm64: Limit the CMA buffer to 32-bit if ZONE_DMA
When the CMA buffer is allocated, it is too early to know whether
devices will require ZONE_DMA memory. This patch limits the CMA buffer
to (DMA_BIT_MASK(32) + 1) if CONFIG_ZONE_DMA is enabled.

In addition, it computes the dma_to_phys(DMA_BIT_MASK(32)) before the
increment (no current functional change).

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 2d5a5612bceda8edd25b29f363c4e2c6cda28bab
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 17:22:12 -07:00
Catalin Marinas e2b7b321cd arm64: Replace ZONE_DMA32 with ZONE_DMA
On arm64 we do not have two DMA zones, so it does not make sense to
implement ZONE_DMA32. This patch changes ZONE_DMA32 with ZONE_DMA, the
latter covering 32-bit dma address space to honour GFP_DMA allocations.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 19e7640d1f2302c20df2733e3e3df49acb17189e
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 17:22:12 -07:00
Mark Salter d8305a2237 arm64: fix pud_huge() for 2-level pagetables
The following happens when trying to run a kvm guest on a kernel
configured for 64k pages. This doesn't happen with 4k pages:

  BUG: failure at include/linux/mm.h:297/put_page_testzero()!
  Kernel panic - not syncing: BUG!
  CPU: 2 PID: 4228 Comm: qemu-system-aar Tainted: GF            3.13.0-0.rc7.31.sa2.k32v1.aarch64.debug #1
  Call trace:
  [<fffffe0000096034>] dump_backtrace+0x0/0x16c
  [<fffffe00000961b4>] show_stack+0x14/0x1c
  [<fffffe000066e648>] dump_stack+0x84/0xb0
  [<fffffe0000668678>] panic+0xf4/0x220
  [<fffffe000018ec78>] free_reserved_area+0x0/0x110
  [<fffffe000018edd8>] free_pages+0x50/0x88
  [<fffffe00000a759c>] kvm_free_stage2_pgd+0x30/0x40
  [<fffffe00000a5354>] kvm_arch_destroy_vm+0x18/0x44
  [<fffffe00000a1854>] kvm_put_kvm+0xf0/0x184
  [<fffffe00000a1938>] kvm_vm_release+0x10/0x1c
  [<fffffe00001edc1c>] __fput+0xb0/0x288
  [<fffffe00001ede4c>] ____fput+0xc/0x14
  [<fffffe00000d5a2c>] task_work_run+0xa8/0x11c
  [<fffffe0000095c14>] do_notify_resume+0x54/0x58

In arch/arm/kvm/mmu.c:unmap_range(), we end up doing an extra put_page()
on the stage2 pgd which leads to the BUG in put_page_testzero(). This
happens because a pud_huge() test in unmap_range() returns true when it
should always be false with 2-level pages tables used by 64k pages.
This patch removes support for huge puds if 2-level pagetables are
being used.

Signed-off-by: Mark Salter <msalter@redhat.com>
[catalin.marinas@arm.com: removed #ifndef around PUD_SIZE check]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: <stable@vger.kernel.org> # v3.11+
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 4797ec2dc83a43be35bad56037d1b53db9e2b5d5
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:46:44 -07:00
Will Deacon ad56b363b2 arm64: mm: use inner-shareable barriers for inner-shareable maintenance
In order to ensure ordering and completion of inner-shareable maintenance
instructions (cache and TLB) on AArch64, we can use the -ish suffix to
the dmb and dsb instructions respectively.

This patch updates our low-level cache and tlb maintenance routines to
use the inner-shareable barrier variants where appropriate.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: dc60b777fcdddbadab111028e266fd69d4702b34
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:46:35 -07:00
Catalin Marinas f72129c220 arm64: Introduce execute-only page access permissions
The ARMv8 architecture allows execute-only user permissions by clearing
the PTE_UXN and PTE_USER bits. The kernel, however, can still access
such page, so execute-only page permission does not protect against
read(2)/write(2) etc. accesses. Systems requiring such protection must
implement/enable features like SECCOMP.

This patch changes the arm64 __P100 and __S100 protection_map[] macros
to the new __PAGE_EXECONLY attributes. A side effect is that
pte_valid_user() no longer triggers for __PAGE_EXECONLY since PTE_USER
isn't set. To work around this, the check is done on the PTE_NG bit via
the pte_valid_ng() macro. VM_READ is also checked now for page faults.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 5a0fdfada3a2aa50d7b947a2e958bf00cbe0d830
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:55 -07:00
Catalin Marinas b428f46f6e arm64: Provide read/write fault information in compat signal handlers
For AArch32, bit 11 (WnR) of the FSR/ESR register is set when the fault
was caused by a write access and applications like Qemu rely on such
information being provided in sigcontext. This patch introduces the
ESR_EL1 tracking for the arm64 kernel faults and sets bit 11 accordingly
in compat sigcontext.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 9141300a5884b57cea6d32c4e3fd16a337cfc99a
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:53 -07:00
Dave Anderson 2b5088f79e arm64: Fix for the arm64 kern_addr_valid() function
Fix for the arm64 kern_addr_valid() function to recognize
virtual addresses in the kernel logical memory map.  The
function fails as written because it does not check whether
the addresses in that region are mapped at the pmd level to
2MB or 512MB pages, continues the page table walk to the
pte level, and issues a garbage value to pfn_valid().

Tested on 4K-page and 64K-page kernels.

Signed-off-by: Dave Anderson <anderson@redhat.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: da6e4cb67c6dd1f72257c0a4a97c26dc4e80d3a7
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:48 -07:00
Mark Salter 4c011fbf14 arm64: Add function to create identity mappings
At boot time, before switching to a virtual UEFI memory map, firmware
expects UEFI memory and IO regions to be identity mapped whenever
kernel makes runtime services calls. The existing early boot code
creates an identity map of kernel text/data but this is not sufficient
for UEFI. This patch adds a create_id_mapping() function which reuses
the core code of the existing create_mapping().

Signed-off-by: Mark Salter <msalter@redhat.com>
[ Fixed error message formatting (%pa). ]
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: d7ecbddf4caefbac1b99478dd2b679f83dfc2545
[joonwoop@codeaurora.org: fixed conflict with '0e3d68: arm64: Support
 early fixup for CMA']
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:45 -07:00
Rob Herring 9b9cb846ec of/fdt: move memreserve and dtb memory reservations into core
Move the /memreserve/ processing and dtb memory reservations into
early_init_fdt_scan_reserved_mem. This converts arm, arm64, and powerpc
as they are the only users of early_init_fdt_scan_reserved_mem.

memblock_reserve is safe to call on the same region twice, so the
reservation check for the dtb in powerpc 32-bit reservations is safe to
remove.

Signed-off-by: Rob Herring <robh@kernel.org>
Tested-by: Michal Simek <michal.simek@xilinx.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Tested-by: Grant Likely <grant.likely@linaro.org>
Tested-by: Stephen Chivers <schivers@csc.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: d1552ce449eb0a8d2f0bd6599da3a8a3d7f77a84
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:38 -07:00
Mark Salter cbb4516dd9 arm64: add early_ioremap support
Add support for early IO or memory mappings which are needed before the
normal ioremap() is usable.  This also adds fixmap support for permanent
fixed mappings such as that used by the earlyprintk device register
region.

Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Borislav Petkov <borislav.petkov@amd.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: bf4b558eba920a38f91beb5ee62a8ce2628c92f7
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:24 -07:00
Mark Salter 40c3e6bf24 arm64: allow ioremap_cache() to use existing RAM mappings
Some drivers (ACPI notably) use ioremap_cache() to map an area which could
either be outside of kernel RAM or in an already mapped reserved area of
RAM. To avoid aliases with different caching attributes, ioremap() does
not allow RAM to be remapped. But for ioremap_cache(), the existing kernel
mapping may be used.

Signed-off-by: Mark Salter <msalter@redhat.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: c04e8e2fe5e0163fd37ccec7f538be8fa63be40e
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:22 -07:00
Mark Salter f8b4e0f2be arm64: initialize pgprot info earlier in boot
Presently, paging_init() calls init_mem_pgprot() to initialize pgprot
values used by macros such as PAGE_KERNEL, PAGE_KERNEL_EXEC, etc.

The new fixmap and early_ioremap support also needs to use these macros
before paging_init() is called.  This patch moves the init_mem_pgprot()
call out of paging_init() and into setup_arch() so that pgprot_default
gets initialized in time for fixmap and early_ioremap.

Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Borislav Petkov <borislav.petkov@amd.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: 0bf757c73d6612d3d279de3f61b35062aa9c8b1d
[joonwoop@codeaurora.org: fixed conflict in arch/arm64/include/asm/mmu.h]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:45:11 -07:00
Catalin Marinas 42629e2674 arm64: Relax the kernel cache requirements for boot
With system caches for the host OS or architected caches for guest OS we
cannot easily guarantee that there are no dirty or stale cache lines for
the areas of memory written by the kernel during boot with the MMU off
(therefore non-cacheable accesses).

This patch adds the necessary cache maintenance during boot and relaxes
the booting requirements.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Git-commit: c218bca74eeafa2f8528b6bbb34d112075fcf40a
[joonwoop@codeaurora.org: fixed trivial merge conflict.]
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
2014-08-15 11:41:40 -07:00