Skip to content

Commit

Permalink
Merge 4.14.108 into kernel.lnx.4.14.r7-rel
Browse files Browse the repository at this point in the history
Changes in 4.14.108: (184 commits)
        9p: use inode->i_lock to protect i_size_write() under 32-bit
        9p/net: fix memory leak in p9_client_create
        ASoC: fsl_esai: fix register setting issue in RIGHT_J mode
        iio: adc: exynos-adc: Fix NULL pointer exception on unbind
        stm class: Fix an endless loop in channel allocation
        crypto: caam - fixed handling of sg list
        crypto: ahash - fix another early termination in hash walk
        crypto: rockchip - fix scatterlist nents error
        crypto: rockchip - update new iv to device in multiple operations
        drm/imx: ignore plane updates on disabled crtcs
        gpu: ipu-v3: Fix i.MX51 CSI control registers offset
        drm/imx: imx-ldb: add missing of_node_puts
        gpu: ipu-v3: Fix CSI offsets for imx53
        s390/dasd: fix using offset into zero size array error
        Input: pwm-vibra - prevent unbalanced regulator
        Input: pwm-vibra - stop regulator after disabling pwm, not before
        ARM: OMAP2+: Variable "reg" in function omap4_dsi_mux_pads() could be uninitialized
        ASoC: dapm: fix out-of-bounds accesses to DAPM lookup tables
        ASoC: rsnd: fixup rsnd_ssi_master_clk_start() user count check
        KVM: arm/arm64: Reset the VCPU without preemption and vcpu state loaded
        ARM: OMAP2+: fix lack of timer interrupts on CPU1 after hotplug
        Input: cap11xx - switch to using set_brightness_blocking()
        Input: ps2-gpio - flush TX work when closing port
        Input: matrix_keypad - use flush_delayed_work()
        mac80211: Fix Tx aggregation session tear down with ITXQs
        ipvs: fix dependency on nf_defrag_ipv6
        floppy: check_events callback should not return a negative number
        NFS: Don't use page_file_mapping after removing the page
        mm/gup: fix gup_pmd_range() for dax
        Revert "mm: use early_pfn_to_nid in page_ext_init"
        mm: page_alloc: fix ref bias in page_frag_alloc() for 1-byte allocs
        net: hns: Fix object reference leaks in hns_dsaf_roce_reset()
        i2c: cadence: Fix the hold bit setting
        i2c: bcm2835: Clear current buffer pointers and counts after a transfer
        auxdisplay: ht16k33: fix potential user-after-free on module unload
        Input: st-keyscan - fix potential zalloc NULL dereference
        clk: sunxi-ng: v3s: Fix TCON reset de-assert bit
        clk: sunxi: A31: Fix wrong AHB gate number
        esp: Skip TX bytes accounting when sending from a request socket
        ARM: 8824/1: fix a migrating irq bug when hotplug cpu
        af_key: unconditionally clone on broadcast
        assoc_array: Fix shortcut creation
        keys: Fix dependency loop between construction record and auth key
        scsi: libiscsi: Fix race between iscsi_xmit_task and iscsi_complete_task
        net: systemport: Fix reception of BPDUs
        pinctrl: meson: meson8b: fix the sdxc_a data 1..3 pins
        qmi_wwan: apply SET_DTR quirk to Sierra WP7607
        net: mv643xx_eth: disable clk on error path in mv643xx_eth_shared_probe()
        mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush timeout issue
        ASoC: topology: free created components in tplg load error
        qed: Fix iWARP syn packet mac address validation.
        arm64: Relax GIC version check during early boot
        net: marvell: mvneta: fix DMA debug warning
        tmpfs: fix link accounting when a tmpfile is linked in
        ixgbe: fix older devices that do not support IXGBE_MRQC_L3L4TXSWEN
        ARCv2: lib: memcpy: fix doing prefetchw outside of buffer
        ARC: uacces: remove lp_start, lp_end from clobber list
        ARCv2: support manual regfile save on interrupts
        phonet: fix building with clang
        mac80211_hwsim: propagate genlmsg_reply return code
        net: thunderx: make CFG_DONE message to run through generic send-ack sequence
        nfp: bpf: fix code-gen bug on BPF_ALU | BPF_XOR | BPF_K
        nfp: bpf: fix ALU32 high bits clearance bug
        net: set static variable an initial value in atl2_probe()
        tmpfs: fix uninitialized return value in shmem_link
        media: videobuf2-v4l2: drop WARN_ON in vb2_warn_zero_bytesused()
        stm class: Prevent division by zero
        libnvdimm/label: Clear 'updating' flag after label-set update
        libnvdimm, pfn: Fix over-trim in trim_pfn_device()
        libnvdimm/pmem: Honor force_raw for legacy pmem regions
        libnvdimm: Fix altmap reservation size calculation
        fix cgroup_do_mount() handling of failure exits
        crypto: arm/crct10dif - revert to C code for short inputs
        crypto: arm64/crct10dif - revert to C code for short inputs
        crypto: hash - set CRYPTO_TFM_NEED_KEY if ->setkey() fails
        crypto: testmgr - skip crc32c context test for ahash algorithms
        crypto: arm64/aes-ccm - fix logical bug in AAD MAC handling
        crypto: arm64/aes-ccm - fix bugs in non-NEON fallback routine
        CIFS: Do not reset lease state to NONE on lease break
        CIFS: Fix read after write for files with read caching
        tracing: Use strncpy instead of memcpy for string keys in hist triggers
        tracing: Do not free iter->trace in fail path of tracing_open_pipe()
        xen: fix dom0 boot on huge systems
        ACPI / device_sysfs: Avoid OF modalias creation for removed device
        mmc: sdhci-esdhc-imx: fix HS400 timing issue
        spi: ti-qspi: Fix mmap read when more than one CS in use
        spi: pxa2xx: Setup maximum supported DMA transfer length
        regulator: s2mps11: Fix steps for buck7, buck8 and LDO35
        regulator: max77620: Initialize values for DT properties
        regulator: s2mpa01: Fix step values for some LDOs
        clocksource/drivers/exynos_mct: Move one-shot check from tick clear to ISR
        clocksource/drivers/exynos_mct: Clear timer interrupt when shutdown
        s390/setup: fix early warning messages
        s390/virtio: handle find on invalid queue gracefully
        scsi: virtio_scsi: don't send sc payload with tmfs
        scsi: aacraid: Fix performance issue on logical drives
        scsi: sd: Optimal I/O size should be a multiple of physical block size
        scsi: target/iscsi: Avoid iscsit_release_commands_from_conn() deadlock
        fs/devpts: always delete dcache dentry-s in dput()
        splice: don't merge into linked buffers
        m68k: Add -ffreestanding to CFLAGS
        Btrfs: setup a nofs context for memory allocation at __btrfs_set_acl
        btrfs: ensure that a DUP or RAID1 block group has exactly two stripes
        Btrfs: fix corruption reading shared and compressed extents after hole punching
        crypto: pcbc - remove bogus memcpy()s with src == dest
        libertas_tf: don't set URB_ZERO_PACKET on IN USB transfer
        irqchip/gic-v3-its: Avoid parsing _indirect_ twice for Device table
        x86/kprobes: Prohibit probing on optprobe template code
        cpufreq: tegra124: add missing of_node_put()
        cpufreq: pxa2xx: remove incorrect __init annotation
        ext4: add mask of ext4 flags to swap
        ext4: fix crash during online resizing
        IB/hfi1: Close race condition on user context disable and close
        cxl: Wrap iterations over afu slices inside 'afu_list_lock'
        ext2: Fix underflow in ext2_max_size()
        clk: uniphier: Fix update register for CPU-gear
        clk: clk-twl6040: Fix imprecise external abort for pdmclk
        clk: ingenic: Fix round_rate misbehaving with non-integer dividers
        clk: ingenic: Fix doc of ingenic_cgu_div_info
        usb: chipidea: tegra: Fix missed ci_hdrc_remove_device()
        nfit: acpi_nfit_ctl(): Check out_obj->type in the right place
        mm: hwpoison: fix thp split handing in soft_offline_in_use_page()
        mm/vmalloc: fix size check for remap_vmalloc_range_partial()
        kernel/sysctl.c: add missing range check in do_proc_dointvec_minmax_conv
        device property: Fix the length used in PROPERTY_ENTRY_STRING()
        intel_th: Don't reference unassigned outputs
        parport_pc: fix find_superio io compare code, should use equal test.
        i2c: tegra: fix maximum transfer size
        crypto: arm64/aes-neonbs - fix returning final keystream block
        drm/i915: Relax mmap VMA check
        serial: uartps: Fix stuck ISR if RX disabled with non-empty FIFO
        serial: 8250_of: assume reg-shift of 2 for mrvl,mmp-uart
        serial: 8250_pci: Fix number of ports for ACCES serial cards
        serial: 8250_pci: Have ACCES cards that use the four port Pericom PI7C9X7954 chip use the pci_pericom_setup()
        jbd2: clear dirty flag when revoking a buffer from an older transaction
        jbd2: fix compile warning when using JBUFFER_TRACE
        security/selinux: fix SECURITY_LSM_NATIVE_LABELS on reused superblock
        powerpc/32: Clear on-stack exception marker upon exception return
        powerpc/wii: properly disable use of BATs when requested.
        powerpc/powernv: Make opal log only readable by root
        powerpc/83xx: Also save/restore SPRG4-7 during suspend
        powerpc: Fix 32-bit KVM-PR lockup and host crash with MacOS guest
        powerpc/ptrace: Simplify vr_get/set() to avoid GCC warning
        powerpc/hugetlb: Don't do runtime allocation of 16G pages in LPAR configuration
        powerpc/traps: fix recoverability of machine check handling on book3s/32
        powerpc/traps: Fix the message printed when stack overflows
        ARM: s3c24xx: Fix boolean expressions in osiris_dvs_notify
        arm64: Fix HCR.TGE status for NMI contexts
        arm64: debug: Ensure debug handlers check triggering exception level
        arm64: KVM: Fix architecturally invalid reset value for FPEXC32_EL2
        dm: fix to_sector() for 32bit
        dm integrity: limit the rate of error messages
        cpcap-charger: generate events for userspace
        NFS: Fix I/O request leakages
        NFS: Fix an I/O request leakage in nfs_do_recoalesce
        NFS: Don't recoalesce on error in nfs_pageio_complete_mirror()
        nfsd: fix memory corruption caused by readdir
        nfsd: fix wrong check in write_v4_end_grace()
        NFSv4.1: Reinitialise sequence results before retransmitting a request
        PM / wakeup: Rework wakeup source timer cancellation
        bcache: never writeback a discard operation
        x86/unwind/orc: Fix ORC unwind table alignment
        perf intel-pt: Fix CYC timestamp calculation after OVF
        perf auxtrace: Define auxtrace record alignment
        perf intel-pt: Fix overlap calculation for padding
        perf intel-pt: Fix divide by zero when TSC is not available
        md: Fix failed allocation of md_register_thread
        tpm/tpm_crb: Avoid unaligned reads in crb_recv()
        tpm: Unify the send callback behaviour
        rcu: Do RCU GP kthread self-wakeup from softirq and interrupt
        media: imx: prpencvf: Stop upstream before disabling IDMA channel
        media: uvcvideo: Avoid NULL pointer dereference at the end of streaming
        media: vimc: Add vimc-streamer for stream control
        media: imx: csi: Disable CSI immediately after last EOF
        media: imx: csi: Stop upstream before disabling IDMA channel
        drm/radeon/evergreen_cs: fix missing break in switch statement
        KVM: Call kvm_arch_memslots_updated() before updating memslots
        KVM: x86/mmu: Detect MMIO generation wrap in any address space
        KVM: x86/mmu: Do not cache MMIO accesses while memslots are in flux
        KVM: nVMX: Sign extend displacements of VMX instr's mem operands
        KVM: nVMX: Apply addr size mask to effective address for VMX instructions
        KVM: nVMX: Ignore limit checks on VMX instructions using flat segments
        s390/setup: fix boot crash for machine without EDAT-1
        Linux 4.14.108

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

Conflicts:
	arch/arm/kernel/irq.c
	drivers/scsi/sd.c
	sound/soc/soc-dapm.c
  • Loading branch information
nathanchance committed May 26, 2019
2 parents 13cb479 + dee55b0 commit 7c5d14c
Show file tree
Hide file tree
Showing 230 changed files with 1,847 additions and 910 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 14
SUBLEVEL = 107
SUBLEVEL = 108
EXTRAVERSION =
NAME = Petit Gorille

Expand Down
8 changes: 8 additions & 0 deletions arch/arc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,14 @@ config ARC_HAS_ACCL_REGS
(also referred to as r58:r59). These can also be used by gcc as GPR so
kernel needs to save/restore per process

config ARC_IRQ_NO_AUTOSAVE
bool "Disable hardware autosave regfile on interrupts"
default n
help
On HS cores, taken interrupt auto saves the regfile on stack.
This is programmable and can be optionally disabled in which case
software INTERRUPT_PROLOGUE/EPILGUE do the needed work

endif # ISA_ARCV2

endmenu # "ARC CPU Configuration"
Expand Down
54 changes: 54 additions & 0 deletions arch/arc/include/asm/entry-arcv2.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,33 @@
;
; Now manually save: r12, sp, fp, gp, r25

#ifdef CONFIG_ARC_IRQ_NO_AUTOSAVE
.ifnc \called_from, exception
st.as r9, [sp, -10] ; save r9 in it's final stack slot
sub sp, sp, 12 ; skip JLI, LDI, EI

PUSH lp_count
PUSHAX lp_start
PUSHAX lp_end
PUSH blink

PUSH r11
PUSH r10

sub sp, sp, 4 ; skip r9

PUSH r8
PUSH r7
PUSH r6
PUSH r5
PUSH r4
PUSH r3
PUSH r2
PUSH r1
PUSH r0
.endif
#endif

#ifdef CONFIG_ARC_HAS_ACCL_REGS
PUSH r59
PUSH r58
Expand Down Expand Up @@ -86,6 +113,33 @@
POP r59
#endif

#ifdef CONFIG_ARC_IRQ_NO_AUTOSAVE
.ifnc \called_from, exception
POP r0
POP r1
POP r2
POP r3
POP r4
POP r5
POP r6
POP r7
POP r8
POP r9
POP r10
POP r11

POP blink
POPAX lp_end
POPAX lp_start

POP r9
mov lp_count, r9

add sp, sp, 12 ; skip JLI, LDI, EI
ld.as r9, [sp, -10] ; reload r9 which got clobbered
.endif
#endif

.endm

/*------------------------------------------------------------------------*/
Expand Down
8 changes: 4 additions & 4 deletions arch/arc/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ raw_copy_from_user(void *to, const void __user *from, unsigned long n)
*/
"=&r" (tmp), "+r" (to), "+r" (from)
:
: "lp_count", "lp_start", "lp_end", "memory");
: "lp_count", "memory");

return n;
}
Expand Down Expand Up @@ -433,7 +433,7 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n)
*/
"=&r" (tmp), "+r" (to), "+r" (from)
:
: "lp_count", "lp_start", "lp_end", "memory");
: "lp_count", "memory");

return n;
}
Expand Down Expand Up @@ -653,7 +653,7 @@ static inline unsigned long __arc_clear_user(void __user *to, unsigned long n)
" .previous \n"
: "+r"(d_char), "+r"(res)
: "i"(0)
: "lp_count", "lp_start", "lp_end", "memory");
: "lp_count", "memory");

return res;
}
Expand Down Expand Up @@ -686,7 +686,7 @@ __arc_strncpy_from_user(char *dst, const char __user *src, long count)
" .previous \n"
: "+r"(res), "+r"(dst), "+r"(src), "=r"(val)
: "g"(-EFAULT), "r"(count)
: "lp_count", "lp_start", "lp_end", "memory");
: "lp_count", "memory");

return res;
}
Expand Down
4 changes: 3 additions & 1 deletion arch/arc/kernel/entry-arcv2.S
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,9 @@ restore_regs:
;####### Return from Intr #######

debug_marker_l1:
bbit1.nt r0, STATUS_DE_BIT, .Lintr_ret_to_delay_slot
; bbit1.nt r0, STATUS_DE_BIT, .Lintr_ret_to_delay_slot
btst r0, STATUS_DE_BIT ; Z flag set if bit clear
bnz .Lintr_ret_to_delay_slot ; branch if STATUS_DE_BIT set

.Lisr_ret_fast_path:
; Handle special case #1: (Entry via Exception, Return via IRQ)
Expand Down
2 changes: 2 additions & 0 deletions arch/arc/kernel/intc-arcv2.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,13 @@ void arc_init_IRQ(void)

*(unsigned int *)&ictrl = 0;

#ifndef CONFIG_ARC_IRQ_NO_AUTOSAVE
ictrl.save_nr_gpr_pairs = 6; /* r0 to r11 (r12 saved manually) */
ictrl.save_blink = 1;
ictrl.save_lp_regs = 1; /* LP_COUNT, LP_START, LP_END */
ictrl.save_u_to_u = 0; /* user ctxt saved on kernel stack */
ictrl.save_idx_regs = 1; /* JLI, LDI, EI */
#endif

WRITE_AUX(AUX_IRQ_CTRL, ictrl);

Expand Down
14 changes: 0 additions & 14 deletions arch/arc/lib/memcpy-archs.S
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,18 @@
#endif

#ifdef CONFIG_ARC_HAS_LL64
# define PREFETCH_READ(RX) prefetch [RX, 56]
# define PREFETCH_WRITE(RX) prefetchw [RX, 64]
# define LOADX(DST,RX) ldd.ab DST, [RX, 8]
# define STOREX(SRC,RX) std.ab SRC, [RX, 8]
# define ZOLSHFT 5
# define ZOLAND 0x1F
#else
# define PREFETCH_READ(RX) prefetch [RX, 28]
# define PREFETCH_WRITE(RX) prefetchw [RX, 32]
# define LOADX(DST,RX) ld.ab DST, [RX, 4]
# define STOREX(SRC,RX) st.ab SRC, [RX, 4]
# define ZOLSHFT 4
# define ZOLAND 0xF
#endif

ENTRY_CFI(memcpy)
prefetch [r1] ; Prefetch the read location
prefetchw [r0] ; Prefetch the write location
mov.f 0, r2
;;; if size is zero
jz.d [blink]
Expand Down Expand Up @@ -72,8 +66,6 @@ ENTRY_CFI(memcpy)
lpnz @.Lcopy32_64bytes
;; LOOP START
LOADX (r6, r1)
PREFETCH_READ (r1)
PREFETCH_WRITE (r3)
LOADX (r8, r1)
LOADX (r10, r1)
LOADX (r4, r1)
Expand Down Expand Up @@ -117,9 +109,7 @@ ENTRY_CFI(memcpy)
lpnz @.Lcopy8bytes_1
;; LOOP START
ld.ab r6, [r1, 4]
prefetch [r1, 28] ;Prefetch the next read location
ld.ab r8, [r1,4]
prefetchw [r3, 32] ;Prefetch the next write location

SHIFT_1 (r7, r6, 24)
or r7, r7, r5
Expand Down Expand Up @@ -162,9 +152,7 @@ ENTRY_CFI(memcpy)
lpnz @.Lcopy8bytes_2
;; LOOP START
ld.ab r6, [r1, 4]
prefetch [r1, 28] ;Prefetch the next read location
ld.ab r8, [r1,4]
prefetchw [r3, 32] ;Prefetch the next write location

SHIFT_1 (r7, r6, 16)
or r7, r7, r5
Expand Down Expand Up @@ -204,9 +192,7 @@ ENTRY_CFI(memcpy)
lpnz @.Lcopy8bytes_3
;; LOOP START
ld.ab r6, [r1, 4]
prefetch [r1, 28] ;Prefetch the next read location
ld.ab r8, [r1,4]
prefetchw [r3, 32] ;Prefetch the next write location

SHIFT_1 (r7, r6, 8)
or r7, r7, r5
Expand Down
1 change: 1 addition & 0 deletions arch/arc/plat-hsdk/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ menuconfig ARC_SOC_HSDK
bool "ARC HS Development Kit SOC"
depends on ISA_ARCV2
select ARC_HAS_ACCL_REGS
select ARC_IRQ_NO_AUTOSAVE
select CLK_HSDK
select RESET_HSDK
14 changes: 7 additions & 7 deletions arch/arm/crypto/crct10dif-ce-core.S
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,10 @@ ENTRY(crc_t10dif_pmull)
vext.8 q10, qzr, q0, #4

// receive the initial 64B data, xor the initial crc value
vld1.64 {q0-q1}, [arg2, :128]!
vld1.64 {q2-q3}, [arg2, :128]!
vld1.64 {q4-q5}, [arg2, :128]!
vld1.64 {q6-q7}, [arg2, :128]!
vld1.64 {q0-q1}, [arg2]!
vld1.64 {q2-q3}, [arg2]!
vld1.64 {q4-q5}, [arg2]!
vld1.64 {q6-q7}, [arg2]!
CPU_LE( vrev64.8 q0, q0 )
CPU_LE( vrev64.8 q1, q1 )
CPU_LE( vrev64.8 q2, q2 )
Expand Down Expand Up @@ -167,7 +167,7 @@ CPU_LE( vrev64.8 q7, q7 )
_fold_64_B_loop:

.macro fold64, reg1, reg2
vld1.64 {q11-q12}, [arg2, :128]!
vld1.64 {q11-q12}, [arg2]!

vmull.p64 q8, \reg1\()h, d21
vmull.p64 \reg1, \reg1\()l, d20
Expand Down Expand Up @@ -238,7 +238,7 @@ _16B_reduction_loop:
vmull.p64 q7, d15, d21
veor.8 q7, q7, q8

vld1.64 {q0}, [arg2, :128]!
vld1.64 {q0}, [arg2]!
CPU_LE( vrev64.8 q0, q0 )
vswp d0, d1
veor.8 q7, q7, q0
Expand Down Expand Up @@ -335,7 +335,7 @@ _less_than_128:
vmov.i8 q0, #0
vmov s3, arg1_low32 // get the initial crc value

vld1.64 {q7}, [arg2, :128]!
vld1.64 {q7}, [arg2]!
CPU_LE( vrev64.8 q7, q7 )
vswp d14, d15
veor.8 q7, q7, q0
Expand Down
23 changes: 6 additions & 17 deletions arch/arm/crypto/crct10dif-ce-glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,15 @@ static int crct10dif_update(struct shash_desc *desc, const u8 *data,
unsigned int length)
{
u16 *crc = shash_desc_ctx(desc);
unsigned int l;

if (!may_use_simd()) {
*crc = crc_t10dif_generic(*crc, data, length);
if (length >= CRC_T10DIF_PMULL_CHUNK_SIZE && may_use_simd()) {
kernel_neon_begin();
*crc = crc_t10dif_pmull(*crc, data, length);
kernel_neon_end();
} else {
if (unlikely((u32)data % CRC_T10DIF_PMULL_CHUNK_SIZE)) {
l = min_t(u32, length, CRC_T10DIF_PMULL_CHUNK_SIZE -
((u32)data % CRC_T10DIF_PMULL_CHUNK_SIZE));

*crc = crc_t10dif_generic(*crc, data, l);

length -= l;
data += l;
}
if (length > 0) {
kernel_neon_begin();
*crc = crc_t10dif_pmull(*crc, data, length);
kernel_neon_end();
}
*crc = crc_t10dif_generic(*crc, data, length);
}

return 0;
}

Expand Down
1 change: 0 additions & 1 deletion arch/arm/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#ifndef __ASSEMBLY__
struct irqaction;
struct pt_regs;
extern void migrate_irqs(void);

extern void asm_do_IRQ(unsigned int, struct pt_regs *);
void handle_IRQ(unsigned int, struct pt_regs *);
Expand Down
70 changes: 0 additions & 70 deletions arch/arm/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
#include <linux/smp.h>
#include <linux/init.h>
#include <linux/seq_file.h>
#include <linux/ratelimit.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <linux/kallsyms.h>
Expand Down Expand Up @@ -120,72 +119,3 @@ int __init arch_probe_nr_irqs(void)
return nr_irqs;
}
#endif

#ifdef CONFIG_HOTPLUG_CPU
static bool migrate_one_irq(struct irq_desc *desc)
{
struct irq_data *d = irq_desc_get_irq_data(desc);
const struct cpumask *affinity = irq_data_get_affinity_mask(d);
struct irq_chip *c;
bool ret = false;
struct cpumask available_cpus;

/*
* If this is a per-CPU interrupt, or the affinity does not
* include this CPU, then we have nothing to do.
*/
if (irqd_is_per_cpu(d) || !cpumask_test_cpu(smp_processor_id(), affinity))
return false;

cpumask_copy(&available_cpus, affinity);
cpumask_andnot(&available_cpus, &available_cpus, cpu_isolated_mask);
affinity = &available_cpus;

if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
cpumask_andnot(&available_cpus, cpu_online_mask,
cpu_isolated_mask);
if (cpumask_empty(affinity))
affinity = cpu_online_mask;
ret = true;
}

c = irq_data_get_irq_chip(d);
if (!c->irq_set_affinity)
pr_debug("IRQ%u: unable to set affinity\n", d->irq);
else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK && ret)
cpumask_copy(irq_data_get_affinity_mask(d), affinity);

return ret;
}

/*
* The current CPU has been marked offline. Migrate IRQs off this CPU.
* If the affinity settings do not allow other CPUs, force them onto any
* available CPU.
*
* Note: we must iterate over all IRQs, whether they have an attached
* action structure or not, as we need to get chained interrupts too.
*/
void migrate_irqs(void)
{
unsigned int i;
struct irq_desc *desc;
unsigned long flags;

local_irq_save(flags);

for_each_irq_desc(i, desc) {
bool affinity_broken;

raw_spin_lock(&desc->lock);
affinity_broken = migrate_one_irq(desc);
raw_spin_unlock(&desc->lock);

if (affinity_broken)
pr_warn_ratelimited("IRQ%u no longer affine to CPU%u\n",
i, smp_processor_id());
}

local_irq_restore(flags);
}
#endif /* CONFIG_HOTPLUG_CPU */
2 changes: 1 addition & 1 deletion arch/arm/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ int __cpu_disable(void)
/*
* OK - migrate IRQs away from this CPU
*/
migrate_irqs();
irq_migrate_all_off_this_cpu();

/*
* Flush user cache and TLB mappings, and then remove this CPU
Expand Down
Loading

0 comments on commit 7c5d14c

Please sign in to comment.