Merge 4.9.291 into android-4.9-q

Changes in 4.9.291
	binder: use euid from cred instead of using task
	binder: use cred instead of task for selinux checks
	xhci: Fix USB 3.1 enumeration issues by increasing roothub power-on-good delay
	Input: elantench - fix misreporting trackpoint coordinates
	Input: i8042 - Add quirk for Fujitsu Lifebook T725
	libata: fix read log timeout value
	ocfs2: fix data corruption on truncate
	mmc: dw_mmc: Dont wait for DRTO on Write RSP error
	parisc: Fix ptrace check on syscall return
	media: ite-cir: IR receiver stop working after receive overflow
	ALSA: ua101: fix division by zero at probe
	ALSA: 6fire: fix control and bulk message timeouts
	ALSA: line6: fix control and interrupt message timeouts
	ALSA: synth: missing check for possible NULL after the call to kstrdup
	ALSA: timer: Fix use-after-free problem
	ALSA: timer: Unconditionally unlink slave instances, too
	x86/irq: Ensure PI wakeup handler is unregistered before module unload
	sfc: Don't use netif_info before net_device setup
	hyperv/vmbus: include linux/bitops.h
	mmc: winbond: don't build on M68K
	bpf: Prevent increasing bpf_jit_limit above max
	xen/netfront: stop tx queues during live migration
	spi: spl022: fix Microwire full duplex mode
	watchdog: Fix OMAP watchdog early handling
	vmxnet3: do not stop tx queues after netif_device_detach()
	btrfs: fix lost error handling when replaying directory deletes
	hwmon: (pmbus/lm25066) Add offset coefficients
	regulator: s5m8767: do not use reset value as DVS voltage if GPIO DVS is disabled
	regulator: dt-bindings: samsung,s5m8767: correct s5m8767,pmic-buck-default-dvs-idx property
	EDAC/sb_edac: Fix top-of-high-memory value for Broadwell/Haswell
	mwifiex: fix division by zero in fw download path
	ath6kl: fix division by zero in send path
	ath6kl: fix control-message timeout
	PCI: Mark Atheros QCA6174 to avoid bus reset
	rtl8187: fix control-message timeouts
	evm: mark evm_fixmode as __ro_after_init
	wcn36xx: Fix HT40 capability for 2Ghz band
	mwifiex: Read a PCI register after writing the TX ring write pointer
	wcn36xx: handle connection loss indication
	RDMA/qedr: Fix NULL deref for query_qp on the GSI QP
	signal: Remove the bogus sigkill_pending in ptrace_stop
	signal/mips: Update (_save|_restore)_fp_context to fail with -EFAULT
	power: supply: max17042_battery: Prevent int underflow in set_soc_threshold
	power: supply: max17042_battery: use VFSOC for capacity when no rsns
	powerpc/85xx: Fix oops when mpc85xx_smp_guts_ids node cannot be found
	serial: core: Fix initializing and restoring termios speed
	ALSA: mixer: oss: Fix racy access to slots
	ALSA: mixer: fix deadlock in snd_mixer_oss_set_volume
	PCI: aardvark: Read all 16-bits from PCIE_MSI_PAYLOAD_REG
	quota: check block number when reading the block in quota file
	quota: correct error number in free_dqentry()
	iio: dac: ad5446: Fix ad5622_write() return value
	USB: serial: keyspan: fix memleak on probe errors
	USB: iowarrior: fix control-message timeouts
	Bluetooth: sco: Fix lock_sock() blockage by memcpy_from_msg()
	Bluetooth: fix use-after-free error in lock_sock_nested()
	platform/x86: wmi: do not fail if disabling fails
	MIPS: lantiq: dma: add small delay after reset
	MIPS: lantiq: dma: reset correct number of channel
	locking/lockdep: Avoid RCU-induced noinstr fail
	smackfs: Fix use-after-free in netlbl_catmap_walk()
	x86: Increase exception stack sizes
	media: mt9p031: Fix corrupted frame after restarting stream
	media: netup_unidvb: handle interrupt properly according to the firmware
	media: uvcvideo: Set capability in s_param
	media: s5p-mfc: fix possible null-pointer dereference in s5p_mfc_probe()
	media: mceusb: return without resubmitting URB in case of -EPROTO error.
	ia64: don't do IA64_CMPXCHG_DEBUG without CONFIG_PRINTK
	ACPICA: Avoid evaluating methods too early during system resume
	media: usb: dvd-usb: fix uninit-value bug in dibusb_read_eeprom_byte()
	tracefs: Have tracefs directories not set OTH permission bits by default
	ath: dfs_pattern_detector: Fix possible null-pointer dereference in channel_detector_create()
	ACPI: battery: Accept charges over the design capacity as full
	memstick: r592: Fix a UAF bug when removing the driver
	lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression
	lib/xz: Validate the value before assigning it to an enum variable
	tracing/cfi: Fix cmp_entries_* functions signature mismatch
	mwl8k: Fix use-after-free in mwl8k_fw_state_machine()
	PM: hibernate: Get block device exclusively in swsusp_check()
	iwlwifi: mvm: disable RX-diversity in powersave
	smackfs: use __GFP_NOFAIL for smk_cipso_doi()
	ARM: clang: Do not rely on lr register for stacktrace
	ARM: 9136/1: ARMv7-M uses BE-8, not BE-32
	spi: bcm-qspi: Fix missing clk_disable_unprepare() on error in bcm_qspi_probe()
	parisc: fix warning in flush_tlb_all
	parisc/kgdb: add kgdb_roundup() to make kgdb work with idle polling
	cgroup: Make rebind_subsystems() disable v2 controllers all at once
	media: dvb-usb: fix ununit-value in az6027_rc_query
	media: mtk-vpu: Fix a resource leak in the error handling path of 'mtk_vpu_probe()'
	media: si470x: Avoid card name truncation
	cpuidle: Fix kobject memory leaks in error paths
	ath9k: Fix potential interrupt storm on queue reset
	crypto: qat - detect PFVF collision after ACK
	crypto: qat - disregard spurious PFVF interrupts
	b43legacy: fix a lower bounds test
	b43: fix a lower bounds test
	memstick: avoid out-of-range warning
	memstick: jmb38x_ms: use appropriate free function in jmb38x_ms_alloc_host()
	hwmon: Fix possible memleak in __hwmon_device_register()
	ath10k: fix max antenna gain unit
	drm/msm: uninitialized variable in msm_gem_import()
	net: stream: don't purge sk_error_queue in sk_stream_kill_queues()
	mmc: mxs-mmc: disable regulator on error and in the remove function
	platform/x86: thinkpad_acpi: Fix bitwise vs. logical warning
	mwifiex: Send DELBA requests according to spec
	phy: micrel: ksz8041nl: do not use power down mode
	smackfs: use netlbl_cfg_cipsov4_del() for deleting cipso_v4_doi
	s390/gmap: don't unconditionally call pte_unmap_unlock() in __gmap_zap()
	irq: mips: avoid nested irq_enter()
	samples/kretprobes: Fix return value if register_kretprobe() failed
	libertas_tf: Fix possible memory leak in probe and disconnect
	libertas: Fix possible memory leak in probe and disconnect
	crypto: pcrypt - Delay write to padata->info
	RDMA/rxe: Fix wrong port_cap_flags
	ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc()
	scsi: dc395: Fix error case unwinding
	MIPS: loongson64: make CPU_LOONGSON64 depends on MIPS_FP_SUPPORT
	JFS: fix memleak in jfs_mount
	arm: dts: omap3-gta04a4: accelerometer irq fix
	soc/tegra: Fix an error handling path in tegra_powergate_power_up()
	memory: fsl_ifc: fix leak of irq and nand_irq in fsl_ifc_ctrl_probe
	video: fbdev: chipsfb: use memset_io() instead of memset()
	serial: 8250_dw: Drop wrong use of ACPI_PTR()
	usb: gadget: hid: fix error code in do_config()
	power: supply: rt5033_battery: Change voltage values to µV
	scsi: csiostor: Uninitialized data in csio_ln_vnp_read_cbfn()
	RDMA/mlx4: Return missed an error if device doesn't support steering
	serial: xilinx_uartps: Fix race condition causing stuck TX
	power: supply: bq27xxx: Fix kernel crash on IRQ handler register error
	pnfs/flexfiles: Fix misplaced barrier in nfs4_ff_layout_prepare_ds
	drm/plane-helper: fix uninitialized variable reference
	PCI: aardvark: Don't spam about PIO Response Status
	fs: orangefs: fix error return code of orangefs_revalidate_lookup()
	mtd: spi-nor: hisi-sfc: Remove excessive clk_disable_unprepare()
	dmaengine: at_xdmac: fix AT_XDMAC_CC_PERID() macro
	auxdisplay: img-ascii-lcd: Fix lock-up when displaying empty string
	netfilter: nfnetlink_queue: fix OOB when mac header was cleared
	dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`
	m68k: set a default value for MEMORY_RESERVE
	watchdog: f71808e_wdt: fix inaccurate report in WDIOC_GETTIMEOUT
	scsi: qla2xxx: Turn off target reset during issue_lip
	i2c: xlr: Fix a resource leak in the error handling path of 'xlr_i2c_probe()'
	xen-pciback: Fix return in pm_ctrl_init()
	net: davinci_emac: Fix interrupt pacing disable
	ACPI: PMIC: Fix intel_pmic_regs_handler() read accesses
	bonding: Fix a use-after-free problem when bond_sysfs_slave_add() failed
	mm/zsmalloc.c: close race window between zs_pool_dec_isolated() and zs_unregister_migration()
	llc: fix out-of-bound array index in llc_sk_dev_hash()
	nfc: pn533: Fix double free when pn533_fill_fragment_skbs() fails
	vsock: prevent unnecessary refcnt inc for nonblocking connect
	USB: chipidea: fix interrupt deadlock
	ARM: 9156/1: drop cc-option fallbacks for architecture selection
	powerpc/bpf: Validate branch ranges
	powerpc/bpf: Fix BPF_SUB when imm == 0x80000000
	mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks
	mm, oom: do not trigger out_of_memory from the #PF
	PCI: Add PCI_EXP_DEVCTL_PAYLOAD_* macros
	net: mdio-mux: fix unbalanced put_device
	parisc/entry: fix trace test in syscall exit path
	PCI/MSI: Destroy sysfs before freeing entries
	scsi: lpfc: Fix list_add() corruption in lpfc_drain_txq()
	usb: musb: tusb6010: check return value after calling platform_get_resource()
	scsi: advansys: Fix kernel pointer leak
	ARM: dts: omap: fix gpmc,mux-add-data type
	usb: host: ohci-tmio: check return value after calling platform_get_resource()
	tty: tty_buffer: Fix the softlockup issue in flush_to_ldisc
	MIPS: sni: Fix the build
	scsi: target: Fix ordered tag handling
	scsi: target: Fix alua_tg_pt_gps_count tracking
	powerpc/5200: dts: fix memory node unit name
	ALSA: gus: fix null pointer dereference on pointer block
	powerpc/dcr: Use cmplwi instead of 3-argument cmpli
	sh: check return code of request_irq
	maple: fix wrong return value of maple_bus_init().
	sh: fix kconfig unmet dependency warning for FRAME_POINTER
	sh: define __BIG_ENDIAN for math-emu
	mips: BCM63XX: ensure that CPU_SUPPORTS_32BIT_KERNEL is set
	sched/core: Mitigate race cpus_share_cache()/update_top_cache_domain()
	net: bnx2x: fix variable dereferenced before check
	iavf: Fix for the false positive ASQ/ARQ errors while issuing VF reset
	mips: bcm63xx: add support for clk_get_parent()
	platform/x86: hp_accel: Fix an error handling path in 'lis3lv02d_probe()'
	NFC: reorganize the functions in nci_request
	NFC: reorder the logic in nfc_{un,}register_device
	perf/x86/intel/uncore: Fix filter_tid mask for CHA events on Skylake Server
	perf/x86/intel/uncore: Fix IIO event constraints for Skylake Server
	tun: fix bonding active backup with arp monitoring
	hexagon: export raw I/O routines for modules
	mm: kmemleak: slob: respect SLAB_NOLEAKTRACE flag
	btrfs: fix memory ordering between normal and ordered work functions
	parisc/sticon: fix reverse colors
	cfg80211: call cfg80211_stop_ap when switch from P2P_GO type
	drm/udl: fix control-message timeout
	drm/amdgpu: fix set scaling mode Full/Full aspect/Center not works on vga and dvi connectors
	batman-adv: Keep fragments equally sized
	batman-adv: Fix own OGM check in aggregated OGMs
	batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN
	batman-adv: mcast: fix duplicate mcast packets from BLA backbone to mesh
	batman-adv: Consider fragmentation for needed_headroom
	batman-adv: Reserve needed_*room for fragments
	batman-adv: Don't always reallocate the fragmentation skb head
	ASoC: DAPM: Cover regression by kctl change notification fix
	usb: max-3421: Use driver data instead of maintaining a list of bound devices
	soc/tegra: pmc: Fix imbalanced clock disabling in error code path
	Linux 4.9.291

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I23d798c10aebab1e51add60ccb34a8b289d49a4d
This commit is contained in:
Greg Kroah-Hartman
2021-11-26 12:41:38 +01:00
223 changed files with 1301 additions and 672 deletions

View File

@@ -13,6 +13,14 @@ common regulator binding documented in:
Required properties of the main device node (the parent!): Required properties of the main device node (the parent!):
- s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
[1] If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
property is specified, then all the eight voltage values for the
's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
Optional properties of the main device node (the parent!):
- s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV) - s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV)
units for buck2 when changing voltage using gpio dvs. Refer to [1] below units for buck2 when changing voltage using gpio dvs. Refer to [1] below
for additional information. for additional information.
@@ -25,26 +33,13 @@ Required properties of the main device node (the parent!):
units for buck4 when changing voltage using gpio dvs. Refer to [1] below units for buck4 when changing voltage using gpio dvs. Refer to [1] below
for additional information. for additional information.
- s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
[1] If none of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
property is specified, the 's5m8767,pmic-buck[2/3/4]-dvs-voltage'
property should specify atleast one voltage level (which would be a
safe operating voltage).
If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
property is specified, then all the eight voltage values for the
's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
Optional properties of the main device node (the parent!):
- s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs. - s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs.
- s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs. - s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs.
- s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs. - s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs.
Additional properties required if either of the optional properties are used: Additional properties required if either of the optional properties are used:
- s5m8767,pmic-buck234-default-dvs-idx: Default voltage setting selected from - s5m8767,pmic-buck-default-dvs-idx: Default voltage setting selected from
the possible 8 options selectable by the dvs gpios. The value of this the possible 8 options selectable by the dvs gpios. The value of this
property should be between 0 and 7. If not specified or if out of range, the property should be between 0 and 7. If not specified or if out of range, the
default value of this property is set to 0. default value of this property is set to 0.

View File

@@ -1,6 +1,6 @@
VERSION = 4 VERSION = 4
PATCHLEVEL = 9 PATCHLEVEL = 9
SUBLEVEL = 290 SUBLEVEL = 291
EXTRAVERSION = EXTRAVERSION =
NAME = Roaring Lionus NAME = Roaring Lionus

View File

@@ -64,15 +64,15 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra)
# Note that GCC does not numerically define an architecture version # Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes # macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible. # testing for a specific architecture or later rather impossible.
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m
arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a) arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a
arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6) arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6
# Only override the compiler option if ARMv6. The ARMv6K extensions are # Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7 # always available in ARMv7
ifeq ($(CONFIG_CPU_32v6),y) ifeq ($(CONFIG_CPU_32v6),y)
arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k) arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k
endif endif
arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t) arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te
arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t
arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4 arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4
arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3 arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3
@@ -86,7 +86,7 @@ tune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi
tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi
tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM946E) =$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi) tune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e
tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi
@@ -94,11 +94,11 @@ tune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi
tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110 tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110
tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100 tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100
tune-$(CONFIG_CPU_XSCALE) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale tune-$(CONFIG_CPU_XSCALE) =-mtune=xscale
tune-$(CONFIG_CPU_XSC3) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale tune-$(CONFIG_CPU_XSC3) =-mtune=xscale
tune-$(CONFIG_CPU_FEROCEON) =$(call cc-option,-mtune=marvell-f,-mtune=xscale) tune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale
tune-$(CONFIG_CPU_V6) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) tune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s
tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) tune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s
# Evaluate tune cc-option calls now # Evaluate tune cc-option calls now
tune-y := $(tune-y) tune-y := $(tune-y)

View File

@@ -28,7 +28,7 @@
compatible = "smsc,lan9221","smsc,lan9115"; compatible = "smsc,lan9221","smsc,lan9115";
bank-width = <2>; bank-width = <2>;
gpmc,mux-add-data; gpmc,mux-add-data = <0>;
gpmc,cs-on-ns = <0>; gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <42>; gpmc,cs-rd-off-ns = <42>;
gpmc,cs-wr-off-ns = <36>; gpmc,cs-wr-off-ns = <36>;

View File

@@ -352,7 +352,7 @@
compatible = "bosch,bma180"; compatible = "bosch,bma180";
reg = <0x41>; reg = <0x41>;
pinctrl-names = "default"; pinctrl-names = "default";
pintcrl-0 = <&bma180_pins>; pinctrl-0 = <&bma180_pins>;
interrupt-parent = <&gpio4>; interrupt-parent = <&gpio4>;
interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_115 */ interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_115 */
}; };

View File

@@ -25,7 +25,7 @@
compatible = "smsc,lan9221","smsc,lan9115"; compatible = "smsc,lan9221","smsc,lan9115";
bank-width = <2>; bank-width = <2>;
gpmc,mux-add-data; gpmc,mux-add-data = <0>;
gpmc,cs-on-ns = <0>; gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <42>; gpmc,cs-rd-off-ns = <42>;
gpmc,cs-wr-off-ns = <36>; gpmc,cs-wr-off-ns = <36>;

View File

@@ -51,8 +51,7 @@ int notrace unwind_frame(struct stackframe *frame)
frame->sp = frame->fp; frame->sp = frame->fp;
frame->fp = *(unsigned long *)(fp); frame->fp = *(unsigned long *)(fp);
frame->pc = frame->lr; frame->pc = *(unsigned long *)(fp + 4);
frame->lr = *(unsigned long *)(fp + 4);
#else #else
/* check current frame pointer is within bounds */ /* check current frame pointer is within bounds */
if (fp < low + 12 || fp > high - 4) if (fp < low + 12 || fp > high - 4)

View File

@@ -731,7 +731,7 @@ config CPU_BIG_ENDIAN
config CPU_ENDIAN_BE8 config CPU_ENDIAN_BE8
bool bool
depends on CPU_BIG_ENDIAN depends on CPU_BIG_ENDIAN
default CPU_V6 || CPU_V6K || CPU_V7 default CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
help help
Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors. Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors.

View File

@@ -40,6 +40,7 @@ void __raw_readsw(const void __iomem *addr, void *data, int len)
*dst++ = *src; *dst++ = *src;
} }
EXPORT_SYMBOL(__raw_readsw);
/* /*
* __raw_writesw - read words a short at a time * __raw_writesw - read words a short at a time
@@ -60,6 +61,7 @@ void __raw_writesw(void __iomem *addr, const void *data, int len)
} }
EXPORT_SYMBOL(__raw_writesw);
/* Pretty sure len is pre-adjusted for the length of the access already */ /* Pretty sure len is pre-adjusted for the length of the access already */
void __raw_readsl(const void __iomem *addr, void *data, int len) void __raw_readsl(const void __iomem *addr, void *data, int len)
@@ -75,6 +77,7 @@ void __raw_readsl(const void __iomem *addr, void *data, int len)
} }
EXPORT_SYMBOL(__raw_readsl);
void __raw_writesl(void __iomem *addr, const void *data, int len) void __raw_writesl(void __iomem *addr, const void *data, int len)
{ {
@@ -89,3 +92,4 @@ void __raw_writesl(void __iomem *addr, const void *data, int len)
} }
EXPORT_SYMBOL(__raw_writesl);

View File

@@ -41,7 +41,7 @@ config DISABLE_VHPT
config IA64_DEBUG_CMPXCHG config IA64_DEBUG_CMPXCHG
bool "Turn on compare-and-exchange bug checking (slow!)" bool "Turn on compare-and-exchange bug checking (slow!)"
depends on DEBUG_KERNEL depends on DEBUG_KERNEL && PRINTK
help help
Selecting this option turns on bug checking for the IA-64 Selecting this option turns on bug checking for the IA-64
compare-and-exchange instructions. This is slow! Itaniums compare-and-exchange instructions. This is slow! Itaniums

View File

@@ -184,6 +184,7 @@ config INIT_LCD
config MEMORY_RESERVE config MEMORY_RESERVE
int "Memory reservation (MiB)" int "Memory reservation (MiB)"
depends on (UCSIMM || UCDIMM) depends on (UCSIMM || UCDIMM)
default 0
help help
Reserve certain memory regions on 68x328 based boards. Reserve certain memory regions on 68x328 based boards.

View File

@@ -267,6 +267,9 @@ config BCM63XX
select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN
select SYS_HAS_EARLY_PRINTK select SYS_HAS_EARLY_PRINTK
select SYS_HAS_CPU_BMIPS32_3300
select SYS_HAS_CPU_BMIPS4350
select SYS_HAS_CPU_BMIPS4380
select SWAP_IO_SPACE select SWAP_IO_SPACE
select GPIOLIB select GPIOLIB
select HAVE_CLK select HAVE_CLK
@@ -1373,6 +1376,7 @@ config CPU_LOONGSON3
select WEAK_REORDERING_BEYOND_LLSC select WEAK_REORDERING_BEYOND_LLSC
select MIPS_PGD_C0_CONTEXT select MIPS_PGD_C0_CONTEXT
select MIPS_L1_CACHE_SHIFT_6 select MIPS_L1_CACHE_SHIFT_6
select MIPS_FP_SUPPORT
select GPIOLIB select GPIOLIB
help help
The Loongson 3 processor implements the MIPS64R2 instruction The Loongson 3 processor implements the MIPS64R2 instruction

View File

@@ -336,6 +336,12 @@ void clk_disable(struct clk *clk)
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);
struct clk *clk_get_parent(struct clk *clk)
{
return NULL;
}
EXPORT_SYMBOL(clk_get_parent);
unsigned long clk_get_rate(struct clk *clk) unsigned long clk_get_rate(struct clk *clk)
{ {
return clk->rate; return clk->rate;

View File

@@ -27,8 +27,8 @@
#define EX2(a,b) \ #define EX2(a,b) \
9: a,##b; \ 9: a,##b; \
.section __ex_table,"a"; \ .section __ex_table,"a"; \
PTR 9b,bad_stack; \ PTR 9b,fault; \
PTR 9b+4,bad_stack; \ PTR 9b+4,fault; \
.previous .previous
.set noreorder .set noreorder

View File

@@ -244,12 +244,3 @@ SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op)
{ {
return -ENOSYS; return -ENOSYS;
} }
/*
* If we ever come here the user sp is bad. Zap the process right away.
* Due to the bad stack signaling wouldn't work.
*/
asmlinkage void bad_stack(void)
{
do_exit(SIGSEGV);
}

View File

@@ -21,6 +21,7 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/delay.h>
#include <linux/err.h> #include <linux/err.h>
#include <lantiq_soc.h> #include <lantiq_soc.h>
@@ -39,6 +40,7 @@
#define LTQ_DMA_PCTRL 0x44 #define LTQ_DMA_PCTRL 0x44
#define LTQ_DMA_IRNEN 0xf4 #define LTQ_DMA_IRNEN 0xf4
#define DMA_ID_CHNR GENMASK(26, 20) /* channel number */
#define DMA_DESCPT BIT(3) /* descriptor complete irq */ #define DMA_DESCPT BIT(3) /* descriptor complete irq */
#define DMA_TX BIT(8) /* TX channel direction */ #define DMA_TX BIT(8) /* TX channel direction */
#define DMA_CHAN_ON BIT(0) /* channel on / off bit */ #define DMA_CHAN_ON BIT(0) /* channel on / off bit */
@@ -49,7 +51,6 @@
#define DMA_POLL BIT(31) /* turn on channel polling */ #define DMA_POLL BIT(31) /* turn on channel polling */
#define DMA_CLK_DIV4 BIT(6) /* polling clock divider */ #define DMA_CLK_DIV4 BIT(6) /* polling clock divider */
#define DMA_2W_BURST BIT(1) /* 2 word burst length */ #define DMA_2W_BURST BIT(1) /* 2 word burst length */
#define DMA_MAX_CHANNEL 20 /* the soc has 20 channels */
#define DMA_ETOP_ENDIANNESS (0xf << 8) /* endianness swap etop channels */ #define DMA_ETOP_ENDIANNESS (0xf << 8) /* endianness swap etop channels */
#define DMA_WEIGHT (BIT(17) | BIT(16)) /* default channel wheight */ #define DMA_WEIGHT (BIT(17) | BIT(16)) /* default channel wheight */
@@ -216,7 +217,7 @@ ltq_dma_init(struct platform_device *pdev)
{ {
struct clk *clk; struct clk *clk;
struct resource *res; struct resource *res;
unsigned id; unsigned int id, nchannels;
int i; int i;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -232,21 +233,24 @@ ltq_dma_init(struct platform_device *pdev)
clk_enable(clk); clk_enable(clk);
ltq_dma_w32_mask(0, DMA_RESET, LTQ_DMA_CTRL); ltq_dma_w32_mask(0, DMA_RESET, LTQ_DMA_CTRL);
usleep_range(1, 10);
/* disable all interrupts */ /* disable all interrupts */
ltq_dma_w32(0, LTQ_DMA_IRNEN); ltq_dma_w32(0, LTQ_DMA_IRNEN);
/* reset/configure each channel */ /* reset/configure each channel */
for (i = 0; i < DMA_MAX_CHANNEL; i++) { id = ltq_dma_r32(LTQ_DMA_ID);
nchannels = ((id & DMA_ID_CHNR) >> 20);
for (i = 0; i < nchannels; i++) {
ltq_dma_w32(i, LTQ_DMA_CS); ltq_dma_w32(i, LTQ_DMA_CS);
ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL); ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL);
ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL); ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL);
ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL); ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL);
} }
id = ltq_dma_r32(LTQ_DMA_ID);
dev_info(&pdev->dev, dev_info(&pdev->dev,
"Init done - hw rev: %X, ports: %d, channels: %d\n", "Init done - hw rev: %X, ports: %d, channels: %d\n",
id & 0x1f, (id >> 16) & 0xf, id >> 20); id & 0x1f, (id >> 16) & 0xf, nchannels);
return 0; return 0;
} }

View File

@@ -17,14 +17,14 @@ static int a20r_set_periodic(struct clock_event_device *evt)
{ {
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0x34; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0x34;
wmb(); wmb();
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV & 0xff;
wmb(); wmb();
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV >> 8; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV >> 8;
wmb(); wmb();
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0xb4; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0xb4;
wmb(); wmb();
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV & 0xff;
wmb(); wmb();
*(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV >> 8; *(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV >> 8;
wmb(); wmb();

View File

@@ -1849,8 +1849,8 @@ syscall_restore:
LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
/* Are we being ptraced? */ /* Are we being ptraced? */
ldw TASK_FLAGS(%r1),%r19 LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19
ldi _TIF_SYSCALL_TRACE_MASK,%r2 ldi _TIF_SINGLESTEP|_TIF_BLOCKSTEP,%r2
and,COND(=) %r19,%r2,%r0 and,COND(=) %r19,%r2,%r0
b,n syscall_restore_rfi b,n syscall_restore_rfi

View File

@@ -32,6 +32,7 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/ftrace.h> #include <linux/ftrace.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/kgdb.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <asm/current.h> #include <asm/current.h>
@@ -74,7 +75,10 @@ enum ipi_message_type {
IPI_CALL_FUNC, IPI_CALL_FUNC,
IPI_CPU_START, IPI_CPU_START,
IPI_CPU_STOP, IPI_CPU_STOP,
IPI_CPU_TEST IPI_CPU_TEST,
#ifdef CONFIG_KGDB
IPI_ENTER_KGDB,
#endif
}; };
@@ -170,7 +174,12 @@ ipi_interrupt(int irq, void *dev_id)
case IPI_CPU_TEST: case IPI_CPU_TEST:
smp_debug(100, KERN_DEBUG "CPU%d is alive!\n", this_cpu); smp_debug(100, KERN_DEBUG "CPU%d is alive!\n", this_cpu);
break; break;
#ifdef CONFIG_KGDB
case IPI_ENTER_KGDB:
smp_debug(100, KERN_DEBUG "CPU%d ENTER_KGDB\n", this_cpu);
kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
break;
#endif
default: default:
printk(KERN_CRIT "Unknown IPI num on CPU%d: %lu\n", printk(KERN_CRIT "Unknown IPI num on CPU%d: %lu\n",
this_cpu, which); this_cpu, which);
@@ -226,6 +235,12 @@ send_IPI_allbutself(enum ipi_message_type op)
} }
} }
#ifdef CONFIG_KGDB
void kgdb_roundup_cpus(void)
{
send_IPI_allbutself(IPI_ENTER_KGDB);
}
#endif
inline void inline void
smp_send_stop(void) { send_IPI_allbutself(IPI_CPU_STOP); } smp_send_stop(void) { send_IPI_allbutself(IPI_CPU_STOP); }

View File

@@ -940,9 +940,9 @@ void flush_tlb_all(void)
{ {
int do_recycle; int do_recycle;
__inc_irq_stat(irq_tlb_count);
do_recycle = 0; do_recycle = 0;
spin_lock(&sid_lock); spin_lock(&sid_lock);
__inc_irq_stat(irq_tlb_count);
if (dirty_space_ids > RECYCLE_THRESHOLD) { if (dirty_space_ids > RECYCLE_THRESHOLD) {
BUG_ON(recycle_inuse); /* FIXME: Use a semaphore/wait queue here */ BUG_ON(recycle_inuse); /* FIXME: Use a semaphore/wait queue here */
get_dirty_sids(&recycle_ndirty,recycle_dirty_array); get_dirty_sids(&recycle_ndirty,recycle_dirty_array);
@@ -961,8 +961,8 @@ void flush_tlb_all(void)
#else #else
void flush_tlb_all(void) void flush_tlb_all(void)
{ {
__inc_irq_stat(irq_tlb_count);
spin_lock(&sid_lock); spin_lock(&sid_lock);
__inc_irq_stat(irq_tlb_count);
flush_tlb_all_local(NULL); flush_tlb_all_local(NULL);
recycle_sids(); recycle_sids();
spin_unlock(&sid_lock); spin_unlock(&sid_lock);

View File

@@ -39,7 +39,7 @@
}; };
}; };
memory { memory@0 {
device_type = "memory"; device_type = "memory";
reg = <0x00000000 0x08000000>; // 128MB reg = <0x00000000 0x08000000>; // 128MB
}; };

View File

@@ -20,7 +20,7 @@
model = "intercontrol,digsy-mtc"; model = "intercontrol,digsy-mtc";
compatible = "intercontrol,digsy-mtc"; compatible = "intercontrol,digsy-mtc";
memory { memory@0 {
reg = <0x00000000 0x02000000>; // 32MB reg = <0x00000000 0x02000000>; // 32MB
}; };

View File

@@ -36,7 +36,7 @@
}; };
}; };
memory { memory@0 {
device_type = "memory"; device_type = "memory";
reg = <0x00000000 0x04000000>; // 64MB reg = <0x00000000 0x04000000>; // 64MB
}; };

View File

@@ -35,7 +35,7 @@
led4 { gpios = <&gpio_simple 2 1>; }; led4 { gpios = <&gpio_simple 2 1>; };
}; };
memory { memory@0 {
reg = <0x00000000 0x10000000>; // 256MB reg = <0x00000000 0x10000000>; // 256MB
}; };

View File

@@ -36,7 +36,7 @@
}; };
}; };
memory { memory@0 {
reg = <0x00000000 0x08000000>; // 128MB RAM reg = <0x00000000 0x08000000>; // 128MB RAM
}; };

View File

@@ -37,7 +37,7 @@
}; };
}; };
memory: memory { memory: memory@0 {
device_type = "memory"; device_type = "memory";
reg = <0x00000000 0x04000000>; // 64MB reg = <0x00000000 0x04000000>; // 64MB
}; };

View File

@@ -16,7 +16,7 @@
model = "ifm,o2d"; model = "ifm,o2d";
compatible = "ifm,o2d"; compatible = "ifm,o2d";
memory { memory@0 {
reg = <0x00000000 0x08000000>; // 128MB reg = <0x00000000 0x08000000>; // 128MB
}; };

View File

@@ -23,7 +23,7 @@
model = "ifm,o2d"; model = "ifm,o2d";
compatible = "ifm,o2d"; compatible = "ifm,o2d";
memory { memory@0 {
reg = <0x00000000 0x04000000>; // 64MB reg = <0x00000000 0x04000000>; // 64MB
}; };

View File

@@ -16,7 +16,7 @@
model = "ifm,o2dnt2"; model = "ifm,o2dnt2";
compatible = "ifm,o2d"; compatible = "ifm,o2d";
memory { memory@0 {
reg = <0x00000000 0x08000000>; // 128MB reg = <0x00000000 0x08000000>; // 128MB
}; };

View File

@@ -16,7 +16,7 @@
model = "ifm,o3dnt"; model = "ifm,o3dnt";
compatible = "ifm,o2d"; compatible = "ifm,o2d";
memory { memory@0 {
reg = <0x00000000 0x04000000>; // 64MB reg = <0x00000000 0x04000000>; // 64MB
}; };

View File

@@ -26,7 +26,7 @@
model = "phytec,pcm032"; model = "phytec,pcm032";
compatible = "phytec,pcm032"; compatible = "phytec,pcm032";
memory { memory@0 {
reg = <0x00000000 0x08000000>; // 128MB reg = <0x00000000 0x08000000>; // 128MB
}; };

View File

@@ -36,7 +36,7 @@
}; };
}; };
memory { memory@0 {
device_type = "memory"; device_type = "memory";
reg = <0x00000000 0x04000000>; // 64MB reg = <0x00000000 0x04000000>; // 64MB
}; };

View File

@@ -177,13 +177,26 @@
#define PPC_NEG(d, a) EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a)) #define PPC_NEG(d, a) EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a))
/* Long jump; (unconditional 'branch') */ /* Long jump; (unconditional 'branch') */
#define PPC_JMP(dest) EMIT(PPC_INST_BRANCH | \ #define PPC_JMP(dest) \
(((dest) - (ctx->idx * 4)) & 0x03fffffc)) do { \
long offset = (long)(dest) - (ctx->idx * 4); \
if (offset < -0x2000000 || offset > 0x1fffffc || offset & 0x3) { \
pr_err_ratelimited("Branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \
return -ERANGE; \
} \
EMIT(PPC_INST_BRANCH | (offset & 0x03fffffc)); \
} while (0)
/* "cond" here covers BO:BI fields. */ /* "cond" here covers BO:BI fields. */
#define PPC_BCC_SHORT(cond, dest) EMIT(PPC_INST_BRANCH_COND | \ #define PPC_BCC_SHORT(cond, dest) \
(((cond) & 0x3ff) << 16) | \ do { \
(((dest) - (ctx->idx * 4)) & \ long offset = (long)(dest) - (ctx->idx * 4); \
0xfffc)) if (offset < -0x8000 || offset > 0x7fff || offset & 0x3) { \
pr_err_ratelimited("Conditional branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \
return -ERANGE; \
} \
EMIT(PPC_INST_BRANCH_COND | (((cond) & 0x3ff) << 16) | (offset & 0xfffc)); \
} while (0)
/* Sign-extended 32-bit immediate load */ /* Sign-extended 32-bit immediate load */
#define PPC_LI32(d, i) do { \ #define PPC_LI32(d, i) do { \
if ((int)(uintptr_t)(i) >= -32768 && \ if ((int)(uintptr_t)(i) >= -32768 && \

View File

@@ -239,7 +239,7 @@ static void bpf_jit_emit_func_call(u32 *image, struct codegen_context *ctx, u64
PPC_BLRL(); PPC_BLRL();
} }
static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out) static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
{ {
/* /*
* By now, the eBPF program has already setup parameters in r3, r4 and r5 * By now, the eBPF program has already setup parameters in r3, r4 and r5
@@ -300,7 +300,9 @@ static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32
bpf_jit_emit_common_epilogue(image, ctx); bpf_jit_emit_common_epilogue(image, ctx);
PPC_BCTR(); PPC_BCTR();
/* out: */ /* out: */
return 0;
} }
/* Assemble the body code between the prologue & epilogue */ /* Assemble the body code between the prologue & epilogue */
@@ -310,7 +312,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
{ {
const struct bpf_insn *insn = fp->insnsi; const struct bpf_insn *insn = fp->insnsi;
int flen = fp->len; int flen = fp->len;
int i; int i, ret;
/* Start of epilogue code - will only be valid 2nd pass onwards */ /* Start of epilogue code - will only be valid 2nd pass onwards */
u32 exit_addr = addrs[flen]; u32 exit_addr = addrs[flen];
@@ -361,18 +363,25 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
PPC_SUB(dst_reg, dst_reg, src_reg); PPC_SUB(dst_reg, dst_reg, src_reg);
goto bpf_alu32_trunc; goto bpf_alu32_trunc;
case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */ case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */ case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
if (!imm) {
goto bpf_alu32_trunc;
} else if (imm >= -32768 && imm < 32768) {
PPC_ADDI(dst_reg, dst_reg, IMM_L(imm));
} else {
PPC_LI32(b2p[TMP_REG_1], imm);
PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]);
}
goto bpf_alu32_trunc;
case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */ case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
if (BPF_OP(code) == BPF_SUB) if (!imm) {
imm = -imm; goto bpf_alu32_trunc;
if (imm) { } else if (imm > -32768 && imm <= 32768) {
if (imm >= -32768 && imm < 32768) PPC_ADDI(dst_reg, dst_reg, IMM_L(-imm));
PPC_ADDI(dst_reg, dst_reg, IMM_L(imm)); } else {
else { PPC_LI32(b2p[TMP_REG_1], imm);
PPC_LI32(b2p[TMP_REG_1], imm); PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]);
PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]);
}
} }
goto bpf_alu32_trunc; goto bpf_alu32_trunc;
case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */ case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
@@ -938,7 +947,9 @@ common_load:
*/ */
case BPF_JMP | BPF_CALL | BPF_X: case BPF_JMP | BPF_CALL | BPF_X:
ctx->seen |= SEEN_TAILCALL; ctx->seen |= SEEN_TAILCALL;
bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]); ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
if (ret < 0)
return ret;
break; break;
default: default:

View File

@@ -98,9 +98,8 @@ int __init mpc85xx_setup_pmc(void)
pr_err("Could not map guts node address\n"); pr_err("Could not map guts node address\n");
return -ENOMEM; return -ENOMEM;
} }
qoriq_pm_ops = &mpc85xx_pm_ops;
} }
qoriq_pm_ops = &mpc85xx_pm_ops;
return 0; return 0;
} }

View File

@@ -15,7 +15,7 @@
#include <asm/export.h> #include <asm/export.h>
#define DCR_ACCESS_PROLOG(table) \ #define DCR_ACCESS_PROLOG(table) \
cmpli cr0,r3,1024; \ cmplwi cr0,r3,1024; \
rlwinm r3,r3,4,18,27; \ rlwinm r3,r3,4,18,27; \
lis r5,table@h; \ lis r5,table@h; \
ori r5,r5,table@l; \ ori r5,r5,table@l; \

View File

@@ -662,9 +662,10 @@ void __gmap_zap(struct gmap *gmap, unsigned long gaddr)
vmaddr |= gaddr & ~PMD_MASK; vmaddr |= gaddr & ~PMD_MASK;
/* Get pointer to the page table entry */ /* Get pointer to the page table entry */
ptep = get_locked_pte(gmap->mm, vmaddr, &ptl); ptep = get_locked_pte(gmap->mm, vmaddr, &ptl);
if (likely(ptep)) if (likely(ptep)) {
ptep_zap_unused(gmap->mm, vmaddr, ptep, 0); ptep_zap_unused(gmap->mm, vmaddr, ptep, 0);
pte_unmap_unlock(ptep, ptl); pte_unmap_unlock(ptep, ptl);
}
} }
} }
EXPORT_SYMBOL_GPL(__gmap_zap); EXPORT_SYMBOL_GPL(__gmap_zap);

View File

@@ -60,6 +60,7 @@ config DUMP_CODE
config DWARF_UNWINDER config DWARF_UNWINDER
bool "Enable the DWARF unwinder for stacktraces" bool "Enable the DWARF unwinder for stacktraces"
depends on DEBUG_KERNEL
select FRAME_POINTER select FRAME_POINTER
depends on SUPERH32 depends on SUPERH32
default n default n

View File

@@ -25,6 +25,14 @@
#ifndef _SFP_MACHINE_H #ifndef _SFP_MACHINE_H
#define _SFP_MACHINE_H #define _SFP_MACHINE_H
#ifdef __BIG_ENDIAN__
#define __BYTE_ORDER __BIG_ENDIAN
#define __LITTLE_ENDIAN 0
#else
#define __BYTE_ORDER __LITTLE_ENDIAN
#define __BIG_ENDIAN 0
#endif
#define _FP_W_TYPE_SIZE 32 #define _FP_W_TYPE_SIZE 32
#define _FP_W_TYPE unsigned long #define _FP_W_TYPE unsigned long
#define _FP_WS_TYPE signed long #define _FP_WS_TYPE signed long

View File

@@ -76,8 +76,9 @@ static void shx3_prepare_cpus(unsigned int max_cpus)
BUILD_BUG_ON(SMP_MSG_NR >= 8); BUILD_BUG_ON(SMP_MSG_NR >= 8);
for (i = 0; i < SMP_MSG_NR; i++) for (i = 0; i < SMP_MSG_NR; i++)
request_irq(104 + i, ipi_interrupt_handler, if (request_irq(104 + i, ipi_interrupt_handler,
IRQF_PERCPU, "IPI", (void *)(long)i); IRQF_PERCPU, "IPI", (void *)(long)i))
pr_err("Failed to request irq %d\n", i);
for (i = 0; i < max_cpus; i++) for (i = 0; i < max_cpus; i++)
set_cpu_present(i, true); set_cpu_present(i, true);

View File

@@ -3363,6 +3363,9 @@ static int skx_cha_hw_config(struct intel_uncore_box *box, struct perf_event *ev
struct hw_perf_event_extra *reg1 = &event->hw.extra_reg; struct hw_perf_event_extra *reg1 = &event->hw.extra_reg;
struct extra_reg *er; struct extra_reg *er;
int idx = 0; int idx = 0;
/* Any of the CHA events may be filtered by Thread/Core-ID.*/
if (event->hw.config & SNBEP_CBO_PMON_CTL_TID_EN)
idx = SKX_CHA_MSR_PMON_BOX_FILTER_TID;
for (er = skx_uncore_cha_extra_regs; er->msr; er++) { for (er = skx_uncore_cha_extra_regs; er->msr; er++) {
if (er->event != (event->hw.config & er->config_mask)) if (er->event != (event->hw.config & er->config_mask))
@@ -3430,6 +3433,7 @@ static struct event_constraint skx_uncore_iio_constraints[] = {
UNCORE_EVENT_CONSTRAINT(0xc0, 0xc), UNCORE_EVENT_CONSTRAINT(0xc0, 0xc),
UNCORE_EVENT_CONSTRAINT(0xc5, 0xc), UNCORE_EVENT_CONSTRAINT(0xc5, 0xc),
UNCORE_EVENT_CONSTRAINT(0xd4, 0xc), UNCORE_EVENT_CONSTRAINT(0xd4, 0xc),
UNCORE_EVENT_CONSTRAINT(0xd5, 0xc),
EVENT_CONSTRAINT_END EVENT_CONSTRAINT_END
}; };

View File

@@ -19,7 +19,7 @@
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
#define CURRENT_MASK (~(THREAD_SIZE - 1)) #define CURRENT_MASK (~(THREAD_SIZE - 1))
#define EXCEPTION_STACK_ORDER (0 + KASAN_STACK_ORDER) #define EXCEPTION_STACK_ORDER (1 + KASAN_STACK_ORDER)
#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER) #define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1) #define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)

View File

@@ -284,8 +284,10 @@ void kvm_set_posted_intr_wakeup_handler(void (*handler)(void))
{ {
if (handler) if (handler)
kvm_posted_intr_wakeup_handler = handler; kvm_posted_intr_wakeup_handler = handler;
else else {
kvm_posted_intr_wakeup_handler = dummy_handler; kvm_posted_intr_wakeup_handler = dummy_handler;
synchronize_rcu();
}
} }
EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler); EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler);

View File

@@ -138,12 +138,14 @@ static void pcrypt_aead_enc(struct padata_priv *padata)
{ {
struct pcrypt_request *preq = pcrypt_padata_request(padata); struct pcrypt_request *preq = pcrypt_padata_request(padata);
struct aead_request *req = pcrypt_request_ctx(preq); struct aead_request *req = pcrypt_request_ctx(preq);
int ret;
padata->info = crypto_aead_encrypt(req); ret = crypto_aead_encrypt(req);
if (padata->info == -EINPROGRESS) if (ret == -EINPROGRESS)
return; return;
padata->info = ret;
padata_do_serial(padata); padata_do_serial(padata);
} }
@@ -180,12 +182,14 @@ static void pcrypt_aead_dec(struct padata_priv *padata)
{ {
struct pcrypt_request *preq = pcrypt_padata_request(padata); struct pcrypt_request *preq = pcrypt_padata_request(padata);
struct aead_request *req = pcrypt_request_ctx(preq); struct aead_request *req = pcrypt_request_ctx(preq);
int ret;
padata->info = crypto_aead_decrypt(req); ret = crypto_aead_decrypt(req);
if (padata->info == -EINPROGRESS) if (ret == -EINPROGRESS)
return; return;
padata->info = ret;
padata_do_serial(padata); padata_do_serial(padata);
} }

View File

@@ -259,6 +259,8 @@ extern struct acpi_bit_register_info
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a); ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a);
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b); ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b);
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a_s0);
ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b_s0);
/***************************************************************************** /*****************************************************************************
* *

View File

@@ -184,17 +184,13 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
{ {
acpi_status status;
u8 sleep_type_value; u8 sleep_type_value;
ACPI_FUNCTION_TRACE(hw_extended_wake_prep); ACPI_FUNCTION_TRACE(hw_extended_wake_prep);
status = acpi_get_sleep_type_data(ACPI_STATE_S0, if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
&acpi_gbl_sleep_type_a,
&acpi_gbl_sleep_type_b);
if (ACPI_SUCCESS(status)) {
sleep_type_value = sleep_type_value =
((acpi_gbl_sleep_type_a << ACPI_X_SLEEP_TYPE_POSITION) & ((acpi_gbl_sleep_type_a_s0 << ACPI_X_SLEEP_TYPE_POSITION) &
ACPI_X_SLEEP_TYPE_MASK); ACPI_X_SLEEP_TYPE_MASK);
(void)acpi_write((u64)(sleep_type_value | ACPI_X_SLEEP_ENABLE), (void)acpi_write((u64)(sleep_type_value | ACPI_X_SLEEP_ENABLE),

View File

@@ -217,7 +217,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
{ {
acpi_status status; acpi_status status = AE_OK;
struct acpi_bit_register_info *sleep_type_reg_info; struct acpi_bit_register_info *sleep_type_reg_info;
struct acpi_bit_register_info *sleep_enable_reg_info; struct acpi_bit_register_info *sleep_enable_reg_info;
u32 pm1a_control; u32 pm1a_control;
@@ -230,10 +230,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
* This is unclear from the ACPI Spec, but it is required * This is unclear from the ACPI Spec, but it is required
* by some machines. * by some machines.
*/ */
status = acpi_get_sleep_type_data(ACPI_STATE_S0, if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
&acpi_gbl_sleep_type_a,
&acpi_gbl_sleep_type_b);
if (ACPI_SUCCESS(status)) {
sleep_type_reg_info = sleep_type_reg_info =
acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE); acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE);
sleep_enable_reg_info = sleep_enable_reg_info =
@@ -254,9 +251,9 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
/* Insert the SLP_TYP bits */ /* Insert the SLP_TYP bits */
pm1a_control |= (acpi_gbl_sleep_type_a << pm1a_control |= (acpi_gbl_sleep_type_a_s0 <<
sleep_type_reg_info->bit_position); sleep_type_reg_info->bit_position);
pm1b_control |= (acpi_gbl_sleep_type_b << pm1b_control |= (acpi_gbl_sleep_type_b_s0 <<
sleep_type_reg_info->bit_position); sleep_type_reg_info->bit_position);
/* Write the control registers and ignore any errors */ /* Write the control registers and ignore any errors */

View File

@@ -315,6 +315,13 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
status = acpi_get_sleep_type_data(ACPI_STATE_S0,
&acpi_gbl_sleep_type_a_s0,
&acpi_gbl_sleep_type_b_s0);
if (ACPI_FAILURE(status)) {
acpi_gbl_sleep_type_a_s0 = ACPI_SLEEP_TYPE_INVALID;
}
/* Execute the _PTS method (Prepare To Sleep) */ /* Execute the _PTS method (Prepare To Sleep) */
arg_list.count = 1; arg_list.count = 1;

View File

@@ -187,7 +187,7 @@ static int acpi_battery_is_charged(struct acpi_battery *battery)
return 1; return 1;
/* fallback to using design values for broken batteries */ /* fallback to using design values for broken batteries */
if (battery->design_capacity == battery->capacity_now) if (battery->design_capacity <= battery->capacity_now)
return 1; return 1;
/* we don't do any sort of metric based on percentages */ /* we don't do any sort of metric based on percentages */

View File

@@ -216,31 +216,36 @@ static acpi_status intel_pmic_regs_handler(u32 function,
void *handler_context, void *region_context) void *handler_context, void *region_context)
{ {
struct intel_pmic_opregion *opregion = region_context; struct intel_pmic_opregion *opregion = region_context;
int result = 0; int result = -EINVAL;
switch (address) { if (function == ACPI_WRITE) {
case 0: switch (address) {
return AE_OK; case 0:
case 1: return AE_OK;
opregion->ctx.addr |= (*value64 & 0xff) << 8; case 1:
return AE_OK; opregion->ctx.addr |= (*value64 & 0xff) << 8;
case 2: return AE_OK;
opregion->ctx.addr |= *value64 & 0xff; case 2:
return AE_OK; opregion->ctx.addr |= *value64 & 0xff;
case 3: return AE_OK;
opregion->ctx.val = *value64 & 0xff; case 3:
return AE_OK; opregion->ctx.val = *value64 & 0xff;
case 4: return AE_OK;
if (*value64) { case 4:
result = regmap_write(opregion->regmap, opregion->ctx.addr, if (*value64) {
opregion->ctx.val); result = regmap_write(opregion->regmap, opregion->ctx.addr,
} else { opregion->ctx.val);
result = regmap_read(opregion->regmap, opregion->ctx.addr, } else {
&opregion->ctx.val); result = regmap_read(opregion->regmap, opregion->ctx.addr,
if (result == 0) &opregion->ctx.val);
*value64 = opregion->ctx.val; }
opregion->ctx.addr = 0;
} }
memset(&opregion->ctx, 0x00, sizeof(opregion->ctx)); }
if (function == ACPI_READ && address == 3) {
*value64 = opregion->ctx.val;
return AE_OK;
} }
if (result < 0) { if (result < 0) {

View File

@@ -114,6 +114,12 @@ static const unsigned long ata_eh_identify_timeouts[] = {
ULONG_MAX, ULONG_MAX,
}; };
static const unsigned long ata_eh_revalidate_timeouts[] = {
15000, /* Some drives are slow to read log pages when waking-up */
15000, /* combined time till here is enough even for media access */
ULONG_MAX,
};
static const unsigned long ata_eh_flush_timeouts[] = { static const unsigned long ata_eh_flush_timeouts[] = {
15000, /* be generous with flush */ 15000, /* be generous with flush */
15000, /* ditto */ 15000, /* ditto */
@@ -150,6 +156,8 @@ static const struct ata_eh_cmd_timeout_ent
ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = { ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = {
{ .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI), { .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI),
.timeouts = ata_eh_identify_timeouts, }, .timeouts = ata_eh_identify_timeouts, },
{ .commands = CMDS(ATA_CMD_READ_LOG_EXT, ATA_CMD_READ_LOG_DMA_EXT),
.timeouts = ata_eh_revalidate_timeouts, },
{ .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT), { .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT),
.timeouts = ata_eh_other_timeouts, }, .timeouts = ata_eh_other_timeouts, },
{ .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT), { .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT),

View File

@@ -283,6 +283,16 @@ static int img_ascii_lcd_display(struct img_ascii_lcd_ctx *ctx,
if (msg[count - 1] == '\n') if (msg[count - 1] == '\n')
count--; count--;
if (!count) {
/* clear the LCD */
devm_kfree(&ctx->pdev->dev, ctx->message);
ctx->message = NULL;
ctx->message_len = 0;
memset(ctx->curr, ' ', ctx->cfg->num_chars);
ctx->cfg->update(ctx);
return 0;
}
new_msg = devm_kmalloc(&ctx->pdev->dev, count + 1, GFP_KERNEL); new_msg = devm_kmalloc(&ctx->pdev->dev, count + 1, GFP_KERNEL);
if (!new_msg) if (!new_msg)
return -ENOMEM; return -ENOMEM;

View File

@@ -413,6 +413,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)
&kdev->kobj, "state%d", i); &kdev->kobj, "state%d", i);
if (ret) { if (ret) {
kobject_put(&kobj->kobj); kobject_put(&kobj->kobj);
kfree(kobj);
goto error_state; goto error_state;
} }
kobject_uevent(&kobj->kobj, KOBJ_ADD); kobject_uevent(&kobj->kobj, KOBJ_ADD);
@@ -543,6 +544,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev)
&kdev->kobj, "driver"); &kdev->kobj, "driver");
if (ret) { if (ret) {
kobject_put(&kdrv->kobj); kobject_put(&kdrv->kobj);
kfree(kdrv);
return ret; return ret;
} }
@@ -629,7 +631,6 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
if (!kdev) if (!kdev)
return -ENOMEM; return -ENOMEM;
kdev->dev = dev; kdev->dev = dev;
dev->kobj_dev = kdev;
init_completion(&kdev->kobj_unregister); init_completion(&kdev->kobj_unregister);
@@ -637,9 +638,11 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
"cpuidle"); "cpuidle");
if (error) { if (error) {
kobject_put(&kdev->kobj); kobject_put(&kdev->kobj);
kfree(kdev);
return error; return error;
} }
dev->kobj_dev = kdev;
kobject_uevent(&kdev->kobj, KOBJ_ADD); kobject_uevent(&kdev->kobj, KOBJ_ADD);
return 0; return 0;

View File

@@ -195,6 +195,13 @@ static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)
val = ADF_CSR_RD(pmisc_bar_addr, pf2vf_offset); val = ADF_CSR_RD(pmisc_bar_addr, pf2vf_offset);
} while ((val & int_bit) && (count++ < ADF_IOV_MSG_ACK_MAX_RETRY)); } while ((val & int_bit) && (count++ < ADF_IOV_MSG_ACK_MAX_RETRY));
if (val != msg) {
dev_dbg(&GET_DEV(accel_dev),
"Collision - PFVF CSR overwritten by remote function\n");
ret = -EIO;
goto out;
}
if (val & int_bit) { if (val & int_bit) {
dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n"); dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
val &= ~int_bit; val &= ~int_bit;
@@ -243,6 +250,11 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
/* Read message from the VF */ /* Read message from the VF */
msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr)); msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr));
if (!(msg & ADF_VF2PF_INT)) {
dev_info(&GET_DEV(accel_dev),
"Spurious VF2PF interrupt, msg %X. Ignored\n", msg);
goto out;
}
/* To ACK, clear the VF2PFINT bit */ /* To ACK, clear the VF2PFINT bit */
msg &= ~ADF_VF2PF_INT; msg &= ~ADF_VF2PF_INT;
@@ -326,6 +338,7 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
if (resp && adf_iov_putmsg(accel_dev, resp, vf_nr)) if (resp && adf_iov_putmsg(accel_dev, resp, vf_nr))
dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n"); dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
out:
/* re-enable interrupt on PF from this VF */ /* re-enable interrupt on PF from this VF */
adf_enable_vf2pf_interrupts(accel_dev, (1 << vf_nr)); adf_enable_vf2pf_interrupts(accel_dev, (1 << vf_nr));
return; return;

View File

@@ -123,6 +123,11 @@ static void adf_pf2vf_bh_handler(void *data)
/* Read the message from PF */ /* Read the message from PF */
msg = ADF_CSR_RD(pmisc_bar_addr, hw_data->get_pf2vf_offset(0)); msg = ADF_CSR_RD(pmisc_bar_addr, hw_data->get_pf2vf_offset(0));
if (!(msg & ADF_PF2VF_INT)) {
dev_info(&GET_DEV(accel_dev),
"Spurious PF2VF interrupt, msg %X. Ignored\n", msg);
goto out;
}
if (!(msg & ADF_PF2VF_MSGORIGIN_SYSTEM)) if (!(msg & ADF_PF2VF_MSGORIGIN_SYSTEM))
/* Ignore legacy non-system (non-kernel) PF2VF messages */ /* Ignore legacy non-system (non-kernel) PF2VF messages */
@@ -171,6 +176,7 @@ static void adf_pf2vf_bh_handler(void *data)
msg &= ~BIT(0); msg &= ~BIT(0);
ADF_CSR_WR(pmisc_bar_addr, hw_data->get_pf2vf_offset(0), msg); ADF_CSR_WR(pmisc_bar_addr, hw_data->get_pf2vf_offset(0), msg);
out:
/* Re-enable PF2VF interrupts */ /* Re-enable PF2VF interrupts */
adf_enable_pf2vf_interrupts(accel_dev); adf_enable_pf2vf_interrupts(accel_dev);
return; return;

View File

@@ -156,7 +156,7 @@
#define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */ #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */
#define AT_XDMAC_CC_WRIP_DONE (0x0 << 23) #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23)
#define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23) #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23)
#define AT_XDMAC_CC_PERID(i) (0x7f & (i) << 24) /* Channel Peripheral Identifier */ #define AT_XDMAC_CC_PERID(i) ((0x7f & (i)) << 24) /* Channel Peripheral Identifier */
#define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */ #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */
#define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */ #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */
#define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */ #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */

View File

@@ -167,7 +167,7 @@ dmaengine_desc_get_callback_invoke(struct dma_async_tx_descriptor *tx,
static inline bool static inline bool
dmaengine_desc_callback_valid(struct dmaengine_desc_callback *cb) dmaengine_desc_callback_valid(struct dmaengine_desc_callback *cb)
{ {
return (cb->callback) ? true : false; return cb->callback || cb->callback_result;
} }
#endif #endif

View File

@@ -1009,7 +1009,7 @@ static u64 haswell_get_tohm(struct sbridge_pvt *pvt)
pci_read_config_dword(pvt->info.pci_vtd, HASWELL_TOHM_1, &reg); pci_read_config_dword(pvt->info.pci_vtd, HASWELL_TOHM_1, &reg);
rc = ((reg << 6) | rc) << 26; rc = ((reg << 6) | rc) << 26;
return rc | 0x1ffffff; return rc | 0x3ffffff;
} }
static u64 knl_get_tolm(struct sbridge_pvt *pvt) static u64 knl_get_tolm(struct sbridge_pvt *pvt)

View File

@@ -844,6 +844,7 @@ static int amdgpu_connector_vga_get_modes(struct drm_connector *connector)
amdgpu_connector_get_edid(connector); amdgpu_connector_get_edid(connector);
ret = amdgpu_connector_ddc_get_modes(connector); ret = amdgpu_connector_ddc_get_modes(connector);
amdgpu_get_native_mode(connector);
return ret; return ret;
} }

View File

@@ -246,7 +246,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
.crtc_w = drm_rect_width(dst), .crtc_w = drm_rect_width(dst),
.crtc_h = drm_rect_height(dst), .crtc_h = drm_rect_height(dst),
.rotation = rotation, .rotation = rotation,
.visible = *visible,
}; };
int ret; int ret;

View File

@@ -871,7 +871,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev,
ret = msm_gem_new_impl(dev, size, flags, NULL, &obj); ret = msm_gem_new_impl(dev, size, flags, NULL, &obj);
if (ret) if (ret)
goto fail; return ERR_PTR(ret);
if (use_pages(obj)) { if (use_pages(obj)) {
ret = drm_gem_object_init(dev, obj, size); ret = drm_gem_object_init(dev, obj, size);
@@ -910,7 +910,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
if (ret) if (ret)
goto fail; return ERR_PTR(ret);
drm_gem_private_object_init(dev, obj, size); drm_gem_private_object_init(dev, obj, size);

View File

@@ -37,7 +37,7 @@ static u8 *udl_get_edid(struct udl_device *udl)
ret = usb_control_msg(udl->udev, ret = usb_control_msg(udl->udev,
usb_rcvctrlpipe(udl->udev, 0), (0x02), usb_rcvctrlpipe(udl->udev, 0), (0x02),
(0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2, (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
HZ); 1000);
if (ret < 1) { if (ret < 1) {
DRM_ERROR("Read EDID byte %d failed err %x\n", i, ret); DRM_ERROR("Read EDID byte %d failed err %x\n", i, ret);
goto error; goto error;

View File

@@ -26,6 +26,7 @@
#define _HYPERV_VMBUS_H #define _HYPERV_VMBUS_H
#include <linux/list.h> #include <linux/list.h>
#include <linux/bitops.h>
#include <asm/sync_bitops.h> #include <asm/sync_bitops.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/hyperv.h> #include <linux/hyperv.h>

View File

@@ -592,8 +592,10 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
dev_set_drvdata(hdev, drvdata); dev_set_drvdata(hdev, drvdata);
dev_set_name(hdev, HWMON_ID_FORMAT, id); dev_set_name(hdev, HWMON_ID_FORMAT, id);
err = device_register(hdev); err = device_register(hdev);
if (err) if (err) {
goto free_hwmon; put_device(hdev);
goto ida_remove;
}
if (chip && chip->ops->is_visible && chip->ops->read && if (chip && chip->ops->is_visible && chip->ops->read &&
chip->info[0]->type == hwmon_chip && chip->info[0]->type == hwmon_chip &&

View File

@@ -69,22 +69,27 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
[lm25056] = { [lm25056] = {
[PSC_VOLTAGE_IN] = { [PSC_VOLTAGE_IN] = {
.m = 16296, .m = 16296,
.b = 1343,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN] = { [PSC_CURRENT_IN] = {
.m = 13797, .m = 13797,
.b = -1833,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN_L] = { [PSC_CURRENT_IN_L] = {
.m = 6726, .m = 6726,
.b = -537,
.R = -2, .R = -2,
}, },
[PSC_POWER] = { [PSC_POWER] = {
.m = 5501, .m = 5501,
.b = -2908,
.R = -3, .R = -3,
}, },
[PSC_POWER_L] = { [PSC_POWER_L] = {
.m = 26882, .m = 26882,
.b = -5646,
.R = -4, .R = -4,
}, },
[PSC_TEMPERATURE] = { [PSC_TEMPERATURE] = {
@@ -96,26 +101,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
[lm25066] = { [lm25066] = {
[PSC_VOLTAGE_IN] = { [PSC_VOLTAGE_IN] = {
.m = 22070, .m = 22070,
.b = -1800,
.R = -2, .R = -2,
}, },
[PSC_VOLTAGE_OUT] = { [PSC_VOLTAGE_OUT] = {
.m = 22070, .m = 22070,
.b = -1800,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN] = { [PSC_CURRENT_IN] = {
.m = 13661, .m = 13661,
.b = -5200,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN_L] = { [PSC_CURRENT_IN_L] = {
.m = 6852, .m = 6852,
.b = -3100,
.R = -2, .R = -2,
}, },
[PSC_POWER] = { [PSC_POWER] = {
.m = 736, .m = 736,
.b = -3300,
.R = -2, .R = -2,
}, },
[PSC_POWER_L] = { [PSC_POWER_L] = {
.m = 369, .m = 369,
.b = -1900,
.R = -2, .R = -2,
}, },
[PSC_TEMPERATURE] = { [PSC_TEMPERATURE] = {
@@ -155,26 +166,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
[lm5064] = { [lm5064] = {
[PSC_VOLTAGE_IN] = { [PSC_VOLTAGE_IN] = {
.m = 4611, .m = 4611,
.b = -642,
.R = -2, .R = -2,
}, },
[PSC_VOLTAGE_OUT] = { [PSC_VOLTAGE_OUT] = {
.m = 4621, .m = 4621,
.b = 423,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN] = { [PSC_CURRENT_IN] = {
.m = 10742, .m = 10742,
.b = 1552,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN_L] = { [PSC_CURRENT_IN_L] = {
.m = 5456, .m = 5456,
.b = 2118,
.R = -2, .R = -2,
}, },
[PSC_POWER] = { [PSC_POWER] = {
.m = 1204, .m = 1204,
.b = 8524,
.R = -3, .R = -3,
}, },
[PSC_POWER_L] = { [PSC_POWER_L] = {
.m = 612, .m = 612,
.b = 11202,
.R = -3, .R = -3,
}, },
[PSC_TEMPERATURE] = { [PSC_TEMPERATURE] = {
@@ -184,26 +201,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
[lm5066] = { [lm5066] = {
[PSC_VOLTAGE_IN] = { [PSC_VOLTAGE_IN] = {
.m = 4587, .m = 4587,
.b = -1200,
.R = -2, .R = -2,
}, },
[PSC_VOLTAGE_OUT] = { [PSC_VOLTAGE_OUT] = {
.m = 4587, .m = 4587,
.b = -2400,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN] = { [PSC_CURRENT_IN] = {
.m = 10753, .m = 10753,
.b = -1200,
.R = -2, .R = -2,
}, },
[PSC_CURRENT_IN_L] = { [PSC_CURRENT_IN_L] = {
.m = 5405, .m = 5405,
.b = -600,
.R = -2, .R = -2,
}, },
[PSC_POWER] = { [PSC_POWER] = {
.m = 1204, .m = 1204,
.b = -6000,
.R = -3, .R = -3,
}, },
[PSC_POWER_L] = { [PSC_POWER_L] = {
.m = 605, .m = 605,
.b = -8000,
.R = -3, .R = -3,
}, },
[PSC_TEMPERATURE] = { [PSC_TEMPERATURE] = {

View File

@@ -434,11 +434,15 @@ static int xlr_i2c_probe(struct platform_device *pdev)
i2c_set_adapdata(&priv->adap, priv); i2c_set_adapdata(&priv->adap, priv);
ret = i2c_add_numbered_adapter(&priv->adap); ret = i2c_add_numbered_adapter(&priv->adap);
if (ret < 0) if (ret < 0)
return ret; goto err_unprepare_clk;
platform_set_drvdata(pdev, priv); platform_set_drvdata(pdev, priv);
dev_info(&priv->adap.dev, "Added I2C Bus.\n"); dev_info(&priv->adap.dev, "Added I2C Bus.\n");
return 0; return 0;
err_unprepare_clk:
clk_unprepare(clk);
return ret;
} }
static int xlr_i2c_remove(struct platform_device *pdev) static int xlr_i2c_remove(struct platform_device *pdev)

View File

@@ -510,8 +510,15 @@ static int ad5622_write(struct ad5446_state *st, unsigned val)
{ {
struct i2c_client *client = to_i2c_client(st->dev); struct i2c_client *client = to_i2c_client(st->dev);
__be16 data = cpu_to_be16(val); __be16 data = cpu_to_be16(val);
int ret;
return i2c_master_send(client, (char *)&data, sizeof(data)); ret = i2c_master_send(client, (char *)&data, sizeof(data));
if (ret < 0)
return ret;
if (ret != sizeof(data))
return -EIO;
return 0;
} }
/** /**

View File

@@ -773,8 +773,10 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
if (dev->steering_support == if (dev->steering_support ==
MLX4_STEERING_MODE_DEVICE_MANAGED) MLX4_STEERING_MODE_DEVICE_MANAGED)
qp->flags |= MLX4_IB_QP_NETIF; qp->flags |= MLX4_IB_QP_NETIF;
else else {
err = -EINVAL;
goto err; goto err;
}
} }
memcpy(&backup_cap, &init_attr->cap, sizeof(backup_cap)); memcpy(&backup_cap, &init_attr->cap, sizeof(backup_cap));

View File

@@ -2015,15 +2015,18 @@ int qedr_query_qp(struct ib_qp *ibqp,
int rc = 0; int rc = 0;
memset(&params, 0, sizeof(params)); memset(&params, 0, sizeof(params));
rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, &params);
if (rc)
goto err;
memset(qp_attr, 0, sizeof(*qp_attr)); memset(qp_attr, 0, sizeof(*qp_attr));
memset(qp_init_attr, 0, sizeof(*qp_init_attr)); memset(qp_init_attr, 0, sizeof(*qp_init_attr));
qp_attr->qp_state = qedr_get_ibqp_state(params.state); if (qp->qp_type != IB_QPT_GSI) {
rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, &params);
if (rc)
goto err;
qp_attr->qp_state = qedr_get_ibqp_state(params.state);
} else {
qp_attr->qp_state = qedr_get_ibqp_state(QED_ROCE_QP_STATE_RTS);
}
qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state); qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state);
qp_attr->path_mtu = iboe_get_mtu(params.mtu); qp_attr->path_mtu = iboe_get_mtu(params.mtu);
qp_attr->path_mig_state = IB_MIG_MIGRATED; qp_attr->path_mig_state = IB_MIG_MIGRATED;

View File

@@ -144,7 +144,7 @@ enum rxe_port_param {
RXE_PORT_MAX_MTU = IB_MTU_4096, RXE_PORT_MAX_MTU = IB_MTU_4096,
RXE_PORT_ACTIVE_MTU = IB_MTU_256, RXE_PORT_ACTIVE_MTU = IB_MTU_256,
RXE_PORT_GID_TBL_LEN = 1024, RXE_PORT_GID_TBL_LEN = 1024,
RXE_PORT_PORT_CAP_FLAGS = RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP, RXE_PORT_PORT_CAP_FLAGS = IB_PORT_CM_SUP,
RXE_PORT_MAX_MSG_SZ = 0x800000, RXE_PORT_MAX_MSG_SZ = 0x800000,
RXE_PORT_BAD_PKEY_CNTR = 0, RXE_PORT_BAD_PKEY_CNTR = 0,
RXE_PORT_QKEY_VIOL_CNTR = 0, RXE_PORT_QKEY_VIOL_CNTR = 0,

View File

@@ -431,6 +431,19 @@ static void elantech_report_trackpoint(struct psmouse *psmouse,
case 0x16008020U: case 0x16008020U:
case 0x26800010U: case 0x26800010U:
case 0x36808000U: case 0x36808000U:
/*
* This firmware misreport coordinates for trackpoint
* occasionally. Discard packets outside of [-127, 127] range
* to prevent cursor jumps.
*/
if (packet[4] == 0x80 || packet[5] == 0x80 ||
packet[1] >> 7 == packet[4] >> 7 ||
packet[2] >> 7 == packet[5] >> 7) {
elantech_debug("discarding packet [%6ph]\n", packet);
break;
}
x = packet[4] - (int)((packet[1]^0x80) << 1); x = packet[4] - (int)((packet[1]^0x80) << 1);
y = (int)((packet[2]^0x80) << 1) - packet[5]; y = (int)((packet[2]^0x80) << 1) - packet[5];

View File

@@ -276,6 +276,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
}, },
}, },
{
/* Fujitsu Lifebook T725 laptop */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
},
},
{ {
/* Fujitsu Lifebook U745 */ /* Fujitsu Lifebook U745 */
.matches = { .matches = {
@@ -916,6 +923,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"), DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
}, },
}, },
{
/* Fujitsu Lifebook T725 laptop */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
},
},
{ {
/* Fujitsu U574 laptop */ /* Fujitsu U574 laptop */
/* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */

View File

@@ -143,7 +143,7 @@ static void bcm6345_l1_irq_handle(struct irq_desc *desc)
for_each_set_bit(hwirq, &pending, IRQS_PER_WORD) { for_each_set_bit(hwirq, &pending, IRQS_PER_WORD) {
irq = irq_linear_revmap(intc->domain, base + hwirq); irq = irq_linear_revmap(intc->domain, base + hwirq);
if (irq) if (irq)
do_IRQ(irq); generic_handle_irq(irq);
else else
spurious_interrupt(); spurious_interrupt();
} }

View File

@@ -368,11 +368,25 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs) asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs)
{ {
do { do {
if (likely(s3c_intc[0])) /*
if (s3c24xx_handle_intc(s3c_intc[0], regs, 0)) * For platform based machines, neither ERR nor NULL can happen here.
continue; * The s3c24xx_handle_irq() will be set as IRQ handler iff this succeeds:
*
* s3c_intc[0] = s3c24xx_init_intc()
*
* If this fails, the next calls to s3c24xx_init_intc() won't be executed.
*
* For DT machine, s3c_init_intc_of() could set the IRQ handler without
* setting s3c_intc[0] only if it was called with num_ctrl=0. There is no
* such code path, so again the s3c_intc[0] will have a valid pointer if
* set_handle_irq() is called.
*
* Therefore in s3c24xx_handle_irq(), the s3c_intc[0] is always something.
*/
if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))
continue;
if (s3c_intc[2]) if (!IS_ERR_OR_NULL(s3c_intc[2]))
if (s3c24xx_handle_intc(s3c_intc[2], regs, 64)) if (s3c24xx_handle_intc(s3c_intc[2], regs, 64))
continue; continue;

View File

@@ -81,7 +81,9 @@
#define MT9P031_PIXEL_CLOCK_INVERT (1 << 15) #define MT9P031_PIXEL_CLOCK_INVERT (1 << 15)
#define MT9P031_PIXEL_CLOCK_SHIFT(n) ((n) << 8) #define MT9P031_PIXEL_CLOCK_SHIFT(n) ((n) << 8)
#define MT9P031_PIXEL_CLOCK_DIVIDE(n) ((n) << 0) #define MT9P031_PIXEL_CLOCK_DIVIDE(n) ((n) << 0)
#define MT9P031_FRAME_RESTART 0x0b #define MT9P031_RESTART 0x0b
#define MT9P031_FRAME_PAUSE_RESTART (1 << 1)
#define MT9P031_FRAME_RESTART (1 << 0)
#define MT9P031_SHUTTER_DELAY 0x0c #define MT9P031_SHUTTER_DELAY 0x0c
#define MT9P031_RST 0x0d #define MT9P031_RST 0x0d
#define MT9P031_RST_ENABLE 1 #define MT9P031_RST_ENABLE 1
@@ -448,9 +450,23 @@ static int mt9p031_set_params(struct mt9p031 *mt9p031)
static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable) static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable)
{ {
struct mt9p031 *mt9p031 = to_mt9p031(subdev); struct mt9p031 *mt9p031 = to_mt9p031(subdev);
struct i2c_client *client = v4l2_get_subdevdata(subdev);
int val;
int ret; int ret;
if (!enable) { if (!enable) {
/* enable pause restart */
val = MT9P031_FRAME_PAUSE_RESTART;
ret = mt9p031_write(client, MT9P031_RESTART, val);
if (ret < 0)
return ret;
/* enable restart + keep pause restart set */
val |= MT9P031_FRAME_RESTART;
ret = mt9p031_write(client, MT9P031_RESTART, val);
if (ret < 0)
return ret;
/* Stop sensor readout */ /* Stop sensor readout */
ret = mt9p031_set_output_control(mt9p031, ret = mt9p031_set_output_control(mt9p031,
MT9P031_OUTPUT_CONTROL_CEN, 0); MT9P031_OUTPUT_CONTROL_CEN, 0);
@@ -470,6 +486,16 @@ static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable)
if (ret < 0) if (ret < 0)
return ret; return ret;
/*
* - clear pause restart
* - don't clear restart as clearing restart manually can cause
* undefined behavior
*/
val = MT9P031_FRAME_RESTART;
ret = mt9p031_write(client, MT9P031_RESTART, val);
if (ret < 0)
return ret;
return mt9p031_pll_enable(mt9p031); return mt9p031_pll_enable(mt9p031);
} }

View File

@@ -266,19 +266,24 @@ static irqreturn_t netup_unidvb_isr(int irq, void *dev_id)
if ((reg40 & AVL_IRQ_ASSERTED) != 0) { if ((reg40 & AVL_IRQ_ASSERTED) != 0) {
/* IRQ is being signaled */ /* IRQ is being signaled */
reg_isr = readw(ndev->bmmio0 + REG_ISR); reg_isr = readw(ndev->bmmio0 + REG_ISR);
if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) { if (reg_isr & NETUP_UNIDVB_IRQ_SPI)
iret = netup_i2c_interrupt(&ndev->i2c[0]);
} else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) {
iret = netup_i2c_interrupt(&ndev->i2c[1]);
} else if (reg_isr & NETUP_UNIDVB_IRQ_SPI) {
iret = netup_spi_interrupt(ndev->spi); iret = netup_spi_interrupt(ndev->spi);
} else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) { else if (!ndev->old_fw) {
iret = netup_dma_interrupt(&ndev->dma[0]); if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) {
} else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) { iret = netup_i2c_interrupt(&ndev->i2c[0]);
iret = netup_dma_interrupt(&ndev->dma[1]); } else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) {
} else if (reg_isr & NETUP_UNIDVB_IRQ_CI) { iret = netup_i2c_interrupt(&ndev->i2c[1]);
iret = netup_ci_interrupt(ndev); } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) {
iret = netup_dma_interrupt(&ndev->dma[0]);
} else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) {
iret = netup_dma_interrupt(&ndev->dma[1]);
} else if (reg_isr & NETUP_UNIDVB_IRQ_CI) {
iret = netup_ci_interrupt(ndev);
} else {
goto err;
}
} else { } else {
err:
dev_err(&pci_dev->dev, dev_err(&pci_dev->dev,
"%s(): unknown interrupt 0x%x\n", "%s(): unknown interrupt 0x%x\n",
__func__, reg_isr); __func__, reg_isr);

View File

@@ -801,7 +801,8 @@ static int mtk_vpu_probe(struct platform_device *pdev)
vpu->wdt.wq = create_singlethread_workqueue("vpu_wdt"); vpu->wdt.wq = create_singlethread_workqueue("vpu_wdt");
if (!vpu->wdt.wq) { if (!vpu->wdt.wq) {
dev_err(dev, "initialize wdt workqueue failed\n"); dev_err(dev, "initialize wdt workqueue failed\n");
return -ENOMEM; ret = -ENOMEM;
goto clk_unprepare;
} }
INIT_WORK(&vpu->wdt.ws, vpu_wdt_reset_func); INIT_WORK(&vpu->wdt.ws, vpu_wdt_reset_func);
mutex_init(&vpu->vpu_mutex); mutex_init(&vpu->vpu_mutex);
@@ -900,6 +901,8 @@ disable_vpu_clk:
vpu_clock_disable(vpu); vpu_clock_disable(vpu);
workqueue_destroy: workqueue_destroy:
destroy_workqueue(vpu->wdt.wq); destroy_workqueue(vpu->wdt.wq);
clk_unprepare:
clk_unprepare(vpu->clk);
return ret; return ret;
} }

View File

@@ -1160,7 +1160,7 @@ static int s5p_mfc_probe(struct platform_device *pdev)
spin_lock_init(&dev->condlock); spin_lock_init(&dev->condlock);
dev->plat_dev = pdev; dev->plat_dev = pdev;
if (!dev->plat_dev) { if (!dev->plat_dev) {
dev_err(&pdev->dev, "No platform data specified\n"); mfc_err("No platform data specified\n");
return -ENODEV; return -ENODEV;
} }

View File

@@ -24,7 +24,7 @@
/* driver definitions */ /* driver definitions */
#define DRIVER_AUTHOR "Joonyoung Shim <jy0922.shim@samsung.com>"; #define DRIVER_AUTHOR "Joonyoung Shim <jy0922.shim@samsung.com>";
#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver" #define DRIVER_CARD "Silicon Labs Si470x FM Radio"
#define DRIVER_DESC "I2C radio driver for Si470x FM Radio Receivers" #define DRIVER_DESC "I2C radio driver for Si470x FM Radio Receivers"
#define DRIVER_VERSION "1.0.2" #define DRIVER_VERSION "1.0.2"

View File

@@ -29,7 +29,7 @@
/* driver definitions */ /* driver definitions */
#define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>" #define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>"
#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver" #define DRIVER_CARD "Silicon Labs Si470x FM Radio"
#define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers" #define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers"
#define DRIVER_VERSION "1.0.10" #define DRIVER_VERSION "1.0.10"

View File

@@ -299,7 +299,7 @@ static irqreturn_t ite_cir_isr(int irq, void *data)
} }
/* check for the receive interrupt */ /* check for the receive interrupt */
if (iflags & ITE_IRQ_RX_FIFO) { if (iflags & (ITE_IRQ_RX_FIFO | ITE_IRQ_RX_FIFO_OVERRUN)) {
/* read the FIFO bytes */ /* read the FIFO bytes */
rx_bytes = rx_bytes =
dev->params.get_rx_bytes(dev, rx_buf, dev->params.get_rx_bytes(dev, rx_buf,

View File

@@ -1090,6 +1090,7 @@ static void mceusb_dev_recv(struct urb *urb)
case -ECONNRESET: case -ECONNRESET:
case -ENOENT: case -ENOENT:
case -EILSEQ: case -EILSEQ:
case -EPROTO:
case -ESHUTDOWN: case -ESHUTDOWN:
usb_unlink_urb(urb); usb_unlink_urb(urb);
return; return;

View File

@@ -394,6 +394,7 @@ static struct rc_map_table rc_map_az6027_table[] = {
/* remote control stuff (does not work with my box) */ /* remote control stuff (does not work with my box) */
static int az6027_rc_query(struct dvb_usb_device *d, u32 *event, int *state) static int az6027_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
{ {
*state = REMOTE_NO_KEY_PRESSED;
return 0; return 0;
} }

View File

@@ -226,7 +226,7 @@ int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val)
u8 *buf; u8 *buf;
int rc; int rc;
buf = kmalloc(2, GFP_KERNEL); buf = kzalloc(2, GFP_KERNEL);
if (!buf) if (!buf)
return -ENOMEM; return -ENOMEM;

View File

@@ -451,10 +451,13 @@ static int uvc_v4l2_set_streamparm(struct uvc_streaming *stream,
uvc_simplify_fraction(&timeperframe.numerator, uvc_simplify_fraction(&timeperframe.numerator,
&timeperframe.denominator, 8, 333); &timeperframe.denominator, 8, 333);
if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
parm->parm.capture.timeperframe = timeperframe; parm->parm.capture.timeperframe = timeperframe;
else parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
} else {
parm->parm.output.timeperframe = timeperframe; parm->parm.output.timeperframe = timeperframe;
parm->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
}
return 0; return 0;
} }

View File

@@ -276,7 +276,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev); ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev);
if (ret < 0) if (ret < 0)
goto err; goto err_unmap_nandirq;
init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait); init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait);
@@ -285,7 +285,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
if (ret != 0) { if (ret != 0) {
dev_err(&dev->dev, "failed to install irq (%d)\n", dev_err(&dev->dev, "failed to install irq (%d)\n",
fsl_ifc_ctrl_dev->irq); fsl_ifc_ctrl_dev->irq);
goto err_irq; goto err_unmap_nandirq;
} }
if (fsl_ifc_ctrl_dev->nand_irq) { if (fsl_ifc_ctrl_dev->nand_irq) {
@@ -294,17 +294,16 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
if (ret != 0) { if (ret != 0) {
dev_err(&dev->dev, "failed to install irq (%d)\n", dev_err(&dev->dev, "failed to install irq (%d)\n",
fsl_ifc_ctrl_dev->nand_irq); fsl_ifc_ctrl_dev->nand_irq);
goto err_nandirq; goto err_free_irq;
} }
} }
return 0; return 0;
err_nandirq: err_free_irq:
free_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_ctrl_dev);
irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq);
err_irq:
free_irq(fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev); free_irq(fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev);
err_unmap_nandirq:
irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq);
irq_dispose_mapping(fsl_ifc_ctrl_dev->irq); irq_dispose_mapping(fsl_ifc_ctrl_dev->irq);
err: err:
iounmap(fsl_ifc_ctrl_dev->gregs); iounmap(fsl_ifc_ctrl_dev->gregs);

View File

@@ -1730,7 +1730,7 @@ static int msb_init_card(struct memstick_dev *card)
msb->pages_in_block = boot_block->attr.block_size * 2; msb->pages_in_block = boot_block->attr.block_size * 2;
msb->block_size = msb->page_size * msb->pages_in_block; msb->block_size = msb->page_size * msb->pages_in_block;
if (msb->page_size > PAGE_SIZE) { if ((size_t)msb->page_size > PAGE_SIZE) {
/* this isn't supported by linux at all, anyway*/ /* this isn't supported by linux at all, anyway*/
dbg("device page %d size isn't supported", msb->page_size); dbg("device page %d size isn't supported", msb->page_size);
return -EINVAL; return -EINVAL;

View File

@@ -905,7 +905,7 @@ static struct memstick_host *jmb38x_ms_alloc_host(struct jmb38x_ms *jm, int cnt)
iounmap(host->addr); iounmap(host->addr);
err_out_free: err_out_free:
kfree(msh); memstick_free_host(msh);
return NULL; return NULL;
} }

View File

@@ -841,15 +841,15 @@ static void r592_remove(struct pci_dev *pdev)
} }
memstick_remove_host(dev->host); memstick_remove_host(dev->host);
if (dev->dummy_dma_page)
dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page,
dev->dummy_dma_page_physical_address);
free_irq(dev->irq, dev); free_irq(dev->irq, dev);
iounmap(dev->mmio); iounmap(dev->mmio);
pci_release_regions(pdev); pci_release_regions(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
memstick_free_host(dev->host); memstick_free_host(dev->host);
if (dev->dummy_dma_page)
dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page,
dev->dummy_dma_page_physical_address);
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP

View File

@@ -367,7 +367,7 @@ config MMC_OMAP_HS
config MMC_WBSD config MMC_WBSD
tristate "Winbond W83L51xD SD/MMC Card Interface support" tristate "Winbond W83L51xD SD/MMC Card Interface support"
depends on ISA_DMA_API depends on ISA_DMA_API && !M68K
help help
This selects the Winbond(R) W83L51xD Secure digital and This selects the Winbond(R) W83L51xD Secure digital and
Multimedia card Interface. Multimedia card Interface.

View File

@@ -1862,7 +1862,8 @@ static void dw_mci_tasklet_func(unsigned long priv)
* delayed. Allowing the transfer to take place * delayed. Allowing the transfer to take place
* avoids races and keeps things simple. * avoids races and keeps things simple.
*/ */
if (err != -ETIMEDOUT) { if (err != -ETIMEDOUT &&
host->dir_status == DW_MCI_RECV_STATUS) {
state = STATE_SENDING_DATA; state = STATE_SENDING_DATA;
continue; continue;
} }

View File

@@ -571,6 +571,11 @@ static const struct of_device_id mxs_mmc_dt_ids[] = {
}; };
MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids); MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids);
static void mxs_mmc_regulator_disable(void *regulator)
{
regulator_disable(regulator);
}
static int mxs_mmc_probe(struct platform_device *pdev) static int mxs_mmc_probe(struct platform_device *pdev)
{ {
const struct of_device_id *of_id = const struct of_device_id *of_id =
@@ -614,6 +619,11 @@ static int mxs_mmc_probe(struct platform_device *pdev)
"Failed to enable vmmc regulator: %d\n", ret); "Failed to enable vmmc regulator: %d\n", ret);
goto out_mmc_free; goto out_mmc_free;
} }
ret = devm_add_action_or_reset(&pdev->dev, mxs_mmc_regulator_disable,
reg_vmmc);
if (ret)
goto out_mmc_free;
} }
ssp->clk = devm_clk_get(&pdev->dev, NULL); ssp->clk = devm_clk_get(&pdev->dev, NULL);

View File

@@ -467,7 +467,6 @@ static int hisi_spi_nor_remove(struct platform_device *pdev)
hisi_spi_nor_unregister_all(host); hisi_spi_nor_unregister_all(host);
mutex_destroy(&host->lock); mutex_destroy(&host->lock);
clk_disable_unprepare(host->clk);
return 0; return 0;
} }

View File

@@ -112,15 +112,15 @@ static ssize_t ad_partner_oper_port_state_show(struct slave *slave, char *buf)
} }
static SLAVE_ATTR_RO(ad_partner_oper_port_state); static SLAVE_ATTR_RO(ad_partner_oper_port_state);
static const struct slave_attribute *slave_attrs[] = { static const struct attribute *slave_attrs[] = {
&slave_attr_state, &slave_attr_state.attr,
&slave_attr_mii_status, &slave_attr_mii_status.attr,
&slave_attr_link_failure_count, &slave_attr_link_failure_count.attr,
&slave_attr_perm_hwaddr, &slave_attr_perm_hwaddr.attr,
&slave_attr_queue_id, &slave_attr_queue_id.attr,
&slave_attr_ad_aggregator_id, &slave_attr_ad_aggregator_id.attr,
&slave_attr_ad_actor_oper_port_state, &slave_attr_ad_actor_oper_port_state.attr,
&slave_attr_ad_partner_oper_port_state, &slave_attr_ad_partner_oper_port_state.attr,
NULL NULL
}; };
@@ -141,24 +141,10 @@ const struct sysfs_ops slave_sysfs_ops = {
int bond_sysfs_slave_add(struct slave *slave) int bond_sysfs_slave_add(struct slave *slave)
{ {
const struct slave_attribute **a; return sysfs_create_files(&slave->kobj, slave_attrs);
int err;
for (a = slave_attrs; *a; ++a) {
err = sysfs_create_file(&slave->kobj, &((*a)->attr));
if (err) {
kobject_put(&slave->kobj);
return err;
}
}
return 0;
} }
void bond_sysfs_slave_del(struct slave *slave) void bond_sysfs_slave_del(struct slave *slave)
{ {
const struct slave_attribute **a; sysfs_remove_files(&slave->kobj, slave_attrs);
for (a = slave_attrs; *a; ++a)
sysfs_remove_file(&slave->kobj, &((*a)->attr));
} }

View File

@@ -635,11 +635,13 @@ static int bnx2x_ilt_client_mem_op(struct bnx2x *bp, int cli_num,
{ {
int i, rc; int i, rc;
struct bnx2x_ilt *ilt = BP_ILT(bp); struct bnx2x_ilt *ilt = BP_ILT(bp);
struct ilt_client_info *ilt_cli = &ilt->clients[cli_num]; struct ilt_client_info *ilt_cli;
if (!ilt || !ilt->lines) if (!ilt || !ilt->lines)
return -1; return -1;
ilt_cli = &ilt->clients[cli_num];
if (ilt_cli->flags & (ILT_CLIENT_SKIP_INIT | ILT_CLIENT_SKIP_MEM)) if (ilt_cli->flags & (ILT_CLIENT_SKIP_INIT | ILT_CLIENT_SKIP_MEM))
return 0; return 0;

View File

@@ -1889,7 +1889,7 @@ static void i40evf_adminq_task(struct work_struct *work)
/* check for error indications */ /* check for error indications */
val = rd32(hw, hw->aq.arq.len); val = rd32(hw, hw->aq.arq.len);
if (val == 0xdeadbeef) /* indicates device in reset */ if (val == 0xdeadbeef || val == 0xffffffff) /* device in reset */
goto freedom; goto freedom;
oldval = val; oldval = val;
if (val & I40E_VF_ARQLEN1_ARQVFE_MASK) { if (val & I40E_VF_ARQLEN1_ARQVFE_MASK) {

View File

@@ -494,7 +494,7 @@ static int efx_ptp_get_attributes(struct efx_nic *efx)
} else if (rc == -EINVAL) { } else if (rc == -EINVAL) {
fmt = MC_CMD_PTP_OUT_GET_ATTRIBUTES_SECONDS_NANOSECONDS; fmt = MC_CMD_PTP_OUT_GET_ATTRIBUTES_SECONDS_NANOSECONDS;
} else if (rc == -EPERM) { } else if (rc == -EPERM) {
netif_info(efx, probe, efx->net_dev, "no PTP support\n"); pci_info(efx->pci_dev, "no PTP support\n");
return rc; return rc;
} else { } else {
efx_mcdi_display_error(efx, MC_CMD_PTP, sizeof(inbuf), efx_mcdi_display_error(efx, MC_CMD_PTP, sizeof(inbuf),
@@ -613,7 +613,7 @@ static int efx_ptp_disable(struct efx_nic *efx)
* should only have been called during probe. * should only have been called during probe.
*/ */
if (rc == -ENOSYS || rc == -EPERM) if (rc == -ENOSYS || rc == -EPERM)
netif_info(efx, probe, efx->net_dev, "no PTP support\n"); pci_info(efx->pci_dev, "no PTP support\n");
else if (rc) else if (rc)
efx_mcdi_display_error(efx, MC_CMD_PTP, efx_mcdi_display_error(efx, MC_CMD_PTP,
MC_CMD_PTP_IN_DISABLE_LEN, MC_CMD_PTP_IN_DISABLE_LEN,

View File

@@ -1059,7 +1059,7 @@ void efx_siena_sriov_probe(struct efx_nic *efx)
return; return;
if (efx_siena_sriov_cmd(efx, false, &efx->vi_scale, &count)) { if (efx_siena_sriov_cmd(efx, false, &efx->vi_scale, &count)) {
netif_info(efx, probe, efx->net_dev, "no SR-IOV VFs probed\n"); pci_info(efx->pci_dev, "no SR-IOV VFs probed\n");
return; return;
} }
if (count > 0 && count > max_vfs) if (count > 0 && count > max_vfs)

View File

@@ -426,8 +426,20 @@ static int emac_set_coalesce(struct net_device *ndev,
u32 int_ctrl, num_interrupts = 0; u32 int_ctrl, num_interrupts = 0;
u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0; u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
if (!coal->rx_coalesce_usecs) if (!coal->rx_coalesce_usecs) {
return -EINVAL; priv->coal_intvl = 0;
switch (priv->version) {
case EMAC_VERSION_2:
emac_ctrl_write(EMAC_DM646X_CMINTCTRL, 0);
break;
default:
emac_ctrl_write(EMAC_CTRL_EWINTTCNT, 0);
break;
}
return 0;
}
coal_intvl = coal->rx_coalesce_usecs; coal_intvl = coal->rx_coalesce_usecs;

View File

@@ -117,6 +117,7 @@ int mdio_mux_init(struct device *dev,
} else { } else {
parent_bus_node = NULL; parent_bus_node = NULL;
parent_bus = mux_bus; parent_bus = mux_bus;
get_device(&parent_bus->dev);
} }
pb = devm_kzalloc(dev, sizeof(*pb), GFP_KERNEL); pb = devm_kzalloc(dev, sizeof(*pb), GFP_KERNEL);
@@ -182,9 +183,7 @@ int mdio_mux_init(struct device *dev,
devm_kfree(dev, pb); devm_kfree(dev, pb);
err_pb_kz: err_pb_kz:
/* balance the reference of_mdio_find_bus() took */ put_device(&parent_bus->dev);
if (!mux_bus)
put_device(&parent_bus->dev);
err_parent_bus: err_parent_bus:
of_node_put(parent_bus_node); of_node_put(parent_bus_node);
return ret_val; return ret_val;
@@ -202,7 +201,6 @@ void mdio_mux_uninit(void *mux_handle)
cb = cb->next; cb = cb->next;
} }
/* balance the reference of_mdio_find_bus() in mdio_mux_init() took */
put_device(&pb->mii_bus->dev); put_device(&pb->mii_bus->dev);
} }
EXPORT_SYMBOL_GPL(mdio_mux_uninit); EXPORT_SYMBOL_GPL(mdio_mux_uninit);

Some files were not shown because too many files have changed in this diff Show More