This is the 5.10.101 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmIM5gYACgkQONu9yGCS aT7LRw//VcpMVitixVf+dgNjlBe7mNb/h2FEWVJzWvOYNQAxPSEYpRLlU3IWSdli vqqwaps+7kWVIgYQt0ccR5rRp+eg98+QpfYgZO5xfKL0YEspf0+fYDcF99K5Sjrp aFXX9nONAgCUyW0qb4CUdnL9G61UunR70iyF7Gb77vakI0qB8emYVjvlvbH3MI5M 9AqWt+lBNmRiNw2/1Nz3gvmtHhe2fYtKmJBMcX8gVAN9Ysl2jvnhtOovJzIjldZx y39PIWDwWq9O7BsaQm8RpYl/LguSS/xwseMMEbcJn0woBqnNg3qOJceaG782/OdD FTvuTDvyD89tSX9T0jeVlVO+VwhoKTHlMJ1n5dpcJEFgbz0m+VtI3B9PuggWBwz5 0AgBzJKVXahgVrQnMpjw4k73scgyC7VcaAxYH69E+2IThRqxtBbHqETYEiVURUpH fS+WjDvIOp47z9ARhQD+H8zzSFbx1DnOpbYd9zfdvnzIu2wq4Uerj8m/jk/hwh4/ zo18zVS/50vFL2/YqeKu9YdcuPPa7qlaz/zhnFM6QY65t10a01Q281Z7gFKBPevz 4IaTv9Yky//0XLQTo+/JN/O1W0FUitsei0Jl2g2dmfZoCW48MPFzezVErs37NX5s 1EsEN1jZ+yHIxu2dQwGBKpqvABNAp2rv64yCfsAcevJ52MHlef8= =qatY -----END PGP SIGNATURE----- Merge 5.10.101 into android12-5.10-lts Changes in 5.10.101 integrity: check the return value of audit_log_start() ima: Remove ima_policy file before directory ima: Allow template selection with ima_template[_fmt]= after ima_hash= ima: Do not print policy rule with inactive LSM labels mmc: sdhci-of-esdhc: Check for error num after setting mask can: isotp: fix potential CAN frame reception race in isotp_rcv() net: phy: marvell: Fix RGMII Tx/Rx delays setting in 88e1121-compatible PHYs net: phy: marvell: Fix MDI-x polarity setting in 88e1118-compatible PHYs NFS: Fix initialisation of nfs_client cl_flags field NFSD: Clamp WRITE offsets NFSD: Fix offset type in I/O trace points drm/amdgpu: Set a suitable dev_info.gart_page_size tracing: Propagate is_signed to expression NFS: change nfs_access_get_cached to only report the mask NFSv4 only print the label when its queried nfs: nfs4clinet: check the return value of kstrdup() NFSv4.1: Fix uninitialised variable in devicenotify NFSv4 remove zero number of fs_locations entries error check NFSv4 expose nfs_parse_server_name function NFSv4 handle port presence in fs_location server string x86/perf: Avoid warning for Arch LBR without XSAVE drm: panel-orientation-quirks: Add quirk for the 1Netbook OneXPlayer net: sched: Clarify error message when qdisc kind is unknown powerpc/fixmap: Fix VM debug warning on unmap scsi: target: iscsi: Make sure the np under each tpg is unique scsi: ufs: ufshcd-pltfrm: Check the return value of devm_kstrdup() scsi: qedf: Add stag_work to all the vports scsi: qedf: Fix refcount issue when LOGO is received during TMF scsi: pm8001: Fix bogus FW crash for maxcpus=1 scsi: ufs: Treat link loss as fatal error scsi: myrs: Fix crash in error case PM: hibernate: Remove register_nosave_region_late() usb: dwc2: gadget: don't try to disable ep0 in dwc2_hsotg_suspend perf: Always wake the parent event nvme-pci: add the IGNORE_DEV_SUBNQN quirk for Intel P4500/P4600 SSDs net: stmmac: dwmac-sun8i: use return val of readl_poll_timeout() KVM: eventfd: Fix false positive RCU usage warning KVM: nVMX: eVMCS: Filter out VM_EXIT_SAVE_VMX_PREEMPTION_TIMER KVM: nVMX: Also filter MSR_IA32_VMX_TRUE_PINBASED_CTLS when eVMCS KVM: SVM: Don't kill SEV guest if SMAP erratum triggers in usermode KVM: VMX: Set vmcs.PENDING_DBG.BS on #DB in STI/MOVSS blocking shadow riscv: fix build with binutils 2.38 ARM: dts: imx23-evk: Remove MX23_PAD_SSP1_DETECT from hog group ARM: dts: Fix boot regression on Skomer ARM: socfpga: fix missing RESET_CONTROLLER nvme-tcp: fix bogus request completion when failing to send AER ACPI/IORT: Check node revision for PMCG resources PM: s2idle: ACPI: Fix wakeup interrupts handling drm/rockchip: vop: Correct RK3399 VOP register fields ARM: dts: Fix timer regression for beagleboard revision c ARM: dts: meson: Fix the UART compatible strings ARM: dts: meson8: Fix the UART device-tree schema validation ARM: dts: meson8b: Fix the UART device-tree schema validation staging: fbtft: Fix error path in fbtft_driver_module_init() ARM: dts: imx6qdl-udoo: Properly describe the SD card detect phy: xilinx: zynqmp: Fix bus width setting for SGMII ARM: dts: imx7ulp: Fix 'assigned-clocks-parents' typo usb: f_fs: Fix use-after-free for epfile gpio: aggregator: Fix calling into sleeping GPIO controllers drm/vc4: hdmi: Allow DBLCLK modes even if horz timing is odd. misc: fastrpc: avoid double fput() on failed usercopy netfilter: ctnetlink: disable helper autoassign arm64: dts: meson-g12b-odroid-n2: fix typo 'dio2133' ixgbevf: Require large buffers for build_skb on 82599VF drm/panel: simple: Assign data from panel_dpi_probe() correctly ACPI: PM: s2idle: Cancel wakeup before dispatching EC GPE gpio: sifive: use the correct register to read output values bonding: pair enable_port with slave_arr_updates net: dsa: mv88e6xxx: don't use devres for mdiobus net: dsa: ar9331: register the mdiobus under devres net: dsa: bcm_sf2: don't use devres for mdiobus net: dsa: felix: don't use devres for mdiobus net: dsa: lantiq_gswip: don't use devres for mdiobus ipmr,ip6mr: acquire RTNL before calling ip[6]mr_free_table() on failure path nfp: flower: fix ida_idx not being released net: do not keep the dst cache when uncloning an skb dst and its metadata net: fix a memleak when uncloning an skb dst and its metadata veth: fix races around rq->rx_notify_masked net: mdio: aspeed: Add missing MODULE_DEVICE_TABLE tipc: rate limit warning for received illegal binding update net: amd-xgbe: disable interrupts during pci removal dpaa2-eth: unregister the netdev before disconnecting from the PHY ice: fix an error code in ice_cfg_phy_fec() ice: fix IPIP and SIT TSO offload net: mscc: ocelot: fix mutex lock error during ethtool stats read net: dsa: mv88e6xxx: fix use-after-free in mv88e6xxx_mdios_unregister vt_ioctl: fix array_index_nospec in vt_setactivate vt_ioctl: add array_index_nospec to VT_ACTIVATE n_tty: wake up poll(POLLRDNORM) on receiving data eeprom: ee1004: limit i2c reads to I2C_SMBUS_BLOCK_MAX usb: dwc2: drd: fix soft connect when gadget is unconfigured Revert "usb: dwc2: drd: fix soft connect when gadget is unconfigured" net: usb: ax88179_178a: Fix out-of-bounds accesses in RX fixup usb: ulpi: Move of_node_put to ulpi_dev_release usb: ulpi: Call of_node_put correctly usb: dwc3: gadget: Prevent core from processing stale TRBs usb: gadget: udc: renesas_usb3: Fix host to USB_ROLE_NONE transition USB: gadget: validate interface OS descriptor requests usb: gadget: rndis: check size of RNDIS_MSG_SET command usb: gadget: f_uac2: Define specific wTerminalType usb: raw-gadget: fix handling of dual-direction-capable endpoints USB: serial: ftdi_sio: add support for Brainboxes US-159/235/320 USB: serial: option: add ZTE MF286D modem USB: serial: ch341: add support for GW Instek USB2.0-Serial devices USB: serial: cp210x: add NCR Retail IO box id USB: serial: cp210x: add CPI Bulk Coin Recycler id speakup-dectlk: Restore pitch setting phy: ti: Fix missing sentinel for clk_div_table hwmon: (dell-smm) Speed up setting of fan speed Makefile.extrawarn: Move -Wunaligned-access to W=1 can: isotp: fix error path in isotp_sendmsg() to unlock wait queue scsi: lpfc: Remove NVMe support if kernel has NVME_FC disabled scsi: lpfc: Reduce log messages seen after firmware download arm64: dts: imx8mq: fix lcdif port node perf: Fix list corruption in perf_cgroup_switch() iommu: Fix potential use-after-free during probe Linux 5.10.101 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ic9c80389b155cf05bc1c6a64d0ca92837c83fbb1
This commit is contained in:
commit
c194212a03
@ -119,6 +119,9 @@ Boards (incomplete list of examples):
|
||||
- OMAP3 BeagleBoard : Low cost community board
|
||||
compatible = "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
|
||||
|
||||
- OMAP3 BeagleBoard A to B4 : Early BeagleBoard revisions A to B4 with a timer quirk
|
||||
compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
|
||||
|
||||
- OMAP3 Tobi with Overo : Commercial expansion board with daughter board
|
||||
compatible = "gumstix,omap3-overo-tobi", "gumstix,omap3-overo", "ti,omap3430", "ti,omap3"
|
||||
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 100
|
||||
SUBLEVEL = 101
|
||||
EXTRAVERSION =
|
||||
NAME = Dare mighty things
|
||||
|
||||
|
@ -731,6 +731,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
|
||||
logicpd-som-lv-37xx-devkit.dtb \
|
||||
omap3430-sdp.dtb \
|
||||
omap3-beagle.dtb \
|
||||
omap3-beagle-ab4.dtb \
|
||||
omap3-beagle-xm.dtb \
|
||||
omap3-beagle-xm-ab.dtb \
|
||||
omap3-cm-t3517.dtb \
|
||||
|
@ -79,7 +79,6 @@ hog_pins_a: hog@0 {
|
||||
MX23_PAD_LCD_RESET__GPIO_1_18
|
||||
MX23_PAD_PWM3__GPIO_1_29
|
||||
MX23_PAD_PWM4__GPIO_1_30
|
||||
MX23_PAD_SSP1_DETECT__SSP1_DETECT
|
||||
>;
|
||||
fsl,drive-strength = <MXS_DRIVE_4mA>;
|
||||
fsl,voltage = <MXS_VOLTAGE_HIGH>;
|
||||
|
@ -5,6 +5,8 @@
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*/
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
backlight = &backlight;
|
||||
@ -226,6 +228,7 @@ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
@ -304,7 +307,7 @@ &usbotg {
|
||||
&usdhc3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
non-removable;
|
||||
cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -259,7 +259,7 @@ wdog1: watchdog@403d0000 {
|
||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
||||
assigned-clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
||||
assigned-clocks-parents = <&scg1 IMX7ULP_CLK_FIRC_BUS_CLK>;
|
||||
assigned-clock-parents = <&scg1 IMX7ULP_CLK_FIRC_BUS_CLK>;
|
||||
timeout-sec = <40>;
|
||||
};
|
||||
|
||||
|
@ -42,14 +42,14 @@ hwrng: rng@8100 {
|
||||
};
|
||||
|
||||
uart_A: serial@84c0 {
|
||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
||||
compatible = "amlogic,meson6-uart";
|
||||
reg = <0x84c0 0x18>;
|
||||
interrupts = <GIC_SPI 26 IRQ_TYPE_EDGE_RISING>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart_B: serial@84dc {
|
||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
||||
compatible = "amlogic,meson6-uart";
|
||||
reg = <0x84dc 0x18>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_RISING>;
|
||||
status = "disabled";
|
||||
@ -87,7 +87,7 @@ saradc: adc@8680 {
|
||||
};
|
||||
|
||||
uart_C: serial@8700 {
|
||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
||||
compatible = "amlogic,meson6-uart";
|
||||
reg = <0x8700 0x18>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_EDGE_RISING>;
|
||||
status = "disabled";
|
||||
@ -203,7 +203,7 @@ ir_receiver: ir-receiver@480 {
|
||||
};
|
||||
|
||||
uart_AO: serial@4c0 {
|
||||
compatible = "amlogic,meson6-uart", "amlogic,meson-ao-uart", "amlogic,meson-uart";
|
||||
compatible = "amlogic,meson6-uart", "amlogic,meson-ao-uart";
|
||||
reg = <0x4c0 0x18>;
|
||||
interrupts = <GIC_SPI 90 IRQ_TYPE_EDGE_RISING>;
|
||||
status = "disabled";
|
||||
|
@ -598,27 +598,27 @@ &timer_abcde {
|
||||
};
|
||||
|
||||
&uart_AO {
|
||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8-uart", "amlogic,meson-ao-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_CLK81>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_A {
|
||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART0>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_B {
|
||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART1>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_C {
|
||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART2>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
|
@ -586,27 +586,27 @@ &timer_abcde {
|
||||
};
|
||||
|
||||
&uart_AO {
|
||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-ao-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_CLK81>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_A {
|
||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART0>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8b-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_B {
|
||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART1>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8b-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&uart_C {
|
||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART2>;
|
||||
clock-names = "baud", "xtal", "pclk";
|
||||
compatible = "amlogic,meson8b-uart";
|
||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||
clock-names = "xtal", "pclk", "baud";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
|
47
arch/arm/boot/dts/omap3-beagle-ab4.dts
Normal file
47
arch/arm/boot/dts/omap3-beagle-ab4.dts
Normal file
@ -0,0 +1,47 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/dts-v1/;
|
||||
|
||||
#include "omap3-beagle.dts"
|
||||
|
||||
/ {
|
||||
model = "TI OMAP3 BeagleBoard A to B4";
|
||||
compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3";
|
||||
};
|
||||
|
||||
/*
|
||||
* Workaround for capacitor C70 issue, see "Boards revision A and < B5"
|
||||
* section at https://elinux.org/BeagleBoard_Community
|
||||
*/
|
||||
|
||||
/* Unusable as clocksource because of unreliable oscillator */
|
||||
&counter32k {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* Unusable as clockevent because of unreliable oscillator, allow to idle */
|
||||
&timer1_target {
|
||||
/delete-property/ti,no-reset-on-init;
|
||||
/delete-property/ti,no-idle;
|
||||
timer@0 {
|
||||
/delete-property/ti,timer-alwon;
|
||||
};
|
||||
};
|
||||
|
||||
/* Preferred always-on timer for clocksource */
|
||||
&timer12_target {
|
||||
ti,no-reset-on-init;
|
||||
ti,no-idle;
|
||||
timer@0 {
|
||||
/* Always clocked by secure_32k_fck */
|
||||
};
|
||||
};
|
||||
|
||||
/* Preferred timer for clockevent */
|
||||
&timer2_target {
|
||||
ti,no-reset-on-init;
|
||||
ti,no-idle;
|
||||
timer@0 {
|
||||
assigned-clocks = <&gpt2_fck>;
|
||||
assigned-clock-parents = <&sys_ck>;
|
||||
};
|
||||
};
|
@ -304,39 +304,6 @@ &usbhsehci {
|
||||
phys = <0 &hsusb2_phy>;
|
||||
};
|
||||
|
||||
/* Unusable as clocksource because of unreliable oscillator */
|
||||
&counter32k {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* Unusable as clockevent because if unreliable oscillator, allow to idle */
|
||||
&timer1_target {
|
||||
/delete-property/ti,no-reset-on-init;
|
||||
/delete-property/ti,no-idle;
|
||||
timer@0 {
|
||||
/delete-property/ti,timer-alwon;
|
||||
};
|
||||
};
|
||||
|
||||
/* Preferred always-on timer for clocksource */
|
||||
&timer12_target {
|
||||
ti,no-reset-on-init;
|
||||
ti,no-idle;
|
||||
timer@0 {
|
||||
/* Always clocked by secure_32k_fck */
|
||||
};
|
||||
};
|
||||
|
||||
/* Preferred timer for clockevent */
|
||||
&timer2_target {
|
||||
ti,no-reset-on-init;
|
||||
ti,no-idle;
|
||||
timer@0 {
|
||||
assigned-clocks = <&gpt2_fck>;
|
||||
assigned-clock-parents = <&sys_ck>;
|
||||
};
|
||||
};
|
||||
|
||||
&twl_gpio {
|
||||
ti,use-leds;
|
||||
/* pullups: BIT(1) */
|
||||
|
@ -154,10 +154,6 @@ sdi0_per1@80126000 {
|
||||
cap-sd-highspeed;
|
||||
cap-mmc-highspeed;
|
||||
/* All direction control is used */
|
||||
st,sig-dir-cmd;
|
||||
st,sig-dir-dat0;
|
||||
st,sig-dir-dat2;
|
||||
st,sig-dir-dat31;
|
||||
st,sig-pin-fbclk;
|
||||
full-pwr-cycle;
|
||||
vmmc-supply = <&ab8500_ldo_aux3_reg>;
|
||||
|
@ -2,6 +2,7 @@
|
||||
menuconfig ARCH_SOCFPGA
|
||||
bool "Altera SOCFPGA family"
|
||||
depends on ARCH_MULTI_V7
|
||||
select ARCH_HAS_RESET_CONTROLLER
|
||||
select ARCH_SUPPORTS_BIG_ENDIAN
|
||||
select ARM_AMBA
|
||||
select ARM_GIC
|
||||
@ -18,6 +19,7 @@ menuconfig ARCH_SOCFPGA
|
||||
select PL310_ERRATA_727915
|
||||
select PL310_ERRATA_753970 if PL310
|
||||
select PL310_ERRATA_769419
|
||||
select RESET_CONTROLLER
|
||||
|
||||
if ARCH_SOCFPGA
|
||||
config SOCFPGA_SUSPEND
|
||||
|
@ -15,7 +15,7 @@ aliases {
|
||||
ethernet0 = ðmac;
|
||||
};
|
||||
|
||||
dioo2133: audio-amplifier-0 {
|
||||
dio2133: audio-amplifier-0 {
|
||||
compatible = "simple-audio-amplifier";
|
||||
enable-gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
|
||||
VCC-supply = <&vcc_5v>;
|
||||
@ -215,7 +215,7 @@ sound {
|
||||
audio-widgets = "Line", "Lineout";
|
||||
audio-aux-devs = <&tdmout_b>, <&tdmout_c>, <&tdmin_a>,
|
||||
<&tdmin_b>, <&tdmin_c>, <&tdmin_lb>,
|
||||
<&dioo2133>;
|
||||
<&dio2133>;
|
||||
audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
|
||||
"TDMOUT_B IN 1", "FRDDR_B OUT 1",
|
||||
"TDMOUT_B IN 2", "FRDDR_C OUT 1",
|
||||
|
@ -524,7 +524,7 @@ lcdif: lcd-controller@30320000 {
|
||||
assigned-clock-rates = <0>, <0>, <0>, <594000000>;
|
||||
status = "disabled";
|
||||
|
||||
port@0 {
|
||||
port {
|
||||
lcdif_mipi_dsi: endpoint {
|
||||
remote-endpoint = <&mipi_dsi_lcdif_in>;
|
||||
};
|
||||
|
@ -142,6 +142,7 @@ static inline bool pte_user(pte_t pte)
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot);
|
||||
void unmap_kernel_page(unsigned long va);
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
@ -1054,6 +1054,8 @@ static inline int map_kernel_page(unsigned long ea, unsigned long pa, pgprot_t p
|
||||
return hash__map_kernel_page(ea, pa, prot);
|
||||
}
|
||||
|
||||
void unmap_kernel_page(unsigned long va);
|
||||
|
||||
static inline int __meminit vmemmap_create_mapping(unsigned long start,
|
||||
unsigned long page_size,
|
||||
unsigned long phys)
|
||||
|
@ -111,8 +111,10 @@ static inline void __set_fixmap(enum fixed_addresses idx,
|
||||
BUILD_BUG_ON(idx >= __end_of_fixed_addresses);
|
||||
else if (WARN_ON(idx >= __end_of_fixed_addresses))
|
||||
return;
|
||||
|
||||
map_kernel_page(__fix_to_virt(idx), phys, flags);
|
||||
if (pgprot_val(flags))
|
||||
map_kernel_page(__fix_to_virt(idx), phys, flags);
|
||||
else
|
||||
unmap_kernel_page(__fix_to_virt(idx));
|
||||
}
|
||||
|
||||
#define __early_set_fixmap __set_fixmap
|
||||
|
@ -65,6 +65,7 @@ extern int icache_44x_need_flush;
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot);
|
||||
void unmap_kernel_page(unsigned long va);
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
@ -311,6 +311,7 @@ static inline void __ptep_set_access_flags(struct vm_area_struct *vma,
|
||||
#define __swp_entry_to_pte(x) __pte((x).val)
|
||||
|
||||
int map_kernel_page(unsigned long ea, unsigned long pa, pgprot_t prot);
|
||||
void unmap_kernel_page(unsigned long va);
|
||||
extern int __meminit vmemmap_create_mapping(unsigned long start,
|
||||
unsigned long page_size,
|
||||
unsigned long phys);
|
||||
|
@ -194,6 +194,15 @@ void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
|
||||
__set_pte_at(mm, addr, ptep, pte, 0);
|
||||
}
|
||||
|
||||
void unmap_kernel_page(unsigned long va)
|
||||
{
|
||||
pmd_t *pmdp = pmd_off_k(va);
|
||||
pte_t *ptep = pte_offset_kernel(pmdp, va);
|
||||
|
||||
pte_clear(&init_mm, va, ptep);
|
||||
flush_tlb_kernel_range(va, va + PAGE_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is called when relaxing access to a PTE. It's also called in the page
|
||||
* fault path when we don't hit any of the major fault cases, ie, a minor
|
||||
|
@ -50,6 +50,12 @@ riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
|
||||
riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
|
||||
riscv-march-$(CONFIG_FPU) := $(riscv-march-y)fd
|
||||
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
||||
|
||||
# Newer binutils versions default to ISA spec version 20191213 which moves some
|
||||
# instructions from the I extension to the Zicsr and Zifencei extensions.
|
||||
toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zicsr_zifencei)
|
||||
riscv-march-$(toolchain-need-zicsr-zifencei) := $(riscv-march-y)_zicsr_zifencei
|
||||
|
||||
KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
|
||||
KBUILD_AFLAGS += -march=$(riscv-march-y)
|
||||
|
||||
|
@ -1734,6 +1734,9 @@ static bool is_arch_lbr_xsave_available(void)
|
||||
* Check the LBR state with the corresponding software structure.
|
||||
* Disable LBR XSAVES support if the size doesn't match.
|
||||
*/
|
||||
if (xfeature_size(XFEATURE_LBR) == 0)
|
||||
return false;
|
||||
|
||||
if (WARN_ON(xfeature_size(XFEATURE_LBR) != get_lbr_state_size()))
|
||||
return false;
|
||||
|
||||
|
@ -4155,7 +4155,21 @@ static bool svm_can_emulate_instruction(struct kvm_vcpu *vcpu, void *insn, int i
|
||||
return true;
|
||||
|
||||
pr_err_ratelimited("KVM: SEV Guest triggered AMD Erratum 1096\n");
|
||||
kvm_make_request(KVM_REQ_TRIPLE_FAULT, vcpu);
|
||||
|
||||
/*
|
||||
* If the fault occurred in userspace, arbitrarily inject #GP
|
||||
* to avoid killing the guest and to hopefully avoid confusing
|
||||
* the guest kernel too much, e.g. injecting #PF would not be
|
||||
* coherent with respect to the guest's page tables. Request
|
||||
* triple fault if the fault occurred in the kernel as there's
|
||||
* no fault that KVM can inject without confusing the guest.
|
||||
* In practice, the triple fault is moot as no sane SEV kernel
|
||||
* will execute from user memory while also running with SMAP=1.
|
||||
*/
|
||||
if (is_user)
|
||||
kvm_inject_gp(vcpu, 0);
|
||||
else
|
||||
kvm_make_request(KVM_REQ_TRIPLE_FAULT, vcpu);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -361,6 +361,7 @@ void nested_evmcs_filter_control_msr(u32 msr_index, u64 *pdata)
|
||||
case MSR_IA32_VMX_PROCBASED_CTLS2:
|
||||
ctl_high &= ~EVMCS1_UNSUPPORTED_2NDEXEC;
|
||||
break;
|
||||
case MSR_IA32_VMX_TRUE_PINBASED_CTLS:
|
||||
case MSR_IA32_VMX_PINBASED_CTLS:
|
||||
ctl_high &= ~EVMCS1_UNSUPPORTED_PINCTRL;
|
||||
break;
|
||||
|
@ -59,7 +59,9 @@ DECLARE_STATIC_KEY_FALSE(enable_evmcs);
|
||||
SECONDARY_EXEC_SHADOW_VMCS | \
|
||||
SECONDARY_EXEC_TSC_SCALING | \
|
||||
SECONDARY_EXEC_PAUSE_LOOP_EXITING)
|
||||
#define EVMCS1_UNSUPPORTED_VMEXIT_CTRL (VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL)
|
||||
#define EVMCS1_UNSUPPORTED_VMEXIT_CTRL \
|
||||
(VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | \
|
||||
VM_EXIT_SAVE_VMX_PREEMPTION_TIMER)
|
||||
#define EVMCS1_UNSUPPORTED_VMENTRY_CTRL (VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL)
|
||||
#define EVMCS1_UNSUPPORTED_VMFUNC (VMX_VMFUNC_EPTP_SWITCHING)
|
||||
|
||||
|
@ -4846,8 +4846,33 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu)
|
||||
dr6 = vmx_get_exit_qual(vcpu);
|
||||
if (!(vcpu->guest_debug &
|
||||
(KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
|
||||
/*
|
||||
* If the #DB was due to ICEBP, a.k.a. INT1, skip the
|
||||
* instruction. ICEBP generates a trap-like #DB, but
|
||||
* despite its interception control being tied to #DB,
|
||||
* is an instruction intercept, i.e. the VM-Exit occurs
|
||||
* on the ICEBP itself. Note, skipping ICEBP also
|
||||
* clears STI and MOVSS blocking.
|
||||
*
|
||||
* For all other #DBs, set vmcs.PENDING_DBG_EXCEPTIONS.BS
|
||||
* if single-step is enabled in RFLAGS and STI or MOVSS
|
||||
* blocking is active, as the CPU doesn't set the bit
|
||||
* on VM-Exit due to #DB interception. VM-Entry has a
|
||||
* consistency check that a single-step #DB is pending
|
||||
* in this scenario as the previous instruction cannot
|
||||
* have toggled RFLAGS.TF 0=>1 (because STI and POP/MOV
|
||||
* don't modify RFLAGS), therefore the one instruction
|
||||
* delay when activating single-step breakpoints must
|
||||
* have already expired. Note, the CPU sets/clears BS
|
||||
* as appropriate for all other VM-Exits types.
|
||||
*/
|
||||
if (is_icebp(intr_info))
|
||||
WARN_ON(!skip_emulated_instruction(vcpu));
|
||||
else if ((vmx_get_rflags(vcpu) & X86_EFLAGS_TF) &&
|
||||
(vmcs_read32(GUEST_INTERRUPTIBILITY_INFO) &
|
||||
(GUEST_INTR_STATE_STI | GUEST_INTR_STATE_MOV_SS)))
|
||||
vmcs_writel(GUEST_PENDING_DBG_EXCEPTIONS,
|
||||
vmcs_readl(GUEST_PENDING_DBG_EXCEPTIONS) | DR6_BS);
|
||||
|
||||
kvm_queue_exception_p(vcpu, DB_VECTOR, dr6);
|
||||
return 1;
|
||||
|
@ -44,6 +44,7 @@ static struct var_t vars[] = {
|
||||
{ CAPS_START, .u.s = {"[:dv ap 160] " } },
|
||||
{ CAPS_STOP, .u.s = {"[:dv ap 100 ] " } },
|
||||
{ RATE, .u.n = {"[:ra %d] ", 180, 75, 650, 0, 0, NULL } },
|
||||
{ PITCH, .u.n = {"[:dv ap %d] ", 122, 50, 350, 0, 0, NULL } },
|
||||
{ INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
|
||||
{ VOL, .u.n = {"[:dv g5 %d] ", 86, 60, 86, 0, 0, NULL } },
|
||||
{ PUNCT, .u.n = {"[:pu %c] ", 0, 0, 2, 0, 0, "nsa" } },
|
||||
|
@ -1454,9 +1454,17 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,
|
||||
res[0].start = pmcg->page0_base_address;
|
||||
res[0].end = pmcg->page0_base_address + SZ_4K - 1;
|
||||
res[0].flags = IORESOURCE_MEM;
|
||||
res[1].start = pmcg->page1_base_address;
|
||||
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
|
||||
res[1].flags = IORESOURCE_MEM;
|
||||
/*
|
||||
* The initial version in DEN0049C lacked a way to describe register
|
||||
* page 1, which makes it broken for most PMCG implementations; in
|
||||
* that case, just let the driver fail gracefully if it expects to
|
||||
* find a second memory resource.
|
||||
*/
|
||||
if (node->revision > 0) {
|
||||
res[1].start = pmcg->page1_base_address;
|
||||
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
|
||||
res[1].flags = IORESOURCE_MEM;
|
||||
}
|
||||
|
||||
if (pmcg->overflow_gsiv)
|
||||
acpi_iort_register_irq(pmcg->overflow_gsiv, "overflow",
|
||||
|
@ -2064,6 +2064,16 @@ bool acpi_ec_dispatch_gpe(void)
|
||||
if (acpi_any_gpe_status_set(first_ec->gpe))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Cancel the SCI wakeup and process all pending events in case there
|
||||
* are any wakeup ones in there.
|
||||
*
|
||||
* Note that if any non-EC GPEs are active at this point, the SCI will
|
||||
* retrigger after the rearming in acpi_s2idle_wake(), so no events
|
||||
* should be missed by canceling the wakeup here.
|
||||
*/
|
||||
pm_system_cancel_wakeup();
|
||||
|
||||
/*
|
||||
* Dispatch the EC GPE in-band, but do not report wakeup in any case
|
||||
* to allow the caller to process events properly after that.
|
||||
|
@ -1012,21 +1012,15 @@ static bool acpi_s2idle_wake(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Check non-EC GPE wakeups and dispatch the EC GPE. */
|
||||
/*
|
||||
* Check non-EC GPE wakeups and if there are none, cancel the
|
||||
* SCI-related wakeup and dispatch the EC GPE.
|
||||
*/
|
||||
if (acpi_ec_dispatch_gpe()) {
|
||||
pm_pr_dbg("ACPI non-EC GPE wakeup\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cancel the SCI wakeup and process all pending events in case
|
||||
* there are any wakeup ones in there.
|
||||
*
|
||||
* Note that if any non-EC GPEs are active at this point, the
|
||||
* SCI will retrigger after the rearming below, so no events
|
||||
* should be missed by canceling the wakeup here.
|
||||
*/
|
||||
pm_system_cancel_wakeup();
|
||||
acpi_os_wait_events_complete();
|
||||
|
||||
/*
|
||||
@ -1040,6 +1034,7 @@ static bool acpi_s2idle_wake(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
pm_wakeup_clear(acpi_sci_irq);
|
||||
rearm_wake_irq(acpi_sci_irq);
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,8 @@ suspend_state_t pm_suspend_target_state;
|
||||
bool events_check_enabled __read_mostly;
|
||||
|
||||
/* First wakeup IRQ seen by the kernel in the last cycle. */
|
||||
unsigned int pm_wakeup_irq __read_mostly;
|
||||
static unsigned int wakeup_irq[2] __read_mostly;
|
||||
static DEFINE_RAW_SPINLOCK(wakeup_irq_lock);
|
||||
|
||||
/* If greater than 0 and the system is suspending, terminate the suspend. */
|
||||
static atomic_t pm_abort_suspend __read_mostly;
|
||||
@ -980,16 +981,39 @@ void pm_system_cancel_wakeup(void)
|
||||
atomic_dec_if_positive(&pm_abort_suspend);
|
||||
}
|
||||
|
||||
void pm_wakeup_clear(bool reset)
|
||||
void pm_wakeup_clear(unsigned int irq_number)
|
||||
{
|
||||
pm_wakeup_irq = 0;
|
||||
if (reset)
|
||||
raw_spin_lock_irq(&wakeup_irq_lock);
|
||||
|
||||
if (irq_number && wakeup_irq[0] == irq_number)
|
||||
wakeup_irq[0] = wakeup_irq[1];
|
||||
else
|
||||
wakeup_irq[0] = 0;
|
||||
|
||||
wakeup_irq[1] = 0;
|
||||
|
||||
raw_spin_unlock_irq(&wakeup_irq_lock);
|
||||
|
||||
if (!irq_number)
|
||||
atomic_set(&pm_abort_suspend, 0);
|
||||
}
|
||||
|
||||
void pm_system_irq_wakeup(unsigned int irq_number)
|
||||
{
|
||||
if (pm_wakeup_irq == 0) {
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&wakeup_irq_lock, flags);
|
||||
|
||||
if (wakeup_irq[0] == 0)
|
||||
wakeup_irq[0] = irq_number;
|
||||
else if (wakeup_irq[1] == 0)
|
||||
wakeup_irq[1] = irq_number;
|
||||
else
|
||||
irq_number = 0;
|
||||
|
||||
raw_spin_unlock_irqrestore(&wakeup_irq_lock, flags);
|
||||
|
||||
if (irq_number) {
|
||||
struct irq_desc *desc;
|
||||
const char *name = "null";
|
||||
|
||||
@ -1001,12 +1025,15 @@ void pm_system_irq_wakeup(unsigned int irq_number)
|
||||
|
||||
log_irq_wakeup_reason(irq_number);
|
||||
pr_warn("%s: %d triggered %s\n", __func__, irq_number, name);
|
||||
|
||||
pm_wakeup_irq = irq_number;
|
||||
pm_system_wakeup();
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int pm_wakeup_irq(void)
|
||||
{
|
||||
return wakeup_irq[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* pm_get_wakeup_count - Read the number of registered wakeup events.
|
||||
* @count: Address to store the value at.
|
||||
|
@ -241,7 +241,7 @@ static void __init dmtimer_systimer_assign_alwon(void)
|
||||
bool quirk_unreliable_oscillator = false;
|
||||
|
||||
/* Quirk unreliable 32 KiHz oscillator with incomplete dts */
|
||||
if (of_machine_is_compatible("ti,omap3-beagle") ||
|
||||
if (of_machine_is_compatible("ti,omap3-beagle-ab4") ||
|
||||
of_machine_is_compatible("timll,omap3-devkit8000")) {
|
||||
quirk_unreliable_oscillator = true;
|
||||
counter_32k = -ENODEV;
|
||||
|
@ -330,7 +330,8 @@ static int gpio_fwd_get(struct gpio_chip *chip, unsigned int offset)
|
||||
{
|
||||
struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
|
||||
|
||||
return gpiod_get_value(fwd->descs[offset]);
|
||||
return chip->can_sleep ? gpiod_get_value_cansleep(fwd->descs[offset])
|
||||
: gpiod_get_value(fwd->descs[offset]);
|
||||
}
|
||||
|
||||
static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
|
||||
@ -349,7 +350,10 @@ static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
|
||||
for_each_set_bit(i, mask, fwd->chip.ngpio)
|
||||
descs[j++] = fwd->descs[i];
|
||||
|
||||
error = gpiod_get_array_value(j, descs, NULL, values);
|
||||
if (fwd->chip.can_sleep)
|
||||
error = gpiod_get_array_value_cansleep(j, descs, NULL, values);
|
||||
else
|
||||
error = gpiod_get_array_value(j, descs, NULL, values);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@ -384,7 +388,10 @@ static void gpio_fwd_set(struct gpio_chip *chip, unsigned int offset, int value)
|
||||
{
|
||||
struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
|
||||
|
||||
gpiod_set_value(fwd->descs[offset], value);
|
||||
if (chip->can_sleep)
|
||||
gpiod_set_value_cansleep(fwd->descs[offset], value);
|
||||
else
|
||||
gpiod_set_value(fwd->descs[offset], value);
|
||||
}
|
||||
|
||||
static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
|
||||
@ -403,7 +410,10 @@ static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
|
||||
descs[j++] = fwd->descs[i];
|
||||
}
|
||||
|
||||
gpiod_set_array_value(j, descs, NULL, values);
|
||||
if (fwd->chip.can_sleep)
|
||||
gpiod_set_array_value_cansleep(j, descs, NULL, values);
|
||||
else
|
||||
gpiod_set_array_value(j, descs, NULL, values);
|
||||
}
|
||||
|
||||
static void gpio_fwd_set_multiple_locked(struct gpio_chip *chip,
|
||||
|
@ -206,7 +206,7 @@ static int sifive_gpio_probe(struct platform_device *pdev)
|
||||
NULL,
|
||||
chip->base + SIFIVE_GPIO_OUTPUT_EN,
|
||||
chip->base + SIFIVE_GPIO_INPUT_EN,
|
||||
0);
|
||||
BGPIOF_READ_OUTPUT_REG_SET);
|
||||
if (ret) {
|
||||
dev_err(dev, "unable to init generic GPIO\n");
|
||||
return ret;
|
||||
|
@ -766,9 +766,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
|
||||
dev_info.high_va_offset = AMDGPU_GMC_HOLE_END;
|
||||
dev_info.high_va_max = AMDGPU_GMC_HOLE_END | vm_size;
|
||||
}
|
||||
dev_info.virtual_address_alignment = max((int)PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
|
||||
dev_info.virtual_address_alignment = max_t(u32, PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
|
||||
dev_info.pte_fragment_size = (1 << adev->vm_manager.fragment_size) * AMDGPU_GPU_PAGE_SIZE;
|
||||
dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
|
||||
dev_info.gart_page_size = max_t(u32, PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
|
||||
dev_info.cu_active_number = adev->gfx.cu_info.number;
|
||||
dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
|
||||
dev_info.ce_ram_size = adev->gfx.ce_ram_size;
|
||||
|
@ -115,6 +115,12 @@ static const struct drm_dmi_panel_orientation_data lcd1280x1920_rightside_up = {
|
||||
.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
|
||||
};
|
||||
|
||||
static const struct drm_dmi_panel_orientation_data lcd1600x2560_leftside_up = {
|
||||
.width = 1600,
|
||||
.height = 2560,
|
||||
.orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP,
|
||||
};
|
||||
|
||||
static const struct dmi_system_id orientation_data[] = {
|
||||
{ /* Acer One 10 (S1003) */
|
||||
.matches = {
|
||||
@ -261,6 +267,12 @@ static const struct dmi_system_id orientation_data[] = {
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Default string"),
|
||||
},
|
||||
.driver_data = (void *)&onegx1_pro,
|
||||
}, { /* OneXPlayer */
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK TECHNOLOGY CO., LTD."),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"),
|
||||
},
|
||||
.driver_data = (void *)&lcd1600x2560_leftside_up,
|
||||
}, { /* Samsung GalaxyBook 10.6 */
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
|
@ -557,6 +557,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
|
||||
err = panel_dpi_probe(dev, panel);
|
||||
if (err)
|
||||
goto free_ddc;
|
||||
desc = panel->desc;
|
||||
} else {
|
||||
if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
|
||||
panel_simple_parse_panel_timing_node(dev, panel, &dt);
|
||||
|
@ -873,6 +873,7 @@ static const struct vop_win_phy rk3399_win01_data = {
|
||||
.enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
|
||||
.format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
|
||||
.rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
|
||||
.x_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 21),
|
||||
.y_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 22),
|
||||
.act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
|
||||
.dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0),
|
||||
@ -883,6 +884,7 @@ static const struct vop_win_phy rk3399_win01_data = {
|
||||
.uv_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 16),
|
||||
.src_alpha_ctl = VOP_REG(RK3288_WIN0_SRC_ALPHA_CTRL, 0xff, 0),
|
||||
.dst_alpha_ctl = VOP_REG(RK3288_WIN0_DST_ALPHA_CTRL, 0xff, 0),
|
||||
.channel = VOP_REG(RK3288_WIN0_CTRL2, 0xff, 0),
|
||||
};
|
||||
|
||||
/*
|
||||
@ -893,11 +895,11 @@ static const struct vop_win_phy rk3399_win01_data = {
|
||||
static const struct vop_win_data rk3399_vop_win_data[] = {
|
||||
{ .base = 0x00, .phy = &rk3399_win01_data,
|
||||
.type = DRM_PLANE_TYPE_PRIMARY },
|
||||
{ .base = 0x40, .phy = &rk3288_win01_data,
|
||||
{ .base = 0x40, .phy = &rk3368_win01_data,
|
||||
.type = DRM_PLANE_TYPE_OVERLAY },
|
||||
{ .base = 0x00, .phy = &rk3288_win23_data,
|
||||
{ .base = 0x00, .phy = &rk3368_win23_data,
|
||||
.type = DRM_PLANE_TYPE_OVERLAY },
|
||||
{ .base = 0x50, .phy = &rk3288_win23_data,
|
||||
{ .base = 0x50, .phy = &rk3368_win23_data,
|
||||
.type = DRM_PLANE_TYPE_CURSOR },
|
||||
};
|
||||
|
||||
|
@ -800,6 +800,7 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
unsigned long long tmds_rate;
|
||||
|
||||
if (vc4_hdmi->variant->unsupported_odd_h_timings &&
|
||||
!(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
|
||||
((mode->hdisplay % 2) || (mode->hsync_start % 2) ||
|
||||
(mode->hsync_end % 2) || (mode->htotal % 2)))
|
||||
return -EINVAL;
|
||||
@ -834,6 +835,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
|
||||
if (vc4_hdmi->variant->unsupported_odd_h_timings &&
|
||||
!(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
|
||||
((mode->hdisplay % 2) || (mode->hsync_start % 2) ||
|
||||
(mode->hsync_end % 2) || (mode->htotal % 2)))
|
||||
return MODE_H_ILLEGAL;
|
||||
|
@ -317,7 +317,7 @@ static int i8k_enable_fan_auto_mode(bool enable)
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the fan speed (off, low, high). Returns the new fan status.
|
||||
* Set the fan speed (off, low, high, ...).
|
||||
*/
|
||||
static int i8k_set_fan(int fan, int speed)
|
||||
{
|
||||
@ -329,7 +329,7 @@ static int i8k_set_fan(int fan, int speed)
|
||||
speed = (speed < 0) ? 0 : ((speed > i8k_fan_max) ? i8k_fan_max : speed);
|
||||
regs.ebx = (fan & 0xff) | (speed << 8);
|
||||
|
||||
return i8k_smm(®s) ? : i8k_get_fan_status(fan);
|
||||
return i8k_smm(®s);
|
||||
}
|
||||
|
||||
static int i8k_get_temp_type(int sensor)
|
||||
@ -443,7 +443,7 @@ static int
|
||||
i8k_ioctl_unlocked(struct file *fp, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int val = 0;
|
||||
int speed;
|
||||
int speed, err;
|
||||
unsigned char buff[16];
|
||||
int __user *argp = (int __user *)arg;
|
||||
|
||||
@ -504,7 +504,11 @@ i8k_ioctl_unlocked(struct file *fp, unsigned int cmd, unsigned long arg)
|
||||
if (copy_from_user(&speed, argp + 1, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
val = i8k_set_fan(val, speed);
|
||||
err = i8k_set_fan(val, speed);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
val = i8k_get_fan_status(val);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -186,9 +186,14 @@ static struct dev_iommu *dev_iommu_get(struct device *dev)
|
||||
|
||||
static void dev_iommu_free(struct device *dev)
|
||||
{
|
||||
iommu_fwspec_free(dev);
|
||||
kfree(dev->iommu);
|
||||
struct dev_iommu *param = dev->iommu;
|
||||
|
||||
dev->iommu = NULL;
|
||||
if (param->fwspec) {
|
||||
fwnode_handle_put(param->fwspec->iommu_fwnode);
|
||||
kfree(param->fwspec);
|
||||
}
|
||||
kfree(param);
|
||||
}
|
||||
|
||||
static int __iommu_probe_device(struct device *dev, struct list_head *group_list)
|
||||
|
@ -82,6 +82,9 @@ static ssize_t ee1004_eeprom_read(struct i2c_client *client, char *buf,
|
||||
if (unlikely(offset + count > EE1004_PAGE_SIZE))
|
||||
count = EE1004_PAGE_SIZE - offset;
|
||||
|
||||
if (count > I2C_SMBUS_BLOCK_MAX)
|
||||
count = I2C_SMBUS_BLOCK_MAX;
|
||||
|
||||
status = i2c_smbus_read_i2c_block_data_or_emulated(client, offset,
|
||||
count, buf);
|
||||
dev_dbg(&client->dev, "read %zu@%d --> %d\n", count, offset, status);
|
||||
|
@ -1284,7 +1284,14 @@ static int fastrpc_dmabuf_alloc(struct fastrpc_user *fl, char __user *argp)
|
||||
}
|
||||
|
||||
if (copy_to_user(argp, &bp, sizeof(bp))) {
|
||||
dma_buf_put(buf->dmabuf);
|
||||
/*
|
||||
* The usercopy failed, but we can't do much about it, as
|
||||
* dma_buf_fd() already called fd_install() and made the
|
||||
* file descriptor accessible for the current process. It
|
||||
* might already be closed and dmabuf no longer valid when
|
||||
* we reach this point. Therefore "leak" the fd and rely on
|
||||
* the process exit path to do any required cleanup.
|
||||
*/
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
@ -524,12 +524,16 @@ static void esdhc_of_adma_workaround(struct sdhci_host *host, u32 intmask)
|
||||
|
||||
static int esdhc_of_enable_dma(struct sdhci_host *host)
|
||||
{
|
||||
int ret;
|
||||
u32 value;
|
||||
struct device *dev = mmc_dev(host->mmc);
|
||||
|
||||
if (of_device_is_compatible(dev->of_node, "fsl,ls1043a-esdhc") ||
|
||||
of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc"))
|
||||
dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
|
||||
of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc")) {
|
||||
ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
value = sdhci_readl(host, ESDHC_DMA_SYSCTL);
|
||||
|
||||
|
@ -1003,8 +1003,8 @@ static void ad_mux_machine(struct port *port, bool *update_slave_arr)
|
||||
if (port->aggregator &&
|
||||
port->aggregator->is_active &&
|
||||
!__port_is_enabled(port)) {
|
||||
|
||||
__enable_port(port);
|
||||
*update_slave_arr = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1760,6 +1760,7 @@ static void ad_agg_selection_logic(struct aggregator *agg,
|
||||
port = port->next_port_in_aggregator) {
|
||||
__enable_port(port);
|
||||
}
|
||||
*update_slave_arr = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -504,7 +504,7 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
|
||||
get_device(&priv->master_mii_bus->dev);
|
||||
priv->master_mii_dn = dn;
|
||||
|
||||
priv->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
|
||||
priv->slave_mii_bus = mdiobus_alloc();
|
||||
if (!priv->slave_mii_bus) {
|
||||
of_node_put(dn);
|
||||
return -ENOMEM;
|
||||
@ -564,8 +564,10 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
|
||||
}
|
||||
|
||||
err = mdiobus_register(priv->slave_mii_bus);
|
||||
if (err && dn)
|
||||
if (err && dn) {
|
||||
mdiobus_free(priv->slave_mii_bus);
|
||||
of_node_put(dn);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -573,6 +575,7 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
|
||||
static void bcm_sf2_mdio_unregister(struct bcm_sf2_priv *priv)
|
||||
{
|
||||
mdiobus_unregister(priv->slave_mii_bus);
|
||||
mdiobus_free(priv->slave_mii_bus);
|
||||
of_node_put(priv->master_mii_dn);
|
||||
}
|
||||
|
||||
|
@ -495,8 +495,9 @@ static int gswip_mdio_rd(struct mii_bus *bus, int addr, int reg)
|
||||
static int gswip_mdio(struct gswip_priv *priv, struct device_node *mdio_np)
|
||||
{
|
||||
struct dsa_switch *ds = priv->ds;
|
||||
int err;
|
||||
|
||||
ds->slave_mii_bus = devm_mdiobus_alloc(priv->dev);
|
||||
ds->slave_mii_bus = mdiobus_alloc();
|
||||
if (!ds->slave_mii_bus)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -509,7 +510,11 @@ static int gswip_mdio(struct gswip_priv *priv, struct device_node *mdio_np)
|
||||
ds->slave_mii_bus->parent = priv->dev;
|
||||
ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
|
||||
|
||||
return of_mdiobus_register(ds->slave_mii_bus, mdio_np);
|
||||
err = of_mdiobus_register(ds->slave_mii_bus, mdio_np);
|
||||
if (err)
|
||||
mdiobus_free(ds->slave_mii_bus);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int gswip_pce_table_entry_read(struct gswip_priv *priv,
|
||||
@ -2086,8 +2091,10 @@ static int gswip_probe(struct platform_device *pdev)
|
||||
gswip_mdio_mask(priv, GSWIP_MDIO_GLOB_ENABLE, 0, GSWIP_MDIO_GLOB);
|
||||
dsa_unregister_switch(priv->ds);
|
||||
mdio_bus:
|
||||
if (mdio_np)
|
||||
if (mdio_np) {
|
||||
mdiobus_unregister(priv->ds->slave_mii_bus);
|
||||
mdiobus_free(priv->ds->slave_mii_bus);
|
||||
}
|
||||
put_mdio_node:
|
||||
of_node_put(mdio_np);
|
||||
for (i = 0; i < priv->num_gphy_fw; i++)
|
||||
@ -2107,6 +2114,7 @@ static int gswip_remove(struct platform_device *pdev)
|
||||
|
||||
if (priv->ds->slave_mii_bus) {
|
||||
mdiobus_unregister(priv->ds->slave_mii_bus);
|
||||
mdiobus_free(priv->ds->slave_mii_bus);
|
||||
of_node_put(priv->ds->slave_mii_bus->dev.of_node);
|
||||
}
|
||||
|
||||
|
@ -3072,7 +3072,7 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
|
||||
return err;
|
||||
}
|
||||
|
||||
bus = devm_mdiobus_alloc_size(chip->dev, sizeof(*mdio_bus));
|
||||
bus = mdiobus_alloc_size(sizeof(*mdio_bus));
|
||||
if (!bus)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -3097,14 +3097,14 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
|
||||
if (!external) {
|
||||
err = mv88e6xxx_g2_irq_mdio_setup(chip, bus);
|
||||
if (err)
|
||||
return err;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = of_mdiobus_register(bus, np);
|
||||
if (err) {
|
||||
dev_err(chip->dev, "Cannot register MDIO bus (%d)\n", err);
|
||||
mv88e6xxx_g2_irq_mdio_free(chip, bus);
|
||||
return err;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (external)
|
||||
@ -3113,21 +3113,26 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
|
||||
list_add(&mdio_bus->list, &chip->mdios);
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
mdiobus_free(bus);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
|
||||
|
||||
{
|
||||
struct mv88e6xxx_mdio_bus *mdio_bus;
|
||||
struct mv88e6xxx_mdio_bus *mdio_bus, *p;
|
||||
struct mii_bus *bus;
|
||||
|
||||
list_for_each_entry(mdio_bus, &chip->mdios, list) {
|
||||
list_for_each_entry_safe(mdio_bus, p, &chip->mdios, list) {
|
||||
bus = mdio_bus->bus;
|
||||
|
||||
if (!mdio_bus->external)
|
||||
mv88e6xxx_g2_irq_mdio_free(chip, bus);
|
||||
|
||||
mdiobus_unregister(bus);
|
||||
mdiobus_free(bus);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1050,7 +1050,7 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
|
||||
return PTR_ERR(hw);
|
||||
}
|
||||
|
||||
bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv));
|
||||
bus = mdiobus_alloc_size(sizeof(*mdio_priv));
|
||||
if (!bus)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -1070,6 +1070,7 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
|
||||
rc = mdiobus_register(bus);
|
||||
if (rc < 0) {
|
||||
dev_err(dev, "failed to register MDIO bus\n");
|
||||
mdiobus_free(bus);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -1119,6 +1120,7 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)
|
||||
lynx_pcs_destroy(pcs);
|
||||
}
|
||||
mdiobus_unregister(felix->imdio);
|
||||
mdiobus_free(felix->imdio);
|
||||
}
|
||||
|
||||
static void vsc9959_sched_speed_set(struct ocelot *ocelot, int port,
|
||||
|
@ -289,7 +289,7 @@ static int ar9331_sw_mbus_init(struct ar9331_sw_priv *priv)
|
||||
if (!mnp)
|
||||
return -ENODEV;
|
||||
|
||||
ret = of_mdiobus_register(mbus, mnp);
|
||||
ret = devm_of_mdiobus_register(dev, mbus, mnp);
|
||||
of_node_put(mnp);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -856,7 +856,6 @@ static void ar9331_sw_remove(struct mdio_device *mdiodev)
|
||||
struct ar9331_sw_priv *priv = dev_get_drvdata(&mdiodev->dev);
|
||||
|
||||
irq_domain_remove(priv->irqdomain);
|
||||
mdiobus_unregister(priv->mbus);
|
||||
dsa_unregister_switch(&priv->ds);
|
||||
|
||||
reset_control_assert(priv->sw_reset);
|
||||
|
@ -418,6 +418,9 @@ static void xgbe_pci_remove(struct pci_dev *pdev)
|
||||
|
||||
pci_free_irq_vectors(pdata->pcidev);
|
||||
|
||||
/* Disable all interrupts in the hardware */
|
||||
XP_IOWRITE(pdata, XP_INT_EN, 0x0);
|
||||
|
||||
xgbe_free_pdata(pdata);
|
||||
}
|
||||
|
||||
|
@ -4405,12 +4405,12 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
dpaa2_dbg_remove(priv);
|
||||
#endif
|
||||
|
||||
unregister_netdev(net_dev);
|
||||
rtnl_lock();
|
||||
dpaa2_eth_disconnect_mac(priv);
|
||||
rtnl_unlock();
|
||||
|
||||
unregister_netdev(net_dev);
|
||||
|
||||
dpaa2_eth_dl_port_del(priv);
|
||||
dpaa2_eth_dl_traps_unregister(priv);
|
||||
dpaa2_eth_dl_unregister(priv);
|
||||
|
@ -3032,7 +3032,8 @@ ice_cfg_phy_fec(struct ice_port_info *pi, struct ice_aqc_set_phy_cfg_data *cfg,
|
||||
if (fec == ICE_FEC_AUTO && ice_fw_supports_link_override(pi->hw)) {
|
||||
struct ice_link_default_override_tlv tlv;
|
||||
|
||||
if (ice_get_link_default_override(&tlv, pi))
|
||||
status = ice_get_link_default_override(&tlv, pi);
|
||||
if (status)
|
||||
goto out;
|
||||
|
||||
if (!(tlv.options & ICE_LINK_OVERRIDE_STRICT_MODE) &&
|
||||
|
@ -507,6 +507,7 @@ struct ice_tx_ctx_desc {
|
||||
(0x3FFFFULL << ICE_TXD_CTX_QW1_TSO_LEN_S)
|
||||
|
||||
#define ICE_TXD_CTX_QW1_MSS_S 50
|
||||
#define ICE_TXD_CTX_MIN_MSS 64
|
||||
|
||||
enum ice_tx_ctx_desc_cmd_bits {
|
||||
ICE_TX_CTX_DESC_TSO = 0x01,
|
||||
|
@ -6787,6 +6787,7 @@ ice_features_check(struct sk_buff *skb,
|
||||
struct net_device __always_unused *netdev,
|
||||
netdev_features_t features)
|
||||
{
|
||||
bool gso = skb_is_gso(skb);
|
||||
size_t len;
|
||||
|
||||
/* No point in doing any of this if neither checksum nor GSO are
|
||||
@ -6799,24 +6800,32 @@ ice_features_check(struct sk_buff *skb,
|
||||
/* We cannot support GSO if the MSS is going to be less than
|
||||
* 64 bytes. If it is then we need to drop support for GSO.
|
||||
*/
|
||||
if (skb_is_gso(skb) && (skb_shinfo(skb)->gso_size < 64))
|
||||
if (gso && (skb_shinfo(skb)->gso_size < ICE_TXD_CTX_MIN_MSS))
|
||||
features &= ~NETIF_F_GSO_MASK;
|
||||
|
||||
len = skb_network_header(skb) - skb->data;
|
||||
len = skb_network_offset(skb);
|
||||
if (len > ICE_TXD_MACLEN_MAX || len & 0x1)
|
||||
goto out_rm_features;
|
||||
|
||||
len = skb_transport_header(skb) - skb_network_header(skb);
|
||||
len = skb_network_header_len(skb);
|
||||
if (len > ICE_TXD_IPLEN_MAX || len & 0x1)
|
||||
goto out_rm_features;
|
||||
|
||||
if (skb->encapsulation) {
|
||||
len = skb_inner_network_header(skb) - skb_transport_header(skb);
|
||||
if (len > ICE_TXD_L4LEN_MAX || len & 0x1)
|
||||
goto out_rm_features;
|
||||
/* this must work for VXLAN frames AND IPIP/SIT frames, and in
|
||||
* the case of IPIP frames, the transport header pointer is
|
||||
* after the inner header! So check to make sure that this
|
||||
* is a GRE or UDP_TUNNEL frame before doing that math.
|
||||
*/
|
||||
if (gso && (skb_shinfo(skb)->gso_type &
|
||||
(SKB_GSO_GRE | SKB_GSO_UDP_TUNNEL))) {
|
||||
len = skb_inner_network_header(skb) -
|
||||
skb_transport_header(skb);
|
||||
if (len > ICE_TXD_L4LEN_MAX || len & 0x1)
|
||||
goto out_rm_features;
|
||||
}
|
||||
|
||||
len = skb_inner_transport_header(skb) -
|
||||
skb_inner_network_header(skb);
|
||||
len = skb_inner_network_header_len(skb);
|
||||
if (len > ICE_TXD_IPLEN_MAX || len & 0x1)
|
||||
goto out_rm_features;
|
||||
}
|
||||
|
@ -1992,14 +1992,15 @@ static void ixgbevf_set_rx_buffer_len(struct ixgbevf_adapter *adapter,
|
||||
if (adapter->flags & IXGBEVF_FLAGS_LEGACY_RX)
|
||||
return;
|
||||
|
||||
if (PAGE_SIZE < 8192)
|
||||
if (max_frame > IXGBEVF_MAX_FRAME_BUILD_SKB)
|
||||
set_ring_uses_large_buffer(rx_ring);
|
||||
|
||||
/* 82599 can't rely on RXDCTL.RLPML to restrict the size of the frame */
|
||||
if (adapter->hw.mac.type == ixgbe_mac_82599_vf && !ring_uses_large_buffer(rx_ring))
|
||||
return;
|
||||
|
||||
set_ring_build_skb_enabled(rx_ring);
|
||||
|
||||
if (PAGE_SIZE < 8192) {
|
||||
if (max_frame <= IXGBEVF_MAX_FRAME_BUILD_SKB)
|
||||
return;
|
||||
|
||||
set_ring_uses_large_buffer(rx_ring);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -848,12 +848,11 @@ void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *data)
|
||||
}
|
||||
EXPORT_SYMBOL(ocelot_get_strings);
|
||||
|
||||
/* Caller must hold &ocelot->stats_lock */
|
||||
static void ocelot_update_stats(struct ocelot *ocelot)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
mutex_lock(&ocelot->stats_lock);
|
||||
|
||||
for (i = 0; i < ocelot->num_phys_ports; i++) {
|
||||
/* Configure the port to read the stats from */
|
||||
ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(i), SYS_STAT_CFG);
|
||||
@ -872,8 +871,6 @@ static void ocelot_update_stats(struct ocelot *ocelot)
|
||||
~(u64)U32_MAX) + val;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&ocelot->stats_lock);
|
||||
}
|
||||
|
||||
static void ocelot_check_stats_work(struct work_struct *work)
|
||||
@ -882,7 +879,9 @@ static void ocelot_check_stats_work(struct work_struct *work)
|
||||
struct ocelot *ocelot = container_of(del_work, struct ocelot,
|
||||
stats_work);
|
||||
|
||||
mutex_lock(&ocelot->stats_lock);
|
||||
ocelot_update_stats(ocelot);
|
||||
mutex_unlock(&ocelot->stats_lock);
|
||||
|
||||
queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,
|
||||
OCELOT_STATS_CHECK_DELAY);
|
||||
@ -892,12 +891,16 @@ void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
mutex_lock(&ocelot->stats_lock);
|
||||
|
||||
/* check and update now */
|
||||
ocelot_update_stats(ocelot);
|
||||
|
||||
/* Copy all counters */
|
||||
for (i = 0; i < ocelot->num_stats; i++)
|
||||
*data++ = ocelot->stats[port * ocelot->num_stats + i];
|
||||
|
||||
mutex_unlock(&ocelot->stats_lock);
|
||||
}
|
||||
EXPORT_SYMBOL(ocelot_get_ethtool_stats);
|
||||
|
||||
|
@ -1011,6 +1011,7 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev,
|
||||
struct nfp_flower_repr_priv *repr_priv;
|
||||
struct nfp_tun_offloaded_mac *entry;
|
||||
struct nfp_repr *repr;
|
||||
u16 nfp_mac_idx;
|
||||
int ida_idx;
|
||||
|
||||
entry = nfp_tunnel_lookup_offloaded_macs(app, mac);
|
||||
@ -1029,8 +1030,6 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev,
|
||||
entry->bridge_count--;
|
||||
|
||||
if (!entry->bridge_count && entry->ref_count) {
|
||||
u16 nfp_mac_idx;
|
||||
|
||||
nfp_mac_idx = entry->index & ~NFP_TUN_PRE_TUN_IDX_BIT;
|
||||
if (__nfp_tunnel_offload_mac(app, mac, nfp_mac_idx,
|
||||
false)) {
|
||||
@ -1046,7 +1045,6 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev,
|
||||
|
||||
/* If MAC is now used by 1 repr set the offloaded MAC index to port. */
|
||||
if (entry->ref_count == 1 && list_is_singular(&entry->repr_list)) {
|
||||
u16 nfp_mac_idx;
|
||||
int port, err;
|
||||
|
||||
repr_priv = list_first_entry(&entry->repr_list,
|
||||
@ -1074,8 +1072,14 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev,
|
||||
WARN_ON_ONCE(rhashtable_remove_fast(&priv->tun.offloaded_macs,
|
||||
&entry->ht_node,
|
||||
offloaded_macs_params));
|
||||
|
||||
if (nfp_flower_is_supported_bridge(netdev))
|
||||
nfp_mac_idx = entry->index & ~NFP_TUN_PRE_TUN_IDX_BIT;
|
||||
else
|
||||
nfp_mac_idx = entry->index;
|
||||
|
||||
/* If MAC has global ID then extract and free the ida entry. */
|
||||
if (nfp_tunnel_is_mac_idx_global(entry->index)) {
|
||||
if (nfp_tunnel_is_mac_idx_global(nfp_mac_idx)) {
|
||||
ida_idx = nfp_tunnel_get_ida_from_global_mac_idx(entry->index);
|
||||
ida_simple_remove(&priv->tun.mac_off_ids, ida_idx);
|
||||
}
|
||||
|
@ -734,7 +734,7 @@ static int sun8i_dwmac_reset(struct stmmac_priv *priv)
|
||||
|
||||
if (err) {
|
||||
dev_err(priv->device, "EMAC reset timeout\n");
|
||||
return -EFAULT;
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -148,6 +148,7 @@ static const struct of_device_id aspeed_mdio_of_match[] = {
|
||||
{ .compatible = "aspeed,ast2600-mdio", },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, aspeed_mdio_of_match);
|
||||
|
||||
static struct platform_driver aspeed_mdio_driver = {
|
||||
.driver = {
|
||||
|
@ -515,9 +515,9 @@ static int m88e1121_config_aneg_rgmii_delays(struct phy_device *phydev)
|
||||
else
|
||||
mscr = 0;
|
||||
|
||||
return phy_modify_paged(phydev, MII_MARVELL_MSCR_PAGE,
|
||||
MII_88E1121_PHY_MSCR_REG,
|
||||
MII_88E1121_PHY_MSCR_DELAY_MASK, mscr);
|
||||
return phy_modify_paged_changed(phydev, MII_MARVELL_MSCR_PAGE,
|
||||
MII_88E1121_PHY_MSCR_REG,
|
||||
MII_88E1121_PHY_MSCR_DELAY_MASK, mscr);
|
||||
}
|
||||
|
||||
static int m88e1121_config_aneg(struct phy_device *phydev)
|
||||
@ -531,11 +531,13 @@ static int m88e1121_config_aneg(struct phy_device *phydev)
|
||||
return err;
|
||||
}
|
||||
|
||||
changed = err;
|
||||
|
||||
err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
changed = err;
|
||||
changed |= err;
|
||||
|
||||
err = genphy_config_aneg(phydev);
|
||||
if (err < 0)
|
||||
@ -1059,16 +1061,15 @@ static int m88e1118_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = genphy_soft_reset(phydev);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = genphy_config_aneg(phydev);
|
||||
return 0;
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return genphy_soft_reset(phydev);
|
||||
}
|
||||
|
||||
static int m88e1118_config_init(struct phy_device *phydev)
|
||||
|
@ -1467,58 +1467,68 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
u16 hdr_off;
|
||||
u32 *pkt_hdr;
|
||||
|
||||
/* This check is no longer done by usbnet */
|
||||
if (skb->len < dev->net->hard_header_len)
|
||||
/* At the end of the SKB, there's a header telling us how many packets
|
||||
* are bundled into this buffer and where we can find an array of
|
||||
* per-packet metadata (which contains elements encoded into u16).
|
||||
*/
|
||||
if (skb->len < 4)
|
||||
return 0;
|
||||
|
||||
skb_trim(skb, skb->len - 4);
|
||||
rx_hdr = get_unaligned_le32(skb_tail_pointer(skb));
|
||||
|
||||
pkt_cnt = (u16)rx_hdr;
|
||||
hdr_off = (u16)(rx_hdr >> 16);
|
||||
|
||||
if (pkt_cnt == 0)
|
||||
return 0;
|
||||
|
||||
/* Make sure that the bounds of the metadata array are inside the SKB
|
||||
* (and in front of the counter at the end).
|
||||
*/
|
||||
if (pkt_cnt * 2 + hdr_off > skb->len)
|
||||
return 0;
|
||||
pkt_hdr = (u32 *)(skb->data + hdr_off);
|
||||
|
||||
while (pkt_cnt--) {
|
||||
/* Packets must not overlap the metadata array */
|
||||
skb_trim(skb, hdr_off);
|
||||
|
||||
for (; ; pkt_cnt--, pkt_hdr++) {
|
||||
u16 pkt_len;
|
||||
|
||||
le32_to_cpus(pkt_hdr);
|
||||
pkt_len = (*pkt_hdr >> 16) & 0x1fff;
|
||||
|
||||
if (pkt_len > skb->len)
|
||||
return 0;
|
||||
|
||||
/* Check CRC or runt packet */
|
||||
if ((*pkt_hdr & AX_RXHDR_CRC_ERR) ||
|
||||
(*pkt_hdr & AX_RXHDR_DROP_ERR)) {
|
||||
skb_pull(skb, (pkt_len + 7) & 0xFFF8);
|
||||
pkt_hdr++;
|
||||
continue;
|
||||
}
|
||||
if (((*pkt_hdr & (AX_RXHDR_CRC_ERR | AX_RXHDR_DROP_ERR)) == 0) &&
|
||||
pkt_len >= 2 + ETH_HLEN) {
|
||||
bool last = (pkt_cnt == 0);
|
||||
|
||||
if (pkt_cnt == 0) {
|
||||
skb->len = pkt_len;
|
||||
/* Skip IP alignment pseudo header */
|
||||
skb_pull(skb, 2);
|
||||
skb_set_tail_pointer(skb, skb->len);
|
||||
skb->truesize = pkt_len + sizeof(struct sk_buff);
|
||||
ax88179_rx_checksum(skb, pkt_hdr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ax_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (ax_skb) {
|
||||
if (last) {
|
||||
ax_skb = skb;
|
||||
} else {
|
||||
ax_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!ax_skb)
|
||||
return 0;
|
||||
}
|
||||
ax_skb->len = pkt_len;
|
||||
/* Skip IP alignment pseudo header */
|
||||
skb_pull(ax_skb, 2);
|
||||
skb_set_tail_pointer(ax_skb, ax_skb->len);
|
||||
ax_skb->truesize = pkt_len + sizeof(struct sk_buff);
|
||||
ax88179_rx_checksum(ax_skb, pkt_hdr);
|
||||
|
||||
if (last)
|
||||
return 1;
|
||||
|
||||
usbnet_skb_return(dev, ax_skb);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
skb_pull(skb, (pkt_len + 7) & 0xFFF8);
|
||||
pkt_hdr++;
|
||||
/* Trim this packet away from the SKB */
|
||||
if (!skb_pull(skb, (pkt_len + 7) & 0xFFF8))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static struct sk_buff *
|
||||
|
@ -256,9 +256,10 @@ static void __veth_xdp_flush(struct veth_rq *rq)
|
||||
{
|
||||
/* Write ptr_ring before reading rx_notify_masked */
|
||||
smp_mb();
|
||||
if (!rq->rx_notify_masked) {
|
||||
rq->rx_notify_masked = true;
|
||||
napi_schedule(&rq->xdp_napi);
|
||||
if (!READ_ONCE(rq->rx_notify_masked) &&
|
||||
napi_schedule_prep(&rq->xdp_napi)) {
|
||||
WRITE_ONCE(rq->rx_notify_masked, true);
|
||||
__napi_schedule(&rq->xdp_napi);
|
||||
}
|
||||
}
|
||||
|
||||
@ -852,8 +853,10 @@ static int veth_poll(struct napi_struct *napi, int budget)
|
||||
/* Write rx_notify_masked before reading ptr_ring */
|
||||
smp_store_mb(rq->rx_notify_masked, false);
|
||||
if (unlikely(!__ptr_ring_empty(&rq->xdp_ring))) {
|
||||
rq->rx_notify_masked = true;
|
||||
napi_schedule(&rq->xdp_napi);
|
||||
if (napi_schedule_prep(&rq->xdp_napi)) {
|
||||
WRITE_ONCE(rq->rx_notify_masked, true);
|
||||
__napi_schedule(&rq->xdp_napi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3198,7 +3198,8 @@ static const struct pci_device_id nvme_id_table[] = {
|
||||
NVME_QUIRK_DEALLOCATE_ZEROES, },
|
||||
{ PCI_VDEVICE(INTEL, 0x0a54), /* Intel P4500/P4600 */
|
||||
.driver_data = NVME_QUIRK_STRIPE_SIZE |
|
||||
NVME_QUIRK_DEALLOCATE_ZEROES, },
|
||||
NVME_QUIRK_DEALLOCATE_ZEROES |
|
||||
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
||||
{ PCI_VDEVICE(INTEL, 0x0a55), /* Dell Express Flash P4600 */
|
||||
.driver_data = NVME_QUIRK_STRIPE_SIZE |
|
||||
NVME_QUIRK_DEALLOCATE_ZEROES, },
|
||||
|
@ -904,7 +904,15 @@ static inline void nvme_tcp_done_send_req(struct nvme_tcp_queue *queue)
|
||||
|
||||
static void nvme_tcp_fail_request(struct nvme_tcp_request *req)
|
||||
{
|
||||
nvme_tcp_end_request(blk_mq_rq_from_pdu(req), NVME_SC_HOST_PATH_ERROR);
|
||||
if (nvme_tcp_async_req(req)) {
|
||||
union nvme_result res = {};
|
||||
|
||||
nvme_complete_async_event(&req->queue->ctrl->ctrl,
|
||||
cpu_to_le16(NVME_SC_HOST_PATH_ERROR), &res);
|
||||
} else {
|
||||
nvme_tcp_end_request(blk_mq_rq_from_pdu(req),
|
||||
NVME_SC_HOST_PATH_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
static int nvme_tcp_try_send_data(struct nvme_tcp_request *req)
|
||||
|
@ -177,6 +177,7 @@ static const struct clk_div_table clk_div_table[] = {
|
||||
{ .val = 1, .div = 2, },
|
||||
{ .val = 2, .div = 4, },
|
||||
{ .val = 3, .div = 8, },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
static struct wiz_clk_div_sel clk_div_sel[] = {
|
||||
|
@ -134,7 +134,8 @@
|
||||
#define PROT_BUS_WIDTH_10 0x0
|
||||
#define PROT_BUS_WIDTH_20 0x1
|
||||
#define PROT_BUS_WIDTH_40 0x2
|
||||
#define PROT_BUS_WIDTH_SHIFT 2
|
||||
#define PROT_BUS_WIDTH_SHIFT(n) ((n) * 2)
|
||||
#define PROT_BUS_WIDTH_MASK(n) GENMASK((n) * 2 + 1, (n) * 2)
|
||||
|
||||
/* Number of GT lanes */
|
||||
#define NUM_LANES 4
|
||||
@ -443,12 +444,12 @@ static void xpsgtr_phy_init_sata(struct xpsgtr_phy *gtr_phy)
|
||||
static void xpsgtr_phy_init_sgmii(struct xpsgtr_phy *gtr_phy)
|
||||
{
|
||||
struct xpsgtr_dev *gtr_dev = gtr_phy->dev;
|
||||
u32 mask = PROT_BUS_WIDTH_MASK(gtr_phy->lane);
|
||||
u32 val = PROT_BUS_WIDTH_10 << PROT_BUS_WIDTH_SHIFT(gtr_phy->lane);
|
||||
|
||||
/* Set SGMII protocol TX and RX bus width to 10 bits. */
|
||||
xpsgtr_write(gtr_dev, TX_PROT_BUS_WIDTH,
|
||||
PROT_BUS_WIDTH_10 << (gtr_phy->lane * PROT_BUS_WIDTH_SHIFT));
|
||||
xpsgtr_write(gtr_dev, RX_PROT_BUS_WIDTH,
|
||||
PROT_BUS_WIDTH_10 << (gtr_phy->lane * PROT_BUS_WIDTH_SHIFT));
|
||||
xpsgtr_clr_set(gtr_dev, TX_PROT_BUS_WIDTH, mask, val);
|
||||
xpsgtr_clr_set(gtr_dev, RX_PROT_BUS_WIDTH, mask, val);
|
||||
|
||||
xpsgtr_bypass_scrambler_8b10b(gtr_phy);
|
||||
}
|
||||
|
@ -898,6 +898,16 @@ struct lpfc_hba {
|
||||
uint32_t cfg_hostmem_hgp;
|
||||
uint32_t cfg_log_verbose;
|
||||
uint32_t cfg_enable_fc4_type;
|
||||
#define LPFC_ENABLE_FCP 1
|
||||
#define LPFC_ENABLE_NVME 2
|
||||
#define LPFC_ENABLE_BOTH 3
|
||||
#if (IS_ENABLED(CONFIG_NVME_FC))
|
||||
#define LPFC_MAX_ENBL_FC4_TYPE LPFC_ENABLE_BOTH
|
||||
#define LPFC_DEF_ENBL_FC4_TYPE LPFC_ENABLE_BOTH
|
||||
#else
|
||||
#define LPFC_MAX_ENBL_FC4_TYPE LPFC_ENABLE_FCP
|
||||
#define LPFC_DEF_ENBL_FC4_TYPE LPFC_ENABLE_FCP
|
||||
#endif
|
||||
uint32_t cfg_aer_support;
|
||||
uint32_t cfg_sriov_nr_virtfn;
|
||||
uint32_t cfg_request_firmware_upgrade;
|
||||
@ -918,9 +928,6 @@ struct lpfc_hba {
|
||||
uint32_t cfg_ras_fwlog_func;
|
||||
uint32_t cfg_enable_bbcr; /* Enable BB Credit Recovery */
|
||||
uint32_t cfg_enable_dpp; /* Enable Direct Packet Push */
|
||||
#define LPFC_ENABLE_FCP 1
|
||||
#define LPFC_ENABLE_NVME 2
|
||||
#define LPFC_ENABLE_BOTH 3
|
||||
uint32_t cfg_enable_pbde;
|
||||
struct nvmet_fc_target_port *targetport;
|
||||
lpfc_vpd_t vpd; /* vital product data */
|
||||
|
@ -3797,8 +3797,8 @@ LPFC_ATTR_R(nvmet_mrq_post,
|
||||
* 3 - register both FCP and NVME
|
||||
* Supported values are [1,3]. Default value is 3
|
||||
*/
|
||||
LPFC_ATTR_R(enable_fc4_type, LPFC_ENABLE_BOTH,
|
||||
LPFC_ENABLE_FCP, LPFC_ENABLE_BOTH,
|
||||
LPFC_ATTR_R(enable_fc4_type, LPFC_DEF_ENBL_FC4_TYPE,
|
||||
LPFC_ENABLE_FCP, LPFC_MAX_ENBL_FC4_TYPE,
|
||||
"Enable FC4 Protocol support - FCP / NVME");
|
||||
|
||||
/*
|
||||
|
@ -1998,7 +1998,7 @@ lpfc_handle_eratt_s4(struct lpfc_hba *phba)
|
||||
}
|
||||
if (reg_err1 == SLIPORT_ERR1_REG_ERR_CODE_2 &&
|
||||
reg_err2 == SLIPORT_ERR2_REG_FW_RESTART) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"3143 Port Down: Firmware Update "
|
||||
"Detected\n");
|
||||
en_rn_msg = false;
|
||||
|
@ -12402,6 +12402,7 @@ lpfc_sli4_eratt_read(struct lpfc_hba *phba)
|
||||
uint32_t uerr_sta_hi, uerr_sta_lo;
|
||||
uint32_t if_type, portsmphr;
|
||||
struct lpfc_register portstat_reg;
|
||||
u32 logmask;
|
||||
|
||||
/*
|
||||
* For now, use the SLI4 device internal unrecoverable error
|
||||
@ -12452,7 +12453,12 @@ lpfc_sli4_eratt_read(struct lpfc_hba *phba)
|
||||
readl(phba->sli4_hba.u.if_type2.ERR1regaddr);
|
||||
phba->work_status[1] =
|
||||
readl(phba->sli4_hba.u.if_type2.ERR2regaddr);
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||
logmask = LOG_TRACE_EVENT;
|
||||
if (phba->work_status[0] ==
|
||||
SLIPORT_ERR1_REG_ERR_CODE_2 &&
|
||||
phba->work_status[1] == SLIPORT_ERR2_REG_FW_RESTART)
|
||||
logmask = LOG_SLI;
|
||||
lpfc_printf_log(phba, KERN_ERR, logmask,
|
||||
"2885 Port Status Event: "
|
||||
"port status reg 0x%x, "
|
||||
"port smphr reg 0x%x, "
|
||||
|
@ -2272,7 +2272,8 @@ static void myrs_cleanup(struct myrs_hba *cs)
|
||||
myrs_unmap(cs);
|
||||
|
||||
if (cs->mmio_base) {
|
||||
cs->disable_intr(cs);
|
||||
if (cs->disable_intr)
|
||||
cs->disable_intr(cs);
|
||||
iounmap(cs->mmio_base);
|
||||
cs->mmio_base = NULL;
|
||||
}
|
||||
|
@ -4057,10 +4057,22 @@ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
|
||||
unsigned long flags;
|
||||
u32 regval;
|
||||
|
||||
/*
|
||||
* Fatal errors are programmed to be signalled in irq vector
|
||||
* pm8001_ha->max_q_num - 1 through pm8001_ha->main_cfg_tbl.pm80xx_tbl.
|
||||
* fatal_err_interrupt
|
||||
*/
|
||||
if (vec == (pm8001_ha->max_q_num - 1)) {
|
||||
u32 mipsall_ready;
|
||||
|
||||
if (pm8001_ha->chip_id == chip_8008 ||
|
||||
pm8001_ha->chip_id == chip_8009)
|
||||
mipsall_ready = SCRATCH_PAD_MIPSALL_READY_8PORT;
|
||||
else
|
||||
mipsall_ready = SCRATCH_PAD_MIPSALL_READY_16PORT;
|
||||
|
||||
regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
|
||||
if ((regval & SCRATCH_PAD_MIPSALL_READY) !=
|
||||
SCRATCH_PAD_MIPSALL_READY) {
|
||||
if ((regval & mipsall_ready) != mipsall_ready) {
|
||||
pm8001_ha->controller_fatal_error = true;
|
||||
pm8001_dbg(pm8001_ha, FAIL,
|
||||
"Firmware Fatal error! Regval:0x%x\n",
|
||||
|
@ -1391,8 +1391,12 @@ typedef struct SASProtocolTimerConfig SASProtocolTimerConfig_t;
|
||||
#define SCRATCH_PAD_BOOT_LOAD_SUCCESS 0x0
|
||||
#define SCRATCH_PAD_IOP0_READY 0xC00
|
||||
#define SCRATCH_PAD_IOP1_READY 0x3000
|
||||
#define SCRATCH_PAD_MIPSALL_READY (SCRATCH_PAD_IOP1_READY | \
|
||||
#define SCRATCH_PAD_MIPSALL_READY_16PORT (SCRATCH_PAD_IOP1_READY | \
|
||||
SCRATCH_PAD_IOP0_READY | \
|
||||
SCRATCH_PAD_ILA_READY | \
|
||||
SCRATCH_PAD_RAAE_READY)
|
||||
#define SCRATCH_PAD_MIPSALL_READY_8PORT (SCRATCH_PAD_IOP0_READY | \
|
||||
SCRATCH_PAD_ILA_READY | \
|
||||
SCRATCH_PAD_RAAE_READY)
|
||||
|
||||
/* boot loader state */
|
||||
|
@ -2268,6 +2268,7 @@ int qedf_initiate_cleanup(struct qedf_ioreq *io_req,
|
||||
io_req->tm_flags == FCP_TMF_TGT_RESET) {
|
||||
clear_bit(QEDF_CMD_OUTSTANDING, &io_req->flags);
|
||||
io_req->sc_cmd = NULL;
|
||||
kref_put(&io_req->refcount, qedf_release_cmd);
|
||||
complete(&io_req->tm_done);
|
||||
}
|
||||
|
||||
|
@ -1859,6 +1859,7 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled)
|
||||
vport_qedf->cmd_mgr = base_qedf->cmd_mgr;
|
||||
init_completion(&vport_qedf->flogi_compl);
|
||||
INIT_LIST_HEAD(&vport_qedf->fcports);
|
||||
INIT_DELAYED_WORK(&vport_qedf->stag_work, qedf_stag_change_work);
|
||||
|
||||
rc = qedf_vport_libfc_config(vport, vn_port);
|
||||
if (rc) {
|
||||
|
@ -92,6 +92,11 @@ static int ufshcd_parse_clock_info(struct ufs_hba *hba)
|
||||
clki->min_freq = clkfreq[i];
|
||||
clki->max_freq = clkfreq[i+1];
|
||||
clki->name = devm_kstrdup(dev, name, GFP_KERNEL);
|
||||
if (!clki->name) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!strcmp(name, "ref_clk"))
|
||||
clki->keep_link_active = true;
|
||||
dev_dbg(dev, "%s: min %u max %u name %s\n", "freq-table-hz",
|
||||
@ -128,6 +133,8 @@ static int ufshcd_populate_vreg(struct device *dev, const char *name,
|
||||
return -ENOMEM;
|
||||
|
||||
vreg->name = devm_kstrdup(dev, name, GFP_KERNEL);
|
||||
if (!vreg->name)
|
||||
return -ENOMEM;
|
||||
|
||||
snprintf(prop_name, MAX_PROP_SIZE, "%s-max-microamp", name);
|
||||
if (of_property_read_u32(np, prop_name, &vreg->max_uA)) {
|
||||
|
@ -143,7 +143,8 @@ static inline u32 ufshci_version(u32 major, u32 minor)
|
||||
#define INT_FATAL_ERRORS (DEVICE_FATAL_ERROR |\
|
||||
CONTROLLER_FATAL_ERROR |\
|
||||
SYSTEM_BUS_FATAL_ERROR |\
|
||||
CRYPTO_ENGINE_FATAL_ERROR)
|
||||
CRYPTO_ENGINE_FATAL_ERROR |\
|
||||
UIC_LINK_LOST)
|
||||
|
||||
/* HCS - Host Controller Status 30h */
|
||||
#define DEVICE_PRESENT 0x1
|
||||
|
@ -332,7 +332,10 @@ static int __init fbtft_driver_module_init(void) \
|
||||
ret = spi_register_driver(&fbtft_driver_spi_driver); \
|
||||
if (ret < 0) \
|
||||
return ret; \
|
||||
return platform_driver_register(&fbtft_driver_platform_driver); \
|
||||
ret = platform_driver_register(&fbtft_driver_platform_driver); \
|
||||
if (ret < 0) \
|
||||
spi_unregister_driver(&fbtft_driver_spi_driver); \
|
||||
return ret; \
|
||||
} \
|
||||
\
|
||||
static void __exit fbtft_driver_module_exit(void) \
|
||||
|
@ -443,6 +443,9 @@ static bool iscsit_tpg_check_network_portal(
|
||||
break;
|
||||
}
|
||||
spin_unlock(&tpg->tpg_np_lock);
|
||||
|
||||
if (match)
|
||||
break;
|
||||
}
|
||||
spin_unlock(&tiqn->tiqn_tpg_lock);
|
||||
|
||||
|
@ -1372,7 +1372,7 @@ n_tty_receive_char_special(struct tty_struct *tty, unsigned char c)
|
||||
put_tty_queue(c, ldata);
|
||||
smp_store_release(&ldata->canon_head, ldata->read_head);
|
||||
kill_fasync(&tty->fasync, SIGIO, POLL_IN);
|
||||
wake_up_interruptible_poll(&tty->read_wait, EPOLLIN);
|
||||
wake_up_interruptible_poll(&tty->read_wait, EPOLLIN | EPOLLRDNORM);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -1653,7 +1653,7 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
||||
|
||||
if (read_cnt(ldata)) {
|
||||
kill_fasync(&tty->fasync, SIGIO, POLL_IN);
|
||||
wake_up_interruptible_poll(&tty->read_wait, EPOLLIN);
|
||||
wake_up_interruptible_poll(&tty->read_wait, EPOLLIN | EPOLLRDNORM);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -699,8 +699,8 @@ static int vt_setactivate(struct vt_setactivate __user *sa)
|
||||
if (vsa.console == 0 || vsa.console > MAX_NR_CONSOLES)
|
||||
return -ENXIO;
|
||||
|
||||
vsa.console = array_index_nospec(vsa.console, MAX_NR_CONSOLES + 1);
|
||||
vsa.console--;
|
||||
vsa.console = array_index_nospec(vsa.console, MAX_NR_CONSOLES);
|
||||
console_lock();
|
||||
ret = vc_allocate(vsa.console);
|
||||
if (ret) {
|
||||
@ -945,6 +945,7 @@ int vt_ioctl(struct tty_struct *tty,
|
||||
return -ENXIO;
|
||||
|
||||
arg--;
|
||||
arg = array_index_nospec(arg, MAX_NR_CONSOLES);
|
||||
console_lock();
|
||||
ret = vc_allocate(arg);
|
||||
console_unlock();
|
||||
|
@ -132,6 +132,7 @@ static const struct attribute_group *ulpi_dev_attr_groups[] = {
|
||||
|
||||
static void ulpi_dev_release(struct device *dev)
|
||||
{
|
||||
of_node_put(dev->of_node);
|
||||
kfree(to_ulpi_dev(dev));
|
||||
}
|
||||
|
||||
@ -249,12 +250,16 @@ static int ulpi_register(struct device *dev, struct ulpi *ulpi)
|
||||
return ret;
|
||||
|
||||
ret = ulpi_read_id(ulpi);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(ulpi->dev.of_node);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = device_register(&ulpi->dev);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
put_device(&ulpi->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev_dbg(&ulpi->dev, "registered ULPI PHY: vendor %04x, product %04x\n",
|
||||
ulpi->id.vendor, ulpi->id.product);
|
||||
@ -301,7 +306,6 @@ EXPORT_SYMBOL_GPL(ulpi_register_interface);
|
||||
*/
|
||||
void ulpi_unregister_interface(struct ulpi *ulpi)
|
||||
{
|
||||
of_node_put(ulpi->dev.of_node);
|
||||
device_unregister(&ulpi->dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ulpi_unregister_interface);
|
||||
|
@ -5032,7 +5032,7 @@ int dwc2_hsotg_suspend(struct dwc2_hsotg *hsotg)
|
||||
hsotg->gadget.speed = USB_SPEED_UNKNOWN;
|
||||
spin_unlock_irqrestore(&hsotg->lock, flags);
|
||||
|
||||
for (ep = 0; ep < hsotg->num_of_eps; ep++) {
|
||||
for (ep = 1; ep < hsotg->num_of_eps; ep++) {
|
||||
if (hsotg->eps_in[ep])
|
||||
dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep);
|
||||
if (hsotg->eps_out[ep])
|
||||
|
@ -1975,6 +1975,9 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
||||
if (w_index != 0x5 || (w_value >> 8))
|
||||
break;
|
||||
interface = w_value & 0xFF;
|
||||
if (interface >= MAX_CONFIG_INTERFACES ||
|
||||
!os_desc_cfg->interface[interface])
|
||||
break;
|
||||
buf[6] = w_index;
|
||||
count = count_ext_prop(os_desc_cfg,
|
||||
interface);
|
||||
|
@ -177,7 +177,7 @@ static struct uac2_input_terminal_descriptor io_in_it_desc = {
|
||||
|
||||
.bDescriptorSubtype = UAC_INPUT_TERMINAL,
|
||||
/* .bTerminalID = DYNAMIC */
|
||||
.wTerminalType = cpu_to_le16(UAC_INPUT_TERMINAL_UNDEFINED),
|
||||
.wTerminalType = cpu_to_le16(UAC_INPUT_TERMINAL_MICROPHONE),
|
||||
.bAssocTerminal = 0,
|
||||
/* .bCSourceID = DYNAMIC */
|
||||
.iChannelNames = 0,
|
||||
@ -205,7 +205,7 @@ static struct uac2_output_terminal_descriptor io_out_ot_desc = {
|
||||
|
||||
.bDescriptorSubtype = UAC_OUTPUT_TERMINAL,
|
||||
/* .bTerminalID = DYNAMIC */
|
||||
.wTerminalType = cpu_to_le16(UAC_OUTPUT_TERMINAL_UNDEFINED),
|
||||
.wTerminalType = cpu_to_le16(UAC_OUTPUT_TERMINAL_SPEAKER),
|
||||
.bAssocTerminal = 0,
|
||||
/* .bSourceID = DYNAMIC */
|
||||
/* .bCSourceID = DYNAMIC */
|
||||
|
@ -637,14 +637,17 @@ static int rndis_set_response(struct rndis_params *params,
|
||||
rndis_set_cmplt_type *resp;
|
||||
rndis_resp_t *r;
|
||||
|
||||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
||||
if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
|
||||
(BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
|
||||
return -EINVAL;
|
||||
|
||||
r = rndis_add_response(params, sizeof(rndis_set_cmplt_type));
|
||||
if (!r)
|
||||
return -ENOMEM;
|
||||
resp = (rndis_set_cmplt_type *)r->buf;
|
||||
|
||||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
||||
|
||||
#ifdef VERBOSE_DEBUG
|
||||
pr_debug("%s: Length: %d\n", __func__, BufLength);
|
||||
pr_debug("%s: Offset: %d\n", __func__, BufOffset);
|
||||
|
@ -1003,7 +1003,7 @@ static int raw_process_ep_io(struct raw_dev *dev, struct usb_raw_ep_io *io,
|
||||
ret = -EBUSY;
|
||||
goto out_unlock;
|
||||
}
|
||||
if ((in && !ep->ep->caps.dir_in) || (!in && ep->ep->caps.dir_in)) {
|
||||
if (in != usb_endpoint_dir_in(ep->ep->desc)) {
|
||||
dev_dbg(&dev->gadget->dev, "fail, wrong direction\n");
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
|
@ -2378,6 +2378,8 @@ static void handle_ext_role_switch_states(struct device *dev,
|
||||
switch (role) {
|
||||
case USB_ROLE_NONE:
|
||||
usb3->connection_state = USB_ROLE_NONE;
|
||||
if (cur_role == USB_ROLE_HOST)
|
||||
device_release_driver(host);
|
||||
if (usb3->driver)
|
||||
usb3_disconnect(usb3);
|
||||
usb3_vbus_out(usb3, false);
|
||||
|
@ -85,6 +85,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x1a86, 0x5523) },
|
||||
{ USB_DEVICE(0x1a86, 0x7522) },
|
||||
{ USB_DEVICE(0x1a86, 0x7523) },
|
||||
{ USB_DEVICE(0x2184, 0x0057) },
|
||||
{ USB_DEVICE(0x4348, 0x5523) },
|
||||
{ USB_DEVICE(0x9986, 0x7523) },
|
||||
{ },
|
||||
|
@ -55,6 +55,7 @@ static void cp210x_enable_event_mode(struct usb_serial_port *port);
|
||||
static void cp210x_disable_event_mode(struct usb_serial_port *port);
|
||||
|
||||
static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x0404, 0x034C) }, /* NCR Retail IO Box */
|
||||
{ USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
|
||||
{ USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */
|
||||
{ USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
|
||||
@ -72,6 +73,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */
|
||||
{ USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */
|
||||
{ USB_DEVICE(0x0FDE, 0xCA05) }, /* OWL Wireless Electricity Monitor CM-160 */
|
||||
{ USB_DEVICE(0x106F, 0x0003) }, /* CPI / Money Controls Bulk Coin Recycler */
|
||||
{ USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
|
||||
{ USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
|
||||
{ USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
|
||||
|
@ -969,6 +969,7 @@ static const struct usb_device_id id_table_combined[] = {
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_159_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) },
|
||||
@ -977,12 +978,14 @@ static const struct usb_device_id id_table_combined[] = {
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_235_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_320_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) },
|
||||
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) },
|
||||
|
@ -1506,6 +1506,9 @@
|
||||
#define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */
|
||||
#define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */
|
||||
#define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */
|
||||
#define BRAINBOXES_US_159_PID 0x1021 /* US-159 1xRS232 */
|
||||
#define BRAINBOXES_US_235_PID 0x1017 /* US-235 1xRS232 */
|
||||
#define BRAINBOXES_US_320_PID 0x1019 /* US-320 1xRS422/485 */
|
||||
#define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */
|
||||
#define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */
|
||||
#define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */
|
||||
|
@ -1649,6 +1649,8 @@ static const struct usb_device_id option_ids[] = {
|
||||
.driver_info = RSVD(2) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff), /* ZTE MF286D */
|
||||
.driver_info = RSVD(5) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },
|
||||
|
@ -170,7 +170,7 @@ struct cb_devicenotifyitem {
|
||||
};
|
||||
|
||||
struct cb_devicenotifyargs {
|
||||
int ndevs;
|
||||
uint32_t ndevs;
|
||||
struct cb_devicenotifyitem *devs;
|
||||
};
|
||||
|
||||
|
@ -353,7 +353,7 @@ __be32 nfs4_callback_devicenotify(void *argp, void *resp,
|
||||
struct cb_process_state *cps)
|
||||
{
|
||||
struct cb_devicenotifyargs *args = argp;
|
||||
int i;
|
||||
uint32_t i;
|
||||
__be32 res = 0;
|
||||
struct nfs_client *clp = cps->clp;
|
||||
struct nfs_server *server = NULL;
|
||||
|
@ -259,11 +259,9 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
|
||||
void *argp)
|
||||
{
|
||||
struct cb_devicenotifyargs *args = argp;
|
||||
uint32_t tmp, n, i;
|
||||
__be32 *p;
|
||||
__be32 status = 0;
|
||||
u32 tmp;
|
||||
int n, i;
|
||||
args->ndevs = 0;
|
||||
|
||||
/* Num of device notifications */
|
||||
p = xdr_inline_decode(xdr, sizeof(uint32_t));
|
||||
@ -272,7 +270,7 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
|
||||
goto out;
|
||||
}
|
||||
n = ntohl(*p++);
|
||||
if (n <= 0)
|
||||
if (n == 0)
|
||||
goto out;
|
||||
if (n > ULONG_MAX / sizeof(*args->devs)) {
|
||||
status = htonl(NFS4ERR_BADXDR);
|
||||
@ -331,19 +329,21 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
|
||||
dev->cbd_immediate = 0;
|
||||
}
|
||||
|
||||
args->ndevs++;
|
||||
|
||||
dprintk("%s: type %d layout 0x%x immediate %d\n",
|
||||
__func__, dev->cbd_notify_type, dev->cbd_layout_type,
|
||||
dev->cbd_immediate);
|
||||
}
|
||||
args->ndevs = n;
|
||||
dprintk("%s: ndevs %d\n", __func__, args->ndevs);
|
||||
return 0;
|
||||
err:
|
||||
kfree(args->devs);
|
||||
out:
|
||||
args->devs = NULL;
|
||||
args->ndevs = 0;
|
||||
dprintk("%s: status %d ndevs %d\n",
|
||||
__func__, ntohl(status), args->ndevs);
|
||||
return status;
|
||||
err:
|
||||
kfree(args->devs);
|
||||
goto out;
|
||||
}
|
||||
|
||||
static __be32 decode_sessionid(struct xdr_stream *xdr,
|
||||
|
@ -177,6 +177,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)
|
||||
INIT_LIST_HEAD(&clp->cl_superblocks);
|
||||
clp->cl_rpcclient = ERR_PTR(-EINVAL);
|
||||
|
||||
clp->cl_flags = cl_init->init_flags;
|
||||
clp->cl_proto = cl_init->proto;
|
||||
clp->cl_nconnect = cl_init->nconnect;
|
||||
clp->cl_net = get_net(cl_init->net);
|
||||
@ -426,7 +427,6 @@ struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_init)
|
||||
list_add_tail(&new->cl_share_link,
|
||||
&nn->nfs_client_list);
|
||||
spin_unlock(&nn->nfs_client_lock);
|
||||
new->cl_flags = cl_init->init_flags;
|
||||
return rpc_ops->init_client(new, cl_init);
|
||||
}
|
||||
|
||||
|
20
fs/nfs/dir.c
20
fs/nfs/dir.c
@ -2489,7 +2489,7 @@ static struct nfs_access_entry *nfs_access_search_rbtree(struct inode *inode, co
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res, bool may_block)
|
||||
static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *cred, u32 *mask, bool may_block)
|
||||
{
|
||||
struct nfs_inode *nfsi = NFS_I(inode);
|
||||
struct nfs_access_entry *cache;
|
||||
@ -2519,8 +2519,7 @@ static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *
|
||||
spin_lock(&inode->i_lock);
|
||||
retry = false;
|
||||
}
|
||||
res->cred = cache->cred;
|
||||
res->mask = cache->mask;
|
||||
*mask = cache->mask;
|
||||
list_move_tail(&cache->lru, &nfsi->access_cache_entry_lru);
|
||||
err = 0;
|
||||
out:
|
||||
@ -2532,7 +2531,7 @@ static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static int nfs_access_get_cached_rcu(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res)
|
||||
static int nfs_access_get_cached_rcu(struct inode *inode, const struct cred *cred, u32 *mask)
|
||||
{
|
||||
/* Only check the most recently returned cache entry,
|
||||
* but do it without locking.
|
||||
@ -2554,22 +2553,21 @@ static int nfs_access_get_cached_rcu(struct inode *inode, const struct cred *cre
|
||||
goto out;
|
||||
if (nfs_check_cache_invalid(inode, NFS_INO_INVALID_ACCESS))
|
||||
goto out;
|
||||
res->cred = cache->cred;
|
||||
res->mask = cache->mask;
|
||||
*mask = cache->mask;
|
||||
err = 0;
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
return err;
|
||||
}
|
||||
|
||||
int nfs_access_get_cached(struct inode *inode, const struct cred *cred, struct
|
||||
nfs_access_entry *res, bool may_block)
|
||||
int nfs_access_get_cached(struct inode *inode, const struct cred *cred,
|
||||
u32 *mask, bool may_block)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = nfs_access_get_cached_rcu(inode, cred, res);
|
||||
status = nfs_access_get_cached_rcu(inode, cred, mask);
|
||||
if (status != 0)
|
||||
status = nfs_access_get_cached_locked(inode, cred, res,
|
||||
status = nfs_access_get_cached_locked(inode, cred, mask,
|
||||
may_block);
|
||||
|
||||
return status;
|
||||
@ -2690,7 +2688,7 @@ static int nfs_do_access(struct inode *inode, const struct cred *cred, int mask)
|
||||
|
||||
trace_nfs_access_enter(inode);
|
||||
|
||||
status = nfs_access_get_cached(inode, cred, &cache, may_block);
|
||||
status = nfs_access_get_cached(inode, cred, &cache.mask, may_block);
|
||||
if (status == 0)
|
||||
goto out_cached;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user