Linux 5.15.50
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.50 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm64/mm/cache.S | 2 arch/s390/mm/pgtable.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 30 ++++ drivers/net/ethernet/microsoft/mana/mana_en.c | 7 - drivers/tty/serial/amba-pl011.c | 15 -- drivers/tty/serial/serial_core.c | 34 +---- drivers/usb/gadget/function/u_ether.c | 11 + fs/zonefs/super.c | 94 ++++++++++----- kernel/bpf/btf.c | 5 tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c | 14 ++ tools/testing/selftests/bpf/progs/freplace_global_func.c | 18 ++ 12 files changed, 155 insertions(+), 79 deletions(-)
Christian Borntraeger (1):
s390/mm: use non-quiescing sske for KVM switch to keyed guest
Damien Le Moal (1):
zonefs: fix zonefs_iomap_begin() for reads
Greg Kroah-Hartman (1):
Linux 5.15.50
Haiyang Zhang (1):
net: mana: Add handling of CQE_RX_TRUNCATED
Lukas Wunner (1):
serial: core: Initialize rs485 RTS polarity already on probe
Marian Postevca (1):
usb: gadget: u_ether: fix regression in setting fixed MAC address
Nicholas Kazlauskas (1):
drm/amd/display: Don't reinitialize DMCUB on s0ix resume
Toke Høiland-Jørgensen (2):
bpf: Fix calling global functions from BPF_PROG_TYPE_EXT programs selftests/bpf: Add selftest for calling global functions from freplace
Will Deacon (1):
arm64: mm: Don't invalidate FROM_DEVICE buffers at start of DMA transfer
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 49 +SUBLEVEL = 50 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/mm/cache.S +0 -2
@@ -231,8 +231,6 @@ SYM_FUNC_END_PI(__dma_flush_area) */ SYM_FUNC_START_PI(__dma_map_area) add x1, x0, x1 - cmp w2, #DMA_FROM_DEVICE - b.eq __dma_inv_area b __dma_clean_area SYM_FUNC_END_PI(__dma_map_area)
arch/s390/mm/pgtable.c +1 -1
@@ -748,7 +748,7 @@ void ptep_zap_key(struct mm_struct *mm, unsigned long addr, pte_t *ptep)pgste_val (pgste) |=PGSTE_GR_BIT |PGSTE_GC_BIT ; ptev =pte_val (*ptep);if (!(ptev & _PAGE_INVALID) && (ptev & _PAGE_WRITE)) -page_set_storage_key (ptev &PAGE_MASK ,PAGE_DEFAULT_KEY ,1 ); +page_set_storage_key (ptev &PAGE_MASK ,PAGE_DEFAULT_KEY ,0 );pgste_set_unlock (ptep, pgste);preempt_enable (); }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +27 -3
@@ -989,6 +989,32 @@ static int dm_dmub_hw_init(struct amdgpu_device *adev)return 0 ; } +static void dm_dmub_hw_resume (struct amdgpu_device *adev) +{ +struct dmub_srv *dmub_srv = adev->dm.dmub_srv; +enum dmub_status status; +bool init; + +if (!dmub_srv) { +/* DMUB isn't supported on the ASIC. */ +return ; + } + + status =dmub_srv_is_hw_init (dmub_srv, &init); +if (status !=DMUB_STATUS_OK ) +DRM_WARN ("DMUB hardware init check failed: %d\n" , status); + +if (status ==DMUB_STATUS_OK && init) { +/* Wait for firmware load to finish. */ + status =dmub_srv_wait_for_auto_load (dmub_srv,100000 ); +if (status !=DMUB_STATUS_OK ) +DRM_WARN ("Wait for DMUB auto-load failed: %d\n" , status); + }else { +/* Perform the full hardware initialization. */ +dm_dmub_hw_init (adev); + } +} +#if defined(CONFIG_DRM_AMD_DC_DCN )static void mmhub_read_system_context (struct amdgpu_device *adev,struct dc_phy_addr_space_config *pa_config) {
@@ -2268,9 +2294,7 @@ static int dm_resume(void *handle)amdgpu_dm_outbox_init (adev);/* Before powering on DC we need to re-initialize DMUB. */ - r =dm_dmub_hw_init (adev); -if (r) -DRM_ERROR ("DMUB interface failed to initialize: status=%d\n" , r); +dm_dmub_hw_resume (adev);/* power on hardware */ dc_set_power_state (dm->dc,DC_ACPI_CM_POWER_STATE_D0 );
drivers/net/ethernet/microsoft/mana/mana_en.c +5 -2
@@ -980,8 +980,10 @@ static void mana_process_rx_cqe(struct mana_rxq *rxq, struct mana_cq *cq,break ;case CQE_RX_TRUNCATED : -netdev_err (ndev,"Dropped a truncated packet\n" ); -return ; + ++ndev->stats.rx_dropped; + rxbuf_oob = &rxq->rx_oobs[rxq->buf_index]; +netdev_warn_once (ndev,"Dropped a truncated packet\n" ); + goto drop;case CQE_RX_COALESCED_4 :netdev_err (ndev,"RX coalescing is unsupported\n" );
@@ -1043,6 +1045,7 @@ static void mana_process_rx_cqe(struct mana_rxq *rxq, struct mana_cq *cq,mana_rx_skb (old_buf, oob, rxq); +drop:mana_move_wq_tail (rxq->gdma_rq, rxbuf_oob->wqe_inf.wqe_size_in_bu);mana_post_pkt_rxq (rxq);
drivers/tty/serial/amba-pl011.c +1 -14
@@ -1620,13 +1620,6 @@ static void pl011_set_mctrl(struct uart_port *port, unsigned int mctrl) container_of(port, struct uart_amba_port, port);unsigned int cr; -if (port->rs485.flags &SER_RS485_ENABLED ) { -if (port->rs485.flags &SER_RS485_RTS_AFTER_SEND ) - mctrl &= ~TIOCM_RTS ; -else - mctrl |=TIOCM_RTS ; - } - cr =pl011_read (uap,REG_CR );#define TIOCMBIT (tiocmbit, uartbit) \
@@ -1850,14 +1843,8 @@ static int pl011_startup(struct uart_port *port) cr = uap->old_cr & (UART011_CR_RTS |UART011_CR_DTR ); cr |= UART01x_CR_UARTEN |UART011_CR_RXE ; -if (port->rs485.flags &SER_RS485_ENABLED ) { -if (port->rs485.flags &SER_RS485_RTS_AFTER_SEND ) - cr &= ~UART011_CR_RTS ; -else - cr |=UART011_CR_RTS ; - }else { +if (!(port->rs485.flags &SER_RS485_ENABLED )) cr |=UART011_CR_TXE ; - }pl011_write (cr, uap,REG_CR );
drivers/tty/serial/serial_core.c +12 -22
@@ -144,6 +144,11 @@ uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)unsigned long flags;unsigned int old; +if (port->rs485.flags &SER_RS485_ENABLED ) { + set &= ~TIOCM_RTS ; + clear &= ~TIOCM_RTS ; + } +spin_lock_irqsave (&port->lock, flags); old = port->mctrl; port->mctrl = (old & ~clear) | set;
@@ -157,23 +162,10 @@ uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)static void uart_port_dtr_rts (struct uart_port *uport,int raise) { -int rs485_on = uport->rs485_config && - (uport->rs485.flags &SER_RS485_ENABLED ); -int RTS_after_send = !!(uport->rs485.flags &SER_RS485_RTS_AFTER_SEND ); - -if (raise) { -if (rs485_on && RTS_after_send) { -uart_set_mctrl (uport,TIOCM_DTR ); -uart_clear_mctrl (uport,TIOCM_RTS ); - }else { -uart_set_mctrl (uport,TIOCM_DTR |TIOCM_RTS ); - } - }else { -unsigned int clear =TIOCM_DTR ; - - clear |= (!rs485_on || RTS_after_send) ?TIOCM_RTS :0 ; -uart_clear_mctrl (uport, clear); - } +if (raise) +uart_set_mctrl (uport,TIOCM_DTR |TIOCM_RTS ); +else +uart_clear_mctrl (uport,TIOCM_DTR |TIOCM_RTS ); }/*
@@ -1089,11 +1081,6 @@ uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear) goto out;if (!tty_io_error (tty)) { -if (uport->rs485.flags &SER_RS485_ENABLED ) { - set &= ~TIOCM_RTS ; - clear &= ~TIOCM_RTS ; - } -uart_update_mctrl (uport, set, clear); ret =0 ; }
@@ -2408,6 +2395,9 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state,*/ spin_lock_irqsave (&port->lock, flags); port->mctrl &=TIOCM_DTR ; +if (port->rs485.flags &SER_RS485_ENABLED && + !(port->rs485.flags &SER_RS485_RTS_AFTER_SEND )) + port->mctrl |=TIOCM_RTS ; port->ops->set_mctrl (port, port->mctrl);spin_unlock_irqrestore (&port->lock, flags);
drivers/usb/gadget/function/u_ether.c +9 -2
@@ -774,9 +774,13 @@ struct eth_dev *gether_setup_name(struct usb_gadget *g, dev->qmult = qmult;snprintf (net->name,sizeof (net->name),"%s%%d" , netname); -if (get_ether_addr (dev_addr, net->dev_addr)) +if (get_ether_addr (dev_addr, net->dev_addr)) { + net->addr_assign_type =NET_ADDR_RANDOM ;dev_warn (&g->dev,"using random %s ethernet address\n" ,"self" ); + }else { + net->addr_assign_type =NET_ADDR_SET ; + }if (get_ether_addr (host_addr, dev->host_mac))dev_warn (&g->dev,"using random %s ethernet address\n" ,"host" );
@@ -833,6 +837,9 @@ struct net_device *gether_setup_name_default(const char *netname)INIT_LIST_HEAD (&dev->tx_reqs);INIT_LIST_HEAD (&dev->rx_reqs); +/* by default we always have a random MAC address */ + net->addr_assign_type =NET_ADDR_RANDOM ; +skb_queue_head_init (&dev->rx_frames);/* network device setup */
@@ -869,7 +876,6 @@ int gether_register_netdev(struct net_device *net) dev =netdev_priv (net); g = dev->gadget; - net->addr_assign_type =NET_ADDR_RANDOM ;eth_hw_addr_set (net, dev->dev_mac); status =register_netdev (net);
@@ -910,6 +916,7 @@ int gether_set_dev_addr(struct net_device *net, const char *dev_addr)if (get_ether_addr (dev_addr, new_addr))return -EINVAL ;memcpy (dev->dev_mac, new_addr,ETH_ALEN ); + net->addr_assign_type =NET_ADDR_SET ;return 0 ; }EXPORT_SYMBOL_GPL (gether_set_dev_addr);
fs/zonefs/super.c +64 -30
180 lines not on this page · raw message
kernel/bpf/btf.c +3 -2
@@ -5441,6 +5441,8 @@ static int btf_check_func_arg_match(struct bpf_verifier_env *env, struct bpf_reg_state *regs, bool ptr_to_mem_ok) { +enum bpf_prog_type prog_type = env->prog->type ==BPF_PROG_TYPE_EXT ? + env->prog->aux->dst_prog->type : env->prog->type;struct bpf_verifier_log *log = &env->log;const char *func_name, *ref_tname;const struct btf_type *t, *ref_t;
@@ -5533,8 +5535,7 @@ static int btf_check_func_arg_match(struct bpf_verifier_env *env, reg_ref_tname);return -EINVAL ; } - }else if (btf_get_prog_ctx_type (log, btf, t, - env->prog->type, i)) { + }else if (btf_get_prog_ctx_type (log, btf, t, prog_type, i)) {/* If function expects ctx type in BTF check that caller * is passing PTR_TO_CTX. */
tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c +14 -0
@@ -371,6 +371,18 @@ static void test_func_map_prog_compatibility(void) "./test_attach_probe.o"); } +static void test_func_replace_global_func (void ) +{ +const char *prog_name[] = { +"freplace/test_pkt_access" , + }; + +test_fexit_bpf2bpf_common ("./freplace_global_func.o" , +"./test_pkt_access.o" , +ARRAY_SIZE (prog_name), + prog_name, false,NULL ); +} +void test_fexit_bpf2bpf (void ) {if (test__start_subtest ("target_no_callees" ))
@@ -391,4 +403,6 @@ void test_fexit_bpf2bpf(void)test_func_replace_multi ();if (test__start_subtest ("fmod_ret_freplace" ))test_fmod_ret_freplace (); +if (test__start_subtest ("func_replace_global_func" )) +test_func_replace_global_func (); }
tools/testing/selftests/bpf/progs/freplace_global_func.c new file +18 -0
@@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <linux/bpf.h> +#include <bpf/bpf_helpers.h> + +__noinline +int test_ctx_global_func(struct __sk_buff *skb) +{ +volatile int retval =1 ; +return retval; +} + +SEC("freplace/test_pkt_access") +int new_test_pkt_access (struct __sk_buff *skb) +{ +return test_ctx_global_func (skb); +} + +char _license[] SEC("license") = "GPL";