Linux 6.6.86
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.86 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/mm/fault.c | 8 drivers/counter/microchip-tcb-capture.c | 19 ++ drivers/counter/stm32-lptimer-cnt.c | 24 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 - drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c | 2 drivers/gpu/drm/display/drm_dp_mst_topology.c | 36 +++- drivers/hid/hid-plantronics.c | 144 +++++++--------- drivers/memstick/host/rtsx_usb_ms.c | 1 drivers/net/usb/qmi_wwan.c | 2 drivers/net/usb/usbnet.c | 21 +- drivers/reset/starfive/reset-starfive-jh71x0.c | 3 drivers/tty/serial/8250/8250_dma.c | 2 drivers/tty/serial/8250/8250_pci.c | 46 +++++ drivers/tty/serial/fsl_lpuart.c | 17 + drivers/ufs/host/ufs-qcom.c | 4 drivers/usb/gadget/function/uvc_v4l2.c | 12 + include/drm/display/drm_dp_mst_helper.h | 2 mm/page_alloc.c | 14 + net/atm/mpc.c | 2 net/ipv6/netfilter/nf_socket_ipv6.c | 23 ++ sound/pci/hda/patch_realtek.c | 1 sound/usb/mixer_quirks.c | 51 +++++ 23 files changed, 339 insertions(+), 113 deletions(-)
Abhishek Tamboli (1):
usb: gadget: uvc: Fix ERR_PTR dereference in uvc_v4l2.c
Alex Hung (1):
drm/amd/display: Check denominator crb_pipes before used
Cameron Williams (2):
tty: serial: 8250: Add some more device IDs
tty: serial: 8250: Add Brainboxes XC devices
Changhuang Liang (1):
reset: starfive: jh71x0: Fix accessing the empty member on JH7110 SoC
Dhruv Deshpande (1):
ALSA: hda/realtek: Support mute LED on HP Laptop 15s-du3xxx
Dominique Martinet (1):
net: usb: usbnet: restore usb%d name exception for local mac addresses
Fabio Porcedda (2):
net: usb: qmi_wwan: add Telit Cinterion FN990B composition
net: usb: qmi_wwan: add Telit Cinterion FE990B composition
Fabrice Gasnier (1):
counter: stm32-lptimer-cnt: fix error handling when enabling
Greg Kroah-Hartman (1):
Linux 6.6.86
Imre Deak (2):
drm/dp_mst: Factor out function to queue a topology probe work drm/dp_mst: Add a helper to queue a topology probe
John Keeping (1):
serial: 8250_dma: terminate correct DMA in tx_dma_flush()
Kees Cook (2):
ARM: 9350/1: fault: Implement copy_from_kernel_nofault_allowed()
ARM: 9351/1: fault: Add "cut here" line for prefetch aborts
Kirill A. Shutemov (1):
mm/page_alloc: fix memory accept before watermarks gets initialized
Luo Qiu (1):
memstick: rtsx_usb_ms: Fix slab-use-after-free in rtsx_usb_ms_drv_remove
Manivannan Sadhasivam (1):
scsi: ufs: qcom: Only free platform MSIs when ESI is enabled
Maxim Mikityanskiy (1):
netfilter: socket: Lookup orig tuple for IPv6 SNAT
Minjoong Kim (1):
atm: Fix NULL pointer dereference
Sherry Sun (1):
tty: serial: fsl_lpuart: disable transmitter before changing RS485 related registers
Terry Junge (2):
ALSA: usb-audio: Add quirk for Plantronics headsets to fix control names
HID: hid-plantronics: Add mic mute mapping and generalize quirks
Wayne Lin (1):
drm/amd/display: Don't write DP_MSTM_CTRL after LT
William Breathitt Gray (1):
counter: microchip-tcb-capture: Fix undefined counter channel state on probe
Yanjun Yang (1):
ARM: Remove address checking for MMUless devices
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 85 +SUBLEVEL = 86 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm/mm/fault.c +8 -0
@@ -27,6 +27,13 @@#ifdef CONFIG_MMU +bool copy_from_kernel_nofault_allowed (const void *unsafe_src,size_t size) +{ +unsigned long addr = (unsigned long )unsafe_src; + +return addr >=TASK_SIZE &&ULONG_MAX - addr >= size; +} +/* * This is useful to dump out the page tables associated with * 'addr' in mm 'mm'.
@@ -556,6 +563,7 @@ do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs)if (!inf->fn (addr, ifsr |FSR_LNX_PF , regs))return ; +pr_alert ("8<--- cut here ---\n" );pr_alert ("Unhandled prefetch abort: %s (0x%03x) at 0x%08lx\n" , inf->name, ifsr, addr);
drivers/counter/microchip-tcb-capture.c +19 -0
@@ -368,6 +368,25 @@ static int mchp_tc_probe(struct platform_device *pdev) channel); } +/* Disable Quadrature Decoder and position measure */ + ret =regmap_update_bits (regmap,ATMEL_TC_BMR ,ATMEL_TC_QDEN |ATMEL_TC_POSEN ,0 ); +if (ret) +return ret; + +/* Setup the period capture mode */ + ret =regmap_update_bits (regmap,ATMEL_TC_REG (priv->channel[0 ],CMR ), +ATMEL_TC_WAVE |ATMEL_TC_ABETRG |ATMEL_TC_CMR_MASK | +ATMEL_TC_TCCLKS , +ATMEL_TC_CMR_MASK ); +if (ret) +return ret; + +/* Enable clock and trigger counter */ + ret =regmap_write (regmap,ATMEL_TC_REG (priv->channel[0 ],CCR ), +ATMEL_TC_CLKEN |ATMEL_TC_SWTRG ); +if (ret) +return ret; + priv->tc_cfg = tcb_config; priv->regmap = regmap; counter->name =dev_name (&pdev->dev);
drivers/counter/stm32-lptimer-cnt.c +15 -9
@@ -58,37 +58,43 @@ static int stm32_lptim_set_enable_state(struct stm32_lptim_cnt *priv,return 0 ; } + ret =clk_enable (priv->clk); +if (ret) + goto disable_cnt; +/* LP timer must be enabled before writing CMP & ARR */ ret =regmap_write (priv->regmap,STM32_LPTIM_ARR , priv->ceiling);if (ret) -return ret; + goto disable_clk; ret =regmap_write (priv->regmap,STM32_LPTIM_CMP ,0 );if (ret) -return ret; + goto disable_clk;/* ensure CMP & ARR registers are properly written */ ret =regmap_read_poll_timeout (priv->regmap,STM32_LPTIM_ISR , val, (val &STM32_LPTIM_CMPOK_ARROK ) ==STM32_LPTIM_CMPOK_ARROK ,100 ,1000 );if (ret) -return ret; + goto disable_clk; ret =regmap_write (priv->regmap,STM32_LPTIM_ICR ,STM32_LPTIM_CMPOKCF_ARROKCF );if (ret) -return ret; + goto disable_clk; - ret =clk_enable (priv->clk); -if (ret) { -regmap_write (priv->regmap,STM32_LPTIM_CR ,0 ); -return ret; - } priv->enabled = true;/* Start LP timer in continuous mode */ return regmap_update_bits (priv->regmap,STM32_LPTIM_CR ,STM32_LPTIM_CNTSTRT ,STM32_LPTIM_CNTSTRT ); + +disable_clk: +clk_disable (priv->clk); +disable_cnt: +regmap_write (priv->regmap,STM32_LPTIM_CR ,0 ); + +return ret; }static int stm32_lptim_setup (struct stm32_lptim_cnt *priv,int enable)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +4 -12
@@ -2825,8 +2825,7 @@ static int dm_resume(void *handle)struct dm_atomic_state *dm_state =to_dm_atomic_state (dm->atomic_obj.state);enum dc_connection_type new_connection_type = dc_connection_none;struct dc_state *dc_state; -int i, r, j, ret; -bool need_hotplug = false; +int i, r, j;if (amdgpu_in_reset (adev)) { dc_state = dm->cached_dc_state;
@@ -3003,23 +3002,16 @@ static int dm_resume(void *handle) aconnector->mst_root)continue ; - ret =drm_dp_mst_topology_mgr_resume (&aconnector->mst_mgr, true); - -if (ret <0 ) { -dm_helpers_dp_mst_stop_top_mgr (aconnector->dc_link->ctx, - aconnector->dc_link); - need_hotplug = true; - } +drm_dp_mst_topology_queue_probe (&aconnector->mst_mgr); }drm_connector_list_iter_end (&iter); -if (need_hotplug) -drm_kms_helper_hotplug_event (ddev); -amdgpu_dm_irq_resume_late (adev);amdgpu_dm_smu_write_watermarks_table (adev); +drm_kms_helper_hotplug_event (ddev); +return 0 ; }
drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c +1 -1
@@ -1753,7 +1753,7 @@ static int dcn315_populate_dml_pipes_from_context(bool split_required = pipe->stream->timing.pix_clk_100hz >=dcn_get_max_non_odm_pix_rate_100hz (&dc->dml.soc) || (pipe->plane_state && pipe->plane_state->src_rect.width >5120 ); -if (remaining_det_segs >MIN_RESERVED_DET_SEGS ) +if (remaining_det_segs >MIN_RESERVED_DET_SEGS && crb_pipes !=0 ) pipes[pipe_cnt].pipe.src.det_size_override += (remaining_det_segs -MIN_RESERVED_DET_SEGS ) / crb_pipes + (crb_idx < (remaining_det_segs -MIN_RESERVED_DET_SEGS ) % crb_pipes ?1 :0 );if (pipes[pipe_cnt].pipe.src.det_size_override >2 *DCN3_15_MAX_DET_SEGS ) {
drivers/gpu/drm/display/drm_dp_mst_topology.c +34 -2
@@ -2692,6 +2692,11 @@ static void drm_dp_mst_link_probe_work(struct work_struct *work)drm_kms_helper_hotplug_event (dev); } +static void drm_dp_mst_queue_probe_work (struct drm_dp_mst_topology_mgr *mgr) +{ +queue_work (system_long_wq, &mgr->work); +} +static bool drm_dp_validate_guid (struct drm_dp_mst_topology_mgr *mgr,u8 *guid) {
@@ -3643,7 +3648,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms/* Write reset payload */ drm_dp_dpcd_write_payload (mgr,0 ,0 ,0x3f ); -queue_work (system_long_wq, &mgr->work); +drm_dp_mst_queue_probe_work (mgr); ret =0 ; }else {
@@ -3680,6 +3685,33 @@ drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb)drm_dp_mst_topology_mgr_invalidate_mstb (port->mstb); } +/** +* drm_dp_mst_topology_queue_probe - Queue a topology probe +* @mgr: manager to probe +* +* Queue a work to probe the MST topology. Driver's should call this only to +* sync the topology's HW->SW state after the MST link's parameters have +* changed in a way the state could've become out-of-sync. This is the case +* for instance when the link rate between the source and first downstream +* branch device has switched between UHBR and non-UHBR rates. Except of those +* cases - for instance when a sink gets plugged/unplugged to a port - the SW +* state will get updated automatically via MST UP message notifications. +*/ +void drm_dp_mst_topology_queue_probe (struct drm_dp_mst_topology_mgr *mgr) +{ +mutex_lock (&mgr->lock); + +if (drm_WARN_ON (mgr->dev, !mgr->mst_state || !mgr->mst_primary)) + goto out_unlock; + +drm_dp_mst_topology_mgr_invalidate_mstb (mgr->mst_primary); +drm_dp_mst_queue_probe_work (mgr); + +out_unlock: +mutex_unlock (&mgr->lock); +} +EXPORT_SYMBOL (drm_dp_mst_topology_queue_probe); +/** * drm_dp_mst_topology_mgr_suspend() - suspend the MST manager * @mgr: manager to suspend
@@ -3766,7 +3798,7 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,* state of our in-memory topology back into sync with reality. So, * restart the probing process as if we're probing a new hub */ -queue_work (system_long_wq, &mgr->work); +drm_dp_mst_queue_probe_work (mgr);mutex_unlock (&mgr->lock);if (sync) {
drivers/hid/hid-plantronics.c +67 -77
239 lines not on this page · raw message
drivers/memstick/host/rtsx_usb_ms.c +1 -0
@@ -813,6 +813,7 @@ static int rtsx_usb_ms_drv_remove(struct platform_device *pdev) host->eject = true;cancel_work_sync (&host->handle_req); +cancel_delayed_work_sync (&host->poll_card);mutex_lock (&host->host_mutex);if (host->req) {
drivers/net/usb/qmi_wwan.c +2 -0
@@ -1373,9 +1373,11 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a0, 0)}, /* Telit FN920C04 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a4, 0)}, /* Telit FN920C04 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a9, 0)}, /* Telit FN920C04 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x10b0, 0)}, /* Telit FE990B */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x10c0, 0)}, /* Telit FE910C04 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x10c4, 0)}, /* Telit FE910C04 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x10c8, 0)}, /* Telit FE910C04 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x10d0, 0)}, /* Telit FN990B */ {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
drivers/net/usb/usbnet.c +15 -6
@@ -178,6 +178,17 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress) }EXPORT_SYMBOL_GPL (usbnet_get_ethernet_addr); +static bool usbnet_needs_usb_name_format (struct usbnet *dev,struct net_device *net) +{ +/* Point to point devices which don't have a real MAC address +* (or report a fake local one) have historically used the usb%d +* naming. Preserve this.. +*/ +return (dev->driver_info->flags &FLAG_POINTTOPOINT ) !=0 && + (is_zero_ether_addr (net->dev_addr) || +is_local_ether_addr (net->dev_addr)); +} +static void intr_complete (struct urb *urb) {struct usbnet *dev = urb->context;
@@ -1766,13 +1777,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)if (status <0 ) goto out1; -// heuristic: "usb%d" for links we know are two-host, -// else "eth%d" when there's reasonable doubt. userspace -// can rename the link if it knows better. +/* heuristic: rename to "eth%d" if we are not sure this link +* is two-host (these links keep "usb%d") +*/ if ((dev->driver_info->flags &FLAG_ETHER ) !=0 && - ((dev->driver_info->flags &FLAG_POINTTOPOINT ) ==0 || -/* somebody touched it*/ - !is_zero_ether_addr (net->dev_addr))) + !usbnet_needs_usb_name_format (dev, net))strscpy (net->name,"eth%d" ,sizeof (net->name));/* WLAN devices should always be named "wlan%d" */ if ((dev->driver_info->flags &FLAG_WLAN ) !=0 )
drivers/reset/starfive/reset-starfive-jh71x0.c +3 -0
@@ -94,6 +94,9 @@ static int jh71x0_reset_status(struct reset_controller_dev *rcdev,void __iomem *reg_status = data->status + offset *sizeof (u32);u32 value =readl (reg_status); +if (!data->asserted) +return !(value & mask); +return !((value ^ data->asserted[offset]) & mask); }
drivers/tty/serial/8250/8250_dma.c +1 -1
@@ -152,7 +152,7 @@ void serial8250_tx_dma_flush(struct uart_8250_port *p)*/ dma->tx_size =0 ; -dmaengine_terminate_async (dma->rxchan); +dmaengine_terminate_async (dma->txchan); }int serial8250_rx_dma (struct uart_8250_port *p)
drivers/tty/serial/8250/8250_pci.c +46 -0
70 lines not on this page · raw message
drivers/tty/serial/fsl_lpuart.c +17 -0
@@ -1488,6 +1488,19 @@ static int lpuart32_config_rs485(struct uart_port *port, struct ktermios *termiounsigned long modem =lpuart32_read (&sport->port,UARTMODIR ) & ~(UARTMODIR_TXRTSPOL |UARTMODIR_TXRTSE ); +u32 ctrl; + +/* TXRTSE and TXRTSPOL only can be changed when transmitter is disabled. */ + ctrl =lpuart32_read (&sport->port,UARTCTRL ); +if (ctrl &UARTCTRL_TE ) { +/* wait for the transmit engine to complete */ +lpuart32_wait_bit_set (&sport->port,UARTSTAT ,UARTSTAT_TC ); +lpuart32_write (&sport->port, ctrl & ~UARTCTRL_TE ,UARTCTRL ); + +while (lpuart32_read (&sport->port,UARTCTRL ) &UARTCTRL_TE ) +cpu_relax (); + } +lpuart32_write (&sport->port, modem,UARTMODIR );if (rs485->flags &SER_RS485_ENABLED ) {
@@ -1507,6 +1520,10 @@ static int lpuart32_config_rs485(struct uart_port *port, struct ktermios *termio }lpuart32_write (&sport->port, modem,UARTMODIR ); + +if (ctrl &UARTCTRL_TE ) +lpuart32_write (&sport->port, ctrl,UARTCTRL ); +return 0 ; }
drivers/ufs/host/ufs-qcom.c +3 -1
@@ -1918,10 +1918,12 @@ static int ufs_qcom_probe(struct platform_device *pdev)static int ufs_qcom_remove (struct platform_device *pdev) {struct ufs_hba *hba =platform_get_drvdata (pdev); +struct ufs_qcom_host *host =ufshcd_get_variant (hba);pm_runtime_get_sync (&(pdev)->dev);ufshcd_remove (hba); -platform_msi_domain_free_irqs (hba->dev); +if (host->esi_enabled) +platform_msi_domain_free_irqs (hba->dev);return 0 ; }
drivers/usb/gadget/function/uvc_v4l2.c +11 -1
@@ -121,6 +121,9 @@ static struct uvcg_format *find_format_by_pix(struct uvc_device *uvc,list_for_each_entry (format, &uvc->header->formats, entry) {const struct uvc_format_desc *fmtdesc =to_uvc_format (format->fmt); +if (IS_ERR (fmtdesc)) +continue ; +if (fmtdesc->fcc == pixelformat) { uformat = format->fmt;break ;
@@ -240,6 +243,7 @@ uvc_v4l2_try_format(struct file *file, void *fh, struct v4l2_format *fmt)struct uvc_video *video = &uvc->video;struct uvcg_format *uformat;struct uvcg_frame *uframe; +const struct uvc_format_desc *fmtdesc;u8 *fcc;if (fmt->type != video->queue.queue.type)
@@ -265,7 +269,10 @@ uvc_v4l2_try_format(struct file *file, void *fh, struct v4l2_format *fmt) fmt->fmt.pix.field =V4L2_FIELD_NONE ; fmt->fmt.pix.bytesperline =uvc_v4l2_get_bytesperline (uformat, uframe); fmt->fmt.pix.sizeimage =uvc_get_frame_size (uformat, uframe); - fmt->fmt.pix.pixelformat =to_uvc_format (uformat)->fcc; + fmtdesc =to_uvc_format (uformat); +if (IS_ERR (fmtdesc)) +return PTR_ERR (fmtdesc); + fmt->fmt.pix.pixelformat = fmtdesc->fcc; fmt->fmt.pix.colorspace =V4L2_COLORSPACE_SRGB ; fmt->fmt.pix.priv =0 ;
@@ -375,6 +382,9 @@ uvc_v4l2_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)return -EINVAL ; fmtdesc =to_uvc_format (uformat); +if (IS_ERR (fmtdesc)) +return PTR_ERR (fmtdesc); + f->pixelformat = fmtdesc->fcc;return 0 ;
include/drm/display/drm_dp_mst_helper.h +2 -0
@@ -859,6 +859,8 @@ int drm_dp_check_act_status(struct drm_dp_mst_topology_mgr *mgr);void drm_dp_mst_dump_topology (struct seq_file *m,struct drm_dp_mst_topology_mgr *mgr); +void drm_dp_mst_topology_queue_probe (struct drm_dp_mst_topology_mgr *mgr); +void drm_dp_mst_topology_mgr_suspend (struct drm_dp_mst_topology_mgr *mgr); int __must_check drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,
mm/page_alloc.c +12 -2
@@ -6653,7 +6653,7 @@ static bool try_to_accept_memory_one(struct zone *zone)static bool cond_accept_memory (struct zone *zone,unsigned int order) { -long to_accept; +long to_accept, wmark;bool ret = false;if (!has_unaccepted_memory ())
@@ -6662,8 +6662,18 @@ static bool cond_accept_memory(struct zone *zone, unsigned int order)if (list_empty (&zone->unaccepted_pages))return false; + wmark =high_wmark_pages (zone); + +/* +* Watermarks have not been initialized yet. +* +* Accepting one MAX_ORDER page to ensure progress. +*/ +if (!wmark) +return try_to_accept_memory_one (zone); +/* How much to accept to get to high watermark? */ - to_accept =high_wmark_pages (zone) - + to_accept = wmark - (zone_page_state (zone,NR_FREE_PAGES ) -__zone_watermark_unusable_free (zone, order,0 ) -zone_page_state (zone,NR_UNACCEPTED ));
net/atm/mpc.c +2 -0
@@ -1314,6 +1314,8 @@ static void MPOA_cache_impos_rcvd(struct k_message *msg, holding_time = msg->content.eg_info.holding_time;dprintk ("(%s) entry = %p, holding_time = %u\n" , mpc->dev->name, entry, holding_time); +if (entry ==NULL && !holding_time) +return ;if (entry ==NULL && holding_time) { entry = mpc->eg_ops->add_entry (msg, mpc); mpc->eg_ops->put (entry);
net/ipv6/netfilter/nf_socket_ipv6.c +23 -0
@@ -103,6 +103,10 @@ struct sock *nf_sk_lookup_slow_v6(struct net *net, const struct sk_buff *skb,struct sk_buff *data_skb =NULL ;int doff =0 ;int thoff =0 , tproto; +#if IS_ENABLED (CONFIG_NF_CONNTRACK ) +enum ip_conntrack_info ctinfo; +struct nf_conn const *ct; +#endif tproto =ipv6_find_hdr (skb, &thoff,-1 ,NULL ,NULL );if (tproto <0 ) {
@@ -136,6 +140,25 @@ struct sock *nf_sk_lookup_slow_v6(struct net *net, const struct sk_buff *skb,return NULL ; } +#if IS_ENABLED (CONFIG_NF_CONNTRACK ) +/* Do the lookup with the original socket address in +* case this is a reply packet of an established +* SNAT-ted connection. +*/ + ct =nf_ct_get (skb, &ctinfo); +if (ct && + ((tproto !=IPPROTO_ICMPV6 && + ctinfo ==IP_CT_ESTABLISHED_REPLY ) || + (tproto ==IPPROTO_ICMPV6 && + ctinfo ==IP_CT_RELATED_REPLY )) && + (ct->status &IPS_SRC_NAT_DONE )) { + daddr = &ct->tuplehash[IP_CT_DIR_ORIGINAL ].tuple.src.u3.in6; + dport = (tproto ==IPPROTO_TCP ) ? + ct->tuplehash[IP_CT_DIR_ORIGINAL ].tuple.src.u.tcp.port : + ct->tuplehash[IP_CT_DIR_ORIGINAL ].tuple.src.u.udp.port; + } +#endif +return nf_socket_get_sock_v6 (net, data_skb, doff, tproto, saddr, daddr, sport, dport, indev); }
sound/pci/hda/patch_realtek.c +1 -0
@@ -10023,6 +10023,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x8811 ,"HP Spectre x360 15-eb1xxx" ,ALC285_FIXUP_HP_SPECTRE_X360_EB1 ),SND_PCI_QUIRK (0x103c ,0x8812 ,"HP Spectre x360 15-eb1xxx" ,ALC285_FIXUP_HP_SPECTRE_X360_EB1 ),SND_PCI_QUIRK (0x103c ,0x881d ,"HP 250 G8 Notebook PC" ,ALC236_FIXUP_HP_MUTE_LED_COEFBIT2 ), +SND_PCI_QUIRK (0x103c ,0x881e ,"HP Laptop 15s-du3xxx" ,ALC236_FIXUP_HP_MUTE_LED_COEFBIT2 ),SND_PCI_QUIRK (0x103c ,0x8846 ,"HP EliteBook 850 G8 Notebook PC" ,ALC285_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8847 ,"HP EliteBook x360 830 G8 Notebook PC" ,ALC285_FIXUP_HP_GPIO_LED ), SND_PCI_QUIRK(0x103c, 0x884b, "HP EliteBook 840 Aero G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
sound/usb/mixer_quirks.c +51 -0
62 lines not on this page · raw message