This is the 4.19.140 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl88w3UACgkQONu9yGCS aT4fZQ/+NYyfbsgFARqld2HbOIDSYyua90k42Xj7nlHXa3UcbPCsNEWIWn2k5SXU kvzwXSUuI14AOyqBOp/swKkEZh7Dh5c6q8QBHA6YJnNaJBQQxv2tjMpA4TngMifG oUSnxgHKNHtiD/6D7ZZ36l8u83sXfE6qPiginJAECdC2bVjpdfT7EqK5bY2lFd1s yiz9RxEDXSlrVMXqew75XBEj+304RYhZcJEVPQrqFb/q2Q+rSYs1mAkCazFvAkX+ 6Yooyp0tYlfUlkF2ItDpWmuKDcbGtWDd/I9LVGwZ0J67uAN86ZhNGbqlI8bpig9o qNW0FXAN2TNjpBvKXwg1qavfs5xYQu2E0OrRpCUleL1yD/kWu2vfK4HqyIardsVq 63ffUvMJnJaWPnIvB2gx5f5tRt3Ca7uqvoM4LlYR1fwNZwVaU1fyWNEfeID4MAkr jBhC8x3n40TF1ngdaZ/XETiAJbjiYve2uEVuvdCtnp1fFbQ892QD5A8MQYsOVFuh 6aR4f6bsR23F/h+tOMJc89wZTRYsCrFxbjwjye+tsWPcBm2GR7hgvCxo1JFqHgrz elY15u+AWj4pjVhiQcsnXLL8pGKkZTvPrq+iwg12AE23gvE4ww1lpYbxO46GUWuw q6L8oaHYA6cZiEnIde6yTUpkm6zag0MK+HDutiFUrEAmJTmeWds= =9oFP -----END PGP SIGNATURE----- Merge 4.19.140 into android-4.19-stable Changes in 4.19.140 tracepoint: Mark __tracepoint_string's __used HID: input: Fix devices that return multiple bytes in battery report cgroup: add missing skcd->no_refcnt check in cgroup_sk_clone() x86/mce/inject: Fix a wrong assignment of i_mce.status sched/fair: Fix NOHZ next idle balance sched: correct SD_flags returned by tl->sd_flags() arm64: dts: rockchip: fix rk3368-lion gmac reset gpio arm64: dts: rockchip: fix rk3399-puma vcc5v0-host gpio arm64: dts: rockchip: fix rk3399-puma gmac reset gpio EDAC: Fix reference count leaks arm64: dts: qcom: msm8916: Replace invalid bias-pull-none property crypto: ccree - fix resource leak on error path firmware: arm_scmi: Fix SCMI genpd domain probing arm64: dts: exynos: Fix silent hang after boot on Espresso clk: scmi: Fix min and max rate when registering clocks with discrete rates m68k: mac: Don't send IOP message until channel is idle m68k: mac: Fix IOP status/control register writes platform/x86: intel-hid: Fix return value check in check_acpi_dev() platform/x86: intel-vbtn: Fix return value check in check_acpi_dev() ARM: dts: gose: Fix ports node name for adv7180 ARM: dts: gose: Fix ports node name for adv7612 ARM: at91: pm: add missing put_device() call in at91_pm_sram_init() spi: lantiq: fix: Rx overflow error in full duplex mode ARM: socfpga: PM: add missing put_device() call in socfpga_setup_ocram_self_refresh() drm/tilcdc: fix leak & null ref in panel_connector_get_modes soc: qcom: rpmh-rsc: Set suppress_bind_attrs flag Bluetooth: add a mutex lock to avoid UAF in do_enale_set loop: be paranoid on exit and prevent new additions / removals fs/btrfs: Add cond_resched() for try_release_extent_mapping() stalls drm/amdgpu: avoid dereferencing a NULL pointer drm/radeon: Fix reference count leaks caused by pm_runtime_get_sync crypto: aesni - Fix build with LLVM_IAS=1 video: fbdev: neofb: fix memory leak in neo_scan_monitor() md-cluster: fix wild pointer of unlock_all_bitmaps() arm64: dts: hisilicon: hikey: fixes to comply with adi, adv7533 DT binding drm/etnaviv: fix ref count leak via pm_runtime_get_sync drm/nouveau: fix multiple instances of reference count leaks usb: mtu3: clear dual mode of u3port when disable device drm/debugfs: fix plain echo to connector "force" attribute drm/radeon: disable AGP by default irqchip/irq-mtk-sysirq: Replace spinlock with raw_spinlock mm/mmap.c: Add cond_resched() for exit_mmap() CPU stalls brcmfmac: keep SDIO watchdog running when console_interval is non-zero brcmfmac: To fix Bss Info flag definition Bug brcmfmac: set state of hanger slot to FREE when flushing PSQ iwlegacy: Check the return value of pcie_capability_read_*() gpu: host1x: debug: Fix multiple channels emitting messages simultaneously usb: gadget: net2280: fix memory leak on probe error handling paths bdc: Fix bug causing crash after multiple disconnects usb: bdc: Halt controller on suspend dyndbg: fix a BUG_ON in ddebug_describe_flags bcache: fix super block seq numbers comparision in register_cache_set() ACPICA: Do not increment operation_region reference counts for field units drm/msm: ratelimit crtc event overflow error agp/intel: Fix a memory leak on module initialisation failure video: fbdev: sm712fb: fix an issue about iounmap for a wrong address console: newport_con: fix an issue about leak related system resources video: pxafb: Fix the function used to balance a 'dma_alloc_coherent()' call ath10k: Acquire tx_lock in tx error paths iio: improve IIO_CONCENTRATION channel type description drm/etnaviv: Fix error path on failure to enable bus clk drm/arm: fix unintentional integer overflow on left shift leds: lm355x: avoid enum conversion warning media: omap3isp: Add missed v4l2_ctrl_handler_free() for preview_init_entities() ASoC: Intel: bxt_rt298: add missing .owner field scsi: cumana_2: Fix different dev_id between request_irq() and free_irq() drm/mipi: use dcs write for mipi_dsi_dcs_set_tear_scanline cxl: Fix kobject memleak drm/radeon: fix array out-of-bounds read and write issues scsi: powertec: Fix different dev_id between request_irq() and free_irq() scsi: eesox: Fix different dev_id between request_irq() and free_irq() ipvs: allow connection reuse for unconfirmed conntrack media: firewire: Using uninitialized values in node_probe() media: exynos4-is: Add missed check for pinctrl_lookup_state() xfs: don't eat an EIO/ENOSPC writeback error when scrubbing data fork xfs: fix reflink quota reservation accounting error RDMA/rxe: Skip dgid check in loopback mode PCI: Fix pci_cfg_wait queue locking problem leds: core: Flush scheduled work for system suspend drm: panel: simple: Fix bpc for LG LB070WV8 panel phy: exynos5-usbdrd: Calibrating makes sense only for USB2.0 PHY drm/bridge: sil_sii8620: initialize return of sii8620_readb scsi: scsi_debug: Add check for sdebug_max_queue during module init mwifiex: Prevent memory corruption handling keys powerpc/vdso: Fix vdso cpu truncation RDMA/qedr: SRQ's bug fixes RDMA/rxe: Prevent access to wr->next ptr afrer wr is posted to send queue staging: rtl8192u: fix a dubious looking mask before a shift PCI/ASPM: Add missing newline in sysfs 'policy' powerpc/book3s64/pkeys: Use PVR check instead of cpu feature drm/imx: tve: fix regulator_disable error path USB: serial: iuu_phoenix: fix led-activity helpers usb: core: fix quirks_param_set() writing to a const pointer thermal: ti-soc-thermal: Fix reversed condition in ti_thermal_expose_sensor() coresight: tmc: Fix TMC mode read in tmc_read_unprepare_etb() MIPS: OCTEON: add missing put_device() call in dwc3_octeon_device_init() usb: dwc2: Fix error path in gadget registration scsi: mesh: Fix panic after host or bus reset net: dsa: mv88e6xxx: MV88E6097 does not support jumbo configuration PCI: cadence: Fix updating Vendor ID and Subsystem Vendor ID register RDMA/core: Fix return error value in _ib_modify_qp() to negative Smack: fix another vsscanf out of bounds Smack: prevent underflow in smk_set_cipso() power: supply: check if calc_soc succeeded in pm860x_init_battery Bluetooth: hci_h5: Set HCI_UART_RESET_ON_INIT to correct flags Bluetooth: hci_serdev: Only unregister device if it was registered net: dsa: rtl8366: Fix VLAN semantics net: dsa: rtl8366: Fix VLAN set-up powerpc/boot: Fix CONFIG_PPC_MPC52XX references selftests/powerpc: Fix CPU affinity for child process PCI: Release IVRS table in AMD ACS quirk selftests/powerpc: Fix online CPU selection ASoC: meson: axg-tdm-interface: fix link fmt setup s390/qeth: don't process empty bridge port events wl1251: fix always return 0 error tools, build: Propagate build failures from tools/build/Makefile.build net: ethernet: aquantia: Fix wrong return value liquidio: Fix wrong return value in cn23xx_get_pf_num() net: spider_net: Fix the size used in a 'dma_free_coherent()' call fsl/fman: use 32-bit unsigned integer fsl/fman: fix dereference null return value fsl/fman: fix unreachable code fsl/fman: check dereferencing null pointer fsl/fman: fix eth hash table allocation dlm: Fix kobject memleak ocfs2: fix unbalanced locking pinctrl-single: fix pcs_parse_pinconf() return value svcrdma: Fix page leak in svc_rdma_recv_read_chunk() x86/fsgsbase/64: Fix NULL deref in 86_fsgsbase_read_task crypto: aesni - add compatibility with IAS af_packet: TPACKET_V3: fix fill status rwlock imbalance drivers/net/wan/lapbether: Added needed_headroom and a skb->len check net/nfc/rawsock.c: add CAP_NET_RAW check. net: Set fput_needed iff FDPUT_FPUT is set net/tls: Fix kmap usage net: refactor bind_bucket fastreuse into helper net: initialize fastreuse on inet_inherit_port USB: serial: cp210x: re-enable auto-RTS on open USB: serial: cp210x: enable usb generic throttle/unthrottle ALSA: hda - fix the micmute led status for Lenovo ThinkCentre AIO ALSA: usb-audio: Creative USB X-Fi Pro SB1095 volume knob support ALSA: usb-audio: fix overeager device match for MacroSilicon MS2109 ALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109 pstore: Fix linking when crypto API disabled crypto: hisilicon - don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified crypto: qat - fix double free in qat_uclo_create_batch_init_list crypto: ccp - Fix use of merged scatterlists crypto: cpt - don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified bitfield.h: don't compile-time validate _val in FIELD_FIT fs/minix: check return value of sb_getblk() fs/minix: don't allow getting deleted inodes fs/minix: reject too-large maximum file size ALSA: usb-audio: add quirk for Pioneer DDJ-RB 9p: Fix memory leak in v9fs_mount drm/ttm/nouveau: don't call tt destroy callback on alloc failure. NFS: Don't move layouts to plh_return_segs list while in use NFS: Don't return layout segments that are in use cpufreq: dt: fix oops on armada37xx include/asm-generic/vmlinux.lds.h: align ro_after_init spi: spidev: Align buffers for DMA mtd: rawnand: qcom: avoid write to unavailable register parisc: Implement __smp_store_release and __smp_load_acquire barriers parisc: mask out enable and reserved bits from sba imask ARM: 8992/1: Fix unwind_frame for clang-built kernels irqdomain/treewide: Free firmware node after domain removal xen/balloon: fix accounting in alloc_xenballooned_pages error path xen/balloon: make the balloon wait interruptible xen/gntdev: Fix dmabuf import with non-zero sgt offset Linux 4.19.140 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I6b0d8dcf9ded022f62d9c62605388f1c1e9112d1
This commit is contained in:
commit
7086849b9c
177 changed files with 1087 additions and 490 deletions
|
@ -1559,7 +1559,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw
|
|||
KernelVersion: 4.3
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Raw (unscaled no offset etc.) percentage reading of a substance.
|
||||
Raw (unscaled no offset etc.) reading of a substance. Units
|
||||
after application of scale and offset are percents.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 139
|
||||
SUBLEVEL = 140
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
|
|
@ -339,7 +339,7 @@
|
|||
reg = <0x20>;
|
||||
remote = <&vin1>;
|
||||
|
||||
port {
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
|
@ -399,7 +399,7 @@
|
|||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
default-input = <0>;
|
||||
|
||||
port {
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
|
|
|
@ -21,6 +21,19 @@
|
|||
* A simple function epilogue looks like this:
|
||||
* ldm sp, {fp, sp, pc}
|
||||
*
|
||||
* When compiled with clang, pc and sp are not pushed. A simple function
|
||||
* prologue looks like this when built with clang:
|
||||
*
|
||||
* stmdb {..., fp, lr}
|
||||
* add fp, sp, #x
|
||||
* sub sp, sp, #y
|
||||
*
|
||||
* A simple function epilogue looks like this when built with clang:
|
||||
*
|
||||
* sub sp, fp, #x
|
||||
* ldm {..., fp, pc}
|
||||
*
|
||||
*
|
||||
* Note that with framepointer enabled, even the leaf functions have the same
|
||||
* prologue and epilogue, therefore we can ignore the LR value in this case.
|
||||
*/
|
||||
|
@ -33,6 +46,16 @@ int notrace unwind_frame(struct stackframe *frame)
|
|||
low = frame->sp;
|
||||
high = ALIGN(low, THREAD_SIZE);
|
||||
|
||||
#ifdef CONFIG_CC_IS_CLANG
|
||||
/* check current frame pointer is within bounds */
|
||||
if (fp < low + 4 || fp > high - 4)
|
||||
return -EINVAL;
|
||||
|
||||
frame->sp = frame->fp;
|
||||
frame->fp = *(unsigned long *)(fp);
|
||||
frame->pc = frame->lr;
|
||||
frame->lr = *(unsigned long *)(fp + 4);
|
||||
#else
|
||||
/* check current frame pointer is within bounds */
|
||||
if (fp < low + 12 || fp > high - 4)
|
||||
return -EINVAL;
|
||||
|
@ -41,6 +64,7 @@ int notrace unwind_frame(struct stackframe *frame)
|
|||
frame->fp = *(unsigned long *)(fp - 12);
|
||||
frame->sp = *(unsigned long *)(fp - 8);
|
||||
frame->pc = *(unsigned long *)(fp - 4);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -542,13 +542,13 @@ static void __init at91_pm_sram_init(void)
|
|||
sram_pool = gen_pool_get(&pdev->dev, NULL);
|
||||
if (!sram_pool) {
|
||||
pr_warn("%s: sram pool unavailable!\n", __func__);
|
||||
return;
|
||||
goto out_put_device;
|
||||
}
|
||||
|
||||
sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz);
|
||||
if (!sram_base) {
|
||||
pr_warn("%s: unable to alloc sram!\n", __func__);
|
||||
return;
|
||||
goto out_put_device;
|
||||
}
|
||||
|
||||
sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base);
|
||||
|
@ -556,12 +556,17 @@ static void __init at91_pm_sram_init(void)
|
|||
at91_pm_suspend_in_sram_sz, false);
|
||||
if (!at91_suspend_sram_fn) {
|
||||
pr_warn("SRAM: Could not map\n");
|
||||
return;
|
||||
goto out_put_device;
|
||||
}
|
||||
|
||||
/* Copy the pm suspend handler to SRAM */
|
||||
at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn,
|
||||
&at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz);
|
||||
return;
|
||||
|
||||
out_put_device:
|
||||
put_device(&pdev->dev);
|
||||
return;
|
||||
}
|
||||
|
||||
static bool __init at91_is_pm_mode_active(int pm_mode)
|
||||
|
|
|
@ -60,14 +60,14 @@ static int socfpga_setup_ocram_self_refresh(void)
|
|||
if (!ocram_pool) {
|
||||
pr_warn("%s: ocram pool unavailable!\n", __func__);
|
||||
ret = -ENODEV;
|
||||
goto put_node;
|
||||
goto put_device;
|
||||
}
|
||||
|
||||
ocram_base = gen_pool_alloc(ocram_pool, socfpga_sdram_self_refresh_sz);
|
||||
if (!ocram_base) {
|
||||
pr_warn("%s: unable to alloc ocram!\n", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto put_node;
|
||||
goto put_device;
|
||||
}
|
||||
|
||||
ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base);
|
||||
|
@ -78,7 +78,7 @@ static int socfpga_setup_ocram_self_refresh(void)
|
|||
if (!suspend_ocram_base) {
|
||||
pr_warn("%s: __arm_ioremap_exec failed!\n", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto put_node;
|
||||
goto put_device;
|
||||
}
|
||||
|
||||
/* Copy the code that puts DDR in self refresh to ocram */
|
||||
|
@ -92,6 +92,8 @@ static int socfpga_setup_ocram_self_refresh(void)
|
|||
if (!socfpga_sdram_self_refresh_in_ocram)
|
||||
ret = -EFAULT;
|
||||
|
||||
put_device:
|
||||
put_device(&pdev->dev);
|
||||
put_node:
|
||||
of_node_put(np);
|
||||
|
||||
|
|
|
@ -152,6 +152,7 @@
|
|||
regulator-min-microvolt = <700000>;
|
||||
regulator-max-microvolt = <1150000>;
|
||||
regulator-enable-ramp-delay = <125>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo8_reg: LDO8 {
|
||||
|
|
|
@ -530,6 +530,17 @@
|
|||
status = "ok";
|
||||
compatible = "adi,adv7533";
|
||||
reg = <0x39>;
|
||||
adi,dsi-lanes = <4>;
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -515,7 +515,7 @@
|
|||
reg = <0x39>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <1 2>;
|
||||
pd-gpio = <&gpio0 4 0>;
|
||||
pd-gpios = <&gpio0 4 0>;
|
||||
adi,dsi-lanes = <4>;
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
|
|
|
@ -516,7 +516,7 @@
|
|||
pins = "gpio63", "gpio64", "gpio65", "gpio66",
|
||||
"gpio67", "gpio68";
|
||||
drive-strength = <8>;
|
||||
bias-pull-none;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
cdc_pdm_lines_sus: pdm_lines_off {
|
||||
|
@ -545,7 +545,7 @@
|
|||
pins = "gpio113", "gpio114", "gpio115",
|
||||
"gpio116";
|
||||
drive-strength = <8>;
|
||||
bias-pull-none;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -573,7 +573,7 @@
|
|||
pinconf {
|
||||
pins = "gpio110";
|
||||
drive-strength = <8>;
|
||||
bias-pull-none;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -599,7 +599,7 @@
|
|||
pinconf {
|
||||
pins = "gpio116";
|
||||
drive-strength = <8>;
|
||||
bias-pull-none;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
ext_mclk_tlmm_lines_sus: mclk_lines_off {
|
||||
|
@ -627,7 +627,7 @@
|
|||
pins = "gpio112", "gpio117", "gpio118",
|
||||
"gpio119";
|
||||
drive-strength = <8>;
|
||||
bias-pull-none;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
ext_sec_tlmm_lines_sus: tlmm_lines_off {
|
||||
|
|
|
@ -159,7 +159,7 @@
|
|||
pinctrl-0 = <&rgmii_pins>;
|
||||
snps,reset-active-low;
|
||||
snps,reset-delays-us = <0 10000 50000>;
|
||||
snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
|
||||
snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>;
|
||||
tx_delay = <0x10>;
|
||||
rx_delay = <0x10>;
|
||||
status = "okay";
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
|
||||
vcc5v0_host: vcc5v0-host-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>;
|
||||
enable-active-low;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc5v0_host_en>;
|
||||
|
@ -156,7 +156,7 @@
|
|||
phy-mode = "rgmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&rgmii_pins>;
|
||||
snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
|
||||
snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
|
||||
snps,reset-active-low;
|
||||
snps,reset-delays-us = <0 10000 50000>;
|
||||
tx_delay = <0x10>;
|
||||
|
|
|
@ -183,7 +183,7 @@ static __inline__ void iop_writeb(volatile struct mac_iop *iop, __u16 addr, __u8
|
|||
|
||||
static __inline__ void iop_stop(volatile struct mac_iop *iop)
|
||||
{
|
||||
iop->status_ctrl &= ~IOP_RUN;
|
||||
iop->status_ctrl = IOP_AUTOINC;
|
||||
}
|
||||
|
||||
static __inline__ void iop_start(volatile struct mac_iop *iop)
|
||||
|
@ -191,14 +191,9 @@ static __inline__ void iop_start(volatile struct mac_iop *iop)
|
|||
iop->status_ctrl = IOP_RUN | IOP_AUTOINC;
|
||||
}
|
||||
|
||||
static __inline__ void iop_bypass(volatile struct mac_iop *iop)
|
||||
{
|
||||
iop->status_ctrl |= IOP_BYPASS;
|
||||
}
|
||||
|
||||
static __inline__ void iop_interrupt(volatile struct mac_iop *iop)
|
||||
{
|
||||
iop->status_ctrl |= IOP_IRQ;
|
||||
iop->status_ctrl = IOP_IRQ | IOP_RUN | IOP_AUTOINC;
|
||||
}
|
||||
|
||||
static int iop_alive(volatile struct mac_iop *iop)
|
||||
|
@ -244,7 +239,6 @@ void __init iop_preinit(void)
|
|||
} else {
|
||||
iop_base[IOP_NUM_SCC] = (struct mac_iop *) SCC_IOP_BASE_QUADRA;
|
||||
}
|
||||
iop_base[IOP_NUM_SCC]->status_ctrl = 0x87;
|
||||
iop_scc_present = 1;
|
||||
} else {
|
||||
iop_base[IOP_NUM_SCC] = NULL;
|
||||
|
@ -256,7 +250,7 @@ void __init iop_preinit(void)
|
|||
} else {
|
||||
iop_base[IOP_NUM_ISM] = (struct mac_iop *) ISM_IOP_BASE_QUADRA;
|
||||
}
|
||||
iop_base[IOP_NUM_ISM]->status_ctrl = 0;
|
||||
iop_stop(iop_base[IOP_NUM_ISM]);
|
||||
iop_ism_present = 1;
|
||||
} else {
|
||||
iop_base[IOP_NUM_ISM] = NULL;
|
||||
|
@ -416,7 +410,8 @@ static void iop_handle_send(uint iop_num, uint chan)
|
|||
msg->status = IOP_MSGSTATUS_UNUSED;
|
||||
msg = msg->next;
|
||||
iop_send_queue[iop_num][chan] = msg;
|
||||
if (msg) iop_do_send(msg);
|
||||
if (msg && iop_readb(iop, IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE)
|
||||
iop_do_send(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -490,16 +485,12 @@ int iop_send_message(uint iop_num, uint chan, void *privdata,
|
|||
|
||||
if (!(q = iop_send_queue[iop_num][chan])) {
|
||||
iop_send_queue[iop_num][chan] = msg;
|
||||
iop_do_send(msg);
|
||||
} else {
|
||||
while (q->next) q = q->next;
|
||||
q->next = msg;
|
||||
}
|
||||
|
||||
if (iop_readb(iop_base[iop_num],
|
||||
IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE) {
|
||||
iop_do_send(msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -517,6 +517,7 @@ static int __init dwc3_octeon_device_init(void)
|
|||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (res == NULL) {
|
||||
put_device(&pdev->dev);
|
||||
dev_err(&pdev->dev, "No memory resources\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
@ -528,8 +529,10 @@ static int __init dwc3_octeon_device_init(void)
|
|||
* know the difference.
|
||||
*/
|
||||
base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(base))
|
||||
if (IS_ERR(base)) {
|
||||
put_device(&pdev->dev);
|
||||
return PTR_ERR(base);
|
||||
}
|
||||
|
||||
mutex_lock(&dwc3_octeon_clocks_mutex);
|
||||
dwc3_octeon_clocks_start(&pdev->dev, (u64)base);
|
||||
|
|
|
@ -26,6 +26,67 @@
|
|||
#define __smp_rmb() mb()
|
||||
#define __smp_wmb() mb()
|
||||
|
||||
#define __smp_store_release(p, v) \
|
||||
do { \
|
||||
typeof(p) __p = (p); \
|
||||
union { typeof(*p) __val; char __c[1]; } __u = \
|
||||
{ .__val = (__force typeof(*p)) (v) }; \
|
||||
compiletime_assert_atomic_type(*p); \
|
||||
switch (sizeof(*p)) { \
|
||||
case 1: \
|
||||
asm volatile("stb,ma %0,0(%1)" \
|
||||
: : "r"(*(__u8 *)__u.__c), "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 2: \
|
||||
asm volatile("sth,ma %0,0(%1)" \
|
||||
: : "r"(*(__u16 *)__u.__c), "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 4: \
|
||||
asm volatile("stw,ma %0,0(%1)" \
|
||||
: : "r"(*(__u32 *)__u.__c), "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 8: \
|
||||
if (IS_ENABLED(CONFIG_64BIT)) \
|
||||
asm volatile("std,ma %0,0(%1)" \
|
||||
: : "r"(*(__u64 *)__u.__c), "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define __smp_load_acquire(p) \
|
||||
({ \
|
||||
union { typeof(*p) __val; char __c[1]; } __u; \
|
||||
typeof(p) __p = (p); \
|
||||
compiletime_assert_atomic_type(*p); \
|
||||
switch (sizeof(*p)) { \
|
||||
case 1: \
|
||||
asm volatile("ldb,ma 0(%1),%0" \
|
||||
: "=r"(*(__u8 *)__u.__c) : "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 2: \
|
||||
asm volatile("ldh,ma 0(%1),%0" \
|
||||
: "=r"(*(__u16 *)__u.__c) : "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 4: \
|
||||
asm volatile("ldw,ma 0(%1),%0" \
|
||||
: "=r"(*(__u32 *)__u.__c) : "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
case 8: \
|
||||
if (IS_ENABLED(CONFIG_64BIT)) \
|
||||
asm volatile("ldd,ma 0(%1),%0" \
|
||||
: "=r"(*(__u64 *)__u.__c) : "r"(__p) \
|
||||
: "memory"); \
|
||||
break; \
|
||||
} \
|
||||
__u.__val; \
|
||||
})
|
||||
#include <asm-generic/barrier.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
|
|
@ -122,7 +122,7 @@ src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
|
|||
elf_util.c $(zlib-y) devtree.c stdlib.c \
|
||||
oflib.c ofconsole.c cuboot.c
|
||||
|
||||
src-wlib-$(CONFIG_PPC_MPC52XX) += mpc52xx-psc.c
|
||||
src-wlib-$(CONFIG_PPC_MPC52xx) += mpc52xx-psc.c
|
||||
src-wlib-$(CONFIG_PPC64_BOOT_WRAPPER) += opal-calls.S opal.c
|
||||
ifndef CONFIG_PPC64_BOOT_WRAPPER
|
||||
src-wlib-y += crtsavres.S
|
||||
|
|
|
@ -127,7 +127,7 @@ int serial_console_init(void)
|
|||
dt_is_compatible(devp, "fsl,cpm2-smc-uart"))
|
||||
rc = cpm_console_init(devp, &serial_cd);
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_MPC52XX
|
||||
#ifdef CONFIG_PPC_MPC52xx
|
||||
else if (dt_is_compatible(devp, "fsl,mpc5200-psc-uart"))
|
||||
rc = mpc5200_psc_console_init(devp, &serial_cd);
|
||||
#endif
|
||||
|
|
|
@ -705,7 +705,7 @@ int vdso_getcpu_init(void)
|
|||
node = cpu_to_node(cpu);
|
||||
WARN_ON_ONCE(node > 0xffff);
|
||||
|
||||
val = (cpu & 0xfff) | ((node & 0xffff) << 16);
|
||||
val = (cpu & 0xffff) | ((node & 0xffff) << 16);
|
||||
mtspr(SPRN_SPRG_VDSO_WRITE, val);
|
||||
get_paca()->sprg_vdso = val;
|
||||
|
||||
|
|
|
@ -81,13 +81,17 @@ int pkey_initialize(void)
|
|||
scan_pkey_feature();
|
||||
|
||||
/*
|
||||
* Let's assume 32 pkeys on P8 bare metal, if its not defined by device
|
||||
* tree. We make this exception since skiboot forgot to expose this
|
||||
* property on power8.
|
||||
* Let's assume 32 pkeys on P8/P9 bare metal, if its not defined by device
|
||||
* tree. We make this exception since some version of skiboot forgot to
|
||||
* expose this property on power8/9.
|
||||
*/
|
||||
if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR) &&
|
||||
cpu_has_feature(CPU_FTRS_POWER8))
|
||||
pkeys_total = 32;
|
||||
if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR)) {
|
||||
unsigned long pvr = mfspr(SPRN_PVR);
|
||||
|
||||
if (PVR_VER(pvr) == PVR_POWER8 || PVR_VER(pvr) == PVR_POWER8E ||
|
||||
PVR_VER(pvr) == PVR_POWER8NVL || PVR_VER(pvr) == PVR_POWER9)
|
||||
pkeys_total = 32;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adjust the upper limit, based on the number of bits supported by
|
||||
|
|
|
@ -127,10 +127,6 @@ ddq_add_8:
|
|||
|
||||
/* generate a unique variable for ddq_add_x */
|
||||
|
||||
.macro setddq n
|
||||
var_ddq_add = ddq_add_\n
|
||||
.endm
|
||||
|
||||
/* generate a unique variable for xmm register */
|
||||
.macro setxdata n
|
||||
var_xdata = %xmm\n
|
||||
|
@ -140,9 +136,7 @@ ddq_add_8:
|
|||
|
||||
.macro club name, id
|
||||
.altmacro
|
||||
.if \name == DDQ_DATA
|
||||
setddq %\id
|
||||
.elseif \name == XDATA
|
||||
.if \name == XDATA
|
||||
setxdata %\id
|
||||
.endif
|
||||
.noaltmacro
|
||||
|
@ -165,9 +159,8 @@ ddq_add_8:
|
|||
|
||||
.set i, 1
|
||||
.rept (by - 1)
|
||||
club DDQ_DATA, i
|
||||
club XDATA, i
|
||||
vpaddq var_ddq_add(%rip), xcounter, var_xdata
|
||||
vpaddq (ddq_add_1 + 16 * (i - 1))(%rip), xcounter, var_xdata
|
||||
vptest ddq_low_msk(%rip), var_xdata
|
||||
jnz 1f
|
||||
vpaddq ddq_high_add_1(%rip), var_xdata, var_xdata
|
||||
|
@ -180,8 +173,7 @@ ddq_add_8:
|
|||
vmovdqa 1*16(p_keys), xkeyA
|
||||
|
||||
vpxor xkey0, xdata0, xdata0
|
||||
club DDQ_DATA, by
|
||||
vpaddq var_ddq_add(%rip), xcounter, xcounter
|
||||
vpaddq (ddq_add_1 + 16 * (by - 1))(%rip), xcounter, xcounter
|
||||
vptest ddq_low_msk(%rip), xcounter
|
||||
jnz 1f
|
||||
vpaddq ddq_high_add_1(%rip), xcounter, xcounter
|
||||
|
|
|
@ -270,7 +270,7 @@ ALL_F: .octa 0xffffffffffffffffffffffffffffffff
|
|||
PSHUFB_XMM %xmm2, %xmm0
|
||||
movdqu %xmm0, CurCount(%arg2) # ctx_data.current_counter = iv
|
||||
|
||||
PRECOMPUTE \SUBKEY, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
|
||||
PRECOMPUTE \SUBKEY, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7
|
||||
movdqu HashKey(%arg2), %xmm13
|
||||
|
||||
CALC_AAD_HASH %xmm13, \AAD, \AADLEN, %xmm0, %xmm1, %xmm2, %xmm3, \
|
||||
|
@ -982,7 +982,7 @@ _initial_blocks_done\@:
|
|||
* arg1, %arg3, %arg4 are used as pointers only, not modified
|
||||
* %r11 is the data offset value
|
||||
*/
|
||||
.macro GHASH_4_ENCRYPT_4_PARALLEL_ENC TMP1 TMP2 TMP3 TMP4 TMP5 \
|
||||
.macro GHASH_4_ENCRYPT_4_PARALLEL_enc TMP1 TMP2 TMP3 TMP4 TMP5 \
|
||||
TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation
|
||||
|
||||
movdqa \XMM1, \XMM5
|
||||
|
@ -1190,7 +1190,7 @@ aes_loop_par_enc_done\@:
|
|||
* arg1, %arg3, %arg4 are used as pointers only, not modified
|
||||
* %r11 is the data offset value
|
||||
*/
|
||||
.macro GHASH_4_ENCRYPT_4_PARALLEL_DEC TMP1 TMP2 TMP3 TMP4 TMP5 \
|
||||
.macro GHASH_4_ENCRYPT_4_PARALLEL_dec TMP1 TMP2 TMP3 TMP4 TMP5 \
|
||||
TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation
|
||||
|
||||
movdqa \XMM1, \XMM5
|
||||
|
|
|
@ -2342,8 +2342,13 @@ static int mp_irqdomain_create(int ioapic)
|
|||
|
||||
static void ioapic_destroy_irqdomain(int idx)
|
||||
{
|
||||
struct ioapic_domain_cfg *cfg = &ioapics[idx].irqdomain_cfg;
|
||||
struct fwnode_handle *fn = ioapics[idx].irqdomain->fwnode;
|
||||
|
||||
if (ioapics[idx].irqdomain) {
|
||||
irq_domain_remove(ioapics[idx].irqdomain);
|
||||
if (!cfg->dev)
|
||||
irq_domain_free_fwnode(fn);
|
||||
ioapics[idx].irqdomain = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -518,7 +518,7 @@ static void do_inject(void)
|
|||
*/
|
||||
if (inj_type == DFR_INT_INJ) {
|
||||
i_mce.status |= MCI_STATUS_DEFERRED;
|
||||
i_mce.status |= (i_mce.status & ~MCI_STATUS_UC);
|
||||
i_mce.status &= ~MCI_STATUS_UC;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -374,7 +374,7 @@ static unsigned long task_seg_base(struct task_struct *task,
|
|||
*/
|
||||
mutex_lock(&task->mm->context.lock);
|
||||
ldt = task->mm->context.ldt;
|
||||
if (unlikely(idx >= ldt->nr_entries))
|
||||
if (unlikely(!ldt || idx >= ldt->nr_entries))
|
||||
base = 0;
|
||||
else
|
||||
base = get_desc_base(ldt->entries + idx);
|
||||
|
|
|
@ -473,10 +473,6 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
|
|||
(u8)access_byte_width;
|
||||
}
|
||||
}
|
||||
/* An additional reference for the container */
|
||||
|
||||
acpi_ut_add_reference(obj_desc->field.region_obj);
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
|
||||
"RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
|
||||
obj_desc->field.start_field_bit_offset,
|
||||
|
|
|
@ -563,11 +563,6 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
|
|||
next_object = object->buffer_field.buffer_obj;
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_LOCAL_REGION_FIELD:
|
||||
|
||||
next_object = object->field.region_obj;
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_LOCAL_BANK_FIELD:
|
||||
|
||||
next_object = object->bank_field.bank_obj;
|
||||
|
@ -608,6 +603,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
|
|||
}
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_LOCAL_REGION_FIELD:
|
||||
case ACPI_TYPE_REGION:
|
||||
default:
|
||||
|
||||
|
|
|
@ -2363,6 +2363,8 @@ static void __exit loop_exit(void)
|
|||
|
||||
range = max_loop ? max_loop << part_shift : 1UL << MINORBITS;
|
||||
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
|
||||
idr_for_each(&loop_index_idr, &loop_exit_cb, NULL);
|
||||
idr_destroy(&loop_index_idr);
|
||||
|
||||
|
@ -2370,6 +2372,8 @@ static void __exit loop_exit(void)
|
|||
unregister_blkdev(LOOP_MAJOR, "loop");
|
||||
|
||||
misc_deregister(&loop_misc);
|
||||
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
}
|
||||
|
||||
module_init(loop_init);
|
||||
|
|
|
@ -803,7 +803,7 @@ static int h5_serdev_probe(struct serdev_device *serdev)
|
|||
if (!h5)
|
||||
return -ENOMEM;
|
||||
|
||||
set_bit(HCI_UART_RESET_ON_INIT, &h5->serdev_hu.flags);
|
||||
set_bit(HCI_UART_RESET_ON_INIT, &h5->serdev_hu.hdev_flags);
|
||||
|
||||
h5->hu = &h5->serdev_hu;
|
||||
h5->serdev_hu.serdev = serdev;
|
||||
|
|
|
@ -369,7 +369,8 @@ void hci_uart_unregister_device(struct hci_uart *hu)
|
|||
struct hci_dev *hdev = hu->hdev;
|
||||
|
||||
clear_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
hci_unregister_dev(hdev);
|
||||
if (test_bit(HCI_UART_REGISTERED, &hu->flags))
|
||||
hci_unregister_dev(hdev);
|
||||
hci_free_dev(hdev);
|
||||
|
||||
cancel_work_sync(&hu->write_work);
|
||||
|
|
|
@ -304,8 +304,10 @@ static int intel_gtt_setup_scratch_page(void)
|
|||
if (intel_private.needs_dmar) {
|
||||
dma_addr = pci_map_page(intel_private.pcidev, page, 0,
|
||||
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
|
||||
if (pci_dma_mapping_error(intel_private.pcidev, dma_addr))
|
||||
if (pci_dma_mapping_error(intel_private.pcidev, dma_addr)) {
|
||||
__free_page(page);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
intel_private.scratch_page_dma = dma_addr;
|
||||
} else
|
||||
|
|
|
@ -103,6 +103,8 @@ static const struct clk_ops scmi_clk_ops = {
|
|||
static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk)
|
||||
{
|
||||
int ret;
|
||||
unsigned long min_rate, max_rate;
|
||||
|
||||
struct clk_init_data init = {
|
||||
.flags = CLK_GET_RATE_NOCACHE,
|
||||
.num_parents = 0,
|
||||
|
@ -112,9 +114,23 @@ static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk)
|
|||
|
||||
sclk->hw.init = &init;
|
||||
ret = devm_clk_hw_register(dev, &sclk->hw);
|
||||
if (!ret)
|
||||
clk_hw_set_rate_range(&sclk->hw, sclk->info->range.min_rate,
|
||||
sclk->info->range.max_rate);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (sclk->info->rate_discrete) {
|
||||
int num_rates = sclk->info->list.num_rates;
|
||||
|
||||
if (num_rates <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
min_rate = sclk->info->list.rates[0];
|
||||
max_rate = sclk->info->list.rates[num_rates - 1];
|
||||
} else {
|
||||
min_rate = sclk->info->range.min_rate;
|
||||
max_rate = sclk->info->range.max_rate;
|
||||
}
|
||||
|
||||
clk_hw_set_rate_range(&sclk->hw, min_rate, max_rate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -458,6 +458,7 @@ static int __init armada37xx_cpufreq_driver_init(void)
|
|||
/* Now that everything is setup, enable the DVFS at hardware level */
|
||||
armada37xx_cpufreq_enable_dvfs(nb_pm_base);
|
||||
|
||||
memset(&pdata, 0, sizeof(pdata));
|
||||
pdata.suspend = armada37xx_cpufreq_suspend;
|
||||
pdata.resume = armada37xx_cpufreq_resume;
|
||||
|
||||
|
|
|
@ -205,6 +205,7 @@ static inline int cvm_enc_dec(struct ablkcipher_request *req, u32 enc)
|
|||
int status;
|
||||
|
||||
memset(req_info, 0, sizeof(struct cpt_request_info));
|
||||
req_info->may_sleep = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) != 0;
|
||||
memset(fctx, 0, sizeof(struct fc_context));
|
||||
create_input_list(req, enc, enc_iv_len);
|
||||
create_output_list(req, enc_iv_len);
|
||||
|
|
|
@ -136,7 +136,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf,
|
|||
|
||||
/* Setup gather (input) components */
|
||||
g_sz_bytes = ((req->incnt + 3) / 4) * sizeof(struct sglist_component);
|
||||
info->gather_components = kzalloc(g_sz_bytes, GFP_KERNEL);
|
||||
info->gather_components = kzalloc(g_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!info->gather_components) {
|
||||
ret = -ENOMEM;
|
||||
goto scatter_gather_clean;
|
||||
|
@ -153,7 +153,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf,
|
|||
|
||||
/* Setup scatter (output) components */
|
||||
s_sz_bytes = ((req->outcnt + 3) / 4) * sizeof(struct sglist_component);
|
||||
info->scatter_components = kzalloc(s_sz_bytes, GFP_KERNEL);
|
||||
info->scatter_components = kzalloc(s_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!info->scatter_components) {
|
||||
ret = -ENOMEM;
|
||||
goto scatter_gather_clean;
|
||||
|
@ -170,7 +170,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf,
|
|||
|
||||
/* Create and initialize DPTR */
|
||||
info->dlen = g_sz_bytes + s_sz_bytes + SG_LIST_HDR_SIZE;
|
||||
info->in_buffer = kzalloc(info->dlen, GFP_KERNEL);
|
||||
info->in_buffer = kzalloc(info->dlen, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!info->in_buffer) {
|
||||
ret = -ENOMEM;
|
||||
goto scatter_gather_clean;
|
||||
|
@ -198,7 +198,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf,
|
|||
}
|
||||
|
||||
/* Create and initialize RPTR */
|
||||
info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, GFP_KERNEL);
|
||||
info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!info->out_buffer) {
|
||||
ret = -ENOMEM;
|
||||
goto scatter_gather_clean;
|
||||
|
@ -434,7 +434,7 @@ int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req)
|
|||
struct cpt_vq_command vq_cmd;
|
||||
union cpt_inst_s cptinst;
|
||||
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
info = kzalloc(sizeof(*info), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (unlikely(!info)) {
|
||||
dev_err(&pdev->dev, "Unable to allocate memory for info_buffer\n");
|
||||
return -ENOMEM;
|
||||
|
@ -456,7 +456,7 @@ int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req)
|
|||
* Get buffer for union cpt_res_s response
|
||||
* structure and its physical address
|
||||
*/
|
||||
info->completion_addr = kzalloc(sizeof(union cpt_res_s), GFP_KERNEL);
|
||||
info->completion_addr = kzalloc(sizeof(union cpt_res_s), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (unlikely(!info->completion_addr)) {
|
||||
dev_err(&pdev->dev, "Unable to allocate memory for completion_addr\n");
|
||||
ret = -ENOMEM;
|
||||
|
|
|
@ -65,6 +65,8 @@ struct cpt_request_info {
|
|||
union ctrl_info ctrl; /* User control information */
|
||||
struct cptvf_request req; /* Request Information (Core specific) */
|
||||
|
||||
bool may_sleep;
|
||||
|
||||
struct buf_ptr in[MAX_BUF_CNT];
|
||||
struct buf_ptr out[MAX_BUF_CNT];
|
||||
|
||||
|
|
|
@ -471,6 +471,7 @@ struct ccp_sg_workarea {
|
|||
unsigned int sg_used;
|
||||
|
||||
struct scatterlist *dma_sg;
|
||||
struct scatterlist *dma_sg_head;
|
||||
struct device *dma_dev;
|
||||
unsigned int dma_count;
|
||||
enum dma_data_direction dma_dir;
|
||||
|
|
|
@ -67,7 +67,7 @@ static u32 ccp_gen_jobid(struct ccp_device *ccp)
|
|||
static void ccp_sg_free(struct ccp_sg_workarea *wa)
|
||||
{
|
||||
if (wa->dma_count)
|
||||
dma_unmap_sg(wa->dma_dev, wa->dma_sg, wa->nents, wa->dma_dir);
|
||||
dma_unmap_sg(wa->dma_dev, wa->dma_sg_head, wa->nents, wa->dma_dir);
|
||||
|
||||
wa->dma_count = 0;
|
||||
}
|
||||
|
@ -96,6 +96,7 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev,
|
|||
return 0;
|
||||
|
||||
wa->dma_sg = sg;
|
||||
wa->dma_sg_head = sg;
|
||||
wa->dma_dev = dev;
|
||||
wa->dma_dir = dma_dir;
|
||||
wa->dma_count = dma_map_sg(dev, sg, wa->nents, dma_dir);
|
||||
|
@ -108,14 +109,28 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev,
|
|||
static void ccp_update_sg_workarea(struct ccp_sg_workarea *wa, unsigned int len)
|
||||
{
|
||||
unsigned int nbytes = min_t(u64, len, wa->bytes_left);
|
||||
unsigned int sg_combined_len = 0;
|
||||
|
||||
if (!wa->sg)
|
||||
return;
|
||||
|
||||
wa->sg_used += nbytes;
|
||||
wa->bytes_left -= nbytes;
|
||||
if (wa->sg_used == wa->sg->length) {
|
||||
wa->sg = sg_next(wa->sg);
|
||||
if (wa->sg_used == sg_dma_len(wa->dma_sg)) {
|
||||
/* Advance to the next DMA scatterlist entry */
|
||||
wa->dma_sg = sg_next(wa->dma_sg);
|
||||
|
||||
/* In the case that the DMA mapped scatterlist has entries
|
||||
* that have been merged, the non-DMA mapped scatterlist
|
||||
* must be advanced multiple times for each merged entry.
|
||||
* This ensures that the current non-DMA mapped entry
|
||||
* corresponds to the current DMA mapped entry.
|
||||
*/
|
||||
do {
|
||||
sg_combined_len += wa->sg->length;
|
||||
wa->sg = sg_next(wa->sg);
|
||||
} while (wa->sg_used > sg_combined_len);
|
||||
|
||||
wa->sg_used = 0;
|
||||
}
|
||||
}
|
||||
|
@ -304,7 +319,7 @@ static unsigned int ccp_queue_buf(struct ccp_data *data, unsigned int from)
|
|||
/* Update the structures and generate the count */
|
||||
buf_count = 0;
|
||||
while (sg_wa->bytes_left && (buf_count < dm_wa->length)) {
|
||||
nbytes = min(sg_wa->sg->length - sg_wa->sg_used,
|
||||
nbytes = min(sg_dma_len(sg_wa->dma_sg) - sg_wa->sg_used,
|
||||
dm_wa->length - buf_count);
|
||||
nbytes = min_t(u64, sg_wa->bytes_left, nbytes);
|
||||
|
||||
|
@ -336,11 +351,11 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
|
|||
* and destination. The resulting len values will always be <= UINT_MAX
|
||||
* because the dma length is an unsigned int.
|
||||
*/
|
||||
sg_src_len = sg_dma_len(src->sg_wa.sg) - src->sg_wa.sg_used;
|
||||
sg_src_len = sg_dma_len(src->sg_wa.dma_sg) - src->sg_wa.sg_used;
|
||||
sg_src_len = min_t(u64, src->sg_wa.bytes_left, sg_src_len);
|
||||
|
||||
if (dst) {
|
||||
sg_dst_len = sg_dma_len(dst->sg_wa.sg) - dst->sg_wa.sg_used;
|
||||
sg_dst_len = sg_dma_len(dst->sg_wa.dma_sg) - dst->sg_wa.sg_used;
|
||||
sg_dst_len = min_t(u64, src->sg_wa.bytes_left, sg_dst_len);
|
||||
op_len = min(sg_src_len, sg_dst_len);
|
||||
} else {
|
||||
|
@ -370,7 +385,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
|
|||
/* Enough data in the sg element, but we need to
|
||||
* adjust for any previously copied data
|
||||
*/
|
||||
op->src.u.dma.address = sg_dma_address(src->sg_wa.sg);
|
||||
op->src.u.dma.address = sg_dma_address(src->sg_wa.dma_sg);
|
||||
op->src.u.dma.offset = src->sg_wa.sg_used;
|
||||
op->src.u.dma.length = op_len & ~(block_size - 1);
|
||||
|
||||
|
@ -391,7 +406,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
|
|||
/* Enough room in the sg element, but we need to
|
||||
* adjust for any previously used area
|
||||
*/
|
||||
op->dst.u.dma.address = sg_dma_address(dst->sg_wa.sg);
|
||||
op->dst.u.dma.address = sg_dma_address(dst->sg_wa.dma_sg);
|
||||
op->dst.u.dma.offset = dst->sg_wa.sg_used;
|
||||
op->dst.u.dma.length = op->src.u.dma.length;
|
||||
}
|
||||
|
@ -2034,7 +2049,7 @@ ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
dst.sg_wa.sg_used = 0;
|
||||
for (i = 1; i <= src.sg_wa.dma_count; i++) {
|
||||
if (!dst.sg_wa.sg ||
|
||||
(dst.sg_wa.sg->length < src.sg_wa.sg->length)) {
|
||||
(sg_dma_len(dst.sg_wa.sg) < sg_dma_len(src.sg_wa.sg))) {
|
||||
ret = -EINVAL;
|
||||
goto e_dst;
|
||||
}
|
||||
|
@ -2060,8 +2075,8 @@ ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
goto e_dst;
|
||||
}
|
||||
|
||||
dst.sg_wa.sg_used += src.sg_wa.sg->length;
|
||||
if (dst.sg_wa.sg_used == dst.sg_wa.sg->length) {
|
||||
dst.sg_wa.sg_used += sg_dma_len(src.sg_wa.sg);
|
||||
if (dst.sg_wa.sg_used == sg_dma_len(dst.sg_wa.sg)) {
|
||||
dst.sg_wa.sg = sg_next(dst.sg_wa.sg);
|
||||
dst.sg_wa.sg_used = 0;
|
||||
}
|
||||
|
|
|
@ -137,7 +137,6 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
|||
skcipher_alg.base);
|
||||
struct device *dev = drvdata_to_dev(cc_alg->drvdata);
|
||||
unsigned int max_key_buf_size = cc_alg->skcipher_alg.max_keysize;
|
||||
int rc = 0;
|
||||
|
||||
dev_dbg(dev, "Initializing context @%p for %s\n", ctx_p,
|
||||
crypto_tfm_alg_name(tfm));
|
||||
|
@ -149,10 +148,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
|||
ctx_p->flow_mode = cc_alg->flow_mode;
|
||||
ctx_p->drvdata = cc_alg->drvdata;
|
||||
|
||||
if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) {
|
||||
/* Alloc hash tfm for essiv */
|
||||
ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0);
|
||||
if (IS_ERR(ctx_p->shash_tfm)) {
|
||||
dev_err(dev, "Error allocating hash tfm for ESSIV.\n");
|
||||
return PTR_ERR(ctx_p->shash_tfm);
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate key buffer, cache line aligned */
|
||||
ctx_p->user.key = kmalloc(max_key_buf_size, GFP_KERNEL);
|
||||
if (!ctx_p->user.key)
|
||||
return -ENOMEM;
|
||||
goto free_shash;
|
||||
|
||||
dev_dbg(dev, "Allocated key buffer in context. key=@%p\n",
|
||||
ctx_p->user.key);
|
||||
|
@ -164,21 +172,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
|||
if (dma_mapping_error(dev, ctx_p->user.key_dma_addr)) {
|
||||
dev_err(dev, "Mapping Key %u B at va=%pK for DMA failed\n",
|
||||
max_key_buf_size, ctx_p->user.key);
|
||||
return -ENOMEM;
|
||||
goto free_key;
|
||||
}
|
||||
dev_dbg(dev, "Mapped key %u B at va=%pK to dma=%pad\n",
|
||||
max_key_buf_size, ctx_p->user.key, &ctx_p->user.key_dma_addr);
|
||||
|
||||
if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) {
|
||||
/* Alloc hash tfm for essiv */
|
||||
ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0);
|
||||
if (IS_ERR(ctx_p->shash_tfm)) {
|
||||
dev_err(dev, "Error allocating hash tfm for ESSIV.\n");
|
||||
return PTR_ERR(ctx_p->shash_tfm);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return rc;
|
||||
free_key:
|
||||
kfree(ctx_p->user.key);
|
||||
free_shash:
|
||||
crypto_free_shash(ctx_p->shash_tfm);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void cc_cipher_exit(struct crypto_tfm *tfm)
|
||||
|
|
|
@ -175,7 +175,8 @@ static int sec_alloc_and_fill_hw_sgl(struct sec_hw_sgl **sec_sgl,
|
|||
dma_addr_t *psec_sgl,
|
||||
struct scatterlist *sgl,
|
||||
int count,
|
||||
struct sec_dev_info *info)
|
||||
struct sec_dev_info *info,
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct sec_hw_sgl *sgl_current = NULL;
|
||||
struct sec_hw_sgl *sgl_next;
|
||||
|
@ -190,7 +191,7 @@ static int sec_alloc_and_fill_hw_sgl(struct sec_hw_sgl **sec_sgl,
|
|||
sge_index = i % SEC_MAX_SGE_NUM;
|
||||
if (sge_index == 0) {
|
||||
sgl_next = dma_pool_zalloc(info->hw_sgl_pool,
|
||||
GFP_KERNEL, &sgl_next_dma);
|
||||
gfp, &sgl_next_dma);
|
||||
if (!sgl_next) {
|
||||
ret = -ENOMEM;
|
||||
goto err_free_hw_sgls;
|
||||
|
@ -553,14 +554,14 @@ void sec_alg_callback(struct sec_bd_info *resp, void *shadow)
|
|||
}
|
||||
|
||||
static int sec_alg_alloc_and_calc_split_sizes(int length, size_t **split_sizes,
|
||||
int *steps)
|
||||
int *steps, gfp_t gfp)
|
||||
{
|
||||
size_t *sizes;
|
||||
int i;
|
||||
|
||||
/* Split into suitable sized blocks */
|
||||
*steps = roundup(length, SEC_REQ_LIMIT) / SEC_REQ_LIMIT;
|
||||
sizes = kcalloc(*steps, sizeof(*sizes), GFP_KERNEL);
|
||||
sizes = kcalloc(*steps, sizeof(*sizes), gfp);
|
||||
if (!sizes)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -576,7 +577,7 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes,
|
|||
int steps, struct scatterlist ***splits,
|
||||
int **splits_nents,
|
||||
int sgl_len_in,
|
||||
struct device *dev)
|
||||
struct device *dev, gfp_t gfp)
|
||||
{
|
||||
int ret, count;
|
||||
|
||||
|
@ -584,12 +585,12 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes,
|
|||
if (!count)
|
||||
return -EINVAL;
|
||||
|
||||
*splits = kcalloc(steps, sizeof(struct scatterlist *), GFP_KERNEL);
|
||||
*splits = kcalloc(steps, sizeof(struct scatterlist *), gfp);
|
||||
if (!*splits) {
|
||||
ret = -ENOMEM;
|
||||
goto err_unmap_sg;
|
||||
}
|
||||
*splits_nents = kcalloc(steps, sizeof(int), GFP_KERNEL);
|
||||
*splits_nents = kcalloc(steps, sizeof(int), gfp);
|
||||
if (!*splits_nents) {
|
||||
ret = -ENOMEM;
|
||||
goto err_free_splits;
|
||||
|
@ -597,7 +598,7 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes,
|
|||
|
||||
/* output the scatter list before and after this */
|
||||
ret = sg_split(sgl, count, 0, steps, split_sizes,
|
||||
*splits, *splits_nents, GFP_KERNEL);
|
||||
*splits, *splits_nents, gfp);
|
||||
if (ret) {
|
||||
ret = -ENOMEM;
|
||||
goto err_free_splits_nents;
|
||||
|
@ -638,13 +639,13 @@ static struct sec_request_el
|
|||
int el_size, bool different_dest,
|
||||
struct scatterlist *sgl_in, int n_ents_in,
|
||||
struct scatterlist *sgl_out, int n_ents_out,
|
||||
struct sec_dev_info *info)
|
||||
struct sec_dev_info *info, gfp_t gfp)
|
||||
{
|
||||
struct sec_request_el *el;
|
||||
struct sec_bd_info *req;
|
||||
int ret;
|
||||
|
||||
el = kzalloc(sizeof(*el), GFP_KERNEL);
|
||||
el = kzalloc(sizeof(*el), gfp);
|
||||
if (!el)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
el->el_length = el_size;
|
||||
|
@ -676,7 +677,7 @@ static struct sec_request_el
|
|||
el->sgl_in = sgl_in;
|
||||
|
||||
ret = sec_alloc_and_fill_hw_sgl(&el->in, &el->dma_in, el->sgl_in,
|
||||
n_ents_in, info);
|
||||
n_ents_in, info, gfp);
|
||||
if (ret)
|
||||
goto err_free_el;
|
||||
|
||||
|
@ -687,7 +688,7 @@ static struct sec_request_el
|
|||
el->sgl_out = sgl_out;
|
||||
ret = sec_alloc_and_fill_hw_sgl(&el->out, &el->dma_out,
|
||||
el->sgl_out,
|
||||
n_ents_out, info);
|
||||
n_ents_out, info, gfp);
|
||||
if (ret)
|
||||
goto err_free_hw_sgl_in;
|
||||
|
||||
|
@ -728,6 +729,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq,
|
|||
int *splits_out_nents = NULL;
|
||||
struct sec_request_el *el, *temp;
|
||||
bool split = skreq->src != skreq->dst;
|
||||
gfp_t gfp = skreq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC;
|
||||
|
||||
mutex_init(&sec_req->lock);
|
||||
sec_req->req_base = &skreq->base;
|
||||
|
@ -736,13 +738,13 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq,
|
|||
sec_req->len_in = sg_nents(skreq->src);
|
||||
|
||||
ret = sec_alg_alloc_and_calc_split_sizes(skreq->cryptlen, &split_sizes,
|
||||
&steps);
|
||||
&steps, gfp);
|
||||
if (ret)
|
||||
return ret;
|
||||
sec_req->num_elements = steps;
|
||||
ret = sec_map_and_split_sg(skreq->src, split_sizes, steps, &splits_in,
|
||||
&splits_in_nents, sec_req->len_in,
|
||||
info->dev);
|
||||
info->dev, gfp);
|
||||
if (ret)
|
||||
goto err_free_split_sizes;
|
||||
|
||||
|
@ -750,7 +752,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq,
|
|||
sec_req->len_out = sg_nents(skreq->dst);
|
||||
ret = sec_map_and_split_sg(skreq->dst, split_sizes, steps,
|
||||
&splits_out, &splits_out_nents,
|
||||
sec_req->len_out, info->dev);
|
||||
sec_req->len_out, info->dev, gfp);
|
||||
if (ret)
|
||||
goto err_unmap_in_sg;
|
||||
}
|
||||
|
@ -783,7 +785,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq,
|
|||
splits_in[i], splits_in_nents[i],
|
||||
split ? splits_out[i] : NULL,
|
||||
split ? splits_out_nents[i] : 0,
|
||||
info);
|
||||
info, gfp);
|
||||
if (IS_ERR(el)) {
|
||||
ret = PTR_ERR(el);
|
||||
goto err_free_elements;
|
||||
|
|
|
@ -332,13 +332,18 @@ static int qat_uclo_create_batch_init_list(struct icp_qat_fw_loader_handle
|
|||
}
|
||||
return 0;
|
||||
out_err:
|
||||
/* Do not free the list head unless we allocated it. */
|
||||
tail_old = tail_old->next;
|
||||
if (flag) {
|
||||
kfree(*init_tab_base);
|
||||
*init_tab_base = NULL;
|
||||
}
|
||||
|
||||
while (tail_old) {
|
||||
mem_init = tail_old->next;
|
||||
kfree(tail_old);
|
||||
tail_old = mem_init;
|
||||
}
|
||||
if (flag)
|
||||
kfree(*init_tab_base);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -275,6 +275,7 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
|
|||
|
||||
/* Error exit stack */
|
||||
err_kobj_reg:
|
||||
kobject_put(&edac_dev->kobj);
|
||||
module_put(edac_dev->owner);
|
||||
|
||||
err_out:
|
||||
|
|
|
@ -386,7 +386,7 @@ static int edac_pci_main_kobj_setup(void)
|
|||
|
||||
/* Error unwind statck */
|
||||
kobject_init_and_add_fail:
|
||||
kfree(edac_pci_top_main_kobj);
|
||||
kobject_put(edac_pci_top_main_kobj);
|
||||
|
||||
kzalloc_fail:
|
||||
module_put(THIS_MODULE);
|
||||
|
|
|
@ -85,7 +85,10 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
|
|||
for (i = 0; i < num_domains; i++, scmi_pd++) {
|
||||
u32 state;
|
||||
|
||||
domains[i] = &scmi_pd->genpd;
|
||||
if (handle->power_ops->state_get(handle, i, &state)) {
|
||||
dev_warn(dev, "failed to get state for domain %d\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
scmi_pd->domain = i;
|
||||
scmi_pd->handle = handle;
|
||||
|
@ -94,13 +97,10 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
|
|||
scmi_pd->genpd.power_off = scmi_pd_power_off;
|
||||
scmi_pd->genpd.power_on = scmi_pd_power_on;
|
||||
|
||||
if (handle->power_ops->state_get(handle, i, &state)) {
|
||||
dev_warn(dev, "failed to get state for domain %d\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
pm_genpd_init(&scmi_pd->genpd, NULL,
|
||||
state == SCMI_POWER_STATE_GENERIC_OFF);
|
||||
|
||||
domains[i] = &scmi_pd->genpd;
|
||||
}
|
||||
|
||||
scmi_pd_data->domains = domains;
|
||||
|
|
|
@ -396,7 +396,9 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring,
|
|||
ring->fence_drv.gpu_addr = adev->uvd.inst[ring->me].gpu_addr + index;
|
||||
}
|
||||
amdgpu_fence_write(ring, atomic_read(&ring->fence_drv.last_seq));
|
||||
amdgpu_irq_get(adev, irq_src, irq_type);
|
||||
|
||||
if (irq_src)
|
||||
amdgpu_irq_get(adev, irq_src, irq_type);
|
||||
|
||||
ring->fence_drv.irq_src = irq_src;
|
||||
ring->fence_drv.irq_type = irq_type;
|
||||
|
@ -508,8 +510,9 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
|
|||
/* no need to trigger GPU reset as we are unloading */
|
||||
amdgpu_fence_driver_force_completion(ring);
|
||||
}
|
||||
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
if (ring->fence_drv.irq_src)
|
||||
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
drm_sched_fini(&ring->sched);
|
||||
del_timer_sync(&ring->fence_drv.fallback_timer);
|
||||
for (j = 0; j <= ring->fence_drv.num_fences_mask; ++j)
|
||||
|
@ -545,8 +548,9 @@ void amdgpu_fence_driver_suspend(struct amdgpu_device *adev)
|
|||
}
|
||||
|
||||
/* disable the interrupt */
|
||||
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
if (ring->fence_drv.irq_src)
|
||||
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -572,8 +576,9 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev)
|
|||
continue;
|
||||
|
||||
/* enable the interrupt */
|
||||
amdgpu_irq_get(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
if (ring->fence_drv.irq_src)
|
||||
amdgpu_irq_get(adev, ring->fence_drv.irq_src,
|
||||
ring->fence_drv.irq_type);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -446,7 +446,7 @@ int malidp_de_planes_init(struct drm_device *drm)
|
|||
const struct malidp_hw_regmap *map = &malidp->dev->hw->map;
|
||||
struct malidp_plane *plane = NULL;
|
||||
enum drm_plane_type plane_type;
|
||||
unsigned long crtcs = 1 << drm->mode_config.num_crtc;
|
||||
unsigned long crtcs = BIT(drm->mode_config.num_crtc);
|
||||
unsigned long flags = DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_180 |
|
||||
DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y;
|
||||
u32 *formats;
|
||||
|
|
|
@ -180,7 +180,7 @@ static void sii8620_read_buf(struct sii8620 *ctx, u16 addr, u8 *buf, int len)
|
|||
|
||||
static u8 sii8620_readb(struct sii8620 *ctx, u16 addr)
|
||||
{
|
||||
u8 ret;
|
||||
u8 ret = 0;
|
||||
|
||||
sii8620_read_buf(ctx, addr, &ret, 1);
|
||||
return ret;
|
||||
|
|
|
@ -265,13 +265,13 @@ static ssize_t connector_write(struct file *file, const char __user *ubuf,
|
|||
|
||||
buf[len] = '\0';
|
||||
|
||||
if (!strcmp(buf, "on"))
|
||||
if (sysfs_streq(buf, "on"))
|
||||
connector->force = DRM_FORCE_ON;
|
||||
else if (!strcmp(buf, "digital"))
|
||||
else if (sysfs_streq(buf, "digital"))
|
||||
connector->force = DRM_FORCE_ON_DIGITAL;
|
||||
else if (!strcmp(buf, "off"))
|
||||
else if (sysfs_streq(buf, "off"))
|
||||
connector->force = DRM_FORCE_OFF;
|
||||
else if (!strcmp(buf, "unspecified"))
|
||||
else if (sysfs_streq(buf, "unspecified"))
|
||||
connector->force = DRM_FORCE_UNSPECIFIED;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1035,11 +1035,11 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format);
|
|||
*/
|
||||
int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)
|
||||
{
|
||||
u8 payload[3] = { MIPI_DCS_SET_TEAR_SCANLINE, scanline >> 8,
|
||||
scanline & 0xff };
|
||||
u8 payload[2] = { scanline >> 8, scanline & 0xff };
|
||||
ssize_t err;
|
||||
|
||||
err = mipi_dsi_generic_write(dsi, payload, sizeof(payload));
|
||||
err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_SCANLINE, payload,
|
||||
sizeof(payload));
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
|
@ -694,7 +694,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
|
|||
ret = pm_runtime_get_sync(gpu->dev);
|
||||
if (ret < 0) {
|
||||
dev_err(gpu->dev, "Failed to enable GPU power domain\n");
|
||||
return ret;
|
||||
goto pm_put;
|
||||
}
|
||||
|
||||
etnaviv_hw_identify(gpu);
|
||||
|
@ -808,6 +808,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
|
|||
gpu->mmu = NULL;
|
||||
fail:
|
||||
pm_runtime_mark_last_busy(gpu->dev);
|
||||
pm_put:
|
||||
pm_runtime_put_autosuspend(gpu->dev);
|
||||
|
||||
return ret;
|
||||
|
@ -848,7 +849,7 @@ int etnaviv_gpu_debugfs(struct etnaviv_gpu *gpu, struct seq_file *m)
|
|||
|
||||
ret = pm_runtime_get_sync(gpu->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto pm_put;
|
||||
|
||||
dma_lo = gpu_read(gpu, VIVS_FE_DMA_LOW);
|
||||
dma_hi = gpu_read(gpu, VIVS_FE_DMA_HIGH);
|
||||
|
@ -971,6 +972,7 @@ int etnaviv_gpu_debugfs(struct etnaviv_gpu *gpu, struct seq_file *m)
|
|||
ret = 0;
|
||||
|
||||
pm_runtime_mark_last_busy(gpu->dev);
|
||||
pm_put:
|
||||
pm_runtime_put_autosuspend(gpu->dev);
|
||||
|
||||
return ret;
|
||||
|
@ -985,7 +987,7 @@ void etnaviv_gpu_recover_hang(struct etnaviv_gpu *gpu)
|
|||
dev_err(gpu->dev, "recover hung GPU!\n");
|
||||
|
||||
if (pm_runtime_get_sync(gpu->dev) < 0)
|
||||
return;
|
||||
goto pm_put;
|
||||
|
||||
mutex_lock(&gpu->lock);
|
||||
|
||||
|
@ -1005,6 +1007,7 @@ void etnaviv_gpu_recover_hang(struct etnaviv_gpu *gpu)
|
|||
|
||||
mutex_unlock(&gpu->lock);
|
||||
pm_runtime_mark_last_busy(gpu->dev);
|
||||
pm_put:
|
||||
pm_runtime_put_autosuspend(gpu->dev);
|
||||
}
|
||||
|
||||
|
@ -1278,8 +1281,10 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit)
|
|||
|
||||
if (!submit->runtime_resumed) {
|
||||
ret = pm_runtime_get_sync(gpu->dev);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
pm_runtime_put_noidle(gpu->dev);
|
||||
return NULL;
|
||||
}
|
||||
submit->runtime_resumed = true;
|
||||
}
|
||||
|
||||
|
@ -1296,6 +1301,7 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit)
|
|||
ret = event_alloc(gpu, nr_events, event);
|
||||
if (ret) {
|
||||
DRM_ERROR("no free events\n");
|
||||
pm_runtime_put_noidle(gpu->dev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1459,7 +1465,7 @@ static int etnaviv_gpu_clk_enable(struct etnaviv_gpu *gpu)
|
|||
if (gpu->clk_bus) {
|
||||
ret = clk_prepare_enable(gpu->clk_bus);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto disable_clk_reg;
|
||||
}
|
||||
|
||||
if (gpu->clk_core) {
|
||||
|
@ -1482,6 +1488,9 @@ static int etnaviv_gpu_clk_enable(struct etnaviv_gpu *gpu)
|
|||
disable_clk_bus:
|
||||
if (gpu->clk_bus)
|
||||
clk_disable_unprepare(gpu->clk_bus);
|
||||
disable_clk_reg:
|
||||
if (gpu->clk_reg)
|
||||
clk_disable_unprepare(gpu->clk_reg);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -498,6 +498,13 @@ static int imx_tve_register(struct drm_device *drm, struct imx_tve *tve)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void imx_tve_disable_regulator(void *data)
|
||||
{
|
||||
struct imx_tve *tve = data;
|
||||
|
||||
regulator_disable(tve->dac_reg);
|
||||
}
|
||||
|
||||
static bool imx_tve_readable_reg(struct device *dev, unsigned int reg)
|
||||
{
|
||||
return (reg % 4 == 0) && (reg <= 0xdc);
|
||||
|
@ -622,6 +629,9 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data)
|
|||
ret = regulator_enable(tve->dac_reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = devm_add_action_or_reset(dev, imx_tve_disable_regulator, tve);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
tve->clk = devm_clk_get(dev, "tve");
|
||||
|
@ -668,18 +678,8 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void imx_tve_unbind(struct device *dev, struct device *master,
|
||||
void *data)
|
||||
{
|
||||
struct imx_tve *tve = dev_get_drvdata(dev);
|
||||
|
||||
if (!IS_ERR(tve->dac_reg))
|
||||
regulator_disable(tve->dac_reg);
|
||||
}
|
||||
|
||||
static const struct component_ops imx_tve_ops = {
|
||||
.bind = imx_tve_bind,
|
||||
.unbind = imx_tve_unbind,
|
||||
};
|
||||
|
||||
static int imx_tve_probe(struct platform_device *pdev)
|
||||
|
|
|
@ -659,7 +659,7 @@ static void dpu_crtc_frame_event_cb(void *data, u32 event)
|
|||
spin_unlock_irqrestore(&dpu_crtc->spin_lock, flags);
|
||||
|
||||
if (!fevent) {
|
||||
DRM_ERROR("crtc%d event %d overflow\n", crtc->base.id, event);
|
||||
DRM_ERROR_RATELIMITED("crtc%d event %d overflow\n", crtc->base.id, event);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -899,8 +899,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
|
|||
|
||||
/* need to bring up power immediately if opening device */
|
||||
ret = pm_runtime_get_sync(dev->dev);
|
||||
if (ret < 0 && ret != -EACCES)
|
||||
if (ret < 0 && ret != -EACCES) {
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
get_task_comm(tmpname, current);
|
||||
snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
|
||||
|
@ -980,8 +982,10 @@ nouveau_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
long ret;
|
||||
|
||||
ret = pm_runtime_get_sync(dev->dev);
|
||||
if (ret < 0 && ret != -EACCES)
|
||||
if (ret < 0 && ret != -EACCES) {
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
switch (_IOC_NR(cmd) - DRM_COMMAND_BASE) {
|
||||
case DRM_NOUVEAU_NVIF:
|
||||
|
|
|
@ -46,8 +46,10 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
|
|||
int ret;
|
||||
|
||||
ret = pm_runtime_get_sync(dev);
|
||||
if (WARN_ON(ret < 0 && ret != -EACCES))
|
||||
if (WARN_ON(ret < 0 && ret != -EACCES)) {
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (gem->import_attach)
|
||||
drm_prime_gem_destroy(gem, nvbo->bo.sg);
|
||||
|
|
|
@ -96,12 +96,9 @@ nouveau_sgdma_create_ttm(struct ttm_buffer_object *bo, uint32_t page_flags)
|
|||
else
|
||||
nvbe->ttm.ttm.func = &nv50_sgdma_backend;
|
||||
|
||||
if (ttm_dma_tt_init(&nvbe->ttm, bo, page_flags))
|
||||
/*
|
||||
* A failing ttm_dma_tt_init() will call ttm_tt_destroy()
|
||||
* and thus our nouveau_sgdma_destroy() hook, so we don't need
|
||||
* to free nvbe here.
|
||||
*/
|
||||
if (ttm_dma_tt_init(&nvbe->ttm, bo, page_flags)) {
|
||||
kfree(nvbe);
|
||||
return NULL;
|
||||
}
|
||||
return &nvbe->ttm.ttm;
|
||||
}
|
||||
|
|
|
@ -1503,7 +1503,7 @@ static const struct drm_display_mode lg_lb070wv8_mode = {
|
|||
static const struct panel_desc lg_lb070wv8 = {
|
||||
.modes = &lg_lb070wv8_mode,
|
||||
.num_modes = 1,
|
||||
.bpc = 16,
|
||||
.bpc = 8,
|
||||
.size = {
|
||||
.width = 151,
|
||||
.height = 91,
|
||||
|
|
|
@ -4364,7 +4364,7 @@ static int ci_set_mc_special_registers(struct radeon_device *rdev,
|
|||
table->mc_reg_table_entry[k].mc_data[j] |= 0x100;
|
||||
}
|
||||
j++;
|
||||
if (j > SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE)
|
||||
if (j >= SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
if (!pi->mem_gddr5) {
|
||||
|
|
|
@ -625,8 +625,10 @@ radeon_crtc_set_config(struct drm_mode_set *set,
|
|||
dev = set->crtc->dev;
|
||||
|
||||
ret = pm_runtime_get_sync(dev->dev);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_crtc_helper_set_config(set, ctx);
|
||||
|
||||
|
|
|
@ -168,12 +168,7 @@ int radeon_no_wb;
|
|||
int radeon_modeset = -1;
|
||||
int radeon_dynclks = -1;
|
||||
int radeon_r4xx_atom = 0;
|
||||
#ifdef __powerpc__
|
||||
/* Default to PCI on PowerPC (fdo #95017) */
|
||||
int radeon_agpmode = -1;
|
||||
#else
|
||||
int radeon_agpmode = 0;
|
||||
#endif
|
||||
int radeon_vram_limit = 0;
|
||||
int radeon_gart_size = -1; /* auto */
|
||||
int radeon_benchmarking = 0;
|
||||
|
@ -523,8 +518,10 @@ long radeon_drm_ioctl(struct file *filp,
|
|||
long ret;
|
||||
dev = file_priv->minor->dev;
|
||||
ret = pm_runtime_get_sync(dev->dev);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_ioctl(filp, cmd, arg);
|
||||
|
||||
|
|
|
@ -627,8 +627,10 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|||
file_priv->driver_priv = NULL;
|
||||
|
||||
r = pm_runtime_get_sync(dev->dev);
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* new gpu have virtual address space support */
|
||||
if (rdev->family >= CHIP_CAYMAN) {
|
||||
|
|
|
@ -150,12 +150,16 @@ static int panel_connector_get_modes(struct drm_connector *connector)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < timings->num_timings; i++) {
|
||||
struct drm_display_mode *mode = drm_mode_create(dev);
|
||||
struct drm_display_mode *mode;
|
||||
struct videomode vm;
|
||||
|
||||
if (videomode_from_timings(timings, &vm, i))
|
||||
break;
|
||||
|
||||
mode = drm_mode_create(dev);
|
||||
if (!mode)
|
||||
break;
|
||||
|
||||
drm_display_mode_from_videomode(&vm, mode);
|
||||
|
||||
mode->type = DRM_MODE_TYPE_DRIVER;
|
||||
|
|
|
@ -241,7 +241,6 @@ int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo,
|
|||
ttm_tt_init_fields(ttm, bo, page_flags);
|
||||
|
||||
if (ttm_tt_alloc_page_directory(ttm)) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -265,7 +264,6 @@ int ttm_dma_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo,
|
|||
|
||||
INIT_LIST_HEAD(&ttm_dma->pages_list);
|
||||
if (ttm_dma_tt_alloc_page_directory(ttm_dma)) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -287,7 +285,6 @@ int ttm_sg_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo,
|
|||
else
|
||||
ret = ttm_dma_tt_alloc_page_directory(ttm_dma);
|
||||
if (ret) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#include "debug.h"
|
||||
#include "channel.h"
|
||||
|
||||
static DEFINE_MUTEX(debug_lock);
|
||||
|
||||
unsigned int host1x_debug_trace_cmdbuf;
|
||||
|
||||
static pid_t host1x_debug_force_timeout_pid;
|
||||
|
@ -61,12 +63,14 @@ static int show_channel(struct host1x_channel *ch, void *data, bool show_fifo)
|
|||
struct output *o = data;
|
||||
|
||||
mutex_lock(&ch->cdma.lock);
|
||||
mutex_lock(&debug_lock);
|
||||
|
||||
if (show_fifo)
|
||||
host1x_hw_show_channel_fifo(m, ch, o);
|
||||
|
||||
host1x_hw_show_channel_cdma(m, ch, o);
|
||||
|
||||
mutex_unlock(&debug_lock);
|
||||
mutex_unlock(&ch->cdma.lock);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -362,13 +362,13 @@ static int hidinput_query_battery_capacity(struct hid_device *dev)
|
|||
u8 *buf;
|
||||
int ret;
|
||||
|
||||
buf = kmalloc(2, GFP_KERNEL);
|
||||
buf = kmalloc(4, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = hid_hw_raw_request(dev, dev->battery_report_id, buf, 2,
|
||||
ret = hid_hw_raw_request(dev, dev->battery_report_id, buf, 4,
|
||||
dev->battery_report_type, HID_REQ_GET_REPORT);
|
||||
if (ret != 2) {
|
||||
if (ret < 2) {
|
||||
kfree(buf);
|
||||
return -ENODATA;
|
||||
}
|
||||
|
|
|
@ -609,15 +609,14 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata)
|
|||
|
||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||
|
||||
/* There is no point in reading a TMC in HW FIFO mode */
|
||||
mode = readl_relaxed(drvdata->base + TMC_MODE);
|
||||
if (mode != TMC_MODE_CIRCULAR_BUFFER) {
|
||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Re-enable the TMC if need be */
|
||||
if (drvdata->mode == CS_MODE_SYSFS) {
|
||||
/* There is no point in reading a TMC in HW FIFO mode */
|
||||
mode = readl_relaxed(drvdata->base + TMC_MODE);
|
||||
if (mode != TMC_MODE_CIRCULAR_BUFFER) {
|
||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* The trace run will continue with the same allocated trace
|
||||
* buffer. As such zero-out the buffer so that we don't end
|
||||
|
|
|
@ -1617,7 +1617,7 @@ static int _ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr,
|
|||
if (!(rdma_protocol_ib(qp->device,
|
||||
attr->alt_ah_attr.port_num) &&
|
||||
rdma_protocol_ib(qp->device, port))) {
|
||||
ret = EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -351,10 +351,10 @@ struct qedr_srq_hwq_info {
|
|||
u32 wqe_prod;
|
||||
u32 sge_prod;
|
||||
u32 wr_prod_cnt;
|
||||
u32 wr_cons_cnt;
|
||||
atomic_t wr_cons_cnt;
|
||||
u32 num_elems;
|
||||
|
||||
u32 *virt_prod_pair_addr;
|
||||
struct rdma_srq_producers *virt_prod_pair_addr;
|
||||
dma_addr_t phy_prod_pair_addr;
|
||||
};
|
||||
|
||||
|
|
|
@ -3577,7 +3577,7 @@ static u32 qedr_srq_elem_left(struct qedr_srq_hwq_info *hw_srq)
|
|||
* count and consumer count and subtract it from max
|
||||
* work request supported so that we get elements left.
|
||||
*/
|
||||
used = hw_srq->wr_prod_cnt - hw_srq->wr_cons_cnt;
|
||||
used = hw_srq->wr_prod_cnt - (u32)atomic_read(&hw_srq->wr_cons_cnt);
|
||||
|
||||
return hw_srq->max_wr - used;
|
||||
}
|
||||
|
@ -3592,7 +3592,6 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
|
|||
unsigned long flags;
|
||||
int status = 0;
|
||||
u32 num_sge;
|
||||
u32 offset;
|
||||
|
||||
spin_lock_irqsave(&srq->lock, flags);
|
||||
|
||||
|
@ -3605,7 +3604,8 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
|
|||
if (!qedr_srq_elem_left(hw_srq) ||
|
||||
wr->num_sge > srq->hw_srq.max_sges) {
|
||||
DP_ERR(dev, "Can't post WR (%d,%d) || (%d > %d)\n",
|
||||
hw_srq->wr_prod_cnt, hw_srq->wr_cons_cnt,
|
||||
hw_srq->wr_prod_cnt,
|
||||
atomic_read(&hw_srq->wr_cons_cnt),
|
||||
wr->num_sge, srq->hw_srq.max_sges);
|
||||
status = -ENOMEM;
|
||||
*bad_wr = wr;
|
||||
|
@ -3639,22 +3639,20 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
|
|||
hw_srq->sge_prod++;
|
||||
}
|
||||
|
||||
/* Flush WQE and SGE information before
|
||||
/* Update WQE and SGE information before
|
||||
* updating producer.
|
||||
*/
|
||||
wmb();
|
||||
dma_wmb();
|
||||
|
||||
/* SRQ producer is 8 bytes. Need to update SGE producer index
|
||||
* in first 4 bytes and need to update WQE producer in
|
||||
* next 4 bytes.
|
||||
*/
|
||||
*srq->hw_srq.virt_prod_pair_addr = hw_srq->sge_prod;
|
||||
offset = offsetof(struct rdma_srq_producers, wqe_prod);
|
||||
*((u8 *)srq->hw_srq.virt_prod_pair_addr + offset) =
|
||||
hw_srq->wqe_prod;
|
||||
srq->hw_srq.virt_prod_pair_addr->sge_prod = hw_srq->sge_prod;
|
||||
/* Make sure sge producer is updated first */
|
||||
dma_wmb();
|
||||
srq->hw_srq.virt_prod_pair_addr->wqe_prod = hw_srq->wqe_prod;
|
||||
|
||||
/* Flush producer after updating it. */
|
||||
wmb();
|
||||
wr = wr->next;
|
||||
}
|
||||
|
||||
|
@ -4077,7 +4075,7 @@ static int process_resp_one_srq(struct qedr_dev *dev, struct qedr_qp *qp,
|
|||
} else {
|
||||
__process_resp_one(dev, qp, cq, wc, resp, wr_id);
|
||||
}
|
||||
srq->hw_srq.wr_cons_cnt++;
|
||||
atomic_inc(&srq->hw_srq.wr_cons_cnt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -332,10 +332,14 @@ static void rxe_rcv_mcast_pkt(struct rxe_dev *rxe, struct sk_buff *skb)
|
|||
|
||||
static int rxe_match_dgid(struct rxe_dev *rxe, struct sk_buff *skb)
|
||||
{
|
||||
struct rxe_pkt_info *pkt = SKB_TO_PKT(skb);
|
||||
const struct ib_gid_attr *gid_attr;
|
||||
union ib_gid dgid;
|
||||
union ib_gid *pdgid;
|
||||
|
||||
if (pkt->mask & RXE_LOOPBACK_MASK)
|
||||
return 0;
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
ipv6_addr_set_v4mapped(ip_hdr(skb)->daddr,
|
||||
(struct in6_addr *)&dgid);
|
||||
|
@ -368,7 +372,7 @@ void rxe_rcv(struct sk_buff *skb)
|
|||
if (unlikely(skb->len < pkt->offset + RXE_BTH_BYTES))
|
||||
goto drop;
|
||||
|
||||
if (unlikely(rxe_match_dgid(rxe, skb) < 0)) {
|
||||
if (rxe_match_dgid(rxe, skb) < 0) {
|
||||
pr_warn_ratelimited("failed matching dgid\n");
|
||||
goto drop;
|
||||
}
|
||||
|
|
|
@ -733,6 +733,7 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr,
|
|||
unsigned int mask;
|
||||
unsigned int length = 0;
|
||||
int i;
|
||||
struct ib_send_wr *next;
|
||||
|
||||
while (wr) {
|
||||
mask = wr_opcode_mask(wr->opcode, qp);
|
||||
|
@ -749,6 +750,8 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr,
|
|||
break;
|
||||
}
|
||||
|
||||
next = wr->next;
|
||||
|
||||
length = 0;
|
||||
for (i = 0; i < wr->num_sge; i++)
|
||||
length += wr->sg_list[i].length;
|
||||
|
@ -759,7 +762,7 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr,
|
|||
*bad_wr = wr;
|
||||
break;
|
||||
}
|
||||
wr = wr->next;
|
||||
wr = next;
|
||||
}
|
||||
|
||||
rxe_run_task(&qp->req.task, 1);
|
||||
|
|
|
@ -601,13 +601,21 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)
|
|||
|
||||
static void intel_teardown_irq_remapping(struct intel_iommu *iommu)
|
||||
{
|
||||
struct fwnode_handle *fn;
|
||||
|
||||
if (iommu && iommu->ir_table) {
|
||||
if (iommu->ir_msi_domain) {
|
||||
fn = iommu->ir_msi_domain->fwnode;
|
||||
|
||||
irq_domain_remove(iommu->ir_msi_domain);
|
||||
irq_domain_free_fwnode(fn);
|
||||
iommu->ir_msi_domain = NULL;
|
||||
}
|
||||
if (iommu->ir_domain) {
|
||||
fn = iommu->ir_domain->fwnode;
|
||||
|
||||
irq_domain_remove(iommu->ir_domain);
|
||||
irq_domain_free_fwnode(fn);
|
||||
iommu->ir_domain = NULL;
|
||||
}
|
||||
free_pages((unsigned long)iommu->ir_table->base,
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <linux/spinlock.h>
|
||||
|
||||
struct mtk_sysirq_chip_data {
|
||||
spinlock_t lock;
|
||||
raw_spinlock_t lock;
|
||||
u32 nr_intpol_bases;
|
||||
void __iomem **intpol_bases;
|
||||
u32 *intpol_words;
|
||||
|
@ -45,7 +45,7 @@ static int mtk_sysirq_set_type(struct irq_data *data, unsigned int type)
|
|||
reg_index = chip_data->which_word[hwirq];
|
||||
offset = hwirq & 0x1f;
|
||||
|
||||
spin_lock_irqsave(&chip_data->lock, flags);
|
||||
raw_spin_lock_irqsave(&chip_data->lock, flags);
|
||||
value = readl_relaxed(base + reg_index * 4);
|
||||
if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_EDGE_FALLING) {
|
||||
if (type == IRQ_TYPE_LEVEL_LOW)
|
||||
|
@ -61,7 +61,7 @@ static int mtk_sysirq_set_type(struct irq_data *data, unsigned int type)
|
|||
|
||||
data = data->parent_data;
|
||||
ret = data->chip->irq_set_type(data, type);
|
||||
spin_unlock_irqrestore(&chip_data->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&chip_data->lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -220,7 +220,7 @@ static int __init mtk_sysirq_of_init(struct device_node *node,
|
|||
ret = -ENOMEM;
|
||||
goto out_free_which_word;
|
||||
}
|
||||
spin_lock_init(&chip_data->lock);
|
||||
raw_spin_lock_init(&chip_data->lock);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -173,6 +173,7 @@ void led_classdev_suspend(struct led_classdev *led_cdev)
|
|||
{
|
||||
led_cdev->flags |= LED_SUSPENDED;
|
||||
led_set_brightness_nopm(led_cdev, 0);
|
||||
flush_work(&led_cdev->set_brightness_work);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(led_classdev_suspend);
|
||||
|
||||
|
|
|
@ -168,18 +168,19 @@ static int lm355x_chip_init(struct lm355x_chip_data *chip)
|
|||
/* input and output pins configuration */
|
||||
switch (chip->type) {
|
||||
case CHIP_LM3554:
|
||||
reg_val = pdata->pin_tx2 | pdata->ntc_pin;
|
||||
reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin;
|
||||
ret = regmap_update_bits(chip->regmap, 0xE0, 0x28, reg_val);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
reg_val = pdata->pass_mode;
|
||||
reg_val = (u32)pdata->pass_mode;
|
||||
ret = regmap_update_bits(chip->regmap, 0xA0, 0x04, reg_val);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
break;
|
||||
|
||||
case CHIP_LM3556:
|
||||
reg_val = pdata->pin_tx2 | pdata->ntc_pin | pdata->pass_mode;
|
||||
reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin |
|
||||
(u32)pdata->pass_mode;
|
||||
ret = regmap_update_bits(chip->regmap, 0x0A, 0xC4, reg_val);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
|
|
@ -2013,7 +2013,14 @@ static const char *register_cache_set(struct cache *ca)
|
|||
sysfs_create_link(&c->kobj, &ca->kobj, buf))
|
||||
goto err;
|
||||
|
||||
if (ca->sb.seq > c->sb.seq) {
|
||||
/*
|
||||
* A special case is both ca->sb.seq and c->sb.seq are 0,
|
||||
* such condition happens on a new created cache device whose
|
||||
* super block is never flushed yet. In this case c->sb.version
|
||||
* and other members should be updated too, otherwise we will
|
||||
* have a mistaken super block version in cache set.
|
||||
*/
|
||||
if (ca->sb.seq > c->sb.seq || c->sb.seq == 0) {
|
||||
c->sb.version = ca->sb.version;
|
||||
memcpy(c->sb.set_uuid, ca->sb.set_uuid, 16);
|
||||
c->sb.flags = ca->sb.flags;
|
||||
|
|
|
@ -1443,6 +1443,7 @@ static void unlock_all_bitmaps(struct mddev *mddev)
|
|||
}
|
||||
}
|
||||
kfree(cinfo->other_bitmap_lockres);
|
||||
cinfo->other_bitmap_lockres = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -271,6 +271,8 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
|
|||
|
||||
name_len = fw_csr_string(unit->directory, CSR_MODEL,
|
||||
name, sizeof(name));
|
||||
if (name_len < 0)
|
||||
return name_len;
|
||||
for (i = ARRAY_SIZE(model_names); --i; )
|
||||
if (strlen(model_names[i]) <= name_len &&
|
||||
strncmp(name, model_names[i], name_len) == 0)
|
||||
|
|
|
@ -1259,6 +1259,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd)
|
|||
|
||||
pctl->state_idle = pinctrl_lookup_state(pctl->pinctrl,
|
||||
PINCTRL_STATE_IDLE);
|
||||
if (IS_ERR(pctl->state_idle))
|
||||
return PTR_ERR(pctl->state_idle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -2290,7 +2290,7 @@ static int preview_init_entities(struct isp_prev_device *prev)
|
|||
me->ops = &preview_media_ops;
|
||||
ret = media_entity_pads_init(me, PREV_PADS_NUM, pads);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto error_handler_free;
|
||||
|
||||
preview_init_formats(sd, NULL);
|
||||
|
||||
|
@ -2323,6 +2323,8 @@ static int preview_init_entities(struct isp_prev_device *prev)
|
|||
omap3isp_video_cleanup(&prev->video_in);
|
||||
error_video_in:
|
||||
media_entity_cleanup(&prev->subdev.entity);
|
||||
error_handler_free:
|
||||
v4l2_ctrl_handler_free(&prev->ctrls);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -628,7 +628,7 @@ static struct afu_config_record *cxl_sysfs_afu_new_cr(struct cxl_afu *afu, int c
|
|||
rc = kobject_init_and_add(&cr->kobj, &afu_config_record_type,
|
||||
&afu->dev.kobj, "cr%i", cr->cr);
|
||||
if (rc)
|
||||
goto err;
|
||||
goto err1;
|
||||
|
||||
rc = sysfs_create_bin_file(&cr->kobj, &cr->config_attr);
|
||||
if (rc)
|
||||
|
|
|
@ -466,11 +466,13 @@ struct qcom_nand_host {
|
|||
* among different NAND controllers.
|
||||
* @ecc_modes - ecc mode for NAND
|
||||
* @is_bam - whether NAND controller is using BAM
|
||||
* @is_qpic - whether NAND CTRL is part of qpic IP
|
||||
* @dev_cmd_reg_start - NAND_DEV_CMD_* registers starting offset
|
||||
*/
|
||||
struct qcom_nandc_props {
|
||||
u32 ecc_modes;
|
||||
bool is_bam;
|
||||
bool is_qpic;
|
||||
u32 dev_cmd_reg_start;
|
||||
};
|
||||
|
||||
|
@ -2766,7 +2768,8 @@ static int qcom_nandc_setup(struct qcom_nand_controller *nandc)
|
|||
u32 nand_ctrl;
|
||||
|
||||
/* kill onenand */
|
||||
nandc_write(nandc, SFLASHC_BURST_CFG, 0);
|
||||
if (!nandc->props->is_qpic)
|
||||
nandc_write(nandc, SFLASHC_BURST_CFG, 0);
|
||||
nandc_write(nandc, dev_cmd_reg_addr(nandc, NAND_DEV_CMD_VLD),
|
||||
NAND_DEV_CMD_VLD_VAL);
|
||||
|
||||
|
@ -3022,12 +3025,14 @@ static const struct qcom_nandc_props ipq806x_nandc_props = {
|
|||
static const struct qcom_nandc_props ipq4019_nandc_props = {
|
||||
.ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT),
|
||||
.is_bam = true,
|
||||
.is_qpic = true,
|
||||
.dev_cmd_reg_start = 0x0,
|
||||
};
|
||||
|
||||
static const struct qcom_nandc_props ipq8074_nandc_props = {
|
||||
.ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT),
|
||||
.is_bam = true,
|
||||
.is_qpic = true,
|
||||
.dev_cmd_reg_start = 0x7000,
|
||||
};
|
||||
|
||||
|
|
|
@ -2930,7 +2930,6 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
|
|||
.port_set_frame_mode = mv88e6351_port_set_frame_mode,
|
||||
.port_set_egress_floods = mv88e6352_port_set_egress_floods,
|
||||
.port_set_ether_type = mv88e6351_port_set_ether_type,
|
||||
.port_set_jumbo_size = mv88e6165_port_set_jumbo_size,
|
||||
.port_egress_rate_limiting = mv88e6095_port_egress_rate_limiting,
|
||||
.port_pause_limit = mv88e6097_port_pause_limit,
|
||||
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
|
||||
|
|
|
@ -43,18 +43,26 @@ int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
|
|||
int ret;
|
||||
int i;
|
||||
|
||||
dev_dbg(smi->dev,
|
||||
"setting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n",
|
||||
vid, member, untag);
|
||||
|
||||
/* Update the 4K table */
|
||||
ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
vlan4k.member = member;
|
||||
vlan4k.untag = untag;
|
||||
vlan4k.member |= member;
|
||||
vlan4k.untag |= untag;
|
||||
vlan4k.fid = fid;
|
||||
ret = smi->ops->set_vlan_4k(smi, &vlan4k);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev_dbg(smi->dev,
|
||||
"resulting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n",
|
||||
vid, vlan4k.member, vlan4k.untag);
|
||||
|
||||
/* Try to find an existing MC entry for this VID */
|
||||
for (i = 0; i < smi->num_vlan_mc; i++) {
|
||||
struct rtl8366_vlan_mc vlanmc;
|
||||
|
@ -65,11 +73,16 @@ int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
|
|||
|
||||
if (vid == vlanmc.vid) {
|
||||
/* update the MC entry */
|
||||
vlanmc.member = member;
|
||||
vlanmc.untag = untag;
|
||||
vlanmc.member |= member;
|
||||
vlanmc.untag |= untag;
|
||||
vlanmc.fid = fid;
|
||||
|
||||
ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
|
||||
|
||||
dev_dbg(smi->dev,
|
||||
"resulting VLAN%d MC members: 0x%02x, untagged: 0x%02x\n",
|
||||
vid, vlanmc.member, vlanmc.untag);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -384,7 +397,7 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
|
|||
if (dsa_is_dsa_port(ds, port) || dsa_is_cpu_port(ds, port))
|
||||
dev_err(smi->dev, "port is DSA or CPU port\n");
|
||||
|
||||
for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
|
||||
for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) {
|
||||
int pvid_val = 0;
|
||||
|
||||
dev_info(smi->dev, "add VLAN %04x\n", vid);
|
||||
|
@ -407,13 +420,13 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
|
|||
if (ret < 0)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ret = rtl8366_set_vlan(smi, port, member, untag, 0);
|
||||
if (ret)
|
||||
dev_err(smi->dev,
|
||||
"failed to set up VLAN %04x",
|
||||
vid);
|
||||
ret = rtl8366_set_vlan(smi, vid, member, untag, 0);
|
||||
if (ret)
|
||||
dev_err(smi->dev,
|
||||
"failed to set up VLAN %04x",
|
||||
vid);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl8366_vlan_add);
|
||||
|
||||
|
|
|
@ -774,7 +774,7 @@ static int hw_atl_a0_hw_multicast_list_set(struct aq_hw_s *self,
|
|||
int err = 0;
|
||||
|
||||
if (count > (HW_ATL_A0_MAC_MAX - HW_ATL_A0_MAC_MIN)) {
|
||||
err = EBADRQC;
|
||||
err = -EBADRQC;
|
||||
goto err_exit;
|
||||
}
|
||||
for (self->aq_nic_cfg->mc_list_count = 0U;
|
||||
|
|
|
@ -1167,7 +1167,7 @@ static int cn23xx_get_pf_num(struct octeon_device *oct)
|
|||
oct->pf_num = ((fdl_bit >> CN23XX_PCIE_SRIOV_FDL_BIT_POS) &
|
||||
CN23XX_PCIE_SRIOV_FDL_MASK);
|
||||
} else {
|
||||
ret = EINVAL;
|
||||
ret = -EINVAL;
|
||||
|
||||
/* Under some virtual environments, extended PCI regs are
|
||||
* inaccessible, in which case the above read will have failed.
|
||||
|
|
|
@ -1396,8 +1396,7 @@ static void enable_time_stamp(struct fman *fman)
|
|||
{
|
||||
struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
|
||||
u16 fm_clk_freq = fman->state->fm_clk_freq;
|
||||
u32 tmp, intgr, ts_freq;
|
||||
u64 frac;
|
||||
u32 tmp, intgr, ts_freq, frac;
|
||||
|
||||
ts_freq = (u32)(1 << fman->state->count1_micro_bit);
|
||||
/* configure timestamp so that bit 8 will count 1 microsecond
|
||||
|
|
|
@ -1205,7 +1205,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
|
|||
list_for_each(pos,
|
||||
&dtsec->multicast_addr_hash->lsts[bucket]) {
|
||||
hash_entry = ETH_HASH_ENTRY_OBJ(pos);
|
||||
if (hash_entry->addr == addr) {
|
||||
if (hash_entry && hash_entry->addr == addr) {
|
||||
list_del_init(&hash_entry->node);
|
||||
kfree(hash_entry);
|
||||
break;
|
||||
|
@ -1218,7 +1218,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
|
|||
list_for_each(pos,
|
||||
&dtsec->unicast_addr_hash->lsts[bucket]) {
|
||||
hash_entry = ETH_HASH_ENTRY_OBJ(pos);
|
||||
if (hash_entry->addr == addr) {
|
||||
if (hash_entry && hash_entry->addr == addr) {
|
||||
list_del_init(&hash_entry->node);
|
||||
kfree(hash_entry);
|
||||
break;
|
||||
|
|
|
@ -252,7 +252,7 @@ static inline struct eth_hash_t *alloc_hash_table(u16 size)
|
|||
struct eth_hash_t *hash;
|
||||
|
||||
/* Allocate address hash table */
|
||||
hash = kmalloc_array(size, sizeof(struct eth_hash_t *), GFP_KERNEL);
|
||||
hash = kmalloc(sizeof(*hash), GFP_KERNEL);
|
||||
if (!hash)
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -856,7 +856,6 @@ int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority,
|
|||
|
||||
tmp = ioread32be(®s->command_config);
|
||||
tmp &= ~CMD_CFG_PFC_MODE;
|
||||
priority = 0;
|
||||
|
||||
iowrite32be(tmp, ®s->command_config);
|
||||
|
||||
|
@ -986,7 +985,7 @@ int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr)
|
|||
|
||||
list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) {
|
||||
hash_entry = ETH_HASH_ENTRY_OBJ(pos);
|
||||
if (hash_entry->addr == addr) {
|
||||
if (hash_entry && hash_entry->addr == addr) {
|
||||
list_del_init(&hash_entry->node);
|
||||
kfree(hash_entry);
|
||||
break;
|
||||
|
|
|
@ -1756,6 +1756,7 @@ static int fman_port_probe(struct platform_device *of_dev)
|
|||
struct fman_port *port;
|
||||
struct fman *fman;
|
||||
struct device_node *fm_node, *port_node;
|
||||
struct platform_device *fm_pdev;
|
||||
struct resource res;
|
||||
struct resource *dev_res;
|
||||
u32 val;
|
||||
|
@ -1780,8 +1781,14 @@ static int fman_port_probe(struct platform_device *of_dev)
|
|||
goto return_err;
|
||||
}
|
||||
|
||||
fman = dev_get_drvdata(&of_find_device_by_node(fm_node)->dev);
|
||||
fm_pdev = of_find_device_by_node(fm_node);
|
||||
of_node_put(fm_node);
|
||||
if (!fm_pdev) {
|
||||
err = -EINVAL;
|
||||
goto return_err;
|
||||
}
|
||||
|
||||
fman = dev_get_drvdata(&fm_pdev->dev);
|
||||
if (!fman) {
|
||||
err = -EINVAL;
|
||||
goto return_err;
|
||||
|
|
|
@ -630,7 +630,7 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr)
|
|||
|
||||
list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) {
|
||||
hash_entry = ETH_HASH_ENTRY_OBJ(pos);
|
||||
if (hash_entry->addr == addr) {
|
||||
if (hash_entry && hash_entry->addr == addr) {
|
||||
list_del_init(&hash_entry->node);
|
||||
kfree(hash_entry);
|
||||
break;
|
||||
|
|
|
@ -296,8 +296,8 @@ spider_net_free_chain(struct spider_net_card *card,
|
|||
descr = descr->next;
|
||||
} while (descr != chain->ring);
|
||||
|
||||
dma_free_coherent(&card->pdev->dev, chain->num_desc,
|
||||
chain->hwring, chain->dma_addr);
|
||||
dma_free_coherent(&card->pdev->dev, chain->num_desc * sizeof(struct spider_net_hw_descr),
|
||||
chain->hwring, chain->dma_addr);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -160,6 +160,12 @@ static netdev_tx_t lapbeth_xmit(struct sk_buff *skb,
|
|||
if (!netif_running(dev))
|
||||
goto drop;
|
||||
|
||||
/* There should be a pseudo header of 1 byte added by upper layers.
|
||||
* Check to make sure it is there before reading it.
|
||||
*/
|
||||
if (skb->len < 1)
|
||||
goto drop;
|
||||
|
||||
switch (skb->data[0]) {
|
||||
case X25_IFACE_DATA:
|
||||
break;
|
||||
|
@ -308,6 +314,7 @@ static void lapbeth_setup(struct net_device *dev)
|
|||
dev->netdev_ops = &lapbeth_netdev_ops;
|
||||
dev->needs_free_netdev = true;
|
||||
dev->type = ARPHRD_X25;
|
||||
dev->hard_header_len = 0;
|
||||
dev->mtu = 1000;
|
||||
dev->addr_len = 0;
|
||||
}
|
||||
|
@ -334,7 +341,8 @@ static int lapbeth_new_device(struct net_device *dev)
|
|||
* then this driver prepends a length field of 2 bytes,
|
||||
* then the underlying Ethernet device prepends its own header.
|
||||
*/
|
||||
ndev->hard_header_len = -1 + 3 + 2 + dev->hard_header_len;
|
||||
ndev->needed_headroom = -1 + 3 + 2 + dev->hard_header_len
|
||||
+ dev->needed_headroom;
|
||||
|
||||
lapbeth = netdev_priv(ndev);
|
||||
lapbeth->axdev = ndev;
|
||||
|
|
|
@ -1329,7 +1329,9 @@ static int ath10k_htt_tx_32(struct ath10k_htt *htt,
|
|||
err_unmap_msdu:
|
||||
dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
||||
err_free_msdu_id:
|
||||
spin_lock_bh(&htt->tx_lock);
|
||||
ath10k_htt_tx_free_msdu_id(htt, msdu_id);
|
||||
spin_unlock_bh(&htt->tx_lock);
|
||||
err:
|
||||
return res;
|
||||
}
|
||||
|
@ -1536,7 +1538,9 @@ static int ath10k_htt_tx_64(struct ath10k_htt *htt,
|
|||
err_unmap_msdu:
|
||||
dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
||||
err_free_msdu_id:
|
||||
spin_lock_bh(&htt->tx_lock);
|
||||
ath10k_htt_tx_free_msdu_id(htt, msdu_id);
|
||||
spin_unlock_bh(&htt->tx_lock);
|
||||
err:
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#define BRCMF_ARP_OL_PEER_AUTO_REPLY 0x00000008
|
||||
|
||||
#define BRCMF_BSS_INFO_VERSION 109 /* curr ver of brcmf_bss_info_le struct */
|
||||
#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0002
|
||||
#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0004
|
||||
|
||||
#define BRCMF_STA_BRCM 0x00000001 /* Running a Broadcom driver */
|
||||
#define BRCMF_STA_WME 0x00000002 /* WMM association */
|
||||
|
|
|
@ -653,6 +653,7 @@ static inline int brcmf_fws_hanger_poppkt(struct brcmf_fws_hanger *h,
|
|||
static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
|
||||
int ifidx)
|
||||
{
|
||||
struct brcmf_fws_hanger_item *hi;
|
||||
bool (*matchfn)(struct sk_buff *, void *) = NULL;
|
||||
struct sk_buff *skb;
|
||||
int prec;
|
||||
|
@ -664,6 +665,9 @@ static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
|
|||
skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
|
||||
while (skb) {
|
||||
hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
||||
hi = &fws->hanger.items[hslot];
|
||||
WARN_ON(skb != hi->pkt);
|
||||
hi->state = BRCMF_FWS_HANGER_ITEM_STATE_FREE;
|
||||
brcmf_fws_hanger_poppkt(&fws->hanger, hslot, &skb,
|
||||
true);
|
||||
brcmu_pkt_buf_free_skb(skb);
|
||||
|
|
|
@ -3633,7 +3633,11 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
|
|||
if (bus->idlecount > bus->idletime) {
|
||||
brcmf_dbg(SDIO, "idle\n");
|
||||
sdio_claim_host(bus->sdiodev->func1);
|
||||
brcmf_sdio_wd_timer(bus, false);
|
||||
#ifdef DEBUG
|
||||
if (!BRCMF_FWCON_ON() ||
|
||||
bus->console_interval == 0)
|
||||
#endif
|
||||
brcmf_sdio_wd_timer(bus, false);
|
||||
bus->idlecount = 0;
|
||||
brcmf_sdio_bus_sleep(bus, true, false);
|
||||
sdio_release_host(bus->sdiodev->func1);
|
||||
|
|
|
@ -4302,8 +4302,8 @@ il_apm_init(struct il_priv *il)
|
|||
* power savings, even without L1.
|
||||
*/
|
||||
if (il->cfg->set_l0s) {
|
||||
pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl);
|
||||
if (lctl & PCI_EXP_LNKCTL_ASPM_L1) {
|
||||
ret = pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl);
|
||||
if (!ret && (lctl & PCI_EXP_LNKCTL_ASPM_L1)) {
|
||||
/* L1-ASPM enabled; disable(!) L0S */
|
||||
il_set_bit(il, CSR_GIO_REG,
|
||||
CSR_GIO_REG_VAL_L0S_ENABLED);
|
||||
|
|
|
@ -581,6 +581,11 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
|
|||
{
|
||||
struct host_cmd_ds_802_11_key_material *key =
|
||||
&resp->params.key_material;
|
||||
int len;
|
||||
|
||||
len = le16_to_cpu(key->key_param_set.key_len);
|
||||
if (len > sizeof(key->key_param_set.key))
|
||||
return -EINVAL;
|
||||
|
||||
if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) {
|
||||
if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) {
|
||||
|
@ -594,9 +599,8 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
|
|||
|
||||
memset(priv->aes_key.key_param_set.key, 0,
|
||||
sizeof(key->key_param_set.key));
|
||||
priv->aes_key.key_param_set.key_len = key->key_param_set.key_len;
|
||||
memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key,
|
||||
le16_to_cpu(priv->aes_key.key_param_set.key_len));
|
||||
priv->aes_key.key_param_set.key_len = cpu_to_le16(len);
|
||||
memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key, len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -611,9 +615,14 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
|
|||
struct host_cmd_ds_command *resp)
|
||||
{
|
||||
struct host_cmd_ds_802_11_key_material_v2 *key_v2;
|
||||
__le16 len;
|
||||
int len;
|
||||
|
||||
key_v2 = &resp->params.key_material_v2;
|
||||
|
||||
len = le16_to_cpu(key_v2->key_param_set.key_params.aes.key_len);
|
||||
if (len > WLAN_KEY_LEN_CCMP)
|
||||
return -EINVAL;
|
||||
|
||||
if (le16_to_cpu(key_v2->action) == HostCmd_ACT_GEN_SET) {
|
||||
if ((le16_to_cpu(key_v2->key_param_set.key_info) & KEY_MCAST)) {
|
||||
mwifiex_dbg(priv->adapter, INFO, "info: key: GTK is set\n");
|
||||
|
@ -629,10 +638,9 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
|
|||
memset(priv->aes_key_v2.key_param_set.key_params.aes.key, 0,
|
||||
WLAN_KEY_LEN_CCMP);
|
||||
priv->aes_key_v2.key_param_set.key_params.aes.key_len =
|
||||
key_v2->key_param_set.key_params.aes.key_len;
|
||||
len = priv->aes_key_v2.key_param_set.key_params.aes.key_len;
|
||||
cpu_to_le16(len);
|
||||
memcpy(priv->aes_key_v2.key_param_set.key_params.aes.key,
|
||||
key_v2->key_param_set.key_params.aes.key, le16_to_cpu(len));
|
||||
key_v2->key_param_set.key_params.aes.key, len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ static int wl1251_event_ps_report(struct wl1251 *wl,
|
|||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void wl1251_event_mbox_dump(struct event_mailbox *mbox)
|
||||
|
|
|
@ -1291,7 +1291,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
** (one that doesn't overlap memory or LMMIO space) in the
|
||||
** IBASE and IMASK registers.
|
||||
*/
|
||||
ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE);
|
||||
ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE) & ~0x1fffffULL;
|
||||
iova_space_size = ~(READ_REG(ioc->ioc_hpa + IOC_IMASK) & 0xFFFFFFFFUL) + 1;
|
||||
|
||||
if ((ioc->ibase < 0xfed00000UL) && ((ioc->ibase + iova_space_size) > 0xfee00000UL)) {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue