Merge tag 'ASB-2025-03-05_11-5.4' into android13-5.4-lahaina
https://source.android.com/docs/security/bulletin/2025-03-01 CVE-2024-46852 CVE-2024-50302 CVE-2025-22413 # By Greg Kroah-Hartman (7) and others # Via Greg Kroah-Hartman (3) and Terence Tritton (xWF) (1) * tag 'ASB-2025-03-05_11-5.4': ANDROID: ABI: Cuttlefish Symbol update Revert "net: net_namespace: Optimize the code" Revert "net: add exit_batch_rtnl() method" Revert "gtp: use exit_batch_rtnl() method" Revert "gtp: Use for_each_netdev_rcu() in gtp_genl_dump_pdp()." Revert "gtp: Destroy device along with udp socket's netns dismantle." Linux 5.4.290 Partial revert of xhci: use pm_ptr() instead #ifdef for CONFIG_PM conditionals xhci: use pm_ptr() instead of #ifdef for CONFIG_PM conditionals drm/v3d: Assign job pointer to NULL before signaling the fence Input: xpad - add support for wooting two he (arm) Input: xpad - add unofficial Xbox 360 wireless receiver clone Input: atkbd - map F23 key to support default copilot shortcut Revert "usb: gadget: u_serial: Disable ep before setting port to null to fix the crash caused by port being null" USB: serial: quatech2: fix null-ptr-deref in qt2_process_read_urb() ext4: fix slab-use-after-free in ext4_split_extent_at() ext4: avoid ext4_error()'s caused by ENOMEM in the truncate path vfio/platform: check the bounds of read/write syscalls net/xen-netback: prevent UAF in xenvif_flush_hash() net: xen-netback: hash.c: Use built-in RCU list checking signal/m68k: Use force_sigsegv(SIGSEGV) in fpsp040_die m68k: Add missing mmap_read_lock() to sys_cacheflush() m68k: Update ->thread.esp0 before calling syscall_trace() in ret_from_signal gfs2: Truncate address space when flipping GFS2_DIF_JDATA flag irqchip/sunxi-nmi: Add missing SKIP_WAKE flag scsi: iscsi: Fix redundant response for ISCSI_UEVENT_GET_HOST_STATS request ASoC: wm8994: Add depends on MFD core net: fix data-races around sk->sk_forward_alloc scsi: sg: Fix slab-use-after-free read in sg_release() ipv6: avoid possible NULL deref in rt6_uncached_list_flush_dev() hrtimers: Handle CPU state correctly on hotplug irqchip/gic-v3: Handle CPU_PM_ENTER_FAILED correctly fs/proc: fix softlockup in __read_vmcore (part 2) net: ethernet: xgbe: re-add aneg to supported features in PHY quirks nvmet: propagate npwg topology poll_wait: add mb() to fix theoretical race between waitqueue_active() and .poll() kheaders: Ignore silly-rename files hfs: Sanity check the root record mac802154: check local interfaces before deleting sdata list i2c: mux: demux-pinctrl: check initial mux selection, too drm/v3d: Ensure job pointer is set to NULL after job completion nfp: bpf: prevent integer overflow in nfp_bpf_event_output() gtp: Destroy device along with udp socket's netns dismantle. gtp: Use for_each_netdev_rcu() in gtp_genl_dump_pdp(). gtp: use exit_batch_rtnl() method net: add exit_batch_rtnl() method net: net_namespace: Optimize the code net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field() sctp: sysctl: rto_min/max: avoid using current->nsproxy ocfs2: fix slab-use-after-free due to dangling pointer dqi_priv ocfs2: correct return value of ocfs2_local_free_info() phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider phy: core: fix code style in devm_of_phy_provider_unregister arm64: dts: rockchip: add hevc power domain clock to rk3328 arm64: dts: rockchip: add #power-domain-cells to power domain nodes arm64: dts: rockchip: fix pd_tcpc0 and pd_tcpc1 node position on rk3399 arm64: dts: rockchip: fix defines in pd_vio node for rk3399 iio: inkern: call iio_device_put() only on mapped devices iio: adc: at91: call input_free_device() on allocated iio_dev iio: adc: ti-ads124s08: Use gpiod_set_value_cansleep() iio: gyro: fxas21002c: Fix missing data update in trigger handler iio: adc: ti-ads8688: fix information leak in triggered buffer iio: imu: kmx61: fix information leak in triggered buffer iio: light: vcnl4035: fix information leak in triggered buffer iio: dummy: iio_simply_dummy_buffer: fix information leak in triggered buffer iio: pressure: zpa2326: fix information leak in triggered buffer usb: gadget: f_fs: Remove WARN_ON in functionfs_bind usb: fix reference leak in usb_new_device() USB: core: Disable LPM only for non-suspended ports USB: usblp: return error when setting unsupported protocol usb: gadget: u_serial: Disable ep before setting port to null to fix the crash caused by port being null USB: serial: cp210x: add Phoenix Contact UPS Device usb-storage: Add max sectors quirk for Nokia 208 staging: iio: ad9832: Correct phase range check staging: iio: ad9834: Correct phase range check USB: serial: option: add Neoway N723-EA support USB: serial: option: add MeiG Smart SRM815 drm/amd/display: increase MAX_SURFACES to the value supported by hw ACPI: resource: Add Asus Vivobook X1504VAP to irq1_level_low_skip_override[] ACPI: resource: Add TongFang GM5HG0A to irq1_edge_low_force_override[] drm/amd/display: Add check for granularity in dml ceil/floor helpers sctp: sysctl: auth_enable: avoid using current->nsproxy sctp: sysctl: cookie_hmac_alg: avoid using current->nsproxy dm thin: make get_first_thin use rcu-safe list first function tls: Fix tls_sw_sendmsg error handling net_sched: cls_flow: validate TCA_FLOW_RSHIFT attribute tcp/dccp: allow a connection when sk_max_ack_backlog is zero tcp/dccp: complete lockless accesses to sk->sk_max_ack_backlog net: 802: LLC+SNAP OID:PID lookup on start of skb data ieee802154: ca8210: Add missing check for kfifo_alloc() in ca8210_probe() dm array: fix cursor index when skipping across block boundaries dm array: fix unreleased btree blocks on closing a faulty array cursor dm array: fix releasing a faulty array block twice in dm_array_cursor_end jbd2: flush filesystem device before updating tail sequence Change-Id: I83cf20e29c63126cd17dfa393dca0ce7dfa47a76
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 289
|
||||
SUBLEVEL = 290
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
||||
@@ -426,6 +426,7 @@
|
||||
<elf-symbol name='blk_mq_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d4d7b79'/>
|
||||
<elf-symbol name='blk_mq_pci_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x172bf3dd'/>
|
||||
<elf-symbol name='blk_mq_quiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30c051ed'/>
|
||||
<elf-symbol name='blk_mq_quiesce_queue_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ece1e60'/>
|
||||
<elf-symbol name='blk_mq_request_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x309f9f91'/>
|
||||
<elf-symbol name='blk_mq_requeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x864789e7'/>
|
||||
<elf-symbol name='blk_mq_rq_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2ae6990'/>
|
||||
@@ -37447,6 +37448,10 @@
|
||||
<parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='192' column='1'/>
|
||||
<return type-id='48b5725f'/>
|
||||
</function-decl>
|
||||
<function-decl name='blk_mq_quiesce_queue_nowait' mangled-name='blk_mq_quiesce_queue_nowait' filepath='block/blk-mq.c' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_quiesce_queue_nowait'>
|
||||
<parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='219' column='1'/>
|
||||
<return type-id='48b5725f'/>
|
||||
</function-decl>
|
||||
<function-decl name='blk_mq_alloc_request_hctx' mangled-name='blk_mq_alloc_request_hctx' filepath='block/blk-mq.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_request_hctx'>
|
||||
<parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='446' column='1'/>
|
||||
<parameter type-id='f0981eeb' name='op' filepath='block/blk-mq.c' line='447' column='1'/>
|
||||
@@ -149383,6 +149388,14 @@
|
||||
<var-decl name='ancestor_ids' type-id='1fdc7fa6' visibility='default' filepath='include/linux/cgroup-defs.h' line='498' column='1'/>
|
||||
</data-member>
|
||||
</class-decl>
|
||||
<union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='615' column='1' id='a324790e'>
|
||||
<data-member access='public'>
|
||||
<var-decl name='b' type-id='4edee319' visibility='default' filepath='include/linux/sched.h' line='621' column='1'/>
|
||||
</data-member>
|
||||
<data-member access='public'>
|
||||
<var-decl name='s' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='622' column='1'/>
|
||||
</data-member>
|
||||
</union-decl>
|
||||
<class-decl name='kernfs_node' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1' id='29d79af7'>
|
||||
<data-member access='public' layout-offset-in-bits='0'>
|
||||
<var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='133' column='1'/>
|
||||
|
||||
@@ -230,7 +230,6 @@
|
||||
vring_del_virtqueue
|
||||
vring_interrupt
|
||||
vring_transport_features
|
||||
wait_for_completion
|
||||
wait_woken
|
||||
__wake_up
|
||||
__warn_printk
|
||||
@@ -739,11 +738,13 @@
|
||||
blk_mq_complete_request
|
||||
blk_mq_end_request
|
||||
blk_mq_free_tag_set
|
||||
blk_mq_freeze_queue
|
||||
blk_mq_init_queue
|
||||
blk_mq_quiesce_queue
|
||||
blk_mq_quiesce_queue_nowait
|
||||
blk_mq_start_request
|
||||
blk_mq_start_stopped_hw_queues
|
||||
blk_mq_stop_hw_queue
|
||||
blk_mq_unfreeze_queue
|
||||
blk_mq_unquiesce_queue
|
||||
blk_mq_virtio_map_queues
|
||||
blk_put_request
|
||||
@@ -800,6 +801,7 @@
|
||||
__splice_from_pipe
|
||||
system_freezing_cnt
|
||||
__unregister_chrdev
|
||||
wait_for_completion
|
||||
|
||||
# required by virtio_input.ko
|
||||
input_alloc_absinfo
|
||||
@@ -813,14 +815,10 @@
|
||||
|
||||
# required by virtio_mmio.ko
|
||||
device_for_each_child
|
||||
devm_ioremap
|
||||
devm_kfree
|
||||
__devm_request_region
|
||||
iomem_resource
|
||||
devm_platform_ioremap_resource
|
||||
memparse
|
||||
platform_device_register_full
|
||||
platform_get_irq
|
||||
platform_get_resource
|
||||
sscanf
|
||||
|
||||
# required by virtio_net.ko
|
||||
@@ -956,6 +954,12 @@
|
||||
sock_i_ino
|
||||
|
||||
# preserved by --additions-only
|
||||
blk_mq_quiesce_queue
|
||||
devm_ioremap
|
||||
devm_kfree
|
||||
__devm_request_region
|
||||
generic_shutdown_super
|
||||
iomem_resource
|
||||
platform_get_resource
|
||||
refcount_dec_and_test_checked
|
||||
refcount_inc_checked
|
||||
|
||||
@@ -219,12 +219,14 @@
|
||||
<&cru HCLK_OTG>,
|
||||
<&cru SCLK_OTG_ADP>;
|
||||
pm_qos = <&qos_usb_host>, <&qos_usb_otg>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_SDCARD {
|
||||
reg = <PX30_PD_SDCARD>;
|
||||
clocks = <&cru HCLK_SDMMC>,
|
||||
<&cru SCLK_SDMMC>;
|
||||
pm_qos = <&qos_sdmmc>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_GMAC {
|
||||
reg = <PX30_PD_GMAC>;
|
||||
@@ -233,6 +235,7 @@
|
||||
<&cru SCLK_MAC_REF>,
|
||||
<&cru SCLK_GMAC_RX_TX>;
|
||||
pm_qos = <&qos_gmac>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_MMC_NAND {
|
||||
reg = <PX30_PD_MMC_NAND>;
|
||||
@@ -246,6 +249,7 @@
|
||||
<&cru SCLK_SFC>;
|
||||
pm_qos = <&qos_emmc>, <&qos_nand>,
|
||||
<&qos_sdio>, <&qos_sfc>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_VPU {
|
||||
reg = <PX30_PD_VPU>;
|
||||
@@ -253,6 +257,7 @@
|
||||
<&cru HCLK_VPU>,
|
||||
<&cru SCLK_CORE_VPU>;
|
||||
pm_qos = <&qos_vpu>, <&qos_vpu_r128>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_VO {
|
||||
reg = <PX30_PD_VO>;
|
||||
@@ -269,6 +274,7 @@
|
||||
<&cru SCLK_VOPB_PWM>;
|
||||
pm_qos = <&qos_rga_rd>, <&qos_rga_wr>,
|
||||
<&qos_vop_m0>, <&qos_vop_m1>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_VI {
|
||||
reg = <PX30_PD_VI>;
|
||||
@@ -280,11 +286,13 @@
|
||||
pm_qos = <&qos_isp_128>, <&qos_isp_rd>,
|
||||
<&qos_isp_wr>, <&qos_isp_m1>,
|
||||
<&qos_vip>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@PX30_PD_GPU {
|
||||
reg = <PX30_PD_GPU>;
|
||||
clocks = <&cru SCLK_GPU>;
|
||||
pm_qos = <&qos_gpu>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -272,13 +272,17 @@
|
||||
|
||||
power-domain@RK3328_PD_HEVC {
|
||||
reg = <RK3328_PD_HEVC>;
|
||||
clocks = <&cru SCLK_VENC_CORE>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@RK3328_PD_VIDEO {
|
||||
reg = <RK3328_PD_VIDEO>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
power-domain@RK3328_PD_VPU {
|
||||
reg = <RK3328_PD_VPU>;
|
||||
clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1001,6 +1001,7 @@
|
||||
clocks = <&cru ACLK_IEP>,
|
||||
<&cru HCLK_IEP>;
|
||||
pm_qos = <&qos_iep>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_rga@RK3399_PD_RGA {
|
||||
reg = <RK3399_PD_RGA>;
|
||||
@@ -1008,12 +1009,14 @@
|
||||
<&cru HCLK_RGA>;
|
||||
pm_qos = <&qos_rga_r>,
|
||||
<&qos_rga_w>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_vcodec@RK3399_PD_VCODEC {
|
||||
reg = <RK3399_PD_VCODEC>;
|
||||
clocks = <&cru ACLK_VCODEC>,
|
||||
<&cru HCLK_VCODEC>;
|
||||
pm_qos = <&qos_video_m0>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_vdu@RK3399_PD_VDU {
|
||||
reg = <RK3399_PD_VDU>;
|
||||
@@ -1021,6 +1024,7 @@
|
||||
<&cru HCLK_VDU>;
|
||||
pm_qos = <&qos_video_m1_r>,
|
||||
<&qos_video_m1_w>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
|
||||
/* These power domains are grouped by VD_GPU */
|
||||
@@ -1028,43 +1032,63 @@
|
||||
reg = <RK3399_PD_GPU>;
|
||||
clocks = <&cru ACLK_GPU>;
|
||||
pm_qos = <&qos_gpu>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
|
||||
/* These power domains are grouped by VD_LOGIC */
|
||||
pd_edp@RK3399_PD_EDP {
|
||||
reg = <RK3399_PD_EDP>;
|
||||
clocks = <&cru PCLK_EDP_CTRL>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_emmc@RK3399_PD_EMMC {
|
||||
reg = <RK3399_PD_EMMC>;
|
||||
clocks = <&cru ACLK_EMMC>;
|
||||
pm_qos = <&qos_emmc>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_gmac@RK3399_PD_GMAC {
|
||||
reg = <RK3399_PD_GMAC>;
|
||||
clocks = <&cru ACLK_GMAC>,
|
||||
<&cru PCLK_GMAC>;
|
||||
pm_qos = <&qos_gmac>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_sd@RK3399_PD_SD {
|
||||
reg = <RK3399_PD_SD>;
|
||||
clocks = <&cru HCLK_SDMMC>,
|
||||
<&cru SCLK_SDMMC>;
|
||||
pm_qos = <&qos_sd>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_sdioaudio@RK3399_PD_SDIOAUDIO {
|
||||
reg = <RK3399_PD_SDIOAUDIO>;
|
||||
clocks = <&cru HCLK_SDIO>;
|
||||
pm_qos = <&qos_sdioaudio>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_tcpc0@RK3399_PD_TCPD0 {
|
||||
reg = <RK3399_PD_TCPD0>;
|
||||
clocks = <&cru SCLK_UPHY0_TCPDCORE>,
|
||||
<&cru SCLK_UPHY0_TCPDPHY_REF>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_tcpc1@RK3399_PD_TCPD1 {
|
||||
reg = <RK3399_PD_TCPD1>;
|
||||
clocks = <&cru SCLK_UPHY1_TCPDCORE>,
|
||||
<&cru SCLK_UPHY1_TCPDPHY_REF>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_usb3@RK3399_PD_USB3 {
|
||||
reg = <RK3399_PD_USB3>;
|
||||
clocks = <&cru ACLK_USB3>;
|
||||
pm_qos = <&qos_usb_otg0>,
|
||||
<&qos_usb_otg1>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_vio@RK3399_PD_VIO {
|
||||
reg = <RK3399_PD_VIO>;
|
||||
#power-domain-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@@ -1074,6 +1098,7 @@
|
||||
<&cru HCLK_HDCP>,
|
||||
<&cru PCLK_HDCP>;
|
||||
pm_qos = <&qos_hdcp>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_isp0@RK3399_PD_ISP0 {
|
||||
reg = <RK3399_PD_ISP0>;
|
||||
@@ -1081,6 +1106,7 @@
|
||||
<&cru HCLK_ISP0>;
|
||||
pm_qos = <&qos_isp0_m0>,
|
||||
<&qos_isp0_m1>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_isp1@RK3399_PD_ISP1 {
|
||||
reg = <RK3399_PD_ISP1>;
|
||||
@@ -1088,19 +1114,11 @@
|
||||
<&cru HCLK_ISP1>;
|
||||
pm_qos = <&qos_isp1_m0>,
|
||||
<&qos_isp1_m1>;
|
||||
};
|
||||
pd_tcpc0@RK3399_PD_TCPC0 {
|
||||
reg = <RK3399_PD_TCPD0>;
|
||||
clocks = <&cru SCLK_UPHY0_TCPDCORE>,
|
||||
<&cru SCLK_UPHY0_TCPDPHY_REF>;
|
||||
};
|
||||
pd_tcpc1@RK3399_PD_TCPC1 {
|
||||
reg = <RK3399_PD_TCPD1>;
|
||||
clocks = <&cru SCLK_UPHY1_TCPDCORE>,
|
||||
<&cru SCLK_UPHY1_TCPDPHY_REF>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_vo@RK3399_PD_VO {
|
||||
reg = <RK3399_PD_VO>;
|
||||
#power-domain-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@@ -1110,12 +1128,14 @@
|
||||
<&cru HCLK_VOP0>;
|
||||
pm_qos = <&qos_vop_big_r>,
|
||||
<&qos_vop_big_w>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
pd_vopl@RK3399_PD_VOPL {
|
||||
reg = <RK3399_PD_VOPL>;
|
||||
clocks = <&cru ACLK_VOP1>,
|
||||
<&cru HCLK_VOP1>;
|
||||
pm_qos = <&qos_vop_little>;
|
||||
#power-domain-cells = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -502,7 +502,8 @@ in_ea:
|
||||
.section .fixup,"ax"
|
||||
.even
|
||||
1:
|
||||
jbra fpsp040_die
|
||||
jbsr fpsp040_die
|
||||
jbra .Lnotkern
|
||||
|
||||
.section __ex_table,"a"
|
||||
.align 4
|
||||
|
||||
@@ -182,6 +182,8 @@ ENTRY(ret_from_signal)
|
||||
movel %curptr@(TASK_STACK),%a1
|
||||
tstb %a1@(TINFO_FLAGS+2)
|
||||
jge 1f
|
||||
lea %sp@(SWITCH_STACK_SIZE),%a1
|
||||
movel %a1,%curptr@(TASK_THREAD+THREAD_ESP0)
|
||||
jbsr syscall_trace
|
||||
1: RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
|
||||
@@ -388,6 +388,8 @@ sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len)
|
||||
ret = -EPERM;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
goto out;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
} else {
|
||||
struct vm_area_struct *vma;
|
||||
|
||||
|
||||
@@ -1155,7 +1155,7 @@ asmlinkage void set_esp0(unsigned long ssp)
|
||||
*/
|
||||
asmlinkage void fpsp040_die(void)
|
||||
{
|
||||
do_exit(SIGSEGV);
|
||||
force_sigsegv(SIGSEGV);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_M68KFPU_EMU
|
||||
|
||||
@@ -442,6 +442,13 @@ static const struct dmi_system_id asus_laptop[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "B2402CBA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Asus Vivobook X1504VAP */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "X1504VAP"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Asus Vivobook X1704VAP */
|
||||
.matches = {
|
||||
@@ -514,6 +521,17 @@ static const struct dmi_system_id asus_laptop[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "16T90SP"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* TongFang GM5HG0A in case of the SKIKK Vanaheim relabel the
|
||||
* board-name is changed, so check OEM strings instead. Note
|
||||
* OEM string matches are always exact matches.
|
||||
* https://bugzilla.kernel.org/show_bug.cgi?id=219614
|
||||
*/
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_OEM_STRING, "GM5HG0A"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
#define DC_VER "3.2.48"
|
||||
|
||||
#define MAX_SURFACES 3
|
||||
#define MAX_SURFACES 4
|
||||
#define MAX_PLANES 6
|
||||
#define MAX_STREAMS 6
|
||||
#define MAX_SINKS_PER_LINK 4
|
||||
|
||||
@@ -67,11 +67,15 @@ static inline double dml_max5(double a, double b, double c, double d, double e)
|
||||
|
||||
static inline double dml_ceil(double a, double granularity)
|
||||
{
|
||||
if (granularity == 0)
|
||||
return 0;
|
||||
return (double) dcn_bw_ceil2(a, granularity);
|
||||
}
|
||||
|
||||
static inline double dml_floor(double a, double granularity)
|
||||
{
|
||||
if (granularity == 0)
|
||||
return 0;
|
||||
return (double) dcn_bw_floor2(a, granularity);
|
||||
}
|
||||
|
||||
@@ -97,11 +101,15 @@ static inline double dml_ceil_2(double f)
|
||||
|
||||
static inline double dml_ceil_ex(double x, double granularity)
|
||||
{
|
||||
if (granularity == 0)
|
||||
return 0;
|
||||
return (double) dcn_bw_ceil2(x, granularity);
|
||||
}
|
||||
|
||||
static inline double dml_floor_ex(double x, double granularity)
|
||||
{
|
||||
if (granularity == 0)
|
||||
return 0;
|
||||
return (double) dcn_bw_floor2(x, granularity);
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,10 @@ v3d_irq(int irq, void *arg)
|
||||
to_v3d_fence(v3d->bin_job->base.irq_fence);
|
||||
|
||||
trace_v3d_bcl_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
v3d->bin_job = NULL;
|
||||
dma_fence_signal(&fence->base);
|
||||
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -111,7 +114,10 @@ v3d_irq(int irq, void *arg)
|
||||
to_v3d_fence(v3d->render_job->base.irq_fence);
|
||||
|
||||
trace_v3d_rcl_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
v3d->render_job = NULL;
|
||||
dma_fence_signal(&fence->base);
|
||||
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -120,7 +126,10 @@ v3d_irq(int irq, void *arg)
|
||||
to_v3d_fence(v3d->csd_job->base.irq_fence);
|
||||
|
||||
trace_v3d_csd_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
v3d->csd_job = NULL;
|
||||
dma_fence_signal(&fence->base);
|
||||
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -156,7 +165,10 @@ v3d_hub_irq(int irq, void *arg)
|
||||
to_v3d_fence(v3d->tfu_job->base.irq_fence);
|
||||
|
||||
trace_v3d_tfu_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
v3d->tfu_job = NULL;
|
||||
dma_fence_signal(&fence->base);
|
||||
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
||||
@@ -261,7 +261,9 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)
|
||||
pm_runtime_no_callbacks(&pdev->dev);
|
||||
|
||||
/* switch to first parent as active master */
|
||||
i2c_demux_activate_master(priv, 0);
|
||||
err = i2c_demux_activate_master(priv, 0);
|
||||
if (err)
|
||||
goto err_rollback;
|
||||
|
||||
err = device_create_file(&pdev->dev, &dev_attr_available_masters);
|
||||
if (err)
|
||||
|
||||
@@ -1139,7 +1139,7 @@ static int at91_ts_register(struct at91_adc_state *st,
|
||||
return ret;
|
||||
|
||||
err:
|
||||
input_free_device(st->ts_input);
|
||||
input_free_device(input);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -182,9 +182,9 @@ static int ads124s_reset(struct iio_dev *indio_dev)
|
||||
struct ads124s_private *priv = iio_priv(indio_dev);
|
||||
|
||||
if (priv->reset_gpio) {
|
||||
gpiod_set_value(priv->reset_gpio, 0);
|
||||
gpiod_set_value_cansleep(priv->reset_gpio, 0);
|
||||
udelay(200);
|
||||
gpiod_set_value(priv->reset_gpio, 1);
|
||||
gpiod_set_value_cansleep(priv->reset_gpio, 1);
|
||||
} else {
|
||||
return ads124s_write_cmd(indio_dev, ADS124S08_CMD_RESET);
|
||||
}
|
||||
|
||||
@@ -384,7 +384,7 @@ static irqreturn_t ads8688_trigger_handler(int irq, void *p)
|
||||
struct iio_poll_func *pf = p;
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
/* Ensure naturally aligned timestamp */
|
||||
u16 buffer[ADS8688_MAX_CHANNELS + sizeof(s64)/sizeof(u16)] __aligned(8);
|
||||
u16 buffer[ADS8688_MAX_CHANNELS + sizeof(s64)/sizeof(u16)] __aligned(8) = { };
|
||||
int i, j = 0;
|
||||
|
||||
for (i = 0; i < indio_dev->masklength; i++) {
|
||||
|
||||
@@ -48,7 +48,7 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
|
||||
int len = 0;
|
||||
u16 *data;
|
||||
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
data = kzalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (!data)
|
||||
goto done;
|
||||
|
||||
|
||||
@@ -664,14 +664,21 @@ static irqreturn_t fxas21002c_trigger_handler(int irq, void *p)
|
||||
int ret;
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
ret = regmap_bulk_read(data->regmap, FXAS21002C_REG_OUT_X_MSB,
|
||||
data->buffer, CHANNEL_SCAN_MAX * sizeof(s16));
|
||||
ret = fxas21002c_pm_get(data);
|
||||
if (ret < 0)
|
||||
goto out_unlock;
|
||||
|
||||
ret = regmap_bulk_read(data->regmap, FXAS21002C_REG_OUT_X_MSB,
|
||||
data->buffer, CHANNEL_SCAN_MAX * sizeof(s16));
|
||||
if (ret < 0)
|
||||
goto out_pm_put;
|
||||
|
||||
iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
|
||||
data->timestamp);
|
||||
|
||||
out_pm_put:
|
||||
fxas21002c_pm_put(data);
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&data->lock);
|
||||
|
||||
|
||||
@@ -1198,7 +1198,7 @@ static irqreturn_t kmx61_trigger_handler(int irq, void *p)
|
||||
struct kmx61_data *data = kmx61_get_data(indio_dev);
|
||||
int bit, ret, i = 0;
|
||||
u8 base;
|
||||
s16 buffer[8];
|
||||
s16 buffer[8] = { };
|
||||
|
||||
if (indio_dev == data->acc_indio_dev)
|
||||
base = KMX61_ACC_XOUT_L;
|
||||
|
||||
@@ -466,7 +466,7 @@ struct iio_channel *iio_channel_get_all(struct device *dev)
|
||||
return chans;
|
||||
|
||||
error_free_chans:
|
||||
for (i = 0; i < nummaps; i++)
|
||||
for (i = 0; i < mapind; i++)
|
||||
iio_device_put(chans[i].indio_dev);
|
||||
kfree(chans);
|
||||
error_ret:
|
||||
|
||||
@@ -105,7 +105,7 @@ static irqreturn_t vcnl4035_trigger_consumer_handler(int irq, void *p)
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct vcnl4035_data *data = iio_priv(indio_dev);
|
||||
/* Ensure naturally aligned timestamp */
|
||||
u8 buffer[ALIGN(sizeof(u16), sizeof(s64)) + sizeof(s64)] __aligned(8);
|
||||
u8 buffer[ALIGN(sizeof(u16), sizeof(s64)) + sizeof(s64)] __aligned(8) = { };
|
||||
int ret;
|
||||
|
||||
ret = regmap_read(data->regmap, VCNL4035_ALS_DATA, (int *)buffer);
|
||||
|
||||
@@ -585,6 +585,8 @@ static int zpa2326_fill_sample_buffer(struct iio_dev *indio_dev,
|
||||
} sample;
|
||||
int err;
|
||||
|
||||
memset(&sample, 0, sizeof(sample));
|
||||
|
||||
if (test_bit(0, indio_dev->active_scan_mask)) {
|
||||
/* Get current pressure from hardware FIFO. */
|
||||
err = zpa2326_dequeue_pressure(indio_dev, &sample.pressure);
|
||||
|
||||
@@ -128,6 +128,7 @@ static const struct xpad_device {
|
||||
{ 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 },
|
||||
{ 0x045e, 0x028f, "Microsoft X-Box 360 pad v2", 0, XTYPE_XBOX360 },
|
||||
{ 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
|
||||
{ 0x045e, 0x02a9, "Xbox 360 Wireless Receiver (Unofficial)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
|
||||
{ 0x045e, 0x02d1, "Microsoft X-Box One pad", 0, XTYPE_XBOXONE },
|
||||
{ 0x045e, 0x02dd, "Microsoft X-Box One pad (Firmware 2015)", 0, XTYPE_XBOXONE },
|
||||
{ 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE },
|
||||
@@ -344,6 +345,7 @@ static const struct xpad_device {
|
||||
{ 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1230, "Wooting Two HE (ARM)", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 },
|
||||
{ 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 },
|
||||
{ 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
|
||||
|
||||
@@ -84,7 +84,7 @@ static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {
|
||||
0, 46, 45, 32, 18, 5, 4, 95, 0, 57, 47, 33, 20, 19, 6,183,
|
||||
0, 49, 48, 35, 34, 21, 7,184, 0, 0, 50, 36, 22, 8, 9,185,
|
||||
0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0,
|
||||
0, 89, 40, 0, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 85,
|
||||
0, 89, 40, 0, 26, 13, 0,193, 58, 54, 28, 27, 0, 43, 0, 85,
|
||||
0, 86, 91, 90, 92, 0, 14, 94, 0, 79,124, 75, 71,121, 0, 0,
|
||||
82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
|
||||
|
||||
|
||||
@@ -1268,7 +1268,7 @@ void gic_s2idle_wake(void)
|
||||
static int gic_cpu_pm_notifier(struct notifier_block *self,
|
||||
unsigned long cmd, void *v)
|
||||
{
|
||||
if (cmd == CPU_PM_EXIT) {
|
||||
if (cmd == CPU_PM_EXIT || cmd == CPU_PM_ENTER_FAILED) {
|
||||
if (gic_dist_security_disabled())
|
||||
gic_enable_redist(true);
|
||||
gic_cpu_sys_reg_init();
|
||||
|
||||
@@ -200,7 +200,8 @@ static int __init sunxi_sc_nmi_irq_init(struct device_node *node,
|
||||
gc->chip_types[0].chip.irq_unmask = irq_gc_mask_set_bit;
|
||||
gc->chip_types[0].chip.irq_eoi = irq_gc_ack_set_bit;
|
||||
gc->chip_types[0].chip.irq_set_type = sunxi_sc_nmi_set_type;
|
||||
gc->chip_types[0].chip.flags = IRQCHIP_EOI_THREADED | IRQCHIP_EOI_IF_HANDLED;
|
||||
gc->chip_types[0].chip.flags = IRQCHIP_EOI_THREADED | IRQCHIP_EOI_IF_HANDLED |
|
||||
IRQCHIP_SKIP_SET_WAKE;
|
||||
gc->chip_types[0].regs.ack = reg_offs->pend;
|
||||
gc->chip_types[0].regs.mask = reg_offs->enable;
|
||||
gc->chip_types[0].regs.type = reg_offs->ctrl;
|
||||
|
||||
@@ -2325,10 +2325,9 @@ static struct thin_c *get_first_thin(struct pool *pool)
|
||||
struct thin_c *tc = NULL;
|
||||
|
||||
rcu_read_lock();
|
||||
if (!list_empty(&pool->active_thins)) {
|
||||
tc = list_entry_rcu(pool->active_thins.next, struct thin_c, list);
|
||||
tc = list_first_or_null_rcu(&pool->active_thins, struct thin_c, list);
|
||||
if (tc)
|
||||
thin_get(tc);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
return tc;
|
||||
|
||||
@@ -907,23 +907,27 @@ static int load_ablock(struct dm_array_cursor *c)
|
||||
if (c->block)
|
||||
unlock_ablock(c->info, c->block);
|
||||
|
||||
c->block = NULL;
|
||||
c->ab = NULL;
|
||||
c->index = 0;
|
||||
|
||||
r = dm_btree_cursor_get_value(&c->cursor, &key, &value_le);
|
||||
if (r) {
|
||||
DMERR("dm_btree_cursor_get_value failed");
|
||||
dm_btree_cursor_end(&c->cursor);
|
||||
goto out;
|
||||
|
||||
} else {
|
||||
r = get_ablock(c->info, le64_to_cpu(value_le), &c->block, &c->ab);
|
||||
if (r) {
|
||||
DMERR("get_ablock failed");
|
||||
dm_btree_cursor_end(&c->cursor);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
dm_btree_cursor_end(&c->cursor);
|
||||
c->block = NULL;
|
||||
c->ab = NULL;
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -946,10 +950,10 @@ EXPORT_SYMBOL_GPL(dm_array_cursor_begin);
|
||||
|
||||
void dm_array_cursor_end(struct dm_array_cursor *c)
|
||||
{
|
||||
if (c->block) {
|
||||
if (c->block)
|
||||
unlock_ablock(c->info, c->block);
|
||||
dm_btree_cursor_end(&c->cursor);
|
||||
}
|
||||
|
||||
dm_btree_cursor_end(&c->cursor);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dm_array_cursor_end);
|
||||
|
||||
@@ -989,6 +993,7 @@ int dm_array_cursor_skip(struct dm_array_cursor *c, uint32_t count)
|
||||
}
|
||||
|
||||
count -= remaining;
|
||||
c->index += (remaining - 1);
|
||||
r = dm_array_cursor_next(c);
|
||||
|
||||
} while (!r);
|
||||
|
||||
@@ -855,7 +855,6 @@ static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
|
||||
|
||||
static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = { 0, };
|
||||
struct xgbe_phy_data *phy_data = pdata->phy_data;
|
||||
unsigned int phy_id = phy_data->phydev->phy_id;
|
||||
|
||||
@@ -877,14 +876,7 @@ static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
|
||||
phy_write(phy_data->phydev, 0x04, 0x0d01);
|
||||
phy_write(phy_data->phydev, 0x00, 0x9140);
|
||||
|
||||
linkmode_set_bit_array(phy_10_100_features_array,
|
||||
ARRAY_SIZE(phy_10_100_features_array),
|
||||
supported);
|
||||
linkmode_set_bit_array(phy_gbit_features_array,
|
||||
ARRAY_SIZE(phy_gbit_features_array),
|
||||
supported);
|
||||
|
||||
linkmode_copy(phy_data->phydev->supported, supported);
|
||||
linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES);
|
||||
|
||||
phy_support_asym_pause(phy_data->phydev);
|
||||
|
||||
@@ -896,7 +888,6 @@ static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
|
||||
|
||||
static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = { 0, };
|
||||
struct xgbe_phy_data *phy_data = pdata->phy_data;
|
||||
struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom;
|
||||
unsigned int phy_id = phy_data->phydev->phy_id;
|
||||
@@ -960,13 +951,7 @@ static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata)
|
||||
reg = phy_read(phy_data->phydev, 0x00);
|
||||
phy_write(phy_data->phydev, 0x00, reg & ~0x00800);
|
||||
|
||||
linkmode_set_bit_array(phy_10_100_features_array,
|
||||
ARRAY_SIZE(phy_10_100_features_array),
|
||||
supported);
|
||||
linkmode_set_bit_array(phy_gbit_features_array,
|
||||
ARRAY_SIZE(phy_gbit_features_array),
|
||||
supported);
|
||||
linkmode_copy(phy_data->phydev->supported, supported);
|
||||
linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES);
|
||||
phy_support_asym_pause(phy_data->phydev);
|
||||
|
||||
netif_dbg(pdata, drv, pdata->netdev,
|
||||
|
||||
@@ -454,7 +454,8 @@ int nfp_bpf_event_output(struct nfp_app_bpf *bpf, const void *data,
|
||||
map_id_full = be64_to_cpu(cbe->map_ptr);
|
||||
map_id = map_id_full;
|
||||
|
||||
if (len < sizeof(struct cmsg_bpf_event) + pkt_size + data_size)
|
||||
if (size_add(pkt_size, data_size) > INT_MAX ||
|
||||
len < sizeof(struct cmsg_bpf_event) + pkt_size + data_size)
|
||||
return -EINVAL;
|
||||
if (cbe->hdr.ver != NFP_CCM_ABI_VERSION)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -60,15 +60,15 @@
|
||||
|
||||
static inline int cpsw_ale_get_field(u32 *ale_entry, u32 start, u32 bits)
|
||||
{
|
||||
int idx, idx2;
|
||||
int idx, idx2, index;
|
||||
u32 hi_val = 0;
|
||||
|
||||
idx = start / 32;
|
||||
idx2 = (start + bits - 1) / 32;
|
||||
/* Check if bits to be fetched exceed a word */
|
||||
if (idx != idx2) {
|
||||
idx2 = 2 - idx2; /* flip */
|
||||
hi_val = ale_entry[idx2] << ((idx2 * 32) - start);
|
||||
index = 2 - idx2; /* flip */
|
||||
hi_val = ale_entry[index] << ((idx2 * 32) - start);
|
||||
}
|
||||
start -= idx * 32;
|
||||
idx = 2 - idx; /* flip */
|
||||
@@ -78,16 +78,16 @@ static inline int cpsw_ale_get_field(u32 *ale_entry, u32 start, u32 bits)
|
||||
static inline void cpsw_ale_set_field(u32 *ale_entry, u32 start, u32 bits,
|
||||
u32 value)
|
||||
{
|
||||
int idx, idx2;
|
||||
int idx, idx2, index;
|
||||
|
||||
value &= BITMASK(bits);
|
||||
idx = start / 32;
|
||||
idx2 = (start + bits - 1) / 32;
|
||||
/* Check if bits to be set exceed a word */
|
||||
if (idx != idx2) {
|
||||
idx2 = 2 - idx2; /* flip */
|
||||
ale_entry[idx2] &= ~(BITMASK(bits + start - (idx2 * 32)));
|
||||
ale_entry[idx2] |= (value >> ((idx2 * 32) - start));
|
||||
index = 2 - idx2; /* flip */
|
||||
ale_entry[index] &= ~(BITMASK(bits + start - (idx2 * 32)));
|
||||
ale_entry[index] |= (value >> ((idx2 * 32) - start));
|
||||
}
|
||||
start -= idx * 32;
|
||||
idx = 2 - idx; /* flip */
|
||||
|
||||
@@ -3124,7 +3124,11 @@ static int ca8210_probe(struct spi_device *spi_device)
|
||||
spi_set_drvdata(priv->spi, priv);
|
||||
if (IS_ENABLED(CONFIG_IEEE802154_CA8210_DEBUGFS)) {
|
||||
cascoda_api_upstream = ca8210_test_int_driver_write;
|
||||
ca8210_test_interface_init(priv);
|
||||
ret = ca8210_test_interface_init(priv);
|
||||
if (ret) {
|
||||
dev_crit(&spi_device->dev, "ca8210_test_interface_init failed\n");
|
||||
goto error;
|
||||
}
|
||||
} else {
|
||||
cascoda_api_upstream = NULL;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,8 @@ static void xenvif_add_hash(struct xenvif *vif, const u8 *tag,
|
||||
|
||||
found = false;
|
||||
oldest = NULL;
|
||||
list_for_each_entry_rcu(entry, &vif->hash.cache.list, link) {
|
||||
list_for_each_entry_rcu(entry, &vif->hash.cache.list, link,
|
||||
lockdep_is_held(&vif->hash.cache.lock)) {
|
||||
/* Make sure we don't add duplicate entries */
|
||||
if (entry->len == len &&
|
||||
memcmp(entry->tag, tag, len) == 0)
|
||||
@@ -94,7 +95,7 @@ static u32 xenvif_new_hash(struct xenvif *vif, const u8 *data,
|
||||
|
||||
static void xenvif_flush_hash(struct xenvif *vif)
|
||||
{
|
||||
struct xenvif_hash_cache_entry *entry;
|
||||
struct xenvif_hash_cache_entry *entry, *n;
|
||||
unsigned long flags;
|
||||
|
||||
if (xenvif_hash_cache_size == 0)
|
||||
@@ -102,7 +103,7 @@ static void xenvif_flush_hash(struct xenvif *vif)
|
||||
|
||||
spin_lock_irqsave(&vif->hash.cache.lock, flags);
|
||||
|
||||
list_for_each_entry_rcu(entry, &vif->hash.cache.list, link) {
|
||||
list_for_each_entry_safe(entry, n, &vif->hash.cache.list, link) {
|
||||
list_del_rcu(&entry->link);
|
||||
vif->hash.cache.count--;
|
||||
kfree_rcu(entry, rcu);
|
||||
|
||||
@@ -36,7 +36,7 @@ void nvmet_bdev_set_limits(struct block_device *bdev, struct nvme_id_ns *id)
|
||||
*/
|
||||
id->nsfeat |= 1 << 4;
|
||||
/* NPWG = Namespace Preferred Write Granularity. 0's based */
|
||||
id->npwg = lpp0b;
|
||||
id->npwg = to0based(bdev_io_min(bdev) / bdev_logical_block_size(bdev));
|
||||
/* NPWA = Namespace Preferred Write Alignment. 0's based */
|
||||
id->npwa = id->npwg;
|
||||
/* NPDG = Namespace Preferred Deallocate Granularity. 0's based */
|
||||
|
||||
@@ -1094,11 +1094,12 @@ EXPORT_SYMBOL_GPL(of_phy_provider_unregister);
|
||||
* of_phy_provider_unregister to unregister the phy provider.
|
||||
*/
|
||||
void devm_of_phy_provider_unregister(struct device *dev,
|
||||
struct phy_provider *phy_provider) {
|
||||
struct phy_provider *phy_provider)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = devres_destroy(dev, devm_phy_provider_release, devm_phy_match,
|
||||
phy_provider);
|
||||
r = devres_release(dev, devm_phy_provider_release, devm_phy_match,
|
||||
phy_provider);
|
||||
dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n");
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister);
|
||||
|
||||
@@ -3746,7 +3746,7 @@ iscsi_if_rx(struct sk_buff *skb)
|
||||
}
|
||||
do {
|
||||
/*
|
||||
* special case for GET_STATS:
|
||||
* special case for GET_STATS, GET_CHAP and GET_HOST_STATS:
|
||||
* on success - sending reply and stats from
|
||||
* inside of if_recv_msg(),
|
||||
* on error - fall through.
|
||||
@@ -3755,6 +3755,8 @@ iscsi_if_rx(struct sk_buff *skb)
|
||||
break;
|
||||
if (ev->type == ISCSI_UEVENT_GET_CHAP && !err)
|
||||
break;
|
||||
if (ev->type == ISCSI_UEVENT_GET_HOST_STATS && !err)
|
||||
break;
|
||||
err = iscsi_if_send_reply(portid, nlh->nlmsg_type,
|
||||
ev, sizeof(*ev));
|
||||
if (err == -EAGAIN && --retries < 0) {
|
||||
|
||||
@@ -390,7 +390,6 @@ sg_release(struct inode *inode, struct file *filp)
|
||||
|
||||
mutex_lock(&sdp->open_rel_lock);
|
||||
scsi_autopm_put_device(sdp->device);
|
||||
kref_put(&sfp->f_ref, sg_remove_sfp);
|
||||
sdp->open_cnt--;
|
||||
|
||||
/* possibly many open()s waiting on exlude clearing, start many;
|
||||
@@ -402,6 +401,7 @@ sg_release(struct inode *inode, struct file *filp)
|
||||
wake_up_interruptible(&sdp->open_wait);
|
||||
}
|
||||
mutex_unlock(&sdp->open_rel_lock);
|
||||
kref_put(&sfp->f_ref, sg_remove_sfp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ static int ad9832_write_frequency(struct ad9832_state *st,
|
||||
static int ad9832_write_phase(struct ad9832_state *st,
|
||||
unsigned long addr, unsigned long phase)
|
||||
{
|
||||
if (phase > BIT(AD9832_PHASE_BITS))
|
||||
if (phase >= BIT(AD9832_PHASE_BITS))
|
||||
return -EINVAL;
|
||||
|
||||
st->phase_data[0] = cpu_to_be16((AD9832_CMD_PHA8BITSW << CMD_SHIFT) |
|
||||
|
||||
@@ -132,7 +132,7 @@ static int ad9834_write_frequency(struct ad9834_state *st,
|
||||
static int ad9834_write_phase(struct ad9834_state *st,
|
||||
unsigned long addr, unsigned long phase)
|
||||
{
|
||||
if (phase > BIT(AD9834_PHASE_BITS))
|
||||
if (phase >= BIT(AD9834_PHASE_BITS))
|
||||
return -EINVAL;
|
||||
st->data = cpu_to_be16(addr | phase);
|
||||
|
||||
|
||||
@@ -1337,11 +1337,12 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol)
|
||||
if (protocol < USBLP_FIRST_PROTOCOL || protocol > USBLP_LAST_PROTOCOL)
|
||||
return -EINVAL;
|
||||
|
||||
alts = usblp->protocol[protocol].alt_setting;
|
||||
if (alts < 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* Don't unnecessarily set the interface if there's a single alt. */
|
||||
if (usblp->intf->num_altsetting > 1) {
|
||||
alts = usblp->protocol[protocol].alt_setting;
|
||||
if (alts < 0)
|
||||
return -EINVAL;
|
||||
r = usb_set_interface(usblp->dev, usblp->ifnum, alts);
|
||||
if (r < 0) {
|
||||
printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n",
|
||||
|
||||
@@ -2596,13 +2596,13 @@ int usb_new_device(struct usb_device *udev)
|
||||
err = sysfs_create_link(&udev->dev.kobj,
|
||||
&port_dev->dev.kobj, "port");
|
||||
if (err)
|
||||
goto fail;
|
||||
goto out_del_dev;
|
||||
|
||||
err = sysfs_create_link(&port_dev->dev.kobj,
|
||||
&udev->dev.kobj, "device");
|
||||
if (err) {
|
||||
sysfs_remove_link(&udev->dev.kobj, "port");
|
||||
goto fail;
|
||||
goto out_del_dev;
|
||||
}
|
||||
|
||||
if (!test_and_set_bit(port1, hub->child_usage_bits))
|
||||
@@ -2614,6 +2614,8 @@ int usb_new_device(struct usb_device *udev)
|
||||
pm_runtime_put_sync_autosuspend(&udev->dev);
|
||||
return err;
|
||||
|
||||
out_del_dev:
|
||||
device_del(&udev->dev);
|
||||
fail:
|
||||
usb_set_device_state(udev, USB_STATE_NOTATTACHED);
|
||||
pm_runtime_disable(&udev->dev);
|
||||
|
||||
@@ -294,10 +294,11 @@ static int usb_port_runtime_suspend(struct device *dev)
|
||||
static void usb_port_shutdown(struct device *dev)
|
||||
{
|
||||
struct usb_port *port_dev = to_usb_port(dev);
|
||||
struct usb_device *udev = port_dev->child;
|
||||
|
||||
if (port_dev->child) {
|
||||
usb_disable_usb2_hardware_lpm(port_dev->child);
|
||||
usb_unlocked_disable_lpm(port_dev->child);
|
||||
if (udev && !udev->port_is_suspended) {
|
||||
usb_disable_usb2_hardware_lpm(udev);
|
||||
usb_unlocked_disable_lpm(udev);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2099,7 +2099,7 @@ static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev)
|
||||
ffs_log("enter: state %d setup_state %d flag %lu", ffs->state,
|
||||
ffs->setup_state, ffs->flags);
|
||||
|
||||
if (WARN_ON(ffs->state != FFS_ACTIVE
|
||||
if ((ffs->state != FFS_ACTIVE
|
||||
|| test_and_set_bit(FFS_FL_BOUND, &ffs->flags)))
|
||||
return -EBADFD;
|
||||
|
||||
|
||||
@@ -224,6 +224,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */
|
||||
{ USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
|
||||
{ USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
|
||||
{ USB_DEVICE(0x1B93, 0x1013) }, /* Phoenix Contact UPS Device */
|
||||
{ USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */
|
||||
{ USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
|
||||
{ USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
|
||||
|
||||
@@ -621,7 +621,7 @@ static void option_instat_callback(struct urb *urb);
|
||||
|
||||
/* MeiG Smart Technology products */
|
||||
#define MEIGSMART_VENDOR_ID 0x2dee
|
||||
/* MeiG Smart SRM825L based on Qualcomm 315 */
|
||||
/* MeiG Smart SRM815/SRM825L based on Qualcomm 315 */
|
||||
#define MEIGSMART_PRODUCT_SRM825L 0x4d22
|
||||
/* MeiG Smart SLM320 based on UNISOC UIS8910 */
|
||||
#define MEIGSMART_PRODUCT_SLM320 0x4d41
|
||||
@@ -2405,6 +2405,7 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM320, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM770A, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) },
|
||||
@@ -2412,6 +2413,7 @@ static const struct usb_device_id option_ids[] = {
|
||||
.driver_info = NCTRL(1) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0640, 0xff), /* TCL IK512 ECM */
|
||||
.driver_info = NCTRL(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x2949, 0x8700, 0xff) }, /* Neoway N723-EA */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, option_ids);
|
||||
|
||||
@@ -555,7 +555,7 @@ static void qt2_process_read_urb(struct urb *urb)
|
||||
|
||||
newport = *(ch + 3);
|
||||
|
||||
if (newport > serial->num_ports) {
|
||||
if (newport >= serial->num_ports) {
|
||||
dev_err(&port->dev,
|
||||
"%s - port change to invalid port: %i\n",
|
||||
__func__, newport);
|
||||
|
||||
@@ -255,6 +255,13 @@ UNUSUAL_DEV( 0x0421, 0x06aa, 0x1110, 0x1110,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_MAX_SECTORS_64 ),
|
||||
|
||||
/* Added by Lubomir Rintel <lkundrak@v3.sk>, a very fine chap */
|
||||
UNUSUAL_DEV( 0x0421, 0x06c2, 0x0000, 0x0406,
|
||||
"Nokia",
|
||||
"Nokia 208",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_MAX_SECTORS_64 ),
|
||||
|
||||
#ifdef NO_SDDR09
|
||||
UNUSUAL_DEV( 0x0436, 0x0005, 0x0100, 0x0100,
|
||||
"Microtech",
|
||||
|
||||
@@ -405,6 +405,11 @@ static ssize_t vfio_platform_read_mmio(struct vfio_platform_region *reg,
|
||||
{
|
||||
unsigned int done = 0;
|
||||
|
||||
if (off >= reg->size)
|
||||
return -EINVAL;
|
||||
|
||||
count = min_t(size_t, count, reg->size - off);
|
||||
|
||||
if (!reg->ioaddr) {
|
||||
reg->ioaddr =
|
||||
ioremap_nocache(reg->addr, reg->size);
|
||||
@@ -482,6 +487,11 @@ static ssize_t vfio_platform_write_mmio(struct vfio_platform_region *reg,
|
||||
{
|
||||
unsigned int done = 0;
|
||||
|
||||
if (off >= reg->size)
|
||||
return -EINVAL;
|
||||
|
||||
count = min_t(size_t, count, reg->size - off);
|
||||
|
||||
if (!reg->ioaddr) {
|
||||
reg->ioaddr =
|
||||
ioremap_nocache(reg->addr, reg->size);
|
||||
|
||||
@@ -629,6 +629,7 @@ enum {
|
||||
*/
|
||||
#define EXT4_EX_NOCACHE 0x40000000
|
||||
#define EXT4_EX_FORCE_CACHE 0x20000000
|
||||
#define EXT4_EX_NOFAIL 0x10000000
|
||||
|
||||
/*
|
||||
* Flags used by ext4_free_blocks
|
||||
|
||||
@@ -304,11 +304,14 @@ ext4_force_split_extent_at(handle_t *handle, struct inode *inode,
|
||||
{
|
||||
struct ext4_ext_path *path = *ppath;
|
||||
int unwritten = ext4_ext_is_unwritten(path[path->p_depth].p_ext);
|
||||
int flags = EXT4_EX_NOCACHE | EXT4_GET_BLOCKS_PRE_IO;
|
||||
|
||||
if (nofail)
|
||||
flags |= EXT4_GET_BLOCKS_METADATA_NOFAIL | EXT4_EX_NOFAIL;
|
||||
|
||||
return ext4_split_extent_at(handle, inode, ppath, lblk, unwritten ?
|
||||
EXT4_EXT_MARK_UNWRIT1|EXT4_EXT_MARK_UNWRIT2 : 0,
|
||||
EXT4_EX_NOCACHE | EXT4_GET_BLOCKS_PRE_IO |
|
||||
(nofail ? EXT4_GET_BLOCKS_METADATA_NOFAIL:0));
|
||||
flags);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -572,9 +575,13 @@ __read_extent_tree_block(const char *function, unsigned int line,
|
||||
struct buffer_head *bh;
|
||||
int err;
|
||||
ext4_fsblk_t pblk;
|
||||
gfp_t gfp_flags = __GFP_MOVABLE | GFP_NOFS;
|
||||
|
||||
if (flags & EXT4_EX_NOFAIL)
|
||||
gfp_flags |= __GFP_NOFAIL;
|
||||
|
||||
pblk = ext4_idx_pblock(idx);
|
||||
bh = sb_getblk_gfp(inode->i_sb, pblk, __GFP_MOVABLE | GFP_NOFS);
|
||||
bh = sb_getblk_gfp(inode->i_sb, pblk, gfp_flags);
|
||||
if (unlikely(!bh))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
@@ -919,6 +926,10 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block,
|
||||
struct ext4_ext_path *path = orig_path ? *orig_path : NULL;
|
||||
short int depth, i, ppos = 0;
|
||||
int ret;
|
||||
gfp_t gfp_flags = GFP_NOFS;
|
||||
|
||||
if (flags & EXT4_EX_NOFAIL)
|
||||
gfp_flags |= __GFP_NOFAIL;
|
||||
|
||||
eh = ext_inode_hdr(inode);
|
||||
depth = ext_depth(inode);
|
||||
@@ -939,7 +950,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block,
|
||||
if (!path) {
|
||||
/* account possible depth increase */
|
||||
path = kcalloc(depth + 2, sizeof(struct ext4_ext_path),
|
||||
GFP_NOFS);
|
||||
gfp_flags);
|
||||
if (unlikely(!path))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
path[0].p_maxdepth = depth + 1;
|
||||
@@ -1088,9 +1099,13 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
|
||||
ext4_fsblk_t newblock, oldblock;
|
||||
__le32 border;
|
||||
ext4_fsblk_t *ablocks = NULL; /* array of allocated blocks */
|
||||
gfp_t gfp_flags = GFP_NOFS;
|
||||
int err = 0;
|
||||
size_t ext_size = 0;
|
||||
|
||||
if (flags & EXT4_EX_NOFAIL)
|
||||
gfp_flags |= __GFP_NOFAIL;
|
||||
|
||||
/* make decision: where to split? */
|
||||
/* FIXME: now decision is simplest: at current extent */
|
||||
|
||||
@@ -1124,7 +1139,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
|
||||
* We need this to handle errors and free blocks
|
||||
* upon them.
|
||||
*/
|
||||
ablocks = kcalloc(depth, sizeof(ext4_fsblk_t), GFP_NOFS);
|
||||
ablocks = kcalloc(depth, sizeof(ext4_fsblk_t), gfp_flags);
|
||||
if (!ablocks)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2110,7 +2125,7 @@ prepend:
|
||||
if (next != EXT_MAX_BLOCKS) {
|
||||
ext_debug("next leaf block - %u\n", next);
|
||||
BUG_ON(npath != NULL);
|
||||
npath = ext4_find_extent(inode, next, NULL, 0);
|
||||
npath = ext4_find_extent(inode, next, NULL, gb_flags);
|
||||
if (IS_ERR(npath))
|
||||
return PTR_ERR(npath);
|
||||
BUG_ON(npath->p_depth != path->p_depth);
|
||||
@@ -3018,7 +3033,8 @@ again:
|
||||
ext4_fsblk_t pblk;
|
||||
|
||||
/* find extent for or closest extent to this block */
|
||||
path = ext4_find_extent(inode, end, NULL, EXT4_EX_NOCACHE);
|
||||
path = ext4_find_extent(inode, end, NULL,
|
||||
EXT4_EX_NOCACHE | EXT4_EX_NOFAIL);
|
||||
if (IS_ERR(path)) {
|
||||
ext4_journal_stop(handle);
|
||||
return PTR_ERR(path);
|
||||
@@ -3104,7 +3120,7 @@ again:
|
||||
le16_to_cpu(path[k].p_hdr->eh_entries)+1;
|
||||
} else {
|
||||
path = kcalloc(depth + 1, sizeof(struct ext4_ext_path),
|
||||
GFP_NOFS);
|
||||
GFP_NOFS | __GFP_NOFAIL);
|
||||
if (path == NULL) {
|
||||
ext4_journal_stop(handle);
|
||||
return -ENOMEM;
|
||||
@@ -3424,6 +3440,25 @@ static int ext4_split_extent_at(handle_t *handle,
|
||||
if (err != -ENOSPC && err != -EDQUOT && err != -ENOMEM)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Update path is required because previous ext4_ext_insert_extent()
|
||||
* may have freed or reallocated the path. Using EXT4_EX_NOFAIL
|
||||
* guarantees that ext4_find_extent() will not return -ENOMEM,
|
||||
* otherwise -ENOMEM will cause a retry in do_writepages(), and a
|
||||
* WARN_ON may be triggered in ext4_da_update_reserve_space() due to
|
||||
* an incorrect ee_len causing the i_reserved_data_blocks exception.
|
||||
*/
|
||||
path = ext4_find_extent(inode, ee_block, ppath,
|
||||
flags | EXT4_EX_NOFAIL);
|
||||
if (IS_ERR(path)) {
|
||||
EXT4_ERROR_INODE(inode, "Failed split extent on %u, err %ld",
|
||||
split, PTR_ERR(path));
|
||||
return PTR_ERR(path);
|
||||
}
|
||||
depth = ext_depth(inode);
|
||||
ex = path[depth].p_ext;
|
||||
*ppath = path;
|
||||
|
||||
if (EXT4_EXT_MAY_ZEROOUT & split_flag) {
|
||||
if (split_flag & (EXT4_EXT_DATA_VALID1|EXT4_EXT_DATA_VALID2)) {
|
||||
if (split_flag & EXT4_EXT_DATA_VALID1) {
|
||||
@@ -3472,7 +3507,7 @@ fix_extent_len:
|
||||
ext4_ext_dirty(handle, inode, path + path->p_depth);
|
||||
return err;
|
||||
out:
|
||||
ext4_ext_show_leaf(inode, path);
|
||||
ext4_ext_show_leaf(inode, *ppath);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -3528,7 +3563,7 @@ static int ext4_split_extent(handle_t *handle,
|
||||
* Update path is required because previous ext4_split_extent_at() may
|
||||
* result in split of original leaf or extent zeroout.
|
||||
*/
|
||||
path = ext4_find_extent(inode, map->m_lblk, ppath, 0);
|
||||
path = ext4_find_extent(inode, map->m_lblk, ppath, flags);
|
||||
if (IS_ERR(path))
|
||||
return PTR_ERR(path);
|
||||
depth = ext_depth(inode);
|
||||
@@ -4650,7 +4685,14 @@ retry:
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
return ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1);
|
||||
retry_remove_space:
|
||||
err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1);
|
||||
if (err == -ENOMEM) {
|
||||
cond_resched();
|
||||
congestion_wait(BLK_RW_ASYNC, HZ/50);
|
||||
goto retry_remove_space;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset,
|
||||
|
||||
@@ -271,6 +271,7 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask,
|
||||
error = filemap_fdatawait(inode->i_mapping);
|
||||
if (error)
|
||||
goto out;
|
||||
truncate_inode_pages(inode->i_mapping, 0);
|
||||
if (new_flags & GFS2_DIF_JDATA)
|
||||
gfs2_ordered_del_inode(ip);
|
||||
}
|
||||
|
||||
@@ -419,11 +419,13 @@ static int hfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
goto bail_no_root;
|
||||
res = hfs_cat_find_brec(sb, HFS_ROOT_CNID, &fd);
|
||||
if (!res) {
|
||||
if (fd.entrylength > sizeof(rec) || fd.entrylength < 0) {
|
||||
if (fd.entrylength != sizeof(rec.dir)) {
|
||||
res = -EIO;
|
||||
goto bail_hfs_find;
|
||||
}
|
||||
hfs_bnode_read(fd.bnode, &rec, fd.entryoffset, fd.entrylength);
|
||||
if (rec.type != HFS_CDR_DIR)
|
||||
res = -EIO;
|
||||
}
|
||||
if (res)
|
||||
goto bail_hfs_find;
|
||||
|
||||
@@ -770,9 +770,9 @@ start_journal_io:
|
||||
/*
|
||||
* If the journal is not located on the file system device,
|
||||
* then we must flush the file system device before we issue
|
||||
* the commit record
|
||||
* the commit record and update the journal tail sequence.
|
||||
*/
|
||||
if (commit_transaction->t_need_data_flush &&
|
||||
if ((commit_transaction->t_need_data_flush || update_tail) &&
|
||||
(journal->j_fs_dev != journal->j_dev) &&
|
||||
(journal->j_flags & JBD2_BARRIER))
|
||||
blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
|
||||
|
||||
@@ -881,7 +881,7 @@ static int ocfs2_get_next_id(struct super_block *sb, struct kqid *qid)
|
||||
int status = 0;
|
||||
|
||||
trace_ocfs2_get_next_id(from_kqid(&init_user_ns, *qid), type);
|
||||
if (!sb_has_quota_loaded(sb, type)) {
|
||||
if (!sb_has_quota_active(sb, type)) {
|
||||
status = -ESRCH;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -815,7 +815,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
|
||||
struct ocfs2_quota_chunk *chunk;
|
||||
struct ocfs2_local_disk_chunk *dchunk;
|
||||
int mark_clean = 1, len;
|
||||
int status;
|
||||
int status = 0;
|
||||
|
||||
iput(oinfo->dqi_gqinode);
|
||||
ocfs2_simple_drop_lockres(OCFS2_SB(sb), &oinfo->dqi_gqlock);
|
||||
@@ -857,17 +857,15 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
|
||||
oinfo->dqi_libh,
|
||||
olq_update_info,
|
||||
info);
|
||||
if (status < 0) {
|
||||
if (status < 0)
|
||||
mlog_errno(status);
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
ocfs2_inode_unlock(sb_dqopt(sb)->files[type], 1);
|
||||
brelse(oinfo->dqi_libh);
|
||||
brelse(oinfo->dqi_lqi_bh);
|
||||
kfree(oinfo);
|
||||
return 0;
|
||||
info->dqi_priv = NULL;
|
||||
return status;
|
||||
}
|
||||
|
||||
static void olq_set_dquot(struct buffer_head *bh, void *private)
|
||||
|
||||
@@ -397,6 +397,8 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
|
||||
if (buflen == 0)
|
||||
return acc;
|
||||
}
|
||||
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
return acc;
|
||||
|
||||
@@ -534,6 +534,7 @@ extern void __init hrtimers_init(void);
|
||||
extern void sysrq_timer_list_show(void);
|
||||
|
||||
int hrtimers_prepare_cpu(unsigned int cpu);
|
||||
int hrtimers_cpu_starting(unsigned int cpu);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
int hrtimers_dead_cpu(unsigned int cpu);
|
||||
#else
|
||||
|
||||
@@ -43,8 +43,16 @@ typedef struct poll_table_struct {
|
||||
|
||||
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
|
||||
{
|
||||
if (p && p->_qproc && wait_address)
|
||||
if (p && p->_qproc && wait_address) {
|
||||
p->_qproc(filp, wait_address, p);
|
||||
/*
|
||||
* This memory barrier is paired in the wq_has_sleeper().
|
||||
* See the comment above prepare_to_wait(), we need to
|
||||
* ensure that subsequent tests in this thread can't be
|
||||
* reordered with __add_wait_queue() in _qproc() paths.
|
||||
*/
|
||||
smp_mb();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -713,13 +713,12 @@ struct usb_device {
|
||||
|
||||
unsigned long active_duration;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
unsigned long connect_time;
|
||||
|
||||
unsigned do_remote_wakeup:1;
|
||||
unsigned reset_resume:1;
|
||||
unsigned port_is_suspended:1;
|
||||
#endif
|
||||
|
||||
struct wusb_dev *wusb_dev;
|
||||
int slot_id;
|
||||
enum usb_device_removable removable;
|
||||
|
||||
@@ -498,9 +498,7 @@ extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
|
||||
|
||||
extern int usb_hcd_amd_remote_wakeup_quirk(struct pci_dev *dev);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
extern const struct dev_pm_ops usb_hcd_pci_pm_ops;
|
||||
#endif
|
||||
#endif /* CONFIG_USB_PCI */
|
||||
|
||||
/* pci-ish (pdev null is ok) buffer alloc/mapping support */
|
||||
|
||||
@@ -299,7 +299,7 @@ static inline int inet_csk_reqsk_queue_len(const struct sock *sk)
|
||||
|
||||
static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk)
|
||||
{
|
||||
return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog;
|
||||
return inet_csk_reqsk_queue_len(sk) > READ_ONCE(sk->sk_max_ack_backlog);
|
||||
}
|
||||
|
||||
bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
|
||||
|
||||
@@ -87,6 +87,7 @@ find $cpio_dir -type f -print0 |
|
||||
# pre-sorted, as --sort=name might not be available.
|
||||
find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \
|
||||
tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \
|
||||
--exclude=".__afs*" --exclude=".nfs*" \
|
||||
--owner=0 --group=0 --numeric-owner --no-recursion --mode=u=rw,go=r,a+X \
|
||||
-Jcf $tarfile -C $cpio_dir/ -T - > /dev/null
|
||||
|
||||
|
||||
@@ -2073,6 +2073,15 @@ int hrtimers_prepare_cpu(unsigned int cpu)
|
||||
}
|
||||
|
||||
cpu_base->cpu = cpu;
|
||||
hrtimer_cpu_base_init_expiry_lock(cpu_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hrtimers_cpu_starting(unsigned int cpu)
|
||||
{
|
||||
struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
|
||||
|
||||
/* Clear out any left over state from a CPU down operation */
|
||||
cpu_base->active_bases = 0;
|
||||
cpu_base->hres_active = 0;
|
||||
cpu_base->hang_detected = 0;
|
||||
@@ -2080,7 +2089,6 @@ int hrtimers_prepare_cpu(unsigned int cpu)
|
||||
cpu_base->softirq_next_timer = NULL;
|
||||
cpu_base->expires_next = KTIME_MAX;
|
||||
cpu_base->softirq_expires_next = KTIME_MAX;
|
||||
hrtimer_cpu_base_init_expiry_lock(cpu_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2198,6 +2206,7 @@ void hrtimer_quiesce_cpu(void *cpup)
|
||||
void __init hrtimers_init(void)
|
||||
{
|
||||
hrtimers_prepare_cpu(smp_processor_id());
|
||||
hrtimers_cpu_starting(smp_processor_id());
|
||||
open_softirq(HRTIMER_SOFTIRQ, hrtimer_run_softirq);
|
||||
}
|
||||
|
||||
|
||||
@@ -55,11 +55,11 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
goto drop;
|
||||
|
||||
rcu_read_lock();
|
||||
proto = find_snap_client(skb_transport_header(skb));
|
||||
proto = find_snap_client(skb->data);
|
||||
if (proto) {
|
||||
/* Pass the frame on. */
|
||||
skb->transport_header += 5;
|
||||
skb_pull_rcsum(skb, 5);
|
||||
skb_reset_transport_header(skb);
|
||||
rc = proto->rcvfunc(skb, dev, &snap_packet_type, orig_dev);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
@@ -602,7 +602,7 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
by tcp. Feel free to propose better solution.
|
||||
--ANK (980728)
|
||||
*/
|
||||
if (np->rxopt.all)
|
||||
if (np->rxopt.all && sk->sk_state != DCCP_LISTEN)
|
||||
opt_skb = skb_clone_and_charge_r(skb, sk);
|
||||
|
||||
if (sk->sk_state == DCCP_OPEN) { /* Fast path */
|
||||
|
||||
@@ -173,7 +173,7 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
|
||||
struct inet6_dev *rt_idev = rt->rt6i_idev;
|
||||
struct net_device *rt_dev = rt->dst.dev;
|
||||
|
||||
if (rt_idev->dev == dev) {
|
||||
if (rt_idev && rt_idev->dev == dev) {
|
||||
rt->rt6i_idev = in6_dev_get(loopback_dev);
|
||||
in6_dev_put(rt_idev);
|
||||
}
|
||||
|
||||
@@ -1393,7 +1393,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
by tcp. Feel free to propose better solution.
|
||||
--ANK (980728)
|
||||
*/
|
||||
if (np->rxopt.all)
|
||||
if (np->rxopt.all && sk->sk_state != TCP_LISTEN)
|
||||
opt_skb = skb_clone_and_charge_r(skb, sk);
|
||||
|
||||
if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
|
||||
@@ -1430,8 +1430,6 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
if (nsk != sk) {
|
||||
if (tcp_child_process(sk, nsk, skb))
|
||||
goto reset;
|
||||
if (opt_skb)
|
||||
__kfree_skb(opt_skb);
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
|
||||
@@ -688,6 +688,10 @@ void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata)
|
||||
ASSERT_RTNL();
|
||||
|
||||
mutex_lock(&sdata->local->iflist_mtx);
|
||||
if (list_empty(&sdata->local->interfaces)) {
|
||||
mutex_unlock(&sdata->local->iflist_mtx);
|
||||
return;
|
||||
}
|
||||
list_del_rcu(&sdata->list);
|
||||
mutex_unlock(&sdata->local->iflist_mtx);
|
||||
|
||||
|
||||
@@ -354,7 +354,8 @@ static const struct nla_policy flow_policy[TCA_FLOW_MAX + 1] = {
|
||||
[TCA_FLOW_KEYS] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_MODE] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_BASECLASS] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_RSHIFT] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_RSHIFT] = NLA_POLICY_MAX(NLA_U32,
|
||||
31 /* BITS_PER_U32 - 1 */),
|
||||
[TCA_FLOW_ADDEND] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_MASK] = { .type = NLA_U32 },
|
||||
[TCA_FLOW_XOR] = { .type = NLA_U32 },
|
||||
|
||||
@@ -326,7 +326,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct net *net = current->nsproxy->net_ns;
|
||||
struct net *net = container_of(ctl->data, struct net, sctp.auth_enable);
|
||||
struct ctl_table tbl;
|
||||
bool changed = false;
|
||||
char *none = "none";
|
||||
@@ -372,7 +372,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct net *net = current->nsproxy->net_ns;
|
||||
struct net *net = container_of(ctl->data, struct net, sctp.rto_min);
|
||||
unsigned int min = *(unsigned int *) ctl->extra1;
|
||||
unsigned int max = *(unsigned int *) ctl->extra2;
|
||||
struct ctl_table tbl;
|
||||
@@ -401,7 +401,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct net *net = current->nsproxy->net_ns;
|
||||
struct net *net = container_of(ctl->data, struct net, sctp.rto_max);
|
||||
unsigned int min = *(unsigned int *) ctl->extra1;
|
||||
unsigned int max = *(unsigned int *) ctl->extra2;
|
||||
struct ctl_table tbl;
|
||||
@@ -441,7 +441,8 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct net *net = current->nsproxy->net_ns;
|
||||
struct net *net = container_of(ctl->data, struct net,
|
||||
sctp.sctp_hmac_alg);
|
||||
struct ctl_table tbl;
|
||||
int new_value, ret;
|
||||
|
||||
|
||||
@@ -425,7 +425,7 @@ int tls_tx_records(struct sock *sk, int flags)
|
||||
|
||||
tx_err:
|
||||
if (rc < 0 && rc != -EAGAIN)
|
||||
tls_err_abort(sk, -EBADMSG);
|
||||
tls_err_abort(sk, rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1400,6 +1400,7 @@ config SND_SOC_WM8993
|
||||
|
||||
config SND_SOC_WM8994
|
||||
tristate
|
||||
depends on MFD_WM8994
|
||||
|
||||
config SND_SOC_WM8995
|
||||
tristate
|
||||
|
||||
Reference in New Issue
Block a user