Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'ib/5.17-cros-ec-keyb' into next

Merge changes to ChromeOS EC Keyboard driver.

+405 -328
+30 -6
Documentation/devicetree/bindings/input/google,cros-ec-keyb.yaml
··· 15 15 Google's ChromeOS EC Keyboard is a simple matrix keyboard 16 16 implemented on a separate EC (Embedded Controller) device. It provides 17 17 a message for reading key scans from the EC. These are then converted 18 - into keycodes for processing by the kernel. 19 - 20 - allOf: 21 - - $ref: "/schemas/input/matrix-keymap.yaml#" 18 + into keycodes for processing by the kernel. This device also supports 19 + switches/buttons like power and volume buttons. 22 20 23 21 properties: 24 22 compatible: 25 - const: google,cros-ec-keyb 23 + oneOf: 24 + - description: ChromeOS EC with only buttons/switches 25 + const: google,cros-ec-keyb-switches 26 + - description: ChromeOS EC with keyboard and possibly buttons/switches 27 + const: google,cros-ec-keyb 26 28 27 29 google,needs-ghost-filter: 28 30 description: ··· 43 41 where the lower 16 bits are reserved. This property is specified only 44 42 when the keyboard has a custom design for the top row keys. 45 43 44 + dependencies: 45 + function-row-phsymap: [ 'linux,keymap' ] 46 + google,needs-ghost-filter: [ 'linux,keymap' ] 47 + 46 48 required: 47 49 - compatible 50 + 51 + if: 52 + properties: 53 + compatible: 54 + contains: 55 + const: google,cros-ec-keyb 56 + then: 57 + $ref: "/schemas/input/matrix-keymap.yaml#" 58 + required: 59 + - keypad,num-rows 60 + - keypad,num-columns 61 + - linux,keymap 48 62 49 63 unevaluatedProperties: false 50 64 51 65 examples: 52 66 - | 53 67 #include <dt-bindings/input/input.h> 54 - cros-ec-keyb { 68 + keyboard-controller { 55 69 compatible = "google,cros-ec-keyb"; 56 70 keypad,num-rows = <8>; 57 71 keypad,num-columns = <13>; ··· 131 113 /* UP LEFT */ 132 114 0x070b0067 0x070c0069>; 133 115 }; 116 + - | 117 + /* No matrix keyboard, just buttons/switches */ 118 + keyboard-controller { 119 + compatible = "google,cros-ec-keyb-switches"; 120 + }; 121 + ...
+2
MAINTAINERS
··· 13382 13382 NETWORKING DRIVERS 13383 13383 M: "David S. Miller" <davem@davemloft.net> 13384 13384 M: Jakub Kicinski <kuba@kernel.org> 13385 + M: Paolo Abeni <pabeni@redhat.com> 13385 13386 L: netdev@vger.kernel.org 13386 13387 S: Maintained 13387 13388 Q: https://patchwork.kernel.org/project/netdevbpf/list/ ··· 13429 13428 NETWORKING [GENERAL] 13430 13429 M: "David S. Miller" <davem@davemloft.net> 13431 13430 M: Jakub Kicinski <kuba@kernel.org> 13431 + M: Paolo Abeni <pabeni@redhat.com> 13432 13432 L: netdev@vger.kernel.org 13433 13433 S: Maintained 13434 13434 Q: https://patchwork.kernel.org/project/netdevbpf/list/
+1 -1
Makefile
··· 2 2 VERSION = 5 3 3 PATCHLEVEL = 17 4 4 SUBLEVEL = 0 5 - EXTRAVERSION = -rc8 5 + EXTRAVERSION = 6 6 NAME = Superb Owl 7 7 8 8 # *DOCUMENTATION*
+12 -12
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi
··· 253 253 interrupt-controller; 254 254 reg = <0x14 4>; 255 255 interrupt-map = 256 - <0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 257 - <1 0 &gic 0 0 GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 258 - <2 0 &gic 0 0 GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 259 - <3 0 &gic 0 0 GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 260 - <4 0 &gic 0 0 GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 261 - <5 0 &gic 0 0 GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 262 - <6 0 &gic 0 0 GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 263 - <7 0 &gic 0 0 GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 264 - <8 0 &gic 0 0 GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 265 - <9 0 &gic 0 0 GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 266 - <10 0 &gic 0 0 GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 267 - <11 0 &gic 0 0 GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 256 + <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 257 + <1 0 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 258 + <2 0 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 259 + <3 0 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 260 + <4 0 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 261 + <5 0 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 262 + <6 0 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 263 + <7 0 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 264 + <8 0 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 265 + <9 0 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 266 + <10 0 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 267 + <11 0 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 268 268 interrupt-map-mask = <0xffffffff 0x0>; 269 269 }; 270 270 };
+12 -12
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
··· 293 293 interrupt-controller; 294 294 reg = <0x14 4>; 295 295 interrupt-map = 296 - <0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 297 - <1 0 &gic 0 0 GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 298 - <2 0 &gic 0 0 GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 299 - <3 0 &gic 0 0 GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 300 - <4 0 &gic 0 0 GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 301 - <5 0 &gic 0 0 GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 302 - <6 0 &gic 0 0 GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 303 - <7 0 &gic 0 0 GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 304 - <8 0 &gic 0 0 GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 305 - <9 0 &gic 0 0 GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 306 - <10 0 &gic 0 0 GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 307 - <11 0 &gic 0 0 GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 296 + <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 297 + <1 0 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 298 + <2 0 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 299 + <3 0 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 300 + <4 0 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 301 + <5 0 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 302 + <6 0 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 303 + <7 0 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 304 + <8 0 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 305 + <9 0 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 306 + <10 0 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 307 + <11 0 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 308 308 interrupt-map-mask = <0xffffffff 0x0>; 309 309 }; 310 310 };
+12 -12
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
··· 680 680 interrupt-controller; 681 681 reg = <0x14 4>; 682 682 interrupt-map = 683 - <0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 684 - <1 0 &gic 0 0 GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 685 - <2 0 &gic 0 0 GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 686 - <3 0 &gic 0 0 GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 687 - <4 0 &gic 0 0 GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 688 - <5 0 &gic 0 0 GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 689 - <6 0 &gic 0 0 GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 690 - <7 0 &gic 0 0 GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 691 - <8 0 &gic 0 0 GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 692 - <9 0 &gic 0 0 GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 693 - <10 0 &gic 0 0 GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 694 - <11 0 &gic 0 0 GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 683 + <0 0 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 684 + <1 0 &gic GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 685 + <2 0 &gic GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 686 + <3 0 &gic GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 687 + <4 0 &gic GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 688 + <5 0 &gic GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 689 + <6 0 &gic GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 690 + <7 0 &gic GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 691 + <8 0 &gic GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 692 + <9 0 &gic GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 693 + <10 0 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 694 + <11 0 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 695 695 interrupt-map-mask = <0xffffffff 0x0>; 696 696 }; 697 697 };
+2 -2
arch/arm64/include/asm/vectors.h
··· 56 56 DECLARE_PER_CPU_READ_MOSTLY(const char *, this_cpu_vector); 57 57 58 58 #ifndef CONFIG_UNMAP_KERNEL_AT_EL0 59 - #define TRAMP_VALIAS 0 59 + #define TRAMP_VALIAS 0ul 60 60 #endif 61 61 62 62 static inline const char * 63 63 arm64_get_bp_hardening_vector(enum arm64_bp_harden_el1_vectors slot) 64 64 { 65 65 if (arm64_kernel_unmapped_at_el0()) 66 - return (char *)TRAMP_VALIAS + SZ_2K * slot; 66 + return (char *)(TRAMP_VALIAS + SZ_2K * slot); 67 67 68 68 WARN_ON_ONCE(slot == EL1_VECTOR_KPTI); 69 69
-1
arch/arm64/kernel/cpu_errata.c
··· 611 611 { 612 612 .desc = "ARM erratum 2077057", 613 613 .capability = ARM64_WORKAROUND_2077057, 614 - .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, 615 614 ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A510, 0, 0, 2), 616 615 }, 617 616 #endif
+17 -2
arch/x86/kvm/emulate.c
··· 429 429 FOP_END 430 430 431 431 /* Special case for SETcc - 1 instruction per cc */ 432 + 433 + /* 434 + * Depending on .config the SETcc functions look like: 435 + * 436 + * SETcc %al [3 bytes] 437 + * RET [1 byte] 438 + * INT3 [1 byte; CONFIG_SLS] 439 + * 440 + * Which gives possible sizes 4 or 5. When rounded up to the 441 + * next power-of-two alignment they become 4 or 8. 442 + */ 443 + #define SETCC_LENGTH (4 + IS_ENABLED(CONFIG_SLS)) 444 + #define SETCC_ALIGN (4 << IS_ENABLED(CONFIG_SLS)) 445 + static_assert(SETCC_LENGTH <= SETCC_ALIGN); 446 + 432 447 #define FOP_SETCC(op) \ 433 - ".align 4 \n\t" \ 448 + ".align " __stringify(SETCC_ALIGN) " \n\t" \ 434 449 ".type " #op ", @function \n\t" \ 435 450 #op ": \n\t" \ 436 451 #op " %al \n\t" \ ··· 1062 1047 static __always_inline u8 test_cc(unsigned int condition, unsigned long flags) 1063 1048 { 1064 1049 u8 rc; 1065 - void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf); 1050 + void (*fop)(void) = (void *)em_setcc + SETCC_ALIGN * (condition & 0xf); 1066 1051 1067 1052 flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF; 1068 1053 asm("push %[flags]; popf; " CALL_NOSPEC
+4
block/blk-core.c
··· 50 50 #include "blk-mq-sched.h" 51 51 #include "blk-pm.h" 52 52 #include "blk-throttle.h" 53 + #include "blk-rq-qos.h" 53 54 54 55 struct dentry *blk_debugfs_root; 55 56 ··· 314 313 * after draining finished. 315 314 */ 316 315 blk_freeze_queue(q); 316 + 317 + /* cleanup rq qos structures for queue without disk */ 318 + rq_qos_exit(q); 317 319 318 320 blk_queue_flag_set(QUEUE_FLAG_DEAD, q); 319 321
+5 -5
drivers/acpi/scan.c
··· 1377 1377 if (info->valid & ACPI_VALID_HID) { 1378 1378 acpi_add_id(pnp, info->hardware_id.string); 1379 1379 pnp->type.platform_id = 1; 1380 - if (info->valid & ACPI_VALID_CID) { 1381 - cid_list = &info->compatible_id_list; 1382 - for (i = 0; i < cid_list->count; i++) 1383 - acpi_add_id(pnp, cid_list->ids[i].string); 1384 - } 1380 + } 1381 + if (info->valid & ACPI_VALID_CID) { 1382 + cid_list = &info->compatible_id_list; 1383 + for (i = 0; i < cid_list->count; i++) 1384 + acpi_add_id(pnp, cid_list->ids[i].string); 1385 1385 } 1386 1386 if (info->valid & ACPI_VALID_ADR) { 1387 1387 pnp->bus_address = info->address;
+2
drivers/atm/eni.c
··· 1112 1112 skb_data3 = skb->data[3]; 1113 1113 paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len, 1114 1114 DMA_TO_DEVICE); 1115 + if (dma_mapping_error(&eni_dev->pci_dev->dev, paddr)) 1116 + return enq_next; 1115 1117 ENI_PRV_PADDR(skb) = paddr; 1116 1118 /* prepare DMA queue entries */ 1117 1119 j = 0;
+11 -6
drivers/counter/counter-sysfs.c
··· 19 19 20 20 #include "counter-sysfs.h" 21 21 22 + static inline struct counter_device *counter_from_dev(struct device *dev) 23 + { 24 + return container_of(dev, struct counter_device, dev); 25 + } 26 + 22 27 /** 23 28 * struct counter_attribute - Counter sysfs attribute 24 29 * @dev_attr: device attribute for sysfs ··· 95 90 struct device_attribute *attr, char *buf) 96 91 { 97 92 const struct counter_attribute *const a = to_counter_attribute(attr); 98 - struct counter_device *const counter = dev_get_drvdata(dev); 93 + struct counter_device *const counter = counter_from_dev(dev); 99 94 int err; 100 95 u8 data = 0; 101 96 ··· 127 122 const char *buf, size_t len) 128 123 { 129 124 const struct counter_attribute *const a = to_counter_attribute(attr); 130 - struct counter_device *const counter = dev_get_drvdata(dev); 125 + struct counter_device *const counter = counter_from_dev(dev); 131 126 int err; 132 127 bool bool_data = 0; 133 128 u8 data = 0; ··· 163 158 struct device_attribute *attr, char *buf) 164 159 { 165 160 const struct counter_attribute *const a = to_counter_attribute(attr); 166 - struct counter_device *const counter = dev_get_drvdata(dev); 161 + struct counter_device *const counter = counter_from_dev(dev); 167 162 const struct counter_available *const avail = a->comp.priv; 168 163 int err; 169 164 u32 data = 0; ··· 226 221 const char *buf, size_t len) 227 222 { 228 223 const struct counter_attribute *const a = to_counter_attribute(attr); 229 - struct counter_device *const counter = dev_get_drvdata(dev); 224 + struct counter_device *const counter = counter_from_dev(dev); 230 225 struct counter_count *const count = a->parent; 231 226 struct counter_synapse *const synapse = a->comp.priv; 232 227 const struct counter_available *const avail = a->comp.priv; ··· 286 281 struct device_attribute *attr, char *buf) 287 282 { 288 283 const struct counter_attribute *const a = to_counter_attribute(attr); 289 - struct counter_device *const counter = dev_get_drvdata(dev); 284 + struct counter_device *const counter = counter_from_dev(dev); 290 285 int err; 291 286 u64 data = 0; 292 287 ··· 314 309 const char *buf, size_t len) 315 310 { 316 311 const struct counter_attribute *const a = to_counter_attribute(attr); 317 - struct counter_device *const counter = dev_get_drvdata(dev); 312 + struct counter_device *const counter = counter_from_dev(dev); 318 313 int err; 319 314 u64 data = 0; 320 315
+10 -7
drivers/crypto/qcom-rng.c
··· 8 8 #include <linux/clk.h> 9 9 #include <linux/crypto.h> 10 10 #include <linux/io.h> 11 + #include <linux/iopoll.h> 11 12 #include <linux/module.h> 12 13 #include <linux/of.h> 13 14 #include <linux/platform_device.h> ··· 44 43 { 45 44 unsigned int currsize = 0; 46 45 u32 val; 46 + int ret; 47 47 48 48 /* read random data from hardware */ 49 49 do { 50 - val = readl_relaxed(rng->base + PRNG_STATUS); 51 - if (!(val & PRNG_STATUS_DATA_AVAIL)) 52 - break; 50 + ret = readl_poll_timeout(rng->base + PRNG_STATUS, val, 51 + val & PRNG_STATUS_DATA_AVAIL, 52 + 200, 10000); 53 + if (ret) 54 + return ret; 53 55 54 56 val = readl_relaxed(rng->base + PRNG_DATA_OUT); 55 57 if (!val) 56 - break; 58 + return -EINVAL; 57 59 58 60 if ((max - currsize) >= WORD_SZ) { 59 61 memcpy(data, &val, WORD_SZ); ··· 65 61 } else { 66 62 /* copy only remaining bytes */ 67 63 memcpy(data, &val, max - currsize); 68 - break; 69 64 } 70 65 } while (currsize < max); 71 66 72 - return currsize; 67 + return 0; 73 68 } 74 69 75 70 static int qcom_rng_generate(struct crypto_rng *tfm, ··· 90 87 mutex_unlock(&rng->lock); 91 88 clk_disable_unprepare(rng->clk); 92 89 93 - return 0; 90 + return ret; 94 91 } 95 92 96 93 static int qcom_rng_seed(struct crypto_rng *tfm, const u8 *seed,
+1 -1
drivers/firmware/efi/apple-properties.c
··· 24 24 static int __init dump_properties_enable(char *arg) 25 25 { 26 26 dump_properties = true; 27 - return 0; 27 + return 1; 28 28 } 29 29 30 30 __setup("dump_apple_properties", dump_properties_enable);
+1 -1
drivers/firmware/efi/efi.c
··· 212 212 memcpy(efivar_ssdt, str, strlen(str)); 213 213 else 214 214 pr_warn("efivar_ssdt: name too long: %s\n", str); 215 - return 0; 215 + return 1; 216 216 } 217 217 __setup("efivar_ssdt=", efivar_ssdt_setup); 218 218
+10
drivers/gpio/gpiolib.c
··· 1701 1701 */ 1702 1702 int gpiochip_generic_request(struct gpio_chip *gc, unsigned int offset) 1703 1703 { 1704 + #ifdef CONFIG_PINCTRL 1705 + if (list_empty(&gc->gpiodev->pin_ranges)) 1706 + return 0; 1707 + #endif 1708 + 1704 1709 return pinctrl_gpio_request(gc->gpiodev->base + offset); 1705 1710 } 1706 1711 EXPORT_SYMBOL_GPL(gpiochip_generic_request); ··· 1717 1712 */ 1718 1713 void gpiochip_generic_free(struct gpio_chip *gc, unsigned int offset) 1719 1714 { 1715 + #ifdef CONFIG_PINCTRL 1716 + if (list_empty(&gc->gpiodev->pin_ranges)) 1717 + return; 1718 + #endif 1719 + 1720 1720 pinctrl_gpio_free(gc->gpiodev->base + offset); 1721 1721 } 1722 1722 EXPORT_SYMBOL_GPL(gpiochip_generic_free);
+1 -1
drivers/gpu/drm/bridge/Kconfig
··· 8 8 config DRM_PANEL_BRIDGE 9 9 def_bool y 10 10 depends on DRM_BRIDGE 11 - depends on DRM_KMS_HELPER 12 11 select DRM_PANEL 13 12 help 14 13 DRM bridge wrapper of DRM panels ··· 29 30 config DRM_CHIPONE_ICN6211 30 31 tristate "Chipone ICN6211 MIPI-DSI/RGB Converter bridge" 31 32 depends on OF 33 + select DRM_KMS_HELPER 32 34 select DRM_MIPI_DSI 33 35 select DRM_PANEL_BRIDGE 34 36 help
-8
drivers/gpu/drm/imx/parallel-display.c
··· 217 217 if (!imx_pd_format_supported(bus_fmt)) 218 218 return -EINVAL; 219 219 220 - if (bus_flags & 221 - ~(DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_DE_HIGH | 222 - DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE | 223 - DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)) { 224 - dev_warn(imxpd->dev, "invalid bus_flags (%x)\n", bus_flags); 225 - return -EINVAL; 226 - } 227 - 228 220 bridge_state->output_bus_cfg.flags = bus_flags; 229 221 bridge_state->input_bus_cfg.flags = bus_flags; 230 222 imx_crtc_state->bus_flags = bus_flags;
+3 -3
drivers/gpu/drm/mgag200/mgag200_pll.c
··· 404 404 udelay(50); 405 405 406 406 /* program pixel pll register */ 407 - WREG_DAC(MGA1064_PIX_PLLC_N, xpixpllcn); 408 - WREG_DAC(MGA1064_PIX_PLLC_M, xpixpllcm); 409 - WREG_DAC(MGA1064_PIX_PLLC_P, xpixpllcp); 407 + WREG_DAC(MGA1064_WB_PIX_PLLC_N, xpixpllcn); 408 + WREG_DAC(MGA1064_WB_PIX_PLLC_M, xpixpllcm); 409 + WREG_DAC(MGA1064_WB_PIX_PLLC_P, xpixpllcp); 410 410 411 411 udelay(50); 412 412
+1
drivers/gpu/drm/panel/Kconfig
··· 107 107 select VIDEOMODE_HELPERS 108 108 select DRM_DP_AUX_BUS 109 109 select DRM_DP_HELPER 110 + select DRM_KMS_HELPER 110 111 help 111 112 DRM panel driver for dumb eDP panels that need at most a regulator and 112 113 a GPIO to be powered up. Optionally a backlight can be attached so
+1 -1
drivers/gpu/drm/panel/panel-simple.c
··· 2017 2017 static const struct panel_desc innolux_g070y2_l01 = { 2018 2018 .timings = &innolux_g070y2_l01_timing, 2019 2019 .num_timings = 1, 2020 - .bpc = 6, 2020 + .bpc = 8, 2021 2021 .size = { 2022 2022 .width = 152, 2023 2023 .height = 91,
+18 -11
drivers/input/keyboard/cros_ec_keyb.c
··· 435 435 * but the ckdev->bs_idev will remain NULL when this function exits. 436 436 * 437 437 * @ckdev: The keyboard device 438 + * @expect_buttons_switches: Indicates that EC must report button and/or 439 + * switch events 438 440 * 439 441 * Returns 0 if no error or -error upon error. 440 442 */ 441 - static int cros_ec_keyb_register_bs(struct cros_ec_keyb *ckdev) 443 + static int cros_ec_keyb_register_bs(struct cros_ec_keyb *ckdev, 444 + bool expect_buttons_switches) 442 445 { 443 446 struct cros_ec_device *ec_dev = ckdev->ec; 444 447 struct device *dev = ckdev->dev; ··· 468 465 switches = get_unaligned_le32(&event_data.switches); 469 466 470 467 if (!buttons && !switches) 471 - return 0; 468 + return expect_buttons_switches ? -EINVAL : 0; 472 469 473 470 /* 474 471 * We call the non-matrix buttons/switches 'input1', if present. ··· 519 516 } 520 517 521 518 /** 522 - * cros_ec_keyb_register_bs - Register matrix keys 519 + * cros_ec_keyb_register_matrix - Register matrix keys 523 520 * 524 521 * Handles all the bits of the keyboard driver related to matrix keys. 525 522 * ··· 651 648 .attrs = cros_ec_keyb_attrs, 652 649 }; 653 650 654 - 655 651 static int cros_ec_keyb_probe(struct platform_device *pdev) 656 652 { 657 653 struct cros_ec_device *ec = dev_get_drvdata(pdev->dev.parent); 658 654 struct device *dev = &pdev->dev; 659 655 struct cros_ec_keyb *ckdev; 656 + bool buttons_switches_only = device_get_match_data(dev); 660 657 int err; 661 658 662 659 if (!dev->of_node) ··· 670 667 ckdev->dev = dev; 671 668 dev_set_drvdata(dev, ckdev); 672 669 673 - err = cros_ec_keyb_register_matrix(ckdev); 674 - if (err) { 675 - dev_err(dev, "cannot register matrix inputs: %d\n", err); 676 - return err; 670 + if (!buttons_switches_only) { 671 + err = cros_ec_keyb_register_matrix(ckdev); 672 + if (err) { 673 + dev_err(dev, "cannot register matrix inputs: %d\n", 674 + err); 675 + return err; 676 + } 677 677 } 678 678 679 - err = cros_ec_keyb_register_bs(ckdev); 679 + err = cros_ec_keyb_register_bs(ckdev, buttons_switches_only); 680 680 if (err) { 681 681 dev_err(dev, "cannot register non-matrix inputs: %d\n", err); 682 682 return err; ··· 687 681 688 682 err = devm_device_add_group(dev, &cros_ec_keyb_attr_group); 689 683 if (err) { 690 - dev_err(dev, "failed to create attributes. err=%d\n", err); 684 + dev_err(dev, "failed to create attributes: %d\n", err); 691 685 return err; 692 686 } 693 687 ··· 716 710 #ifdef CONFIG_OF 717 711 static const struct of_device_id cros_ec_keyb_of_match[] = { 718 712 { .compatible = "google,cros-ec-keyb" }, 719 - {}, 713 + { .compatible = "google,cros-ec-keyb-switches", .data = (void *)true }, 714 + {} 720 715 }; 721 716 MODULE_DEVICE_TABLE(of, cros_ec_keyb_of_match); 722 717 #endif
+4 -6
drivers/input/tablet/aiptek.c
··· 1786 1786 input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0); 1787 1787 input_set_abs_params(inputdev, ABS_WHEEL, AIPTEK_WHEEL_MIN, AIPTEK_WHEEL_MAX - 1, 0, 0); 1788 1788 1789 - /* Verify that a device really has an endpoint */ 1790 - if (intf->cur_altsetting->desc.bNumEndpoints < 1) { 1789 + err = usb_find_common_endpoints(intf->cur_altsetting, 1790 + NULL, NULL, &endpoint, NULL); 1791 + if (err) { 1791 1792 dev_err(&intf->dev, 1792 - "interface has %d endpoints, but must have minimum 1\n", 1793 - intf->cur_altsetting->desc.bNumEndpoints); 1794 - err = -EINVAL; 1793 + "interface has no int in endpoints, but must have minimum 1\n"); 1795 1794 goto fail3; 1796 1795 } 1797 - endpoint = &intf->cur_altsetting->endpoint[0].desc; 1798 1796 1799 1797 /* Go set up our URB, which is called when the tablet receives 1800 1798 * input.
+35 -9
drivers/input/touchscreen/zinitix.c
··· 135 135 136 136 struct touch_event { 137 137 __le16 status; 138 - u8 finger_cnt; 138 + u8 finger_mask; 139 139 u8 time_stamp; 140 140 struct point_coord point_coord[MAX_SUPPORTED_FINGER_NUM]; 141 141 }; ··· 322 322 static void zinitix_report_finger(struct bt541_ts_data *bt541, int slot, 323 323 const struct point_coord *p) 324 324 { 325 + u16 x, y; 326 + 327 + if (unlikely(!(p->sub_status & 328 + (SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE)))) { 329 + dev_dbg(&bt541->client->dev, "unknown finger event %#02x\n", 330 + p->sub_status); 331 + return; 332 + } 333 + 334 + x = le16_to_cpu(p->x); 335 + y = le16_to_cpu(p->y); 336 + 325 337 input_mt_slot(bt541->input_dev, slot); 326 - input_mt_report_slot_state(bt541->input_dev, MT_TOOL_FINGER, true); 327 - touchscreen_report_pos(bt541->input_dev, &bt541->prop, 328 - le16_to_cpu(p->x), le16_to_cpu(p->y), true); 329 - input_report_abs(bt541->input_dev, ABS_MT_TOUCH_MAJOR, p->width); 338 + if (input_mt_report_slot_state(bt541->input_dev, MT_TOOL_FINGER, 339 + !(p->sub_status & SUB_BIT_UP))) { 340 + touchscreen_report_pos(bt541->input_dev, 341 + &bt541->prop, x, y, true); 342 + input_report_abs(bt541->input_dev, 343 + ABS_MT_TOUCH_MAJOR, p->width); 344 + dev_dbg(&bt541->client->dev, "finger %d %s (%u, %u)\n", 345 + slot, p->sub_status & SUB_BIT_DOWN ? "down" : "move", 346 + x, y); 347 + } else { 348 + dev_dbg(&bt541->client->dev, "finger %d up (%u, %u)\n", 349 + slot, x, y); 350 + } 330 351 } 331 352 332 353 static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler) ··· 355 334 struct bt541_ts_data *bt541 = bt541_handler; 356 335 struct i2c_client *client = bt541->client; 357 336 struct touch_event touch_event; 337 + unsigned long finger_mask; 358 338 int error; 359 339 int i; 360 340 ··· 368 346 goto out; 369 347 } 370 348 371 - for (i = 0; i < MAX_SUPPORTED_FINGER_NUM; i++) 372 - if (touch_event.point_coord[i].sub_status & SUB_BIT_EXIST) 373 - zinitix_report_finger(bt541, i, 374 - &touch_event.point_coord[i]); 349 + finger_mask = touch_event.finger_mask; 350 + for_each_set_bit(i, &finger_mask, MAX_SUPPORTED_FINGER_NUM) { 351 + const struct point_coord *p = &touch_event.point_coord[i]; 352 + 353 + /* Only process contacts that are actually reported */ 354 + if (p->sub_status & SUB_BIT_EXIST) 355 + zinitix_report_finger(bt541, i, p); 356 + } 375 357 376 358 input_mt_sync_frame(bt541->input_dev); 377 359 input_sync(bt541->input_dev);
+11
drivers/net/dsa/microchip/ksz8795_spi.c
··· 124 124 }; 125 125 MODULE_DEVICE_TABLE(of, ksz8795_dt_ids); 126 126 127 + static const struct spi_device_id ksz8795_spi_ids[] = { 128 + { "ksz8765" }, 129 + { "ksz8794" }, 130 + { "ksz8795" }, 131 + { "ksz8863" }, 132 + { "ksz8873" }, 133 + { }, 134 + }; 135 + MODULE_DEVICE_TABLE(spi, ksz8795_spi_ids); 136 + 127 137 static struct spi_driver ksz8795_spi_driver = { 128 138 .driver = { 129 139 .name = "ksz8795-switch", 130 140 .owner = THIS_MODULE, 131 141 .of_match_table = of_match_ptr(ksz8795_dt_ids), 132 142 }, 143 + .id_table = ksz8795_spi_ids, 133 144 .probe = ksz8795_spi_probe, 134 145 .remove = ksz8795_spi_remove, 135 146 .shutdown = ksz8795_spi_shutdown,
+12
drivers/net/dsa/microchip/ksz9477_spi.c
··· 98 98 }; 99 99 MODULE_DEVICE_TABLE(of, ksz9477_dt_ids); 100 100 101 + static const struct spi_device_id ksz9477_spi_ids[] = { 102 + { "ksz9477" }, 103 + { "ksz9897" }, 104 + { "ksz9893" }, 105 + { "ksz9563" }, 106 + { "ksz8563" }, 107 + { "ksz9567" }, 108 + { }, 109 + }; 110 + MODULE_DEVICE_TABLE(spi, ksz9477_spi_ids); 111 + 101 112 static struct spi_driver ksz9477_spi_driver = { 102 113 .driver = { 103 114 .name = "ksz9477-switch", 104 115 .owner = THIS_MODULE, 105 116 .of_match_table = of_match_ptr(ksz9477_dt_ids), 106 117 }, 118 + .id_table = ksz9477_spi_ids, 107 119 .probe = ksz9477_spi_probe, 108 120 .remove = ksz9477_spi_remove, 109 121 .shutdown = ksz9477_spi_shutdown,
+4 -1
drivers/net/ethernet/atheros/alx/main.c
··· 1181 1181 alx->hw.mtu = mtu; 1182 1182 alx->rxbuf_size = max(max_frame, ALX_DEF_RXBUF_SIZE); 1183 1183 netdev_update_features(netdev); 1184 - if (netif_running(netdev)) 1184 + if (netif_running(netdev)) { 1185 + mutex_lock(&alx->mtx); 1185 1186 alx_reinit(alx); 1187 + mutex_unlock(&alx->mtx); 1188 + } 1186 1189 return 0; 1187 1190 } 1188 1191
-2
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
··· 2533 2533 * Meant for implicit re-load flows. 2534 2534 */ 2535 2535 int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp); 2536 - int bnx2x_init_firmware(struct bnx2x *bp); 2537 - void bnx2x_release_firmware(struct bnx2x *bp); 2538 2536 #endif /* bnx2x.h */
+17 -11
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
··· 2364 2364 /* is another pf loaded on this engine? */ 2365 2365 if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP && 2366 2366 load_code != FW_MSG_CODE_DRV_LOAD_COMMON) { 2367 - /* build my FW version dword */ 2368 - u32 my_fw = (bp->fw_major) + (bp->fw_minor << 8) + 2369 - (bp->fw_rev << 16) + (bp->fw_eng << 24); 2367 + u8 loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng; 2368 + u32 loaded_fw; 2370 2369 2371 2370 /* read loaded FW from chip */ 2372 - u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM); 2371 + loaded_fw = REG_RD(bp, XSEM_REG_PRAM); 2373 2372 2374 - DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x\n", 2375 - loaded_fw, my_fw); 2373 + loaded_fw_major = loaded_fw & 0xff; 2374 + loaded_fw_minor = (loaded_fw >> 8) & 0xff; 2375 + loaded_fw_rev = (loaded_fw >> 16) & 0xff; 2376 + loaded_fw_eng = (loaded_fw >> 24) & 0xff; 2377 + 2378 + DP(BNX2X_MSG_SP, "loaded fw 0x%x major 0x%x minor 0x%x rev 0x%x eng 0x%x\n", 2379 + loaded_fw, loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng); 2376 2380 2377 2381 /* abort nic load if version mismatch */ 2378 - if (my_fw != loaded_fw) { 2382 + if (loaded_fw_major != BCM_5710_FW_MAJOR_VERSION || 2383 + loaded_fw_minor != BCM_5710_FW_MINOR_VERSION || 2384 + loaded_fw_eng != BCM_5710_FW_ENGINEERING_VERSION || 2385 + loaded_fw_rev < BCM_5710_FW_REVISION_VERSION_V15) { 2379 2386 if (print_err) 2380 - BNX2X_ERR("bnx2x with FW %x was already loaded which mismatches my %x FW. Aborting\n", 2381 - loaded_fw, my_fw); 2387 + BNX2X_ERR("loaded FW incompatible. Aborting\n"); 2382 2388 else 2383 - BNX2X_DEV_INFO("bnx2x with FW %x was already loaded which mismatches my %x FW, possibly due to MF UNDI\n", 2384 - loaded_fw, my_fw); 2389 + BNX2X_DEV_INFO("loaded FW incompatible, possibly due to MF UNDI\n"); 2390 + 2385 2391 return -EBUSY; 2386 2392 } 2387 2393 }
+2 -13
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
··· 12319 12319 12320 12320 bnx2x_read_fwinfo(bp); 12321 12321 12322 - if (IS_PF(bp)) { 12323 - rc = bnx2x_init_firmware(bp); 12324 - 12325 - if (rc) { 12326 - bnx2x_free_mem_bp(bp); 12327 - return rc; 12328 - } 12329 - } 12330 - 12331 12322 func = BP_FUNC(bp); 12332 12323 12333 12324 /* need to reset chip if undi was active */ ··· 12331 12340 12332 12341 rc = bnx2x_prev_unload(bp); 12333 12342 if (rc) { 12334 - bnx2x_release_firmware(bp); 12335 12343 bnx2x_free_mem_bp(bp); 12336 12344 return rc; 12337 12345 } ··· 13399 13409 (u8 *)bp->arr, len); \ 13400 13410 } while (0) 13401 13411 13402 - int bnx2x_init_firmware(struct bnx2x *bp) 13412 + static int bnx2x_init_firmware(struct bnx2x *bp) 13403 13413 { 13404 13414 const char *fw_file_name, *fw_file_name_v15; 13405 13415 struct bnx2x_fw_file_hdr *fw_hdr; ··· 13499 13509 return rc; 13500 13510 } 13501 13511 13502 - void bnx2x_release_firmware(struct bnx2x *bp) 13512 + static void bnx2x_release_firmware(struct bnx2x *bp) 13503 13513 { 13504 13514 kfree(bp->init_ops_offsets); 13505 13515 kfree(bp->init_ops); ··· 14016 14026 return 0; 14017 14027 14018 14028 init_one_freemem: 14019 - bnx2x_release_firmware(bp); 14020 14029 bnx2x_free_mem_bp(bp); 14021 14030 14022 14031 init_one_exit:
+4 -2
drivers/net/ethernet/broadcom/genet/bcmgenet.c
··· 2287 2287 dma_length_status = status->length_status; 2288 2288 if (dev->features & NETIF_F_RXCSUM) { 2289 2289 rx_csum = (__force __be16)(status->rx_csum & 0xffff); 2290 - skb->csum = (__force __wsum)ntohs(rx_csum); 2291 - skb->ip_summed = CHECKSUM_COMPLETE; 2290 + if (rx_csum) { 2291 + skb->csum = (__force __wsum)ntohs(rx_csum); 2292 + skb->ip_summed = CHECKSUM_COMPLETE; 2293 + } 2292 2294 } 2293 2295 2294 2296 /* DMA flags and length are still valid no matter how
+14 -1
drivers/net/ethernet/intel/iavf/iavf_main.c
··· 2541 2541 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ * 2); 2542 2542 } 2543 2543 2544 + /** 2545 + * iavf_disable_vf - disable VF 2546 + * @adapter: board private structure 2547 + * 2548 + * Set communication failed flag and free all resources. 2549 + * NOTE: This function is expected to be called with crit_lock being held. 2550 + **/ 2544 2551 static void iavf_disable_vf(struct iavf_adapter *adapter) 2545 2552 { 2546 2553 struct iavf_mac_filter *f, *ftmp; ··· 2602 2595 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); 2603 2596 iavf_shutdown_adminq(&adapter->hw); 2604 2597 adapter->netdev->flags &= ~IFF_UP; 2605 - mutex_unlock(&adapter->crit_lock); 2606 2598 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; 2607 2599 iavf_change_state(adapter, __IAVF_DOWN); 2608 2600 wake_up(&adapter->down_waitqueue); ··· 4619 4613 struct iavf_cloud_filter *cf, *cftmp; 4620 4614 struct iavf_hw *hw = &adapter->hw; 4621 4615 int err; 4616 + 4617 + /* When reboot/shutdown is in progress no need to do anything 4618 + * as the adapter is already REMOVE state that was set during 4619 + * iavf_shutdown() callback. 4620 + */ 4621 + if (adapter->state == __IAVF_REMOVE) 4622 + return; 4622 4623 4623 4624 set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section); 4624 4625 /* Wait until port initialization is complete.
+4 -3
drivers/net/ethernet/intel/ice/ice_main.c
··· 4880 4880 ice_devlink_unregister_params(pf); 4881 4881 set_bit(ICE_DOWN, pf->state); 4882 4882 4883 - mutex_destroy(&(&pf->hw)->fdir_fltr_lock); 4884 4883 ice_deinit_lag(pf); 4885 4884 if (test_bit(ICE_FLAG_PTP_SUPPORTED, pf->flags)) 4886 4885 ice_ptp_release(pf); ··· 4887 4888 ice_remove_arfs(pf); 4888 4889 ice_setup_mc_magic_wake(pf); 4889 4890 ice_vsi_release_all(pf); 4891 + mutex_destroy(&(&pf->hw)->fdir_fltr_lock); 4890 4892 ice_set_wake(pf); 4891 4893 ice_free_irq_msix_misc(pf); 4892 4894 ice_for_each_vsi(pf, i) { ··· 5962 5962 u64 pkts = 0, bytes = 0; 5963 5963 5964 5964 ring = READ_ONCE(rings[i]); 5965 - if (ring) 5966 - ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); 5965 + if (!ring) 5966 + continue; 5967 + ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); 5967 5968 vsi_stats->tx_packets += pkts; 5968 5969 vsi_stats->tx_bytes += bytes; 5969 5970 vsi->tx_restart += ring->tx_stats.restart_q;
+15 -1
drivers/net/ethernet/mscc/ocelot_flower.c
··· 60 60 */ 61 61 static int ocelot_chain_to_lookup(int chain) 62 62 { 63 + /* Backwards compatibility with older, single-chain tc-flower 64 + * offload support in Ocelot 65 + */ 66 + if (chain == 0) 67 + return 0; 68 + 63 69 return (chain / VCAP_LOOKUP) % 10; 64 70 } 65 71 ··· 74 68 */ 75 69 static int ocelot_chain_to_pag(int chain) 76 70 { 77 - int lookup = ocelot_chain_to_lookup(chain); 71 + int lookup; 72 + 73 + /* Backwards compatibility with older, single-chain tc-flower 74 + * offload support in Ocelot 75 + */ 76 + if (chain == 0) 77 + return 0; 78 + 79 + lookup = ocelot_chain_to_lookup(chain); 78 80 79 81 /* calculate PAG value as chain index relative to the first PAG */ 80 82 return chain - VCAP_IS2_CHAIN(lookup, 0);
+3
drivers/net/hyperv/netvsc_drv.c
··· 1587 1587 pcpu_sum = kvmalloc_array(num_possible_cpus(), 1588 1588 sizeof(struct netvsc_ethtool_pcpu_stats), 1589 1589 GFP_KERNEL); 1590 + if (!pcpu_sum) 1591 + return; 1592 + 1590 1593 netvsc_get_pcpu_stats(dev, pcpu_sum); 1591 1594 for_each_present_cpu(cpu) { 1592 1595 struct netvsc_ethtool_pcpu_stats *this_sum = &pcpu_sum[cpu];
+8 -1
drivers/net/mdio/mdio-mscc-miim.c
··· 187 187 .reg_stride = 4, 188 188 }; 189 189 190 + static const struct regmap_config mscc_miim_phy_regmap_config = { 191 + .reg_bits = 32, 192 + .val_bits = 32, 193 + .reg_stride = 4, 194 + .name = "phy", 195 + }; 196 + 190 197 int mscc_miim_setup(struct device *dev, struct mii_bus **pbus, const char *name, 191 198 struct regmap *mii_regmap, int status_offset) 192 199 { ··· 257 250 } 258 251 259 252 phy_regmap = devm_regmap_init_mmio(&pdev->dev, phy_regs, 260 - &mscc_miim_regmap_config); 253 + &mscc_miim_phy_regmap_config); 261 254 if (IS_ERR(phy_regmap)) { 262 255 dev_err(&pdev->dev, "Unable to create phy register regmap\n"); 263 256 return PTR_ERR(phy_regmap);
+4 -4
drivers/net/phy/marvell.c
··· 1687 1687 int err; 1688 1688 1689 1689 /* Suspend the fiber mode first */ 1690 - if (!linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, 1691 - phydev->supported)) { 1690 + if (linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, 1691 + phydev->supported)) { 1692 1692 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); 1693 1693 if (err < 0) 1694 1694 goto error; ··· 1722 1722 int err; 1723 1723 1724 1724 /* Resume the fiber mode first */ 1725 - if (!linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, 1726 - phydev->supported)) { 1725 + if (linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, 1726 + phydev->supported)) { 1727 1727 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); 1728 1728 if (err < 0) 1729 1729 goto error;
+3
drivers/net/phy/mscc/mscc_main.c
··· 2685 2685 MODULE_DESCRIPTION("Microsemi VSC85xx PHY driver"); 2686 2686 MODULE_AUTHOR("Nagaraju Lakkaraju"); 2687 2687 MODULE_LICENSE("Dual MIT/GPL"); 2688 + 2689 + MODULE_FIRMWARE(MSCC_VSC8584_REVB_INT8051_FW); 2690 + MODULE_FIRMWARE(MSCC_VSC8574_REVB_INT8051_FW);
+1 -32
drivers/net/wireless/ath/ath10k/wmi.c
··· 2611 2611 ath10k_mac_handle_beacon(ar, skb); 2612 2612 2613 2613 if (ieee80211_is_beacon(hdr->frame_control) || 2614 - ieee80211_is_probe_resp(hdr->frame_control)) { 2615 - struct ieee80211_mgmt *mgmt = (void *)skb->data; 2616 - enum cfg80211_bss_frame_type ftype; 2617 - u8 *ies; 2618 - int ies_ch; 2619 - 2614 + ieee80211_is_probe_resp(hdr->frame_control)) 2620 2615 status->boottime_ns = ktime_get_boottime_ns(); 2621 - 2622 - if (!ar->scan_channel) 2623 - goto drop; 2624 - 2625 - ies = mgmt->u.beacon.variable; 2626 - 2627 - if (ieee80211_is_beacon(mgmt->frame_control)) 2628 - ftype = CFG80211_BSS_FTYPE_BEACON; 2629 - else 2630 - ftype = CFG80211_BSS_FTYPE_PRESP; 2631 - 2632 - ies_ch = cfg80211_get_ies_channel_number(mgmt->u.beacon.variable, 2633 - skb_tail_pointer(skb) - ies, 2634 - sband->band, ftype); 2635 - 2636 - if (ies_ch > 0 && ies_ch != channel) { 2637 - ath10k_dbg(ar, ATH10K_DBG_MGMT, 2638 - "channel mismatched ds channel %d scan channel %d\n", 2639 - ies_ch, channel); 2640 - goto drop; 2641 - } 2642 - } 2643 2616 2644 2617 ath10k_dbg(ar, ATH10K_DBG_MGMT, 2645 2618 "event mgmt rx skb %pK len %d ftype %02x stype %02x\n", ··· 2626 2653 2627 2654 ieee80211_rx_ni(ar->hw, skb); 2628 2655 2629 - return 0; 2630 - 2631 - drop: 2632 - dev_kfree_skb(skb); 2633 2656 return 0; 2634 2657 } 2635 2658
-39
drivers/nvme/target/configfs.c
··· 1233 1233 } 1234 1234 CONFIGFS_ATTR(nvmet_subsys_, attr_model); 1235 1235 1236 - static ssize_t nvmet_subsys_attr_discovery_nqn_show(struct config_item *item, 1237 - char *page) 1238 - { 1239 - return snprintf(page, PAGE_SIZE, "%s\n", 1240 - nvmet_disc_subsys->subsysnqn); 1241 - } 1242 - 1243 - static ssize_t nvmet_subsys_attr_discovery_nqn_store(struct config_item *item, 1244 - const char *page, size_t count) 1245 - { 1246 - struct nvmet_subsys *subsys = to_subsys(item); 1247 - char *subsysnqn; 1248 - int len; 1249 - 1250 - len = strcspn(page, "\n"); 1251 - if (!len) 1252 - return -EINVAL; 1253 - 1254 - subsysnqn = kmemdup_nul(page, len, GFP_KERNEL); 1255 - if (!subsysnqn) 1256 - return -ENOMEM; 1257 - 1258 - /* 1259 - * The discovery NQN must be different from subsystem NQN. 1260 - */ 1261 - if (!strcmp(subsysnqn, subsys->subsysnqn)) { 1262 - kfree(subsysnqn); 1263 - return -EBUSY; 1264 - } 1265 - down_write(&nvmet_config_sem); 1266 - kfree(nvmet_disc_subsys->subsysnqn); 1267 - nvmet_disc_subsys->subsysnqn = subsysnqn; 1268 - up_write(&nvmet_config_sem); 1269 - 1270 - return count; 1271 - } 1272 - CONFIGFS_ATTR(nvmet_subsys_, attr_discovery_nqn); 1273 - 1274 1236 #ifdef CONFIG_BLK_DEV_INTEGRITY 1275 1237 static ssize_t nvmet_subsys_attr_pi_enable_show(struct config_item *item, 1276 1238 char *page) ··· 1262 1300 &nvmet_subsys_attr_attr_cntlid_min, 1263 1301 &nvmet_subsys_attr_attr_cntlid_max, 1264 1302 &nvmet_subsys_attr_attr_model, 1265 - &nvmet_subsys_attr_attr_discovery_nqn, 1266 1303 #ifdef CONFIG_BLK_DEV_INTEGRITY 1267 1304 &nvmet_subsys_attr_attr_pi_enable, 1268 1305 #endif
+1 -2
drivers/nvme/target/core.c
··· 1493 1493 if (!port) 1494 1494 return NULL; 1495 1495 1496 - if (!strcmp(NVME_DISC_SUBSYS_NAME, subsysnqn) || 1497 - !strcmp(nvmet_disc_subsys->subsysnqn, subsysnqn)) { 1496 + if (!strcmp(NVME_DISC_SUBSYS_NAME, subsysnqn)) { 1498 1497 if (!kref_get_unless_zero(&nvmet_disc_subsys->ref)) 1499 1498 return NULL; 1500 1499 return nvmet_disc_subsys;
+6 -7
drivers/scsi/fnic/fnic_scsi.c
··· 986 986 CMD_SP(sc) = NULL; 987 987 CMD_FLAGS(sc) |= FNIC_IO_DONE; 988 988 989 - spin_unlock_irqrestore(io_lock, flags); 990 - 991 989 if (hdr_status != FCPIO_SUCCESS) { 992 990 atomic64_inc(&fnic_stats->io_stats.io_failures); 993 991 shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n", ··· 993 995 } 994 996 995 997 fnic_release_ioreq_buf(fnic, io_req, sc); 996 - 997 - mempool_free(io_req, fnic->io_req_pool); 998 998 999 999 cmd_trace = ((u64)hdr_status << 56) | 1000 1000 (u64)icmnd_cmpl->scsi_status << 48 | ··· 1016 1020 fnic->fcp_output_bytes += xfer_len; 1017 1021 } else 1018 1022 fnic->lport->host_stats.fcp_control_requests++; 1023 + 1024 + /* Call SCSI completion function to complete the IO */ 1025 + scsi_done(sc); 1026 + spin_unlock_irqrestore(io_lock, flags); 1027 + 1028 + mempool_free(io_req, fnic->io_req_pool); 1019 1029 1020 1030 atomic64_dec(&fnic_stats->io_stats.active_ios); 1021 1031 if (atomic64_read(&fnic->io_cmpl_skip)) ··· 1051 1049 if(io_duration_time > atomic64_read(&fnic_stats->io_stats.current_max_io_time)) 1052 1050 atomic64_set(&fnic_stats->io_stats.current_max_io_time, io_duration_time); 1053 1051 } 1054 - 1055 - /* Call SCSI completion function to complete the IO */ 1056 - scsi_done(sc); 1057 1052 } 1058 1053 1059 1054 /* fnic_fcpio_itmf_cmpl_handler
+3 -2
drivers/scsi/mpt3sas/mpt3sas_base.c
··· 2011 2011 enable_irq(reply_q->os_irq); 2012 2012 } 2013 2013 } 2014 + 2015 + if (poll) 2016 + _base_process_reply_queue(reply_q); 2014 2017 } 2015 - if (poll) 2016 - _base_process_reply_queue(reply_q); 2017 2018 } 2018 2019 2019 2020 /**
+10 -3
drivers/usb/class/usbtmc.c
··· 1919 1919 struct usbtmc_ctrlrequest request; 1920 1920 u8 *buffer = NULL; 1921 1921 int rv; 1922 + unsigned int is_in, pipe; 1922 1923 unsigned long res; 1923 1924 1924 1925 res = copy_from_user(&request, arg, sizeof(struct usbtmc_ctrlrequest)); ··· 1929 1928 if (request.req.wLength > USBTMC_BUFSIZE) 1930 1929 return -EMSGSIZE; 1931 1930 1931 + is_in = request.req.bRequestType & USB_DIR_IN; 1932 + 1932 1933 if (request.req.wLength) { 1933 1934 buffer = kmalloc(request.req.wLength, GFP_KERNEL); 1934 1935 if (!buffer) 1935 1936 return -ENOMEM; 1936 1937 1937 - if ((request.req.bRequestType & USB_DIR_IN) == 0) { 1938 + if (!is_in) { 1938 1939 /* Send control data to device */ 1939 1940 res = copy_from_user(buffer, request.data, 1940 1941 request.req.wLength); ··· 1947 1944 } 1948 1945 } 1949 1946 1947 + if (is_in) 1948 + pipe = usb_rcvctrlpipe(data->usb_dev, 0); 1949 + else 1950 + pipe = usb_sndctrlpipe(data->usb_dev, 0); 1950 1951 rv = usb_control_msg(data->usb_dev, 1951 - usb_rcvctrlpipe(data->usb_dev, 0), 1952 + pipe, 1952 1953 request.req.bRequest, 1953 1954 request.req.bRequestType, 1954 1955 request.req.wValue, ··· 1964 1957 goto exit; 1965 1958 } 1966 1959 1967 - if (rv && (request.req.bRequestType & USB_DIR_IN)) { 1960 + if (rv && is_in) { 1968 1961 /* Read control data from device */ 1969 1962 res = copy_to_user(request.data, buffer, rv); 1970 1963 if (res)
+1
drivers/usb/gadget/function/rndis.c
··· 640 640 BufLength = le32_to_cpu(buf->InformationBufferLength); 641 641 BufOffset = le32_to_cpu(buf->InformationBufferOffset); 642 642 if ((BufLength > RNDIS_MAX_TOTAL_SIZE) || 643 + (BufOffset > RNDIS_MAX_TOTAL_SIZE) || 643 644 (BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE)) 644 645 return -EINVAL; 645 646
-3
drivers/usb/gadget/udc/core.c
··· 1436 1436 usb_gadget_udc_stop(udc); 1437 1437 1438 1438 udc->driver = NULL; 1439 - udc->dev.driver = NULL; 1440 1439 udc->gadget->dev.driver = NULL; 1441 1440 } 1442 1441 ··· 1497 1498 driver->function); 1498 1499 1499 1500 udc->driver = driver; 1500 - udc->dev.driver = &driver->driver; 1501 1501 udc->gadget->dev.driver = &driver->driver; 1502 1502 1503 1503 usb_gadget_udc_set_speed(udc, driver->max_speed); ··· 1519 1521 dev_err(&udc->dev, "failed to start %s: %d\n", 1520 1522 udc->driver->function, ret); 1521 1523 udc->driver = NULL; 1522 - udc->dev.driver = NULL; 1523 1524 udc->gadget->dev.driver = NULL; 1524 1525 return ret; 1525 1526 }
-1
drivers/usb/musb/omap2430.c
··· 327 327 musb->dev.parent = &pdev->dev; 328 328 musb->dev.dma_mask = &omap2430_dmamask; 329 329 musb->dev.coherent_dma_mask = omap2430_dmamask; 330 - device_set_of_node_from_dev(&musb->dev, &pdev->dev); 331 330 332 331 glue->dev = &pdev->dev; 333 332 glue->musb = musb;
+3 -1
drivers/vhost/vhost.c
··· 1170 1170 goto done; 1171 1171 } 1172 1172 1173 - if (msg.size == 0) { 1173 + if ((msg.type == VHOST_IOTLB_UPDATE || 1174 + msg.type == VHOST_IOTLB_INVALIDATE) && 1175 + msg.size == 0) { 1174 1176 ret = -EINVAL; 1175 1177 goto done; 1176 1178 }
+2 -1
drivers/vhost/vsock.c
··· 753 753 754 754 /* Iterating over all connections for all CIDs to find orphans is 755 755 * inefficient. Room for improvement here. */ 756 - vsock_for_each_connected_socket(vhost_vsock_reset_orphans); 756 + vsock_for_each_connected_socket(&vhost_transport.transport, 757 + vhost_vsock_reset_orphans); 757 758 758 759 /* Don't check the owner, because we are in the release path, so we 759 760 * need to stop the vsock device in any case.
+2 -1
fs/cifs/connect.c
··· 3924 3924 3925 3925 /* only send once per connect */ 3926 3926 spin_lock(&cifs_tcp_ses_lock); 3927 - if (server->tcpStatus != CifsNeedSessSetup) { 3927 + if ((server->tcpStatus != CifsNeedSessSetup) && 3928 + (ses->status == CifsGood)) { 3928 3929 spin_unlock(&cifs_tcp_ses_lock); 3929 3930 return 0; 3930 3931 }
+11 -11
fs/ocfs2/super.c
··· 1105 1105 goto read_super_error; 1106 1106 } 1107 1107 1108 - root = d_make_root(inode); 1109 - if (!root) { 1110 - status = -ENOMEM; 1111 - mlog_errno(status); 1112 - goto read_super_error; 1113 - } 1114 - 1115 - sb->s_root = root; 1116 - 1117 - ocfs2_complete_mount_recovery(osb); 1118 - 1119 1108 osb->osb_dev_kset = kset_create_and_add(sb->s_id, NULL, 1120 1109 &ocfs2_kset->kobj); 1121 1110 if (!osb->osb_dev_kset) { ··· 1121 1132 "/sys/fs/ocfs2/%s/filecheck.\n", sb->s_id); 1122 1133 goto read_super_error; 1123 1134 } 1135 + 1136 + root = d_make_root(inode); 1137 + if (!root) { 1138 + status = -ENOMEM; 1139 + mlog_errno(status); 1140 + goto read_super_error; 1141 + } 1142 + 1143 + sb->s_root = root; 1144 + 1145 + ocfs2_complete_mount_recovery(osb); 1124 1146 1125 1147 if (ocfs2_mount_local(osb)) 1126 1148 snprintf(nodestr, sizeof(nodestr), "local");
+1
include/linux/if_arp.h
··· 52 52 case ARPHRD_VOID: 53 53 case ARPHRD_NONE: 54 54 case ARPHRD_RAWIP: 55 + case ARPHRD_PIMREG: 55 56 return false; 56 57 default: 57 58 return true;
+2 -1
include/net/af_vsock.h
··· 205 205 struct sock *vsock_find_connected_socket(struct sockaddr_vm *src, 206 206 struct sockaddr_vm *dst); 207 207 void vsock_remove_sock(struct vsock_sock *vsk); 208 - void vsock_for_each_connected_socket(void (*fn)(struct sock *sk)); 208 + void vsock_for_each_connected_socket(struct vsock_transport *transport, 209 + void (*fn)(struct sock *sk)); 209 210 int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk); 210 211 bool vsock_find_cid(unsigned int cid); 211 212
-1
include/net/netfilter/nf_conntrack.h
··· 97 97 unsigned long status; 98 98 99 99 u16 cpu; 100 - u16 local_origin:1; 101 100 possible_net_t ct_net; 102 101 103 102 #if IS_ENABLED(CONFIG_NF_NAT)
+1
kernel/configs/debug.config
··· 16 16 # 17 17 # Compile-time checks and compiler options 18 18 # 19 + CONFIG_DEBUG_INFO=y 19 20 CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y 20 21 CONFIG_DEBUG_SECTION_MISMATCH=y 21 22 CONFIG_FRAME_WARN=2048
+1 -1
mm/swap_state.c
··· 478 478 * __read_swap_cache_async(), which has set SWAP_HAS_CACHE 479 479 * in swap_map, but not yet added its page to swap cache. 480 480 */ 481 - cond_resched(); 481 + schedule_timeout_uninterruptible(1); 482 482 } 483 483 484 484 /*
+1
net/dsa/dsa2.c
··· 1436 1436 const char *user_protocol; 1437 1437 1438 1438 master = of_find_net_device_by_node(ethernet); 1439 + of_node_put(ethernet); 1439 1440 if (!master) 1440 1441 return -EPROBE_DEFER; 1441 1442
+1 -2
net/ipv6/esp6.c
··· 812 812 struct tcphdr *th; 813 813 814 814 offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off); 815 - 816 - if (offset < 0) { 815 + if (offset == -1) { 817 816 err = -EINVAL; 818 817 goto out; 819 818 }
+2 -2
net/ipv6/ip6_output.c
··· 1476 1476 sizeof(struct frag_hdr) : 0) + 1477 1477 rt->rt6i_nfheader_len; 1478 1478 1479 - if (mtu < fragheaderlen || 1480 - ((mtu - fragheaderlen) & ~7) + fragheaderlen < sizeof(struct frag_hdr)) 1479 + if (mtu <= fragheaderlen || 1480 + ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr)) 1481 1481 goto emsgsize; 1482 1482 1483 1483 maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen -
+1 -1
net/key/af_key.c
··· 1699 1699 1700 1700 xfrm_probe_algs(); 1701 1701 1702 - supp_skb = compose_sadb_supported(hdr, GFP_KERNEL); 1702 + supp_skb = compose_sadb_supported(hdr, GFP_KERNEL | __GFP_ZERO); 1703 1703 if (!supp_skb) { 1704 1704 if (hdr->sadb_msg_satype != SADB_SATYPE_UNSPEC) 1705 1705 pfk->registered &= ~(1<<hdr->sadb_msg_satype);
-3
net/netfilter/nf_conntrack_core.c
··· 1748 1748 return 0; 1749 1749 if (IS_ERR(h)) 1750 1750 return PTR_ERR(h); 1751 - 1752 - ct = nf_ct_tuplehash_to_ctrack(h); 1753 - ct->local_origin = state->hook == NF_INET_LOCAL_OUT; 1754 1751 } 1755 1752 ct = nf_ct_tuplehash_to_ctrack(h); 1756 1753
+3 -40
net/netfilter/nf_nat_core.c
··· 494 494 goto another_round; 495 495 } 496 496 497 - static bool tuple_force_port_remap(const struct nf_conntrack_tuple *tuple) 498 - { 499 - u16 sp, dp; 500 - 501 - switch (tuple->dst.protonum) { 502 - case IPPROTO_TCP: 503 - sp = ntohs(tuple->src.u.tcp.port); 504 - dp = ntohs(tuple->dst.u.tcp.port); 505 - break; 506 - case IPPROTO_UDP: 507 - case IPPROTO_UDPLITE: 508 - sp = ntohs(tuple->src.u.udp.port); 509 - dp = ntohs(tuple->dst.u.udp.port); 510 - break; 511 - default: 512 - return false; 513 - } 514 - 515 - /* IANA: System port range: 1-1023, 516 - * user port range: 1024-49151, 517 - * private port range: 49152-65535. 518 - * 519 - * Linux default ephemeral port range is 32768-60999. 520 - * 521 - * Enforce port remapping if sport is significantly lower 522 - * than dport to prevent NAT port shadowing, i.e. 523 - * accidental match of 'new' inbound connection vs. 524 - * existing outbound one. 525 - */ 526 - return sp < 16384 && dp >= 32768; 527 - } 528 - 529 497 /* Manipulate the tuple into the range given. For NF_INET_POST_ROUTING, 530 498 * we change the source to map into the range. For NF_INET_PRE_ROUTING 531 499 * and NF_INET_LOCAL_OUT, we change the destination to map into the ··· 507 539 struct nf_conn *ct, 508 540 enum nf_nat_manip_type maniptype) 509 541 { 510 - bool random_port = range->flags & NF_NAT_RANGE_PROTO_RANDOM_ALL; 511 542 const struct nf_conntrack_zone *zone; 512 543 struct net *net = nf_ct_net(ct); 513 544 514 545 zone = nf_ct_zone(ct); 515 - 516 - if (maniptype == NF_NAT_MANIP_SRC && 517 - !random_port && 518 - !ct->local_origin) 519 - random_port = tuple_force_port_remap(orig_tuple); 520 546 521 547 /* 1) If this srcip/proto/src-proto-part is currently mapped, 522 548 * and that same mapping gives a unique tuple within the given ··· 520 558 * So far, we don't do local source mappings, so multiple 521 559 * manips not an issue. 522 560 */ 523 - if (maniptype == NF_NAT_MANIP_SRC && !random_port) { 561 + if (maniptype == NF_NAT_MANIP_SRC && 562 + !(range->flags & NF_NAT_RANGE_PROTO_RANDOM_ALL)) { 524 563 /* try the original tuple first */ 525 564 if (in_range(orig_tuple, range)) { 526 565 if (!nf_nat_used_tuple(orig_tuple, ct)) { ··· 545 582 */ 546 583 547 584 /* Only bother mapping if it's not already in range and unique */ 548 - if (!random_port) { 585 + if (!(range->flags & NF_NAT_RANGE_PROTO_RANDOM_ALL)) { 549 586 if (range->flags & NF_NAT_RANGE_PROTO_SPECIFIED) { 550 587 if (!(range->flags & NF_NAT_RANGE_PROTO_OFFSET) && 551 588 l4proto_in_range(tuple, maniptype,
+7 -2
net/netfilter/nf_tables_api.c
··· 8260 8260 } 8261 8261 EXPORT_SYMBOL_GPL(nf_tables_trans_destroy_flush_work); 8262 8262 8263 + static bool nft_expr_reduce(struct nft_regs_track *track, 8264 + const struct nft_expr *expr) 8265 + { 8266 + return false; 8267 + } 8268 + 8263 8269 static int nf_tables_commit_chain_prepare(struct net *net, struct nft_chain *chain) 8264 8270 { 8265 8271 const struct nft_expr *expr, *last; ··· 8313 8307 nft_rule_for_each_expr(expr, last, rule) { 8314 8308 track.cur = expr; 8315 8309 8316 - if (expr->ops->reduce && 8317 - expr->ops->reduce(&track, expr)) { 8310 + if (nft_expr_reduce(&track, expr)) { 8318 8311 expr = track.cur; 8319 8312 continue; 8320 8313 }
+10 -1
net/packet/af_packet.c
··· 2317 2317 copy_skb = skb_get(skb); 2318 2318 skb_head = skb->data; 2319 2319 } 2320 - if (copy_skb) 2320 + if (copy_skb) { 2321 + memset(&PACKET_SKB_CB(copy_skb)->sa.ll, 0, 2322 + sizeof(PACKET_SKB_CB(copy_skb)->sa.ll)); 2321 2323 skb_set_owner_r(copy_skb, sk); 2324 + } 2322 2325 } 2323 2326 snaplen = po->rx_ring.frame_size - macoff; 2324 2327 if ((int)snaplen < 0) { ··· 3465 3462 sock_recv_ts_and_drops(msg, sk, skb); 3466 3463 3467 3464 if (msg->msg_name) { 3465 + const size_t max_len = min(sizeof(skb->cb), 3466 + sizeof(struct sockaddr_storage)); 3468 3467 int copy_len; 3469 3468 3470 3469 /* If the address length field is there to be filled ··· 3488 3483 0, sizeof(sll->sll_addr)); 3489 3484 msg->msg_namelen = sizeof(struct sockaddr_ll); 3490 3485 } 3486 + } 3487 + if (WARN_ON_ONCE(copy_len > max_len)) { 3488 + copy_len = max_len; 3489 + msg->msg_namelen = copy_len; 3491 3490 } 3492 3491 memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa, copy_len); 3493 3492 }
+7 -2
net/vmw_vsock/af_vsock.c
··· 334 334 } 335 335 EXPORT_SYMBOL_GPL(vsock_remove_sock); 336 336 337 - void vsock_for_each_connected_socket(void (*fn)(struct sock *sk)) 337 + void vsock_for_each_connected_socket(struct vsock_transport *transport, 338 + void (*fn)(struct sock *sk)) 338 339 { 339 340 int i; 340 341 ··· 344 343 for (i = 0; i < ARRAY_SIZE(vsock_connected_table); i++) { 345 344 struct vsock_sock *vsk; 346 345 list_for_each_entry(vsk, &vsock_connected_table[i], 347 - connected_table) 346 + connected_table) { 347 + if (vsk->transport != transport) 348 + continue; 349 + 348 350 fn(sk_vsock(vsk)); 351 + } 349 352 } 350 353 351 354 spin_unlock_bh(&vsock_table_lock);
+5 -2
net/vmw_vsock/virtio_transport.c
··· 24 24 static struct workqueue_struct *virtio_vsock_workqueue; 25 25 static struct virtio_vsock __rcu *the_virtio_vsock; 26 26 static DEFINE_MUTEX(the_virtio_vsock_mutex); /* protects the_virtio_vsock */ 27 + static struct virtio_transport virtio_transport; /* forward declaration */ 27 28 28 29 struct virtio_vsock { 29 30 struct virtio_device *vdev; ··· 385 384 switch (le32_to_cpu(event->id)) { 386 385 case VIRTIO_VSOCK_EVENT_TRANSPORT_RESET: 387 386 virtio_vsock_update_guest_cid(vsock); 388 - vsock_for_each_connected_socket(virtio_vsock_reset_sock); 387 + vsock_for_each_connected_socket(&virtio_transport.transport, 388 + virtio_vsock_reset_sock); 389 389 break; 390 390 } 391 391 } ··· 664 662 synchronize_rcu(); 665 663 666 664 /* Reset all connected sockets when the device disappear */ 667 - vsock_for_each_connected_socket(virtio_vsock_reset_sock); 665 + vsock_for_each_connected_socket(&virtio_transport.transport, 666 + virtio_vsock_reset_sock); 668 667 669 668 /* Stop all work handlers to make sure no one is accessing the device, 670 669 * so we can safely call virtio_reset_device().
+4 -1
net/vmw_vsock/vmci_transport.c
··· 75 75 76 76 static int PROTOCOL_OVERRIDE = -1; 77 77 78 + static struct vsock_transport vmci_transport; /* forward declaration */ 79 + 78 80 /* Helper function to convert from a VMCI error code to a VSock error code. */ 79 81 80 82 static s32 vmci_transport_error_to_vsock_error(s32 vmci_error) ··· 884 882 const struct vmci_event_data *e_data, 885 883 void *client_data) 886 884 { 887 - vsock_for_each_connected_socket(vmci_transport_handle_detach); 885 + vsock_for_each_connected_socket(&vmci_transport, 886 + vmci_transport_handle_detach); 888 887 } 889 888 890 889 static void vmci_transport_recv_pkt_work(struct work_struct *work)
+1 -1
tools/perf/arch/x86/util/evlist.c
··· 29 29 30 30 __evlist__for_each_entry(list, evsel) { 31 31 if (evsel->pmu_name && !strcmp(evsel->pmu_name, "cpu") && 32 - evsel->name && strstr(evsel->name, "slots")) 32 + evsel->name && strcasestr(evsel->name, "slots")) 33 33 return evsel; 34 34 } 35 35 return first;
+17 -11
tools/perf/util/evlist.c
··· 346 346 { 347 347 struct evlist_cpu_iterator itr = { 348 348 .container = evlist, 349 - .evsel = evlist__first(evlist), 349 + .evsel = NULL, 350 350 .cpu_map_idx = 0, 351 351 .evlist_cpu_map_idx = 0, 352 352 .evlist_cpu_map_nr = perf_cpu_map__nr(evlist->core.all_cpus), ··· 354 354 .affinity = affinity, 355 355 }; 356 356 357 - if (itr.affinity) { 358 - itr.cpu = perf_cpu_map__cpu(evlist->core.all_cpus, 0); 359 - affinity__set(itr.affinity, itr.cpu.cpu); 360 - itr.cpu_map_idx = perf_cpu_map__idx(itr.evsel->core.cpus, itr.cpu); 361 - /* 362 - * If this CPU isn't in the evsel's cpu map then advance through 363 - * the list. 364 - */ 365 - if (itr.cpu_map_idx == -1) 366 - evlist_cpu_iterator__next(&itr); 357 + if (evlist__empty(evlist)) { 358 + /* Ensure the empty list doesn't iterate. */ 359 + itr.evlist_cpu_map_idx = itr.evlist_cpu_map_nr; 360 + } else { 361 + itr.evsel = evlist__first(evlist); 362 + if (itr.affinity) { 363 + itr.cpu = perf_cpu_map__cpu(evlist->core.all_cpus, 0); 364 + affinity__set(itr.affinity, itr.cpu.cpu); 365 + itr.cpu_map_idx = perf_cpu_map__idx(itr.evsel->core.cpus, itr.cpu); 366 + /* 367 + * If this CPU isn't in the evsel's cpu map then advance 368 + * through the list. 369 + */ 370 + if (itr.cpu_map_idx == -1) 371 + evlist_cpu_iterator__next(&itr); 372 + } 367 373 } 368 374 return itr; 369 375 }
+1 -1
tools/perf/util/symbol.c
··· 231 231 prev = curr; 232 232 curr = rb_entry(nd, struct symbol, rb_node); 233 233 234 - if (prev->end == prev->start && prev->end != curr->start) 234 + if (prev->end == prev->start || prev->end != curr->start) 235 235 arch__symbols__fixup_end(prev, curr); 236 236 } 237 237
+2 -3
tools/testing/selftests/netfilter/nft_nat.sh
··· 880 880 return $ksft_skip 881 881 fi 882 882 883 - # test default behaviour. Packet from ns1 to ns0 is not redirected 884 - # due to automatic port translation. 885 - test_port_shadow "default" "ROUTER" 883 + # test default behaviour. Packet from ns1 to ns0 is redirected to ns2. 884 + test_port_shadow "default" "CLIENT" 886 885 887 886 # test packet filter based mitigation: prevent forwarding of 888 887 # packets claiming to come from the service port.
+2 -4
tools/testing/selftests/vm/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 # Makefile for vm selftests 3 3 4 + LOCAL_HDRS += $(selfdir)/vm/local_config.h $(top_srcdir)/mm/gup_test.h 5 + 4 6 include local_config.mk 5 7 6 8 uname_M := $(shell uname -m 2>/dev/null || echo not) ··· 141 139 endif 142 140 143 141 $(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap 144 - 145 - $(OUTPUT)/gup_test: ../../../../mm/gup_test.h 146 - 147 - $(OUTPUT)/hmm-tests: local_config.h 148 142 149 143 # HMM_EXTRA_LIBS may get set in local_config.mk, or it may be left empty. 150 144 $(OUTPUT)/hmm-tests: LDLIBS += $(HMM_EXTRA_LIBS)