Linux 6.3.6
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.3.6 kernel.
All users of the 6.3 kernel series must upgrade.
The updated 6.3.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.3.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/imx6ull-dhcor-som.dtsi | 7 block/blk-mq-tag.c | 12 block/blk-wbt.c | 12 drivers/cpufreq/amd-pstate.c | 47 ++- drivers/cxl/core/port.c | 7 drivers/firmware/arm_ffa/driver.c | 3 drivers/firmware/arm_scmi/raw_mode.c | 2 drivers/gpio/Kconfig | 2 drivers/gpio/gpio-f7188x.c | 28 - drivers/gpio/gpiolib.c | 2 drivers/gpu/drm/i915/display/intel_ddi.c | 15 drivers/gpu/drm/i915/display/intel_display.c | 17 - drivers/gpu/drm/i915/display/intel_dp_mst.c | 15 drivers/gpu/drm/i915/display/intel_modeset_setup.c | 1 drivers/hwtracing/coresight/coresight-etm-perf.c | 1 drivers/net/ethernet/freescale/fec_main.c | 17 - drivers/net/ethernet/mellanox/mlx5/core/Makefile | 2 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 34 +- drivers/net/ethernet/mellanox/mlx5/core/esw/debugfs.c | 198 ------------- drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 6 drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 6 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 12 drivers/net/phy/mscc/mscc.h | 1 drivers/net/phy/mscc/mscc_main.c | 54 +-- drivers/platform/x86/amd/pmf/core.c | 32 +- drivers/power/supply/rt9467-charger.c | 2 drivers/spi/spi-geni-qcom.c | 2 drivers/vfio/vfio_iommu_type1.c | 5 include/linux/skbuff.h | 10 include/linux/skmsg.h | 3 include/net/tcp.h | 10 include/net/tls.h | 1 kernel/bpf/offload.c | 2 net/bluetooth/hci_sock.c | 28 + net/core/skmsg.c | 81 ++--- net/core/sock_map.c | 3 net/ipv4/tcp.c | 11 net/ipv4/tcp_bpf.c | 79 +++++ net/ipv4/udp.c | 7 net/netfilter/nf_conntrack_netlink.c | 8 net/tls/tls.h | 5 net/tls/tls_device.c | 22 - net/tls/tls_strp.c | 185 +++++++++--- net/tls/tls_sw.c | 4 net/unix/af_unix.c | 7 sound/soc/intel/avs/control.c | 22 - tools/testing/selftests/bpf/Makefile | 2 48 files changed, 592 insertions(+), 442 deletions(-)
Amadeusz Sławiński (1):
ASoC: Intel: avs: Fix module lookup
Andreas Kemnade (1):
gpiolib: fix allocation of mixed dynamic/static GPIOs
ChiaEn Wu (1):
power: supply: rt9467: Fix passing zero to 'dev_err_probe'
Christoph Niedermaier (1):
ARM: dts: imx6ull-dhcor: Set and limit the mode for PMIC buck 1, 2 and 3
David Epping (1):
net: phy: mscc: enable VSC8501/2 RGMII RX clock
Gautham R. Shenoy (1):
cpufreq: amd-pstate: Add ->fast_switch() callback
Greg Kroah-Hartman (1):
Linux 6.3.6
Henning Schild (1):
gpio-f7188x: fix chip name and pin count on Nuvoton chip
Imre Deak (3):
drm/i915: Move shared DPLL disabling into CRTC disable hook drm/i915: Disable DPLLs before disconnecting the TC PHY drm/i915: Fix PIPEDMC disabling for a bigjoiner configuration
Jakub Kicinski (8):
bpf: netdev: init the offload table earlier
tls: rx: device: fix checking decryption status
tls: rx: strp: set the skb->len of detached / CoW'ed skbs
tls: rx: strp: fix determining record length in copy mode
tls: rx: strp: force mixed decrypted records into copy mode
tls: rx: strp: factor out copying skb data
tls: rx: strp: preserve decryption status of skbs when needed
tls: rx: strp: don't use GFP_KERNEL in softirq context
Jeremy Sowden (1):
selftests/bpf: Fix pkg-config call building sign-file
John Fastabend (8):
bpf, sockmap: Pass skb ownership through read_skb bpf, sockmap: Convert schedule_work into delayed_work bpf, sockmap: Reschedule is now done through backlog bpf, sockmap: Improved check for empty queue bpf, sockmap: Handle fin correctly
bpf, sockmap: TCP data stall on recv before accept bpf, sockmap: Wake up polling after data copy bpf, sockmap: Incorrectly handling copied_seq
Maher Sanalla (2):
Revert "net/mlx5: Expose steering dropped packets counter" Revert "net/mlx5: Expose vnic diagnostic counters for eswitch managed vports"
Mario Limonciello (1):
platform/x86/amd/pmf: Fix CnQF and auto-mode after resume
Paul Blakey (2):
net/mlx5e: TC, Fix using eswitch mapping in nic mode
netfilter: ctnetlink: Support offloaded conntrack entry deletion
Robert Richter (1):
cxl/port: Fix NULL pointer access in devm_cxl_add_port()
Ruidong Tian (1):
coresight: perf: Release Coresight path when alloc trace id failed
Ruihan Li (1):
bluetooth: Add cmd validity checks at the start of hci_sock_ioctl()
Shay Drory (1):
net/mlx5: E-switch, Devcom, sync devcom events and devcom comp register
Shenwei Wang (1):
net: fec: add dma_wmb to ensure correct descriptor values
Sudeep Holla (1):
firmware: arm_ffa: Fix usage of partition info get count flag
Tejun Heo (1):
firmware: arm_scmi: Fix incorrect alloc_workqueue() invocation
Tian Lan (1):
blk-mq: fix race condition in active queue accounting
Vijaya Krishna Nivarthi (1):
spi: spi-geni-qcom: Select FIFO mode for chip select
Wyes Karny (2):
cpufreq: amd-pstate: Remove fast_switch_possible flag from active driver
cpufreq: amd-pstate: Update policy->cur in amd_pstate_adjust_perf()
Yan Zhao (1):
vfio/type1: check pfn valid before converting to struct page
Yu Kuai (1):
blk-wbt: fix that wbt can't be disabled by default
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 3 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/boot/dts/imx6ull-dhcor-som.dtsi +7 -0
@@ -8,6 +8,7 @@ #include <dt-bindings/input/input.h> #include <dt-bindings/leds/common.h> #include <dt-bindings/pwm/pwm.h> +#include <dt-bindings/regulator/dlg,da9063-regulator.h> #include "imx6ull.dtsi" / {
@@ -84,16 +85,20 @@ onkey { regulators { vdd_soc_in_1v4: buck1 { + regulator-allowed-modes = <DA9063_BUCK_MODE_SLEEP>; /* PFM */ regulator-always-on; regulator-boot-on; + regulator-initial-mode = <DA9063_BUCK_MODE_SLEEP>; regulator-max-microvolt = <1400000>; regulator-min-microvolt = <1400000>; regulator-name = "vdd_soc_in_1v4"; }; vcc_3v3: buck2 { + regulator-allowed-modes = <DA9063_BUCK_MODE_SYNC>; /* PWM */ regulator-always-on; regulator-boot-on; + regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>; regulator-max-microvolt = <3300000>; regulator-min-microvolt = <3300000>; regulator-name = "vcc_3v3";
@@ -106,8 +111,10 @@ vcc_3v3: buck2 { * the voltage is set to 1.5V. */ vcc_ddr_1v35: buck3 { + regulator-allowed-modes = <DA9063_BUCK_MODE_SYNC>; /* PWM */ regulator-always-on; regulator-boot-on; + regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>; regulator-max-microvolt = <1500000>; regulator-min-microvolt = <1500000>; regulator-name = "vcc_ddr_1v35";
block/blk-mq-tag.c +8 -4
@@ -41,16 +41,20 @@ void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) {unsigned int users; +/* +* calling test_bit() prior to test_and_set_bit() is intentional, +* it avoids dirtying the cacheline if the queue is already active. +*/ if (blk_mq_is_shared_tags (hctx->flags)) {struct request_queue *q = hctx->queue; -if (test_bit (QUEUE_FLAG_HCTX_ACTIVE , &q->queue_flags)) +if (test_bit (QUEUE_FLAG_HCTX_ACTIVE , &q->queue_flags) || +test_and_set_bit (QUEUE_FLAG_HCTX_ACTIVE , &q->queue_flags))return ; -set_bit (QUEUE_FLAG_HCTX_ACTIVE , &q->queue_flags); }else { -if (test_bit (BLK_MQ_S_TAG_ACTIVE , &hctx->state)) +if (test_bit (BLK_MQ_S_TAG_ACTIVE , &hctx->state) || +test_and_set_bit (BLK_MQ_S_TAG_ACTIVE , &hctx->state))return ; -set_bit (BLK_MQ_S_TAG_ACTIVE , &hctx->state); } users =atomic_inc_return (&hctx->tags->active_queues);
block/blk-wbt.c +7 -5
@@ -730,14 +730,16 @@ void wbt_enable_default(struct gendisk *disk) {struct request_queue *q = disk->queue;struct rq_qos *rqos; -bool disable_flag = q->elevator && -test_bit (ELEVATOR_FLAG_DISABLE_WBT , &q->elevator->flags); +bool enable =IS_ENABLED (CONFIG_BLK_WBT_MQ ); + +if (q->elevator && +test_bit (ELEVATOR_FLAG_DISABLE_WBT , &q->elevator->flags)) + enable = false;/* Throttling already enabled? */ rqos =wbt_rq_qos (q);if (rqos) { -if (!disable_flag && -RQWB (rqos)->enable_state ==WBT_STATE_OFF_DEFAULT ) +if (enable &&RQWB (rqos)->enable_state ==WBT_STATE_OFF_DEFAULT )RQWB (rqos)->enable_state =WBT_STATE_ON_DEFAULT ;return ; }
@@ -746,7 +748,7 @@ void wbt_enable_default(struct gendisk *disk)if (!blk_queue_registered (q))return ; -if (queue_is_mq (q) && !disable_flag) +if (queue_is_mq (q) && enable)wbt_init (disk); }EXPORT_SYMBOL_GPL (wbt_enable_default);
drivers/cpufreq/amd-pstate.c +37 -10
104 lines not on this page · raw message
drivers/cxl/core/port.c +3 -4
@@ -751,11 +751,10 @@ struct cxl_port *devm_cxl_add_port(struct device *host, struct device *uport, parent_port = parent_dport ? parent_dport->port :NULL ;if (IS_ERR (port)) { -dev_dbg (uport,"Failed to add %s%s%s%s: %ld\n" , -dev_name (&port->dev), - parent_port ?" to " :"" , +dev_dbg (uport,"Failed to add%s%s%s: %ld\n" , + parent_port ?" port to " :"" , parent_port ?dev_name (&parent_port->dev) :"" , - parent_port ?"" :" (root port)" , + parent_port ?"" :" root port" ,PTR_ERR (port)); }else { dev_dbg(uport, "%s added%s%s%s\n",
drivers/firmware/arm_ffa/driver.c +2 -1
@@ -193,7 +193,8 @@ __ffa_partition_info_get(u32 uuid0, u32 uuid1, u32 uuid2, u32 uuid3,int idx, count, flags =0 , sz, buf_sz;ffa_value_t partition_info; -if (!buffer || !num_partitions)/* Just get the count for now */ +if (drv_info->version >FFA_VERSION_1_0 && + (!buffer || !num_partitions))/* Just get the count for now */ flags =PARTITION_INFO_GET_RETURN_COUNT_ONLY ;mutex_lock (&drv_info->rx_lock);
drivers/firmware/arm_scmi/raw_mode.c +1 -1
@@ -1066,7 +1066,7 @@ static int scmi_xfer_raw_worker_init(struct scmi_raw_mode_info *raw) raw->wait_wq =alloc_workqueue ("scmi-raw-wait-wq-%d" ,WQ_UNBOUND |WQ_FREEZABLE | -WQ_HIGHPRI ,WQ_SYSFS , raw->id); +WQ_HIGHPRI |WQ_SYSFS ,0 , raw->id);if (!raw->wait_wq)return -ENOMEM ;
drivers/gpio/Kconfig +1 -1
@@ -879,7 +879,7 @@ config GPIO_F7188X help This option enables support for GPIOs found on Fintek Super-I/O chips F71869, F71869A, F71882FG, F71889F and F81866. - As well as Nuvoton Super-I/O chip NCT6116D. + As well as Nuvoton Super-I/O chip NCT6126D. To compile this driver as a module, choose M here: the module will be called f7188x-gpio.
drivers/gpio/gpio-f7188x.c +14 -14
@@ -48,7 +48,7 @@/* * Nuvoton devices. */ -#define SIO_NCT6116D_ID 0xD283/* NCT6116D chipset ID */ +#define SIO_NCT6126D_ID 0xD283/* NCT6126D chipset ID */ #define SIO_LD_GPIO_NUVOTON 0x07/* GPIO logical device */
@@ -62,7 +62,7 @@ enum chips { f81866, f81804, f81865, - nct6116d, + nct6126d, }; static const char * const f7188x_names[] = {
@@ -74,7 +74,7 @@ static const char * const f7188x_names[] = {"f81866" ,"f81804" ,"f81865" , - "nct6116d", + "nct6126d", }; struct f7188x_sio {
@@ -187,8 +187,8 @@ static int f7188x_gpio_set_config(struct gpio_chip *chip, unsigned offset,/* Output mode register (0:open drain 1:push-pull). */ #define f7188x_gpio_out_mode (base) ((base) + 3) -#define f7188x_gpio_dir_invert (type) ((type) == nct6116d) -#define f7188x_gpio_data_single (type) ((type) == nct6116d) +#define f7188x_gpio_dir_invert (type) ((type) == nct6126d) +#define f7188x_gpio_data_single (type) ((type) == nct6126d)static struct f7188x_gpio_bank f71869_gpio_bank[] = {F7188X_GPIO_BANK (0 ,6 ,0xF0 ,DRVNAME "-0" ),
@@ -274,7 +274,7 @@ static struct f7188x_gpio_bank f81865_gpio_bank[] = { F7188X_GPIO_BANK(60, 5, 0x90, DRVNAME "-6"), }; -static struct f7188x_gpio_bank nct6116d_gpio_bank[] = { +static struct f7188x_gpio_bank nct6126d_gpio_bank[] = {F7188X_GPIO_BANK (0 ,8 ,0xE0 ,DRVNAME "-0" ),F7188X_GPIO_BANK (10 ,8 ,0xE4 ,DRVNAME "-1" ),F7188X_GPIO_BANK (20 ,8 ,0xE8 ,DRVNAME "-2" ),
@@ -282,7 +282,7 @@ static struct f7188x_gpio_bank nct6116d_gpio_bank[] = {F7188X_GPIO_BANK (40 ,8 ,0xF0 ,DRVNAME "-4" ),F7188X_GPIO_BANK (50 ,8 ,0xF4 ,DRVNAME "-5" ),F7188X_GPIO_BANK (60 ,8 ,0xF8 ,DRVNAME "-6" ), - F7188X_GPIO_BANK(70, 1, 0xFC, DRVNAME "-7"), + F7188X_GPIO_BANK(70, 8, 0xFC, DRVNAME "-7"), };static int f7188x_gpio_get_direction (struct gpio_chip *chip,unsigned offset)
@@ -490,9 +490,9 @@ static int f7188x_gpio_probe(struct platform_device *pdev) data->nr_bank =ARRAY_SIZE (f81865_gpio_bank); data->bank = f81865_gpio_bank;break ; -case nct6116d: - data->nr_bank =ARRAY_SIZE (nct6116d_gpio_bank); - data->bank = nct6116d_gpio_bank; +case nct6126d: + data->nr_bank =ARRAY_SIZE (nct6126d_gpio_bank); + data->bank = nct6126d_gpio_bank;break ;default :return -ENODEV ;
@@ -559,9 +559,9 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio)case SIO_F81865_ID : sio->type = f81865;break ; -case SIO_NCT6116D_ID : +case SIO_NCT6126D_ID : sio->device =SIO_LD_GPIO_NUVOTON ; - sio->type = nct6116d; + sio->type = nct6126d;break ;default :pr_info ("Unsupported Fintek device 0x%04x\n" , devid);
@@ -569,7 +569,7 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio) }/* double check manufacturer where possible */ -if (sio->type != nct6116d) { +if (sio->type != nct6126d) { manid =superio_inw (addr,SIO_FINTEK_MANID );if (manid !=SIO_FINTEK_ID ) {pr_debug ("Not a Fintek device at 0x%08x\n" , addr);
@@ -581,7 +581,7 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio) err =0 ;pr_info ("Found %s at %#x\n" , f7188x_names[sio->type], (unsigned int )addr); -if (sio->type != nct6116d) +if (sio->type != nct6126d)pr_info (" revision %d\n" ,superio_inb (addr,SIO_FINTEK_DEVREV )); err:
drivers/gpio/gpiolib.c +2 -0
@@ -193,6 +193,8 @@ static int gpiochip_find_base(int ngpio)break ;/* nope, check the space right after the chip */ base = gdev->base + gdev->ngpio; +if (base <GPIO_DYNAMIC_BASE ) + base =GPIO_DYNAMIC_BASE ; }if (gpio_is_valid (base)) {
drivers/gpu/drm/i915/display/intel_ddi.c +12 -3
@@ -2731,9 +2731,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, const struct drm_connector_state *old_conn_state) {struct drm_i915_private *dev_priv =to_i915 (encoder->base.dev); -struct intel_digital_port *dig_port =enc_to_dig_port (encoder); -enum phy phy =intel_port_to_phy (dev_priv, encoder->port); -bool is_tc_port =intel_phy_is_tc (dev_priv, phy);struct intel_crtc *slave_crtc;if (!intel_crtc_has_type (old_crtc_state,INTEL_OUTPUT_DP_MST )) {
@@ -2783,6 +2780,17 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,else intel_ddi_post_disable_dp (state, encoder, old_crtc_state, old_conn_state); +} + +static void intel_ddi_post_pll_disable (struct intel_atomic_state *state, +struct intel_encoder *encoder, +const struct intel_crtc_state *old_crtc_state, +const struct drm_connector_state *old_conn_state) +{ +struct drm_i915_private *i915 =to_i915 (encoder->base.dev); +struct intel_digital_port *dig_port =enc_to_dig_port (encoder); +enum phy phy =intel_port_to_phy (i915, encoder->port); +bool is_tc_port =intel_phy_is_tc (i915, phy);main_link_aux_power_domain_put (dig_port, old_crtc_state);
@@ -4381,6 +4389,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port) encoder->pre_pll_enable = intel_ddi_pre_pll_enable; encoder->pre_enable = intel_ddi_pre_enable; encoder->disable = intel_disable_ddi; + encoder->post_pll_disable = intel_ddi_post_pll_disable; encoder->post_disable = intel_ddi_post_disable; encoder->update_pipe = intel_ddi_update_pipe; encoder->get_hw_state = intel_ddi_get_hw_state;
drivers/gpu/drm/i915/display/intel_display.c +15 -2
@@ -2000,6 +2000,8 @@ static void ilk_crtc_disable(struct intel_atomic_state *state,intel_set_cpu_fifo_underrun_reporting (dev_priv, pipe, true);intel_set_pch_fifo_underrun_reporting (dev_priv, pipe, true); + +intel_disable_shared_dpll (old_crtc_state); } static void hsw_crtc_disable(struct intel_atomic_state *state,
@@ -2018,7 +2020,19 @@ static void hsw_crtc_disable(struct intel_atomic_state *state,intel_encoders_post_disable (state, crtc); } -intel_dmc_disable_pipe (i915, crtc->pipe); +intel_disable_shared_dpll (old_crtc_state); + +if (!intel_crtc_is_bigjoiner_slave (old_crtc_state)) { +struct intel_crtc *slave_crtc; + +intel_encoders_post_pll_disable (state, crtc); + +intel_dmc_disable_pipe (i915, crtc->pipe); + +for_each_intel_crtc_in_pipe_mask (&i915->drm, slave_crtc, +intel_crtc_bigjoiner_slave_pipes (old_crtc_state)) +intel_dmc_disable_pipe (i915, slave_crtc->pipe); + } }static void i9xx_pfit_enable (const struct intel_crtc_state *crtc_state)
@@ -7140,7 +7154,6 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state, dev_priv->display.funcs.display->crtc_disable (state, crtc); crtc->active = false;intel_fbc_disable (crtc); -intel_disable_shared_dpll (old_crtc_state);if (!new_crtc_state->hw.active)intel_initial_watermarks (state, crtc);
drivers/gpu/drm/i915/display/intel_dp_mst.c +15 -0
@@ -623,6 +623,20 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state, intel_dp->active_mst_links); } +static void intel_mst_post_pll_disable_dp (struct intel_atomic_state *state, +struct intel_encoder *encoder, +const struct intel_crtc_state *old_crtc_state, +const struct drm_connector_state *old_conn_state) +{ +struct intel_dp_mst_encoder *intel_mst =enc_to_mst (encoder); +struct intel_digital_port *dig_port = intel_mst->primary; +struct intel_dp *intel_dp = &dig_port->dp; + +if (intel_dp->active_mst_links ==0 && + dig_port->base.post_pll_disable) + dig_port->base.post_pll_disable (state, encoder, old_crtc_state, old_conn_state); +} + static void intel_mst_pre_pll_enable_dp(struct intel_atomic_state *state, struct intel_encoder *encoder, const struct intel_crtc_state *pipe_config,
@@ -1146,6 +1160,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *dig_port, enum pipe intel_encoder->compute_config_late = intel_dp_mst_compute_config_late; intel_encoder->disable = intel_mst_disable_dp; intel_encoder->post_disable = intel_mst_post_disable_dp; + intel_encoder->post_pll_disable = intel_mst_post_pll_disable_dp; intel_encoder->update_pipe = intel_ddi_update_pipe; intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp; intel_encoder->pre_enable = intel_mst_pre_enable_dp;
drivers/gpu/drm/i915/display/intel_modeset_setup.c +0 -1
@@ -96,7 +96,6 @@ static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,intel_fbc_disable (crtc);intel_update_watermarks (i915); -intel_disable_shared_dpll (crtc_state);intel_display_power_put_all_in_set (i915, &crtc->enabled_power_domains);
drivers/hwtracing/coresight/coresight-etm-perf.c +1 -0
@@ -402,6 +402,7 @@ static void *etm_setup_aux(struct perf_event *event, void **pages, trace_id =coresight_trace_id_get_cpu_id (cpu);if (!IS_VALID_CS_TRACE_ID (trace_id)) {cpumask_clear_cpu (cpu, mask); +coresight_release_path (path);continue ; }
drivers/net/ethernet/freescale/fec_main.c +11 -6
@@ -3834,6 +3834,11 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep, index =fec_enet_get_bd_index (last_bdp, &txq->bd); txq->tx_skbuff[index] =NULL ; +/* Make sure the updates to rest of the descriptor are performed before +* transferring ownership. +*/ +dma_wmb (); +/* Send it on its way. Tell FEC it's ready, interrupt when done, * it's the last BD of the frame, and to put the CRC on the end. */
@@ -3843,8 +3848,14 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep,/* If this was the last BD in the ring, start at the beginning again. */ bdp =fec_enet_get_nextdesc (last_bdp, &txq->bd); +/* Make sure the update to bdp are performed before txq->bd.cur. */ +dma_wmb (); + txq->bd.cur = bdp; +/* Trigger transmission start */ +writel (0 , txq->bd.reg_desc_active); +return 0 ; }
@@ -3873,12 +3884,6 @@ static int fec_enet_xdp_xmit(struct net_device *dev, sent_frames++; } -/* Make sure the update to bdp and tx_skbuff are performed. */ -wmb (); - -/* Trigger transmission start */ -writel (0 , txq->bd.reg_desc_active); -__netif_tx_unlock (nq);return sent_frames;
drivers/net/ethernet/mellanox/mlx5/core/Makefile +1 -1
@@ -69,7 +69,7 @@ mlx5_core-$(CONFIG_MLX5_TC_SAMPLE) += en/tc/sample.o # mlx5_core-$(CONFIG_MLX5_ESWITCH) += eswitch.o eswitch_offloads.o eswitch_offloads_termtbl.o \ ecpf.o rdma.o esw/legacy.o \ - esw/debugfs.o esw/devlink_port.o esw/vporttbl.o esw/qos.o + esw/devlink_port.o esw/vporttbl.o esw/qos.o mlx5_core-$(CONFIG_MLX5_ESWITCH) += esw/acl/helper.o \ esw/acl/egress_lgcy.o esw/acl/egress_ofld.o \
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +27 -7
@@ -5793,22 +5793,43 @@ bool mlx5e_tc_update_skb_nic(struct mlx5_cqe64 *cqe, struct sk_buff *skb) 0, NULL); } +static struct mapping_ctx * +mlx5e_get_priv_obj_mapping (struct mlx5e_priv *priv) +{ +struct mlx5e_tc_table *tc; +struct mlx5_eswitch *esw; +struct mapping_ctx *ctx; + +if (is_mdev_switchdev_mode (priv->mdev)) { + esw = priv->mdev->priv.eswitch; + ctx = esw->offloads.reg_c0_obj_pool; + }else { + tc =mlx5e_fs_get_tc (priv->fs); + ctx = tc->mapping; + } + +return ctx; +} +int mlx5e_tc_action_miss_mapping_get (struct mlx5e_priv *priv,struct mlx5_flow_attr *attr,u64 act_miss_cookie,u32 *act_miss_mapping) { -struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;struct mlx5_mapped_obj mapped_obj = {}; +struct mlx5_eswitch *esw;struct mapping_ctx *ctx;int err; - ctx = esw->offloads.reg_c0_obj_pool; - + ctx =mlx5e_get_priv_obj_mapping (priv); mapped_obj.type =MLX5_MAPPED_OBJ_ACT_MISS ; mapped_obj.act_miss_cookie = act_miss_cookie; err =mapping_add (ctx, &mapped_obj, act_miss_mapping);if (err)return err; +if (!is_mdev_switchdev_mode (priv->mdev)) +return 0 ; + + esw = priv->mdev->priv.eswitch; attr->act_id_restore_rule =esw_add_restore_rule (esw, *act_miss_mapping);if (IS_ERR (attr->act_id_restore_rule)) goto err_rule;
@@ -5823,10 +5844,9 @@ int mlx5e_tc_action_miss_mapping_get(struct mlx5e_priv *priv, struct mlx5_flow_avoid mlx5e_tc_action_miss_mapping_put (struct mlx5e_priv *priv,struct mlx5_flow_attr *attr,u32 act_miss_mapping) { -struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; -struct mapping_ctx *ctx; +struct mapping_ctx *ctx =mlx5e_get_priv_obj_mapping (priv); - ctx = esw->offloads.reg_c0_obj_pool; -mlx5_del_flow_rules (attr->act_id_restore_rule); +if (is_mdev_switchdev_mode (priv->mdev)) +mlx5_del_flow_rules (attr->act_id_restore_rule);mapping_remove (ctx, act_miss_mapping); }
drivers/net/ethernet/mellanox/mlx5/core/esw/debugfs.c deleted +0 -198
198 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +0 -6
@@ -36,7 +36,6 @@#include <linux/mlx5/vport.h> #include <linux/mlx5/fs.h> #include <linux/mlx5/mpfs.h> -#include <linux/debugfs.h> #include "esw/acl/lgcy.h" #include "esw/legacy.h" #include "esw/qos.h"
@@ -1056,7 +1055,6 @@ int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, u16 vport_num,if (err)return err; -mlx5_esw_vport_debugfs_create (esw, vport_num, false,0 ); err =esw_offloads_load_rep (esw, vport_num);if (err) goto err_rep;
@@ -1064,7 +1062,6 @@ int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, u16 vport_num,return err; err_rep: -mlx5_esw_vport_debugfs_destroy (esw, vport_num);mlx5_esw_vport_disable (esw, vport_num);return err; }
@@ -1072,7 +1069,6 @@ int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, u16 vport_num,void mlx5_eswitch_unload_vport (struct mlx5_eswitch *esw,u16 vport_num) {esw_offloads_unload_rep (esw, vport_num); -mlx5_esw_vport_debugfs_destroy (esw, vport_num);mlx5_esw_vport_disable (esw, vport_num); }
@@ -1672,7 +1668,6 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev) dev->priv.eswitch = esw;BLOCKING_INIT_NOTIFIER_HEAD (&esw->n_head); - esw->dbgfs =debugfs_create_dir ("esw" ,mlx5_debugfs_get_dev_root (esw->dev)); esw_info(dev, "Total vports %d, per vport: max uc(%d) max mc(%d)\n", esw->total_vports,
@@ -1696,7 +1691,6 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)esw_info (esw->dev,"cleanup\n" ); -debugfs_remove_recursive (esw->dbgfs); esw->dev->priv.eswitch =NULL ;destroy_workqueue (esw->work_queue);WARN_ON (refcount_read (&esw->qos.refcnt));
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +1 -5
@@ -195,7 +195,6 @@ struct mlx5_vport {enum mlx5_eswitch_vport_event enabled_events;int index;struct devlink_port *dl_port; -struct dentry *dbgfs; };struct mlx5_esw_indir_table ;
@@ -342,7 +341,7 @@ struct mlx5_eswitch {u32 large_group_num; } params;struct blocking_notifier_head n_head; -struct dentry *dbgfs; +bool paired[MLX5_MAX_PORTS ]; };void esw_offloads_disable (struct mlx5_eswitch *esw);
@@ -705,9 +704,6 @@ int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_void mlx5_esw_offloads_devlink_port_unregister (struct mlx5_eswitch *esw,u16 vport_num);struct devlink_port *mlx5_esw_offloads_devlink_port (struct mlx5_eswitch *esw,u16 vport_num); -void mlx5_esw_vport_debugfs_create (struct mlx5_eswitch *esw,u16 vport_num,bool is_sf,u16 sf_num); -void mlx5_esw_vport_debugfs_destroy (struct mlx5_eswitch *esw,u16 vport_num); -int mlx5_esw_devlink_sf_port_register (struct mlx5_eswitch *esw,struct devlink_port *dl_port,u16 vport_num,u32 controller,u32 sfnum);void mlx5_esw_devlink_sf_port_unregister (struct mlx5_eswitch *esw,u16 vport_num);
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +8 -4
@@ -2744,6 +2744,9 @@ static int mlx5_esw_offloads_devcom_event(int event, mlx5_eswitch_vport_match_metadata_enabled(peer_esw)) break; +if (esw->paired[mlx5_get_dev_index (peer_esw->dev)]) +break ; + err =mlx5_esw_offloads_set_ns_peer (esw, peer_esw, true);if (err) goto err_out;
@@ -2755,14 +2758,18 @@ static int mlx5_esw_offloads_devcom_event(int event,if (err) goto err_pair; + esw->paired[mlx5_get_dev_index (peer_esw->dev)] = true; + peer_esw->paired[mlx5_get_dev_index (esw->dev)] = true;mlx5_devcom_set_paired (devcom,MLX5_DEVCOM_ESW_OFFLOADS , true);break ;case ESW_OFFLOADS_DEVCOM_UNPAIR : -if (!mlx5_devcom_is_paired (devcom,MLX5_DEVCOM_ESW_OFFLOADS )) +if (!esw->paired[mlx5_get_dev_index (peer_esw->dev)])break ;mlx5_devcom_set_paired (devcom,MLX5_DEVCOM_ESW_OFFLOADS , false); + esw->paired[mlx5_get_dev_index (peer_esw->dev)] = false; + peer_esw->paired[mlx5_get_dev_index (esw->dev)] = false;mlx5_esw_offloads_unpair (peer_esw);mlx5_esw_offloads_unpair (esw);mlx5_esw_offloads_set_ns_peer (esw, peer_esw, false);
@@ -3777,14 +3784,12 @@ int mlx5_esw_offloads_sf_vport_enable(struct mlx5_eswitch *esw, struct devlink_pif (err) goto devlink_err; -mlx5_esw_vport_debugfs_create (esw, vport_num, true, sfnum); err =mlx5_esw_offloads_rep_load (esw, vport_num);if (err) goto rep_err;return 0 ; rep_err: -mlx5_esw_vport_debugfs_destroy (esw, vport_num);mlx5_esw_devlink_sf_port_unregister (esw, vport_num); devlink_err:mlx5_esw_vport_disable (esw, vport_num);
@@ -3794,7 +3799,6 @@ int mlx5_esw_offloads_sf_vport_enable(struct mlx5_eswitch *esw, struct devlink_pvoid mlx5_esw_offloads_sf_vport_disable (struct mlx5_eswitch *esw,u16 vport_num) {mlx5_esw_offloads_rep_unload (esw, vport_num); -mlx5_esw_vport_debugfs_destroy (esw, vport_num);mlx5_esw_devlink_sf_port_unregister (esw, vport_num);mlx5_esw_vport_disable (esw, vport_num); }
drivers/net/phy/mscc/mscc.h +1 -0
@@ -179,6 +179,7 @@ enum rgmii_clock_delay {#define VSC8502_RGMII_CNTL 20#define VSC8502_RGMII_RX_DELAY_MASK 0x0070#define VSC8502_RGMII_TX_DELAY_MASK 0x0007 +#define VSC8502_RGMII_RX_CLK_DISABLE 0x0800#define MSCC_PHY_WOL_LOWER_MAC_ADDR 21#define MSCC_PHY_WOL_MID_MAC_ADDR 22
drivers/net/phy/mscc/mscc_main.c +28 -26
84 lines not on this page · raw message
drivers/platform/x86/amd/pmf/core.c +25 -7
@@ -245,24 +245,29 @@ static const struct pci_device_id pmf_pci_ids[] = { { } }; -int amd_pmf_init_metrics_table (struct amd_pmf_dev *dev) +static void amd_pmf_set_dram_addr (struct amd_pmf_dev *dev) {u64 phys_addr;u32 hi, low; -INIT_DELAYED_WORK (&dev->work_buffer, amd_pmf_get_metrics); + phys_addr =virt_to_phys (dev->buf); + hi = phys_addr >>32 ; + low = phys_addr &GENMASK (31 ,0 ); + +amd_pmf_send_cmd (dev,SET_DRAM_ADDR_HIGH ,0 , hi,NULL ); +amd_pmf_send_cmd (dev,SET_DRAM_ADDR_LOW ,0 , low,NULL ); +} +int amd_pmf_init_metrics_table (struct amd_pmf_dev *dev) +{/* Get Metrics Table Address */ dev->buf =kzalloc (sizeof (dev->m_table),GFP_KERNEL );if (!dev->buf)return -ENOMEM ; - phys_addr =virt_to_phys (dev->buf); - hi = phys_addr >>32 ; - low = phys_addr &GENMASK (31 ,0 ); +INIT_DELAYED_WORK (&dev->work_buffer, amd_pmf_get_metrics); -amd_pmf_send_cmd (dev,SET_DRAM_ADDR_HIGH ,0 , hi,NULL ); -amd_pmf_send_cmd (dev,SET_DRAM_ADDR_LOW ,0 , low,NULL ); +amd_pmf_set_dram_addr (dev);/* * Start collecting the metrics data after a small delay
@@ -273,6 +278,18 @@ int amd_pmf_init_metrics_table(struct amd_pmf_dev *dev)return 0 ; } +static int amd_pmf_resume_handler (struct device *dev) +{ +struct amd_pmf_dev *pdev =dev_get_drvdata (dev); + +if (pdev->buf) +amd_pmf_set_dram_addr (pdev); + +return 0 ; +} + +static DEFINE_SIMPLE_DEV_PM_OPS(amd_pmf_pm, NULL, amd_pmf_resume_handler); +static void amd_pmf_init_features (struct amd_pmf_dev *dev) {int ret;
@@ -414,6 +431,7 @@ static struct platform_driver amd_pmf_driver = { .name = "amd-pmf", .acpi_match_table = amd_pmf_acpi_ids, .dev_groups = amd_pmf_driver_groups, + .pm = pm_sleep_ptr(&amd_pmf_pm), }, .probe = amd_pmf_probe, .remove = amd_pmf_remove,
drivers/power/supply/rt9467-charger.c +1 -1
@@ -1023,7 +1023,7 @@ static int rt9467_request_interrupt(struct rt9467_chg_data *data)for (i =0 ; i < num_chg_irqs; i++) { virq =regmap_irq_get_virq (data->irq_chip_data, chg_irqs[i].hwirq);if (virq <=0 ) -return dev_err_probe (dev, virq,"Failed to get (%s) irq\n" , +return dev_err_probe (dev, -EINVAL ,"Failed to get (%s) irq\n" , chg_irqs[i].name); ret = devm_request_threaded_irq(dev, virq, NULL, chg_irqs[i].handler,
drivers/spi/spi-geni-qcom.c +2 -0
@@ -294,6 +294,8 @@ static void spi_geni_set_cs(struct spi_device *slv, bool set_flag) mas->cs_flag = set_flag;/* set xfer_mode to FIFO to complete cs_done in isr */ mas->cur_xfer_mode =GENI_SE_FIFO ; +geni_se_select_mode (se, mas->cur_xfer_mode); +reinit_completion (&mas->cs_done);if (set_flag)geni_se_setup_m_cmd (se,SPI_CS_ASSERT ,0 );
drivers/vfio/vfio_iommu_type1.c +5 -0
@@ -860,6 +860,11 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data,if (ret) goto pin_unwind; +if (!pfn_valid (phys_pfn)) { + ret = -EINVAL ; + goto pin_unwind; + } + ret =vfio_add_to_pfn_list (dma, iova, phys_pfn);if (ret) {if (put_pfn (phys_pfn, dma->prot) && do_accounting)
include/linux/skbuff.h +10 -0
@@ -1577,6 +1577,16 @@ static inline void skb_copy_hash(struct sk_buff *to, const struct sk_buff *from) to->l4_hash = from->l4_hash; }; +static inline int skb_cmp_decrypted (const struct sk_buff *skb1, +const struct sk_buff *skb2) +{ +#ifdef CONFIG_TLS_DEVICE +return skb2->decrypted - skb1->decrypted; +#else +return 0 ; +#endif +} +static inline void skb_copy_decrypted (struct sk_buff *to,const struct sk_buff *from) {
include/linux/skmsg.h +1 -2
@@ -71,7 +71,6 @@ struct sk_psock_link { };struct sk_psock_work_state { -struct sk_buff *skb;u32 len;u32 off; };
@@ -105,7 +104,7 @@ struct sk_psock {struct proto *sk_proto;struct mutex work_mutex;struct sk_psock_work_state work_state; -struct work_struct work; +struct delayed_work work;struct rcu_work rwork; };
include/net/tcp.h +10 -0
@@ -1467,6 +1467,8 @@ static inline void tcp_adjust_rcv_ssthresh(struct sock *sk) }void tcp_cleanup_rbuf (struct sock *sk,int copied); +void __tcp_cleanup_rbuf (struct sock *sk,int copied); +/* We provision sk_rcvbuf around 200% of sk_rcvlowat. * If 87.5 % (7/8) of the space has been consumed, we want to override
@@ -2323,6 +2325,14 @@ int tcp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);void tcp_bpf_clone (const struct sock *sk,struct sock *newsk);#endif /* CONFIG_BPF_SYSCALL */ +#ifdef CONFIG_INET +void tcp_eat_skb (struct sock *sk,struct sk_buff *skb); +#else +static inline void tcp_eat_skb (struct sock *sk,struct sk_buff *skb) +{ +} +#endif +int tcp_bpf_sendmsg_redir (struct sock *sk,bool ingress,struct sk_msg *msg,u32 bytes,int flags);#endif /* CONFIG_NET_SOCK_MSG */
include/net/tls.h +1 -0
@@ -124,6 +124,7 @@ struct tls_strparser { u32 mark : 8; u32 stopped : 1; u32 copy_mode : 1; + u32 mixed_decrypted : 1; u32 msg_ready : 1;struct strp_msg stm;
kernel/bpf/offload.c +1 -1
@@ -853,4 +853,4 @@ static int __init bpf_offload_init(void)return rhashtable_init (&offdevs, &offdevs_params); } -late_initcall (bpf_offload_init); +core_initcall (bpf_offload_init);
net/bluetooth/hci_sock.c +28 -0
@@ -987,6 +987,34 @@ static int hci_sock_ioctl(struct socket *sock, unsigned int cmd,BT_DBG ("cmd %x arg %lx" , cmd, arg); +/* Make sure the cmd is valid before doing anything */ +switch (cmd) { +case HCIGETDEVLIST : +case HCIGETDEVINFO : +case HCIGETCONNLIST : +case HCIDEVUP : +case HCIDEVDOWN : +case HCIDEVRESET : +case HCIDEVRESTAT : +case HCISETSCAN : +case HCISETAUTH : +case HCISETENCRYPT : +case HCISETPTYPE : +case HCISETLINKPOL : +case HCISETLINKMODE : +case HCISETACLMTU : +case HCISETSCOMTU : +case HCIINQUIRY : +case HCISETRAW : +case HCIGETCONNINFO : +case HCIGETAUTHINFO : +case HCIBLOCKADDR : +case HCIUNBLOCKADDR : +break ; +default : +return -ENOIOCTLCMD ; + } +lock_sock (sk);if (hci_pi (sk)->channel !=HCI_CHANNEL_RAW ) {
net/core/skmsg.c +38 -43
227 lines not on this page · raw message
net/core/sock_map.c +2 -1
@@ -1624,9 +1624,10 @@ void sock_map_close(struct sock *sk, long timeout)rcu_read_unlock ();sk_psock_stop (psock);release_sock (sk); -cancel_work_sync (&psock->work); +cancel_delayed_work_sync (&psock->work);sk_psock_put (sk, psock); } +/* Make sure we do not recurse. This is a bug. * Leak the socket instead of crashing on a stack overflow. */
net/ipv4/tcp.c +1 -10
@@ -1570,7 +1570,7 @@ static int tcp_peek_sndq(struct sock *sk, struct msghdr *msg, int len)* calculation of whether or not we must ACK for the sake of * a window update. */ -static void __tcp_cleanup_rbuf (struct sock *sk,int copied) +void __tcp_cleanup_rbuf (struct sock *sk,int copied) {struct tcp_sock *tp =tcp_sk (sk);bool time_to_ack = false;
@@ -1772,7 +1772,6 @@ int tcp_read_skb(struct sock *sk, skb_read_actor_t recv_actor)WARN_ON_ONCE (!skb_set_owner_sk_safe (skb, sk)); tcp_flags =TCP_SKB_CB (skb)->tcp_flags; used =recv_actor (sk, skb); -consume_skb (skb);if (used <0 ) {if (!copied) copied = used;
@@ -1786,14 +1785,6 @@ int tcp_read_skb(struct sock *sk, skb_read_actor_t recv_actor)break ; } } -WRITE_ONCE (tp->copied_seq, seq); - -tcp_rcv_space_adjust (sk); - -/* Clean up data we have read: This will do ACK frames. */ -if (copied >0 ) -__tcp_cleanup_rbuf (sk, copied); -return copied; }EXPORT_SYMBOL (tcp_read_skb);
net/ipv4/tcp_bpf.c +78 -1
112 lines not on this page · raw message
net/ipv4/udp.c +2 -5
@@ -1813,7 +1813,7 @@ EXPORT_SYMBOL(__skb_recv_udp);int udp_read_skb (struct sock *sk,skb_read_actor_t recv_actor) {struct sk_buff *skb; -int err, copied; +int err; try_again: skb =skb_recv_udp (sk,MSG_DONTWAIT , &err);
@@ -1832,10 +1832,7 @@ int udp_read_skb(struct sock *sk, skb_read_actor_t recv_actor) }WARN_ON_ONCE (!skb_set_owner_sk_safe (skb, sk)); - copied =recv_actor (sk, skb); -kfree_skb (skb); - -return copied; +return recv_actor (sk, skb); }EXPORT_SYMBOL (udp_read_skb);
net/netfilter/nf_conntrack_netlink.c +0 -8
@@ -1559,9 +1559,6 @@ static const struct nla_policy ct_nla_policy[CTA_MAX+1] = {static int ctnetlink_flush_iterate (struct nf_conn *ct,void *data) { -if (test_bit (IPS_OFFLOAD_BIT , &ct->status)) -return 0 ; -return ctnetlink_filter_match (ct, data); }
@@ -1631,11 +1628,6 @@ static int ctnetlink_del_conntrack(struct sk_buff *skb, ct =nf_ct_tuplehash_to_ctrack (h); -if (test_bit (IPS_OFFLOAD_BIT , &ct->status)) { -nf_ct_put (ct); -return -EBUSY ; - } -if (cda[CTA_ID ]) {__be32 id =nla_get_be32 (cda[CTA_ID ]);
net/tls/tls.h +5 -0
@@ -167,6 +167,11 @@ static inline bool tls_strp_msg_ready(struct tls_sw_context_rx *ctx)return ctx->strp.msg_ready; } +static inline bool tls_strp_msg_mixed_decrypted (struct tls_sw_context_rx *ctx) +{ +return ctx->strp.mixed_decrypted; +} +#ifdef CONFIG_TLS_DEVICE int tls_device_init (void );void tls_device_cleanup (void );
net/tls/tls_device.c +8 -14
@@ -1007,20 +1007,14 @@ int tls_device_decrypted(struct sock *sk, struct tls_context *tls_ctx)struct tls_sw_context_rx *sw_ctx =tls_sw_ctx_rx (tls_ctx);struct sk_buff *skb =tls_strp_msg (sw_ctx);struct strp_msg *rxm =strp_msg (skb); -int is_decrypted = skb->decrypted; -int is_encrypted = !is_decrypted; -struct sk_buff *skb_iter; -int left; - - left = rxm->full_len - skb->len; -/* Check if all the data is decrypted already */ - skb_iter =skb_shinfo (skb)->frag_list; -while (skb_iter && left >0 ) { - is_decrypted &= skb_iter->decrypted; - is_encrypted &= !skb_iter->decrypted; - - left -= skb_iter->len; - skb_iter = skb_iter->next; +int is_decrypted, is_encrypted; + +if (!tls_strp_msg_mixed_decrypted (sw_ctx)) { + is_decrypted = skb->decrypted; + is_encrypted = !is_decrypted; + }else { + is_decrypted =0 ; + is_encrypted =0 ; } trace_tls_device_decrypted(sk, tcp_sk(sk)->copied_seq - rxm->full_len,
net/tls/tls_strp.c +149 -36
267 lines not on this page · raw message
net/tls/tls_sw.c +4 -0
@@ -2304,10 +2304,14 @@ static void tls_data_ready(struct sock *sk)struct tls_context *tls_ctx =tls_get_ctx (sk);struct tls_sw_context_rx *ctx =tls_sw_ctx_rx (tls_ctx);struct sk_psock *psock; +gfp_t alloc_save;trace_sk_data_ready (sk); + alloc_save = sk->sk_allocation; + sk->sk_allocation =GFP_ATOMIC ;tls_strp_data_ready (&ctx->strp); + sk->sk_allocation = alloc_save; psock =sk_psock_get (sk);if (psock) {
net/unix/af_unix.c +2 -5
@@ -2553,7 +2553,7 @@ static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor) {struct unix_sock *u =unix_sk (sk);struct sk_buff *skb; -int err, copied; +int err;mutex_lock (&u->iolock); skb =skb_recv_datagram (sk,MSG_DONTWAIT , &err);
@@ -2561,10 +2561,7 @@ static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor)if (!skb)return err; - copied =recv_actor (sk, skb); -kfree_skb (skb); - -return copied; +return recv_actor (sk, skb); }/*
sound/soc/intel/avs/control.c +15 -7
@@ -21,17 +21,25 @@ static struct avs_dev *avs_get_kcontrol_adev(struct snd_kcontrol *kcontrol)return to_avs_dev (w->dapm->component->dev); } -static struct avs_path_module *avs_get_kcontrol_module (struct avs_dev *adev,u32 id) +static struct avs_path_module *avs_get_volume_module (struct avs_dev *adev,u32 id) {struct avs_path *path;struct avs_path_pipeline *ppl;struct avs_path_module *mod; -list_for_each_entry (path, &adev->path_list, node) -list_for_each_entry (ppl, &path->ppl_list, node) -list_for_each_entry (mod, &ppl->mod_list, node) -if (mod->template->ctl_id && mod->template->ctl_id == id) +spin_lock (&adev->path_list_lock); +list_for_each_entry (path, &adev->path_list, node) { +list_for_each_entry (ppl, &path->ppl_list, node) { +list_for_each_entry (mod, &ppl->mod_list, node) { +if (guid_equal (&mod->template->cfg_ext->type, &AVS_PEAKVOL_MOD_UUID ) + && mod->template->ctl_id == id) { +spin_unlock (&adev->path_list_lock);return mod; + } + } + } + } +spin_unlock (&adev->path_list_lock);return NULL ; }
@@ -49,7 +57,7 @@ int avs_control_volume_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_va/* prevent access to modules while path is being constructed */ mutex_lock (&adev->path_mutex); - active_module =avs_get_kcontrol_module (adev, ctl_data->id); + active_module =avs_get_volume_module (adev, ctl_data->id);if (active_module) { ret = avs_ipc_peakvol_get_volume(adev, active_module->module_id, active_module->instance_id, &dspvols,
@@ -89,7 +97,7 @@ int avs_control_volume_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_va changed =1 ; } - active_module =avs_get_kcontrol_module (adev, ctl_data->id); + active_module =avs_get_volume_module (adev, ctl_data->id);if (active_module) { dspvol.channel_id =AVS_ALL_CHANNELS_MASK ; dspvol.target_volume = *volume;
tools/testing/selftests/bpf/Makefile +1 -1
@@ -197,7 +197,7 @@ $(OUTPUT)/urandom_read: urandom_read.c urandom_read_aux.c $(OUTPUT)/liburandom_r $(OUTPUT)/sign-file: ../../../../scripts/sign-file.c $(call msg,SIGN-FILE,,$@) - $(Q)$(CC) $(shell $(HOSTPKG_CONFIG)--cflags libcrypto 2> /dev/null) \ + $(Q)$(CC) $(shell $(HOSTPKG_CONFIG) --cflags libcrypto 2> /dev/null) \ $< -o $@ \ $(shell $(HOSTPKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto)