From 136cba8edab48de105788ecb052d6a7f3f5e6c5f Mon Sep 17 00:00:00 2001 From: Murali Nalajala Date: Tue, 18 Aug 2020 12:43:04 -0700 Subject: [PATCH 001/448] ANDROID: ABI: Update allowed list for QCOM Leaf changes summary: 7 artifacts changed Changed leaf types summary: 0 leaf type changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 6 Added functions Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 1 Added variable 6 Added functions: [A] 'function int generic_permission(inode*, int)' [A] 'function u32 ieee80211_channel_to_freq_khz(int, nl80211_band)' [A] 'function int ieee80211_freq_khz_to_channel(u32)' [A] 'function int iio_write_channel_raw(iio_channel*, int)' [A] 'function usb_role_switch* usb_role_switch_get(device*)' [A] 'function void usb_role_switch_put(usb_role_switch*)' 1 Added variable: [A] 'typedef u64 ()* arch_timer_read_counter' Bug: 165030108 Signed-off-by: Murali Nalajala Change-Id: I6058d72439d1aac2c0285a8672656493f8c0b29d --- android/abi_gki_aarch64.xml | 1024 +++++++++++++++++++--------------- android/abi_gki_aarch64_qcom | 57 ++ 2 files changed, 629 insertions(+), 452 deletions(-) diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index 0d7f61d296b8..8983072c9bb5 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -1508,6 +1508,7 @@ + @@ -1697,6 +1698,7 @@ + @@ -1707,6 +1709,7 @@ + @@ -1767,6 +1770,7 @@ + @@ -3859,6 +3863,8 @@ + + @@ -4184,6 +4190,7 @@ + @@ -11107,6 +11114,23 @@ + + + + + + + + + + + + + + + + + @@ -14094,23 +14118,6 @@ - - - - - - - - - - - - - - - - - @@ -15128,15 +15135,6 @@ - - - - - - - - - @@ -15811,6 +15809,7 @@ + @@ -15945,7 +15944,7 @@ - + @@ -16314,7 +16313,7 @@ - + @@ -16416,7 +16415,7 @@ - + @@ -16898,10 +16897,10 @@ - + - + @@ -17188,7 +17187,7 @@ - + @@ -17277,7 +17276,7 @@ - + @@ -17642,7 +17641,7 @@ - + @@ -22731,10 +22730,10 @@ - + - + @@ -23112,7 +23111,7 @@ - + @@ -24098,7 +24097,7 @@ - + @@ -24717,7 +24716,7 @@ - + @@ -27164,7 +27163,7 @@ - + @@ -27280,6 +27279,7 @@ + @@ -35705,23 +35705,6 @@ - - - - - - - - - - - - - - - - - @@ -36178,7 +36161,7 @@ - + @@ -37167,13 +37150,13 @@ - + - + @@ -39259,7 +39242,7 @@ - + @@ -39351,7 +39334,7 @@ - + @@ -39927,6 +39910,11 @@ + + + + + @@ -39945,17 +39933,17 @@ - + - + - + @@ -41645,7 +41633,7 @@ - + @@ -41657,7 +41645,7 @@ - + @@ -41786,7 +41774,7 @@ - + @@ -42254,7 +42242,7 @@ - + @@ -42266,7 +42254,7 @@ - + @@ -44171,7 +44159,7 @@ - + @@ -44215,11 +44203,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -44233,41 +44254,41 @@ - + - + - + - + - + - + - + - + @@ -44606,7 +44627,7 @@ - + @@ -44752,7 +44773,7 @@ - + @@ -46710,7 +46731,7 @@ - + @@ -46726,7 +46747,7 @@ - + @@ -46734,13 +46755,13 @@ - + - + @@ -49536,7 +49557,7 @@ - + @@ -50200,7 +50221,7 @@ - + @@ -50498,7 +50519,7 @@ - + @@ -50885,7 +50906,7 @@ - + @@ -51157,7 +51178,7 @@ - + @@ -51181,13 +51202,13 @@ - + - + @@ -51464,7 +51485,7 @@ - + @@ -51926,7 +51947,7 @@ - + @@ -51959,13 +51980,13 @@ - + - + @@ -52142,14 +52163,6 @@ - - - - - - - - @@ -52702,6 +52715,20 @@ + + + + + + + + + + + + + + @@ -52713,15 +52740,15 @@ - + - + - + @@ -52730,7 +52757,7 @@ - + @@ -53453,8 +53480,8 @@ - - + + @@ -53482,20 +53509,6 @@ - - - - - - - - - - - - - - @@ -54251,17 +54264,6 @@ - - - - - - - - - - - @@ -57009,7 +57011,7 @@ - + @@ -57036,7 +57038,7 @@ - + @@ -60592,7 +60594,7 @@ - + @@ -60601,7 +60603,7 @@ - + @@ -61836,7 +61838,7 @@ - + @@ -61920,7 +61922,7 @@ - + @@ -64620,7 +64622,7 @@ - + @@ -64631,7 +64633,7 @@ - + @@ -67024,18 +67026,18 @@ - + - + - + - + @@ -67422,7 +67424,7 @@ - + @@ -68406,7 +68408,7 @@ - + @@ -68423,7 +68425,7 @@ - + @@ -68439,7 +68441,7 @@ - + @@ -70078,10 +70080,10 @@ - + - + @@ -71540,7 +71542,7 @@ - + @@ -71549,7 +71551,7 @@ - + @@ -72155,7 +72157,7 @@ - + @@ -72202,7 +72204,7 @@ - + @@ -72462,7 +72464,7 @@ - + @@ -73822,7 +73824,7 @@ - + @@ -73843,7 +73845,7 @@ - + @@ -76784,7 +76786,7 @@ - + @@ -77579,7 +77581,7 @@ - + @@ -81298,7 +81300,7 @@ - + @@ -81919,6 +81921,14 @@ + + + + + + + + @@ -82109,7 +82119,7 @@ - + @@ -82838,7 +82848,7 @@ - + @@ -83947,7 +83957,7 @@ - + @@ -83966,7 +83976,7 @@ - + @@ -84468,6 +84478,14 @@ + + + + + + + + @@ -85103,7 +85121,7 @@ - + @@ -85147,7 +85165,7 @@ - + @@ -85299,6 +85317,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -85739,7 +85779,7 @@ - + @@ -85768,7 +85808,7 @@ - + @@ -85786,13 +85826,13 @@ - + - + @@ -85846,7 +85886,7 @@ - + @@ -86242,13 +86282,13 @@ - + - + @@ -86444,23 +86484,6 @@ - - - - - - - - - - - - - - - - - @@ -86994,7 +87017,7 @@ - + @@ -88127,7 +88150,7 @@ - + @@ -89185,6 +89208,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -89207,6 +89273,25 @@ + + + + + + + + + + + + + + + + + + + @@ -92111,10 +92196,10 @@ - + - + @@ -98605,6 +98690,23 @@ + + + + + + + + + + + + + + + + + @@ -99974,9 +100076,23 @@ + + + + + + + + + + + + + + - + @@ -99991,6 +100107,20 @@ + + + + + + + + + + + + + + @@ -100168,7 +100298,7 @@ - + @@ -100237,7 +100367,7 @@ - + @@ -101161,7 +101291,7 @@ - + @@ -101399,7 +101529,7 @@ - + @@ -101444,7 +101574,7 @@ - + @@ -101794,10 +101924,10 @@ - + - + @@ -102487,16 +102617,16 @@ - + - + - + @@ -102504,7 +102634,7 @@ - + @@ -102582,7 +102712,7 @@ - + @@ -102599,7 +102729,15 @@ - + + + + + + + + + @@ -102830,50 +102968,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -102892,25 +102987,6 @@ - - - - - - - - - - - - - - - - - - - @@ -103049,23 +103125,6 @@ - - - - - - - - - - - - - - - - - @@ -103119,7 +103178,7 @@ - + @@ -103137,10 +103196,10 @@ - + - + @@ -103159,7 +103218,7 @@ - + @@ -103189,7 +103248,7 @@ - + @@ -103279,6 +103338,23 @@ + + + + + + + + + + + + + + + + + @@ -103430,7 +103506,7 @@ - + @@ -103554,6 +103630,14 @@ + + + + + + + + @@ -103684,7 +103768,7 @@ - + @@ -103959,7 +104043,7 @@ - + @@ -104004,7 +104088,7 @@ - + @@ -104199,6 +104283,20 @@ + + + + + + + + + + + + + + @@ -104437,26 +104535,7 @@ - - - - - - - - - - - - - - - - - - - - + @@ -104467,8 +104546,8 @@ - - + + @@ -104486,7 +104565,7 @@ - + @@ -104636,20 +104715,6 @@ - - - - - - - - - - - - - - @@ -105071,7 +105136,7 @@ - + @@ -105151,7 +105216,7 @@ - + @@ -105288,7 +105353,7 @@ - + @@ -105351,7 +105416,7 @@ - + @@ -105858,10 +105923,10 @@ - + - + @@ -105926,6 +105991,25 @@ + + + + + + + + + + + + + + + + + + + @@ -105972,6 +106056,17 @@ + + + + + + + + + + + @@ -106170,7 +106265,7 @@ - + @@ -106860,7 +106955,7 @@ - + @@ -106868,7 +106963,7 @@ - + @@ -106882,7 +106977,7 @@ - + @@ -106890,7 +106985,7 @@ - + @@ -106898,7 +106993,7 @@ - + @@ -106906,7 +107001,7 @@ - + @@ -106923,7 +107018,7 @@ - + @@ -106931,7 +107026,7 @@ - + @@ -107790,10 +107885,10 @@ - + - + @@ -107962,7 +108057,7 @@ - + @@ -107972,7 +108067,7 @@ - + @@ -108670,7 +108765,7 @@ - + @@ -108678,7 +108773,7 @@ - + @@ -108686,7 +108781,7 @@ - + @@ -108694,7 +108789,7 @@ - + @@ -108702,7 +108797,7 @@ - + @@ -108710,7 +108805,7 @@ - + @@ -108778,7 +108873,7 @@ - + @@ -109061,7 +109156,7 @@ - + @@ -109070,7 +109165,7 @@ - + @@ -109973,10 +110068,10 @@ - + - + @@ -109998,10 +110093,10 @@ - + - + @@ -110340,6 +110435,17 @@ + + + + + + + + + + + @@ -110449,7 +110555,7 @@ - + @@ -110478,10 +110584,10 @@ - + - + @@ -110489,7 +110595,7 @@ - + @@ -110514,7 +110620,7 @@ - + @@ -110666,7 +110772,7 @@ - + @@ -110779,7 +110885,7 @@ - + @@ -110887,17 +110993,6 @@ - - - - - - - - - - - @@ -111007,7 +111102,7 @@ - + @@ -111030,7 +111125,7 @@ - + @@ -111049,7 +111144,7 @@ - + @@ -111452,7 +111547,7 @@ - + @@ -111463,7 +111558,7 @@ - + @@ -111471,11 +111566,11 @@ - + - + @@ -111500,7 +111595,7 @@ - + @@ -111528,7 +111623,7 @@ - + @@ -111558,7 +111653,7 @@ - + @@ -113169,7 +113264,7 @@ - + @@ -113188,10 +113283,10 @@ - + - + @@ -113199,7 +113294,7 @@ - + @@ -116318,15 +116413,15 @@ - + - + - + - + @@ -116334,7 +116429,7 @@ - + @@ -116342,7 +116437,7 @@ - + @@ -116350,7 +116445,7 @@ - + @@ -116358,21 +116453,18 @@ - + - + - + - - - - + - + @@ -116380,7 +116472,7 @@ - + @@ -116391,7 +116483,7 @@ - + @@ -116402,7 +116494,7 @@ - + @@ -116410,7 +116502,15 @@ - + + + + + + + + + @@ -117224,10 +117324,10 @@ - + - + @@ -117363,10 +117463,10 @@ - + - + @@ -117877,6 +117977,15 @@ + + + + + + + + + @@ -117933,7 +118042,7 @@ - + @@ -118085,6 +118194,17 @@ + + + + + + + + + + + @@ -118099,13 +118219,13 @@ - + - + @@ -118229,7 +118349,7 @@ - + @@ -118289,13 +118409,13 @@ - + - + @@ -118330,7 +118450,7 @@ - + @@ -119034,7 +119154,7 @@ - + @@ -119094,7 +119214,7 @@ - + @@ -119111,7 +119231,7 @@ - + @@ -119120,24 +119240,24 @@ - + - + - + - + - + - + @@ -119145,7 +119265,7 @@ - + @@ -119153,7 +119273,7 @@ - + @@ -119161,7 +119281,7 @@ - + @@ -119184,7 +119304,7 @@ - + @@ -119262,13 +119382,13 @@ - + - + @@ -120989,7 +121109,7 @@ - + @@ -121194,10 +121314,10 @@ - + - + @@ -121216,10 +121336,10 @@ - + - + @@ -122067,7 +122187,7 @@ - + diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index 54ca9ce06bc7..a31c35e72a9c 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -29,6 +29,7 @@ __arch_copy_to_user arch_set_freq_scale arch_setup_dma_ops + arch_timer_read_counter arm64_const_caps_ready __arm_smccc_smc atomic_notifier_call_chain @@ -837,6 +838,7 @@ eth_commit_mac_addr_change ether_setup eth_mac_addr + eth_platform_get_mac_address eth_prepare_mac_addr_change __ethtool_get_link_ksettings ethtool_op_get_link @@ -907,11 +909,14 @@ generic_file_read_iter generic_file_splice_read generic_handle_irq + generic_mii_ioctl + generic_permission generic_read_dir generic_shutdown_super genlmsg_put genl_register_family genl_unregister_family + genphy_resume gen_pool_add_owner gen_pool_alloc_algo_owner gen_pool_avail @@ -1048,12 +1053,16 @@ idr_preload idr_remove idr_replace + ieee80211_channel_to_freq_khz + ieee80211_freq_khz_to_channel + ieee80211_get_channel_khz ieee80211_hdrlen iget5_locked ihold iio_channel_get iio_channel_release iio_read_channel_processed + iio_write_channel_raw import_iovec in_egroup_p init_dummy_netdev @@ -1306,6 +1315,10 @@ mbox_free_channel mbox_request_channel mbox_send_message + mdiobus_alloc_size + mdiobus_free + __mdiobus_register + mdiobus_unregister media_create_pad_link media_device_cleanup media_device_init @@ -1326,6 +1339,12 @@ __memset_io memunmap memweight + mii_check_media + mii_ethtool_get_link_ksettings + mii_ethtool_gset + mii_ethtool_set_link_ksettings + mii_link_ok + mii_nway_restart mipi_dsi_create_packet mipi_dsi_dcs_set_display_brightness mipi_dsi_dcs_set_tear_off @@ -1599,13 +1618,22 @@ perf_trace_run_bpf_submit pfn_valid phy_calibrate + phy_connect + phy_disconnect + phy_ethtool_get_link_ksettings + phy_ethtool_nway_reset + phy_ethtool_set_link_ksettings phy_exit phy_init + phy_mii_ioctl phy_pm_runtime_get_sync phy_pm_runtime_put_sync phy_power_off phy_power_on + phy_print_status phy_set_mode_ext + phy_start + phy_stop physvirt_offset pinconf_generic_dt_node_to_map pinctrl_dev_get_drvdata @@ -2500,6 +2528,33 @@ usb_kill_urb usb_lock_device_for_reset usb_match_one_id + usbnet_change_mtu + usbnet_disconnect + usbnet_get_drvinfo + usbnet_get_endpoints + usbnet_get_link + usbnet_get_link_ksettings + usbnet_get_msglevel + usbnet_get_stats64 + usbnet_link_change + usbnet_nway_reset + usbnet_open + usbnet_probe + usbnet_read_cmd + usbnet_read_cmd_nopm + usbnet_resume + usbnet_set_link_ksettings + usbnet_set_msglevel + usbnet_skb_return + usbnet_start_xmit + usbnet_stop + usbnet_suspend + usbnet_tx_timeout + usbnet_unlink_rx_urbs + usbnet_update_max_qlen + usbnet_write_cmd + usbnet_write_cmd_async + usbnet_write_cmd_nopm usb_os_desc_prepare_interf_dir usb_poison_urb usb_put_dev @@ -2512,6 +2567,8 @@ usb_remove_phy usb_reset_device usb_reset_endpoint + usb_role_switch_get + usb_role_switch_put usb_role_switch_register usb_role_switch_set_role usb_role_switch_unregister From 16d2fb138f98eb365f48f19fd3dce914be012b21 Mon Sep 17 00:00:00 2001 From: Nick Desaulniers Date: Thu, 30 Jul 2020 15:45:54 -0700 Subject: [PATCH 002/448] tracepoint: Mark __tracepoint_string's __used commit f3751ad0116fb6881f2c3c957d66a9327f69cefb upstream. __tracepoint_string's have their string data stored in .rodata, and an address to that data stored in the "__tracepoint_str" section. Functions that refer to those strings refer to the symbol of the address. Compiler optimization can replace those address references with references directly to the string data. If the address doesn't appear to have other uses, then it appears dead to the compiler and is removed. This can break the /tracing/printk_formats sysfs node which iterates the addresses stored in the "__tracepoint_str" section. Like other strings stored in custom sections in this header, mark these __used to inform the compiler that there are other non-obvious users of the address, so they should still be emitted. Link: https://lkml.kernel.org/r/20200730224555.2142154-2-ndesaulniers@google.com Cc: Ingo Molnar Cc: Miguel Ojeda Cc: stable@vger.kernel.org Fixes: 102c9323c35a8 ("tracing: Add __tracepoint_string() to export string pointers") Reported-by: Tim Murray Reported-by: Simon MacMullen Suggested-by: Greg Hackmann Signed-off-by: Nick Desaulniers Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- include/linux/tracepoint.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index 1fb11daa5c53..57ce5af258a3 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h @@ -362,7 +362,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) static const char *___tp_str __tracepoint_string = str; \ ___tp_str; \ }) -#define __tracepoint_string __attribute__((section("__tracepoint_str"))) +#define __tracepoint_string __attribute__((section("__tracepoint_str"), used)) #else /* * tracepoint_string() is used to save the string address for userspace From 039b66468fc4e3fa2d18c953f91918f4458aab93 Mon Sep 17 00:00:00 2001 From: Grant Likely Date: Fri, 10 Jul 2020 16:19:39 +0100 Subject: [PATCH 003/448] HID: input: Fix devices that return multiple bytes in battery report commit 4f57cace81438cc873a96f9f13f08298815c9b51 upstream. Some devices, particularly the 3DConnexion Spacemouse wireless 3D controllers, return more than just the battery capacity in the battery report. The Spacemouse devices return an additional byte with a device specific field. However, hidinput_query_battery_capacity() only requests a 2 byte transfer. When a spacemouse is connected via USB (direct wire, no wireless dongle) and it returns a 3 byte report instead of the assumed 2 byte battery report the larger transfer confuses and frightens the USB subsystem which chooses to ignore the transfer. Then after 2 seconds assume the device has stopped responding and reset it. This can be reproduced easily by using a wired connection with a wireless spacemouse. The Spacemouse will enter a loop of resetting every 2 seconds which can be observed in dmesg. This patch solves the problem by increasing the transfer request to 4 bytes instead of 2. The fix isn't particularly elegant, but it is simple and safe to backport to stable kernels. A further patch will follow to more elegantly handle battery reports that contain additional data. Signed-off-by: Grant Likely Cc: Darren Hart Cc: Jiri Kosina Cc: Benjamin Tissoires Cc: stable@vger.kernel.org Tested-by: Darren Hart Signed-off-by: Jiri Kosina Signed-off-by: Greg Kroah-Hartman --- drivers/hid/hid-input.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index dea9cc65bf80..e8641ce677e4 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -350,13 +350,13 @@ static int hidinput_query_battery_capacity(struct hid_device *dev) u8 *buf; int ret; - buf = kmalloc(2, GFP_KERNEL); + buf = kmalloc(4, GFP_KERNEL); if (!buf) return -ENOMEM; - ret = hid_hw_raw_request(dev, dev->battery_report_id, buf, 2, + ret = hid_hw_raw_request(dev, dev->battery_report_id, buf, 4, dev->battery_report_type, HID_REQ_GET_REPORT); - if (ret != 2) { + if (ret < 2) { kfree(buf); return -ENODATA; } From bd1584865c12a90d7928c2646eb581518a3600e0 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Tue, 28 Jul 2020 13:09:03 +0200 Subject: [PATCH 004/448] nvme: add a Identify Namespace Identification Descriptor list quirk commit 5bedd3afee8eb01ccd256f0cd2cc0fa6f841417a upstream. Add a quirk for a device that does not support the Identify Namespace Identification Descriptor list despite claiming 1.3 compliance. Fixes: ea43d9709f72 ("nvme: fix identify error status silent ignore") Reported-by: Ingo Brunberg Signed-off-by: Christoph Hellwig Tested-by: Ingo Brunberg Reviewed-by: Sagi Grimberg Cc: Plamen Lyutov Signed-off-by: Greg Kroah-Hartman --- drivers/nvme/host/core.c | 15 +++------------ drivers/nvme/host/nvme.h | 7 +++++++ drivers/nvme/host/pci.c | 2 ++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 071b63146d4b..ff5681da8780 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1074,6 +1074,9 @@ static int nvme_identify_ns_descs(struct nvme_ctrl *ctrl, unsigned nsid, int pos; int len; + if (ctrl->quirks & NVME_QUIRK_NO_NS_DESC_LIST) + return 0; + c.identify.opcode = nvme_admin_identify; c.identify.nsid = cpu_to_le32(nsid); c.identify.cns = NVME_ID_CNS_NS_DESC_LIST; @@ -1087,18 +1090,6 @@ static int nvme_identify_ns_descs(struct nvme_ctrl *ctrl, unsigned nsid, if (status) { dev_warn(ctrl->device, "Identify Descriptors failed (%d)\n", status); - /* - * Don't treat non-retryable errors as fatal, as we potentially - * already have a NGUID or EUI-64. If we failed with DNR set, - * we want to silently ignore the error as we can still - * identify the device, but if the status has DNR set, we want - * to propagate the error back specifically for the disk - * revalidation flow to make sure we don't abandon the - * device just because of a temporal retry-able error (such - * as path of transport errors). - */ - if (status > 0 && (status & NVME_SC_DNR)) - status = 0; goto free_data; } diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ed02260862cb..056953bd8bd8 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -115,6 +115,13 @@ enum nvme_quirks { * Prevent tag overlap between queues */ NVME_QUIRK_SHARED_TAGS = (1 << 13), + + /* + * The controller doesn't handle the Identify Namespace + * Identification Descriptor list subcommand despite claiming + * NVMe 1.3 compliance. + */ + NVME_QUIRK_NO_NS_DESC_LIST = (1 << 15), }; /* diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index ee7669f23cff..100da11ce98c 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -3117,6 +3117,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */ .driver_data = NVME_QUIRK_IDENTIFY_CNS | NVME_QUIRK_DISABLE_WRITE_ZEROES, }, + { PCI_DEVICE(0x126f, 0x2263), /* Silicon Motion unidentified */ + .driver_data = NVME_QUIRK_NO_NS_DESC_LIST, }, { PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ From a02df82a59c3dbc7bf657efca82e1641ca472eb4 Mon Sep 17 00:00:00 2001 From: Liu Yong Date: Wed, 12 Aug 2020 23:56:44 -0700 Subject: [PATCH 005/448] fs/io_uring.c: Fix uninitialized variable is referenced in io_submit_sqe the commit ("opcode>") caused another vulnerability. After io_get_req(), the sqe_submit struct in req is not initialized, but the following code defaults that req->submit.opcode is available. Signed-off-by: Liu Yong Signed-off-by: Sasha Levin --- fs/io_uring.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/io_uring.c b/fs/io_uring.c index be3d595a607f..c1aaee061dae 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -2559,6 +2559,7 @@ static void io_submit_sqe(struct io_ring_ctx *ctx, struct sqe_submit *s, goto err; } + memcpy(&req->submit, s, sizeof(*s)); ret = io_req_set_file(ctx, s, state, req); if (unlikely(ret)) { err_req: From a36ff7a40d11f066c5654be82c35a10cc0c40d47 Mon Sep 17 00:00:00 2001 From: Mike Tipton Date: Fri, 14 Feb 2020 18:12:32 -0800 Subject: [PATCH 006/448] clk: qcom: clk-rpmh: Wait for completion when enabling clocks [ Upstream commit dad4e7fda4bdc1a6357db500a7bab8843c08e521 ] The current implementation always uses rpmh_write_async, which doesn't wait for completion. That's fine for disable requests since there's no immediate need for the clocks and they can be disabled in the background. However, for enable requests we need to ensure the clocks are actually enabled before returning to the client. Otherwise, clients can end up accessing their HW before the necessary clocks are enabled, which can lead to bus errors. Use the synchronous version of this API (rpmh_write) for enable requests in the active set to ensure completion. Completion isn't required for sleep/wake sets, since they don't take effect until after we enter sleep. All rpmh requests are automatically flushed prior to entering sleep. Fixes: 9c7e47025a6b ("clk: qcom: clk-rpmh: Add QCOM RPMh clock driver") Signed-off-by: Mike Tipton Link: https://lkml.kernel.org/r/20200215021232.1149-1-mdtipton@codeaurora.org Reviewed-by: Bjorn Andersson [sboyd@kernel.org: Reorg code a bit for readability, rename to 'wait' to make local variable not conflict with completion.h mechanism] Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/qcom/clk-rpmh.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/clk/qcom/clk-rpmh.c b/drivers/clk/qcom/clk-rpmh.c index 96a36f6ff667..d7586e26acd8 100644 --- a/drivers/clk/qcom/clk-rpmh.c +++ b/drivers/clk/qcom/clk-rpmh.c @@ -143,12 +143,22 @@ static inline bool has_state_changed(struct clk_rpmh *c, u32 state) != (c->aggr_state & BIT(state)); } +static int clk_rpmh_send(struct clk_rpmh *c, enum rpmh_state state, + struct tcs_cmd *cmd, bool wait) +{ + if (wait) + return rpmh_write(c->dev, state, cmd, 1); + + return rpmh_write_async(c->dev, state, cmd, 1); +} + static int clk_rpmh_send_aggregate_command(struct clk_rpmh *c) { struct tcs_cmd cmd = { 0 }; u32 cmd_state, on_val; enum rpmh_state state = RPMH_SLEEP_STATE; int ret; + bool wait; cmd.addr = c->res_addr; cmd_state = c->aggr_state; @@ -159,7 +169,8 @@ static int clk_rpmh_send_aggregate_command(struct clk_rpmh *c) if (cmd_state & BIT(state)) cmd.data = on_val; - ret = rpmh_write_async(c->dev, state, &cmd, 1); + wait = cmd_state && state == RPMH_ACTIVE_ONLY_STATE; + ret = clk_rpmh_send(c, state, &cmd, wait); if (ret) { dev_err(c->dev, "set %s state of %s failed: (%d)\n", !state ? "sleep" : @@ -267,7 +278,7 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable) cmd.addr = c->res_addr; cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state); - ret = rpmh_write_async(c->dev, RPMH_ACTIVE_ONLY_STATE, &cmd, 1); + ret = clk_rpmh_send(c, RPMH_ACTIVE_ONLY_STATE, &cmd, enable); if (ret) { dev_err(c->dev, "set active state of %s failed: (%d)\n", c->res_name, ret); From 072d1300f1ce2a47881a368390c31e2ed347d050 Mon Sep 17 00:00:00 2001 From: Zhenzhong Duan Date: Thu, 11 Jun 2020 10:32:38 +0800 Subject: [PATCH 007/448] x86/mce/inject: Fix a wrong assignment of i_mce.status [ Upstream commit 5d7f7d1d5e01c22894dee7c9c9266500478dca99 ] The original code is a nop as i_mce.status is or'ed with part of itself, fix it. Fixes: a1300e505297 ("x86/ras/mce_amd_inj: Trigger deferred and thresholding errors interrupts") Signed-off-by: Zhenzhong Duan Signed-off-by: Borislav Petkov Acked-by: Yazen Ghannam Link: https://lkml.kernel.org/r/20200611023238.3830-1-zhenzhong.duan@gmail.com Signed-off-by: Sasha Levin --- arch/x86/kernel/cpu/mce/inject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/mce/inject.c b/arch/x86/kernel/cpu/mce/inject.c index 1f30117b24ba..eb2d41c1816d 100644 --- a/arch/x86/kernel/cpu/mce/inject.c +++ b/arch/x86/kernel/cpu/mce/inject.c @@ -511,7 +511,7 @@ static void do_inject(void) */ if (inj_type == DFR_INT_INJ) { i_mce.status |= MCI_STATUS_DEFERRED; - i_mce.status |= (i_mce.status & ~MCI_STATUS_UC); + i_mce.status &= ~MCI_STATUS_UC; } /* From b8d9908c9d3db9fb04bfd9e527a6e14c4c2bab4c Mon Sep 17 00:00:00 2001 From: Vincent Guittot Date: Tue, 9 Jun 2020 14:37:48 +0200 Subject: [PATCH 008/448] sched/fair: Fix NOHZ next idle balance [ Upstream commit 3ea2f097b17e13a8280f1f9386c331b326a3dbef ] With commit: 'b7031a02ec75 ("sched/fair: Add NOHZ_STATS_KICK")' rebalance_domains of the local cfs_rq happens before others idle cpus have updated nohz.next_balance and its value is overwritten. Move the update of nohz.next_balance for other idles cpus before balancing and updating the next_balance of local cfs_rq. Also, the nohz.next_balance is now updated only if all idle cpus got a chance to rebalance their domains and the idle balance has not been aborted because of new activities on the CPU. In case of need_resched, the idle load balance will be kick the next jiffie in order to address remaining ilb. Fixes: b7031a02ec75 ("sched/fair: Add NOHZ_STATS_KICK") Reported-by: Peng Liu Signed-off-by: Vincent Guittot Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Valentin Schneider Acked-by: Mel Gorman Link: https://lkml.kernel.org/r/20200609123748.18636-1-vincent.guittot@linaro.org Signed-off-by: Sasha Levin --- kernel/sched/fair.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 9b16080093be..20bf1f66733a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9385,7 +9385,12 @@ static void kick_ilb(unsigned int flags) { int ilb_cpu; - nohz.next_balance++; + /* + * Increase nohz.next_balance only when if full ilb is triggered but + * not if we only update stats. + */ + if (flags & NOHZ_BALANCE_KICK) + nohz.next_balance = jiffies+1; ilb_cpu = find_new_ilb(); @@ -9703,6 +9708,14 @@ static bool _nohz_idle_balance(struct rq *this_rq, unsigned int flags, } } + /* + * next_balance will be updated only when there is a need. + * When the CPU is attached to null domain for ex, it will not be + * updated. + */ + if (likely(update_next_balance)) + nohz.next_balance = next_balance; + /* Newly idle CPU doesn't need an update */ if (idle != CPU_NEWLY_IDLE) { update_blocked_averages(this_cpu); @@ -9723,14 +9736,6 @@ abort: if (has_blocked_load) WRITE_ONCE(nohz.has_blocked, 1); - /* - * next_balance will be updated only when there is a need. - * When the CPU is attached to null domain for ex, it will not be - * updated. - */ - if (likely(update_next_balance)) - nohz.next_balance = next_balance; - return ret; } From e8eb09e542c18c91da15e0d89d5571dc6723c6d3 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 9 Jun 2020 23:09:36 +0800 Subject: [PATCH 009/448] sched: correct SD_flags returned by tl->sd_flags() [ Upstream commit 9b1b234bb86bcdcdb142e900d39b599185465dbb ] During sched domain init, we check whether non-topological SD_flags are returned by tl->sd_flags(), if found, fire a waning and correct the violation, but the code failed to correct the violation. Correct this. Fixes: 143e1e28cb40 ("sched: Rework sched_domain topology definition") Signed-off-by: Peng Liu Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Vincent Guittot Reviewed-by: Valentin Schneider Link: https://lkml.kernel.org/r/20200609150936.GA13060@iZj6chx1xj0e0buvshuecpZ Signed-off-by: Sasha Levin --- kernel/sched/topology.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 1fa1e13a5944..ffaa97a8d405 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1333,7 +1333,7 @@ sd_init(struct sched_domain_topology_level *tl, sd_flags = (*tl->sd_flags)(); if (WARN_ONCE(sd_flags & ~TOPOLOGY_SD_FLAGS, "wrong sd_flags in topology description\n")) - sd_flags &= ~TOPOLOGY_SD_FLAGS; + sd_flags &= TOPOLOGY_SD_FLAGS; /* Apply detected topology flags */ sd_flags |= dflags; From 066f85458d9c84a0dc790286010f1aacbfbab8a3 Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Sun, 7 Jun 2020 23:29:09 +0200 Subject: [PATCH 010/448] arm64: dts: rockchip: fix rk3368-lion gmac reset gpio [ Upstream commit 2300e6dab473e93181cf76e4fe6671aa3d24c57b ] The lion gmac node currently uses opposite active-values for the gmac phy reset pin. The gpio-declaration uses active-high while the separate snps,reset-active-low property marks the pin as active low. While on the kernel side this works ok, other DT users may get confused - as seen with uboot right now. So bring this in line and make both properties match, similar to the other Rockchip board. Fixes: d99a02bcfa81 ("arm64: dts: rockchip: add RK3368-uQ7 (Lion) SoM") Signed-off-by: Heiko Stuebner Link: https://lore.kernel.org/r/20200607212909.920575-1-heiko@sntech.de Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi index e17311e09082..216aafd90e7f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi @@ -156,7 +156,7 @@ pinctrl-0 = <&rgmii_pins>; snps,reset-active-low; snps,reset-delays-us = <0 10000 50000>; - snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>; + snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; tx_delay = <0x10>; rx_delay = <0x10>; status = "okay"; From da9dfd06dbaa6f5fa8277cba3429b5cd75583147 Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Thu, 4 Jun 2020 11:12:39 +0200 Subject: [PATCH 011/448] arm64: dts: rockchip: fix rk3399-puma vcc5v0-host gpio [ Upstream commit 7a7184f6cfa9279f1a1c10a1845d247d7fad54ff ] The puma vcc5v0_host regulator node currently uses opposite active-values for the enable pin. The gpio-declaration uses active-high while the separate enable-active-low property marks the pin as active low. While on the kernel side this works ok, other DT users may get confused - as seen with uboot right now. So bring this in line and make both properties match, similar to the gmac fix. Fixes: 2c66fc34e945 ("arm64: dts: rockchip: add RK3399-Q7 (Puma) SoM") Signed-off-by: Heiko Stuebner Link: https://lore.kernel.org/r/20200604091239.424318-1-heiko@sntech.de Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi index 62ea288a1a70..fb47e4046f4e 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi @@ -101,7 +101,7 @@ vcc5v0_host: vcc5v0-host-regulator { compatible = "regulator-fixed"; - gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>; + gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>; enable-active-low; pinctrl-names = "default"; pinctrl-0 = <&vcc5v0_host_en>; From 192b8516c99c70b83e34a0ffe85b24909a96d1da Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Wed, 3 Jun 2020 15:28:36 +0200 Subject: [PATCH 012/448] arm64: dts: rockchip: fix rk3399-puma gmac reset gpio [ Upstream commit 8a445086f8af0b7b9bd8d1901d6f306bb154f70d ] The puma gmac node currently uses opposite active-values for the gmac phy reset pin. The gpio-declaration uses active-high while the separate snps,reset-active-low property marks the pin as active low. While on the kernel side this works ok, other DT users may get confused - as seen with uboot right now. So bring this in line and make both properties match, similar to the other Rockchip board. Fixes: 2c66fc34e945 ("arm64: dts: rockchip: add RK3399-Q7 (Puma) SoM") Signed-off-by: Heiko Stuebner Link: https://lore.kernel.org/r/20200603132836.362519-1-heiko@sntech.de Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi index fb47e4046f4e..45b86933c6ea 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi @@ -157,7 +157,7 @@ phy-mode = "rgmii"; pinctrl-names = "default"; pinctrl-0 = <&rgmii_pins>; - snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>; + snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 10000 50000>; tx_delay = <0x10>; From c73eec04e6665f020ffb38890612811c12392afe Mon Sep 17 00:00:00 2001 From: Qiushi Wu Date: Thu, 28 May 2020 15:22:37 -0500 Subject: [PATCH 013/448] EDAC: Fix reference count leaks [ Upstream commit 17ed808ad243192fb923e4e653c1338d3ba06207 ] When kobject_init_and_add() returns an error, it should be handled because kobject_init_and_add() takes a reference even when it fails. If this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Therefore, replace calling kfree() and call kobject_put() and add a missing kobject_put() in the edac_device_register_sysfs_main_kobj() error path. [ bp: Massage and merge into a single patch. ] Fixes: b2ed215a3338 ("Kobject: change drivers/edac to use kobject_init_and_add") Signed-off-by: Qiushi Wu Signed-off-by: Borislav Petkov Link: https://lkml.kernel.org/r/20200528202238.18078-1-wu000273@umn.edu Link: https://lkml.kernel.org/r/20200528203526.20908-1-wu000273@umn.edu Signed-off-by: Sasha Levin --- drivers/edac/edac_device_sysfs.c | 1 + drivers/edac/edac_pci_sysfs.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/edac/edac_device_sysfs.c b/drivers/edac/edac_device_sysfs.c index 0e7ea3591b78..5e7593753799 100644 --- a/drivers/edac/edac_device_sysfs.c +++ b/drivers/edac/edac_device_sysfs.c @@ -275,6 +275,7 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev) /* Error exit stack */ err_kobj_reg: + kobject_put(&edac_dev->kobj); module_put(edac_dev->owner); err_out: diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c index 72c9eb9fdffb..53042af7262e 100644 --- a/drivers/edac/edac_pci_sysfs.c +++ b/drivers/edac/edac_pci_sysfs.c @@ -386,7 +386,7 @@ static int edac_pci_main_kobj_setup(void) /* Error unwind statck */ kobject_init_and_add_fail: - kfree(edac_pci_top_main_kobj); + kobject_put(edac_pci_top_main_kobj); kzalloc_fail: module_put(THIS_MODULE); From f2b639b2aa21c19feb8bc05a0457f731ffd934ac Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Fri, 5 Jun 2020 16:59:18 +1000 Subject: [PATCH 014/448] crc-t10dif: Fix potential crypto notify dead-lock [ Upstream commit 3906f640224dbe7714b52b66d7d68c0812808e19 ] The crypto notify call occurs with a read mutex held so you must not do any substantial work directly. In particular, you cannot call crypto_alloc_* as they may trigger further notifications which may dead-lock in the presence of another writer. This patch fixes this by postponing the work into a work queue and taking the same lock in the module init function. While we're at it this patch also ensures that all RCU accesses are marked appropriately (tested with sparse). Finally this also reveals a race condition in module param show function as it may be called prior to the module init function. It's fixed by testing whether crct10dif_tfm is NULL (this is true iff the init function has not completed assuming fallback is false). Fixes: 11dcb1037f40 ("crc-t10dif: Allow current transform to be...") Fixes: b76377543b73 ("crc-t10dif: Pick better transform if one...") Signed-off-by: Herbert Xu Reviewed-by: Martin K. Petersen Reviewed-by: Eric Biggers Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- lib/crc-t10dif.c | 54 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/crc-t10dif.c b/lib/crc-t10dif.c index 8cc01a603416..c9acf1c12cfc 100644 --- a/lib/crc-t10dif.c +++ b/lib/crc-t10dif.c @@ -19,39 +19,46 @@ static struct crypto_shash __rcu *crct10dif_tfm; static struct static_key crct10dif_fallback __read_mostly; static DEFINE_MUTEX(crc_t10dif_mutex); +static struct work_struct crct10dif_rehash_work; -static int crc_t10dif_rehash(struct notifier_block *self, unsigned long val, void *data) +static int crc_t10dif_notify(struct notifier_block *self, unsigned long val, void *data) { struct crypto_alg *alg = data; - struct crypto_shash *new, *old; if (val != CRYPTO_MSG_ALG_LOADED || static_key_false(&crct10dif_fallback) || strncmp(alg->cra_name, CRC_T10DIF_STRING, strlen(CRC_T10DIF_STRING))) return 0; + schedule_work(&crct10dif_rehash_work); + return 0; +} + +static void crc_t10dif_rehash(struct work_struct *work) +{ + struct crypto_shash *new, *old; + mutex_lock(&crc_t10dif_mutex); old = rcu_dereference_protected(crct10dif_tfm, lockdep_is_held(&crc_t10dif_mutex)); if (!old) { mutex_unlock(&crc_t10dif_mutex); - return 0; + return; } new = crypto_alloc_shash("crct10dif", 0, 0); if (IS_ERR(new)) { mutex_unlock(&crc_t10dif_mutex); - return 0; + return; } rcu_assign_pointer(crct10dif_tfm, new); mutex_unlock(&crc_t10dif_mutex); synchronize_rcu(); crypto_free_shash(old); - return 0; } static struct notifier_block crc_t10dif_nb = { - .notifier_call = crc_t10dif_rehash, + .notifier_call = crc_t10dif_notify, }; __u16 crc_t10dif_update(__u16 crc, const unsigned char *buffer, size_t len) @@ -86,19 +93,26 @@ EXPORT_SYMBOL(crc_t10dif); static int __init crc_t10dif_mod_init(void) { + struct crypto_shash *tfm; + + INIT_WORK(&crct10dif_rehash_work, crc_t10dif_rehash); crypto_register_notifier(&crc_t10dif_nb); - crct10dif_tfm = crypto_alloc_shash("crct10dif", 0, 0); - if (IS_ERR(crct10dif_tfm)) { + mutex_lock(&crc_t10dif_mutex); + tfm = crypto_alloc_shash("crct10dif", 0, 0); + if (IS_ERR(tfm)) { static_key_slow_inc(&crct10dif_fallback); - crct10dif_tfm = NULL; + tfm = NULL; } + RCU_INIT_POINTER(crct10dif_tfm, tfm); + mutex_unlock(&crc_t10dif_mutex); return 0; } static void __exit crc_t10dif_mod_fini(void) { crypto_unregister_notifier(&crc_t10dif_nb); - crypto_free_shash(crct10dif_tfm); + cancel_work_sync(&crct10dif_rehash_work); + crypto_free_shash(rcu_dereference_protected(crct10dif_tfm, 1)); } module_init(crc_t10dif_mod_init); @@ -106,11 +120,27 @@ module_exit(crc_t10dif_mod_fini); static int crc_t10dif_transform_show(char *buffer, const struct kernel_param *kp) { + struct crypto_shash *tfm; + const char *name; + int len; + if (static_key_false(&crct10dif_fallback)) return sprintf(buffer, "fallback\n"); - return sprintf(buffer, "%s\n", - crypto_tfm_alg_driver_name(crypto_shash_tfm(crct10dif_tfm))); + rcu_read_lock(); + tfm = rcu_dereference(crct10dif_tfm); + if (!tfm) { + len = sprintf(buffer, "init\n"); + goto unlock; + } + + name = crypto_tfm_alg_driver_name(crypto_shash_tfm(tfm)); + len = sprintf(buffer, "%s\n", name); + +unlock: + rcu_read_unlock(); + + return len; } module_param_call(transform, NULL, crc_t10dif_transform_show, NULL, 0644); From 34108464f80847c901cef793b1e849fe6d6094da Mon Sep 17 00:00:00 2001 From: Stephan Gerhold Date: Fri, 5 Jun 2020 20:59:14 +0200 Subject: [PATCH 015/448] arm64: dts: qcom: msm8916: Replace invalid bias-pull-none property [ Upstream commit 1b6a1a162defe649c5599d661b58ac64bb6f31b6 ] msm8916-pins.dtsi specifies "bias-pull-none" for most of the audio pin configurations. This was likely copied from the qcom kernel fork where the same property was used for these audio pins. However, "bias-pull-none" actually does not exist at all - not in mainline and not in downstream. I can only guess that the original intention was to configure "no pull", i.e. bias-disable. Change it to that instead. Fixes: 143bb9ad85b7 ("arm64: dts: qcom: add audio pinctrls") Cc: Srinivas Kandagatla Signed-off-by: Stephan Gerhold Link: https://lore.kernel.org/r/20200605185916.318494-2-stephan@gerhold.net Signed-off-by: Bjorn Andersson Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/qcom/msm8916-pins.dtsi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi index 242aaea68804..1235830ffd0b 100644 --- a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi +++ b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi @@ -508,7 +508,7 @@ pins = "gpio63", "gpio64", "gpio65", "gpio66", "gpio67", "gpio68"; drive-strength = <8>; - bias-pull-none; + bias-disable; }; }; cdc_pdm_lines_sus: pdm_lines_off { @@ -537,7 +537,7 @@ pins = "gpio113", "gpio114", "gpio115", "gpio116"; drive-strength = <8>; - bias-pull-none; + bias-disable; }; }; @@ -565,7 +565,7 @@ pinconf { pins = "gpio110"; drive-strength = <8>; - bias-pull-none; + bias-disable; }; }; @@ -591,7 +591,7 @@ pinconf { pins = "gpio116"; drive-strength = <8>; - bias-pull-none; + bias-disable; }; }; ext_mclk_tlmm_lines_sus: mclk_lines_off { @@ -619,7 +619,7 @@ pins = "gpio112", "gpio117", "gpio118", "gpio119"; drive-strength = <8>; - bias-pull-none; + bias-disable; }; }; ext_sec_tlmm_lines_sus: tlmm_lines_off { From 6a291f9c21e4acf3429aacfa2e019d9965806c51 Mon Sep 17 00:00:00 2001 From: Luis Chamberlain Date: Fri, 19 Jun 2020 20:47:28 +0000 Subject: [PATCH 016/448] blktrace: fix debugfs use after free [ Upstream commit bad8e64fb19d3a0de5e564d9a7271c31bd684369 ] On commit 6ac93117ab00 ("blktrace: use existing disk debugfs directory") merged on v4.12 Omar fixed the original blktrace code for request-based drivers (multiqueue). This however left in place a possible crash, if you happen to abuse blktrace while racing to remove / add a device. We used to use asynchronous removal of the request_queue, and with that the issue was easier to reproduce. Now that we have reverted to synchronous removal of the request_queue, the issue is still possible to reproduce, its however just a bit more difficult. We essentially run two instances of break-blktrace which add/remove a loop device, and setup a blktrace and just never tear the blktrace down. We do this twice in parallel. This is easily reproduced with the script run_0004.sh from break-blktrace [0]. We can end up with two types of panics each reflecting where we race, one a failed blktrace setup: [ 252.426751] debugfs: Directory 'loop0' with parent 'block' already present! [ 252.432265] BUG: kernel NULL pointer dereference, address: 00000000000000a0 [ 252.436592] #PF: supervisor write access in kernel mode [ 252.439822] #PF: error_code(0x0002) - not-present page [ 252.442967] PGD 0 P4D 0 [ 252.444656] Oops: 0002 [#1] SMP NOPTI [ 252.446972] CPU: 10 PID: 1153 Comm: break-blktrace Tainted: G E 5.7.0-rc2-next-20200420+ #164 [ 252.452673] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014 [ 252.456343] RIP: 0010:down_write+0x15/0x40 [ 252.458146] Code: eb ca e8 ae 22 8d ff cc cc cc cc cc cc cc cc cc cc cc cc cc cc 0f 1f 44 00 00 55 48 89 fd e8 52 db ff ff 31 c0 ba 01 00 00 00 48 0f b1 55 00 75 0f 48 8b 04 25 c0 8b 01 00 48 89 45 08 5d [ 252.463638] RSP: 0018:ffffa626415abcc8 EFLAGS: 00010246 [ 252.464950] RAX: 0000000000000000 RBX: ffff958c25f0f5c0 RCX: ffffff8100000000 [ 252.466727] RDX: 0000000000000001 RSI: ffffff8100000000 RDI: 00000000000000a0 [ 252.468482] RBP: 00000000000000a0 R08: 0000000000000000 R09: 0000000000000001 [ 252.470014] R10: 0000000000000000 R11: ffff958d1f9227ff R12: 0000000000000000 [ 252.471473] R13: ffff958c25ea5380 R14: ffffffff8cce15f1 R15: 00000000000000a0 [ 252.473346] FS: 00007f2e69dee540(0000) GS:ffff958c2fc80000(0000) knlGS:0000000000000000 [ 252.475225] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 252.476267] CR2: 00000000000000a0 CR3: 0000000427d10004 CR4: 0000000000360ee0 [ 252.477526] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 252.478776] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 252.479866] Call Trace: [ 252.480322] simple_recursive_removal+0x4e/0x2e0 [ 252.481078] ? debugfs_remove+0x60/0x60 [ 252.481725] ? relay_destroy_buf+0x77/0xb0 [ 252.482662] debugfs_remove+0x40/0x60 [ 252.483518] blk_remove_buf_file_callback+0x5/0x10 [ 252.484328] relay_close_buf+0x2e/0x60 [ 252.484930] relay_open+0x1ce/0x2c0 [ 252.485520] do_blk_trace_setup+0x14f/0x2b0 [ 252.486187] __blk_trace_setup+0x54/0xb0 [ 252.486803] blk_trace_ioctl+0x90/0x140 [ 252.487423] ? do_sys_openat2+0x1ab/0x2d0 [ 252.488053] blkdev_ioctl+0x4d/0x260 [ 252.488636] block_ioctl+0x39/0x40 [ 252.489139] ksys_ioctl+0x87/0xc0 [ 252.489675] __x64_sys_ioctl+0x16/0x20 [ 252.490380] do_syscall_64+0x52/0x180 [ 252.491032] entry_SYSCALL_64_after_hwframe+0x44/0xa9 And the other on the device removal: [ 128.528940] debugfs: Directory 'loop0' with parent 'block' already present! [ 128.615325] BUG: kernel NULL pointer dereference, address: 00000000000000a0 [ 128.619537] #PF: supervisor write access in kernel mode [ 128.622700] #PF: error_code(0x0002) - not-present page [ 128.625842] PGD 0 P4D 0 [ 128.627585] Oops: 0002 [#1] SMP NOPTI [ 128.629871] CPU: 12 PID: 544 Comm: break-blktrace Tainted: G E 5.7.0-rc2-next-20200420+ #164 [ 128.635595] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014 [ 128.640471] RIP: 0010:down_write+0x15/0x40 [ 128.643041] Code: eb ca e8 ae 22 8d ff cc cc cc cc cc cc cc cc cc cc cc cc cc cc 0f 1f 44 00 00 55 48 89 fd e8 52 db ff ff 31 c0 ba 01 00 00 00 48 0f b1 55 00 75 0f 65 48 8b 04 25 c0 8b 01 00 48 89 45 08 5d [ 128.650180] RSP: 0018:ffffa9c3c05ebd78 EFLAGS: 00010246 [ 128.651820] RAX: 0000000000000000 RBX: ffff8ae9a6370240 RCX: ffffff8100000000 [ 128.653942] RDX: 0000000000000001 RSI: ffffff8100000000 RDI: 00000000000000a0 [ 128.655720] RBP: 00000000000000a0 R08: 0000000000000002 R09: ffff8ae9afd2d3d0 [ 128.657400] R10: 0000000000000056 R11: 0000000000000000 R12: 0000000000000000 [ 128.659099] R13: 0000000000000000 R14: 0000000000000003 R15: 00000000000000a0 [ 128.660500] FS: 00007febfd995540(0000) GS:ffff8ae9afd00000(0000) knlGS:0000000000000000 [ 128.662204] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 128.663426] CR2: 00000000000000a0 CR3: 0000000420042003 CR4: 0000000000360ee0 [ 128.664776] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 128.666022] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 128.667282] Call Trace: [ 128.667801] simple_recursive_removal+0x4e/0x2e0 [ 128.668663] ? debugfs_remove+0x60/0x60 [ 128.669368] debugfs_remove+0x40/0x60 [ 128.669985] blk_trace_free+0xd/0x50 [ 128.670593] __blk_trace_remove+0x27/0x40 [ 128.671274] blk_trace_shutdown+0x30/0x40 [ 128.671935] blk_release_queue+0x95/0xf0 [ 128.672589] kobject_put+0xa5/0x1b0 [ 128.673188] disk_release+0xa2/0xc0 [ 128.673786] device_release+0x28/0x80 [ 128.674376] kobject_put+0xa5/0x1b0 [ 128.674915] loop_remove+0x39/0x50 [loop] [ 128.675511] loop_control_ioctl+0x113/0x130 [loop] [ 128.676199] ksys_ioctl+0x87/0xc0 [ 128.676708] __x64_sys_ioctl+0x16/0x20 [ 128.677274] do_syscall_64+0x52/0x180 [ 128.677823] entry_SYSCALL_64_after_hwframe+0x44/0xa9 The common theme here is: debugfs: Directory 'loop0' with parent 'block' already present This crash happens because of how blktrace uses the debugfs directory where it places its files. Upon init we always create the same directory which would be needed by blktrace but we only do this for make_request drivers (multiqueue) block drivers. When you race a removal of these devices with a blktrace setup you end up in a situation where the make_request recursive debugfs removal will sweep away the blktrace files and then later blktrace will also try to remove individual dentries which are already NULL. The inverse is also possible and hence the two types of use after frees. We don't create the block debugfs directory on init for these types of block devices: * request-based block driver block devices * every possible partition * scsi-generic And so, this race should in theory only be possible with make_request drivers. We can fix the UAF by simply re-using the debugfs directory for make_request drivers (multiqueue) and only creating the ephemeral directory for the other type of block devices. The new clarifications on relying on the q->blk_trace_mutex *and* also checking for q->blk_trace *prior* to processing a blktrace ensures the debugfs directories are only created if no possible directory name clashes are possible. This goes tested with: o nvme partitions o ISCSI with tgt, and blktracing against scsi-generic with: o block o tape o cdrom o media changer o blktests This patch is part of the work which disputes the severity of CVE-2019-19770 which shows this issue is not a core debugfs issue, but a misuse of debugfs within blktace. Fixes: 6ac93117ab00 ("blktrace: use existing disk debugfs directory") Reported-by: syzbot+603294af2d01acfdd6da@syzkaller.appspotmail.com Signed-off-by: Luis Chamberlain Reviewed-by: Christoph Hellwig Cc: Bart Van Assche Cc: Omar Sandoval Cc: Hannes Reinecke Cc: Nicolai Stange Cc: Greg Kroah-Hartman Cc: Michal Hocko Cc: "Martin K. Petersen" Cc: "James E.J. Bottomley" Cc: yu kuai Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- kernel/trace/blktrace.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index eaee960153e1..a4c8f9d9522e 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -521,10 +521,18 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, if (!bt->msg_data) goto err; - ret = -ENOENT; - - dir = debugfs_lookup(buts->name, blk_debugfs_root); - if (!dir) +#ifdef CONFIG_BLK_DEBUG_FS + /* + * When tracing whole make_request drivers (multiqueue) block devices, + * reuse the existing debugfs directory created by the block layer on + * init. For request-based block devices, all partitions block devices, + * and scsi-generic block devices we create a temporary new debugfs + * directory that will be removed once the trace ends. + */ + if (queue_is_mq(q) && bdev && bdev == bdev->bd_contains) + dir = q->debugfs_dir; + else +#endif bt->dir = dir = debugfs_create_dir(buts->name, blk_debugfs_root); bt->dev = dev; @@ -565,8 +573,6 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, ret = 0; err: - if (dir && !bt->dir) - dput(dir); if (ret) blk_trace_free(bt); return ret; From 489ee1f219932aa08a170fb76546cb3b65b9e2b9 Mon Sep 17 00:00:00 2001 From: Gilad Ben-Yossef Date: Sun, 21 Jun 2020 14:19:57 +0300 Subject: [PATCH 017/448] crypto: ccree - fix resource leak on error path [ Upstream commit 9bc6165d608d676f05d8bf156a2c9923ee38d05b ] Fix a small resource leak on the error path of cipher processing. Signed-off-by: Gilad Ben-Yossef Fixes: 63ee04c8b491e ("crypto: ccree - add skcipher support") Cc: Markus Elfring Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/ccree/cc_cipher.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c index cd9c60268bf8..9bf0cce578f0 100644 --- a/drivers/crypto/ccree/cc_cipher.c +++ b/drivers/crypto/ccree/cc_cipher.c @@ -163,7 +163,6 @@ static int cc_cipher_init(struct crypto_tfm *tfm) skcipher_alg.base); struct device *dev = drvdata_to_dev(cc_alg->drvdata); unsigned int max_key_buf_size = cc_alg->skcipher_alg.max_keysize; - int rc = 0; dev_dbg(dev, "Initializing context @%p for %s\n", ctx_p, crypto_tfm_alg_name(tfm)); @@ -175,10 +174,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm) ctx_p->flow_mode = cc_alg->flow_mode; ctx_p->drvdata = cc_alg->drvdata; + if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) { + /* Alloc hash tfm for essiv */ + ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0); + if (IS_ERR(ctx_p->shash_tfm)) { + dev_err(dev, "Error allocating hash tfm for ESSIV.\n"); + return PTR_ERR(ctx_p->shash_tfm); + } + } + /* Allocate key buffer, cache line aligned */ ctx_p->user.key = kmalloc(max_key_buf_size, GFP_KERNEL); if (!ctx_p->user.key) - return -ENOMEM; + goto free_shash; dev_dbg(dev, "Allocated key buffer in context. key=@%p\n", ctx_p->user.key); @@ -190,21 +198,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm) if (dma_mapping_error(dev, ctx_p->user.key_dma_addr)) { dev_err(dev, "Mapping Key %u B at va=%pK for DMA failed\n", max_key_buf_size, ctx_p->user.key); - return -ENOMEM; + goto free_key; } dev_dbg(dev, "Mapped key %u B at va=%pK to dma=%pad\n", max_key_buf_size, ctx_p->user.key, &ctx_p->user.key_dma_addr); - if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) { - /* Alloc hash tfm for essiv */ - ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0); - if (IS_ERR(ctx_p->shash_tfm)) { - dev_err(dev, "Error allocating hash tfm for ESSIV.\n"); - return PTR_ERR(ctx_p->shash_tfm); - } - } + return 0; - return rc; +free_key: + kfree(ctx_p->user.key); +free_shash: + crypto_free_shash(ctx_p->shash_tfm); + + return -ENOMEM; } static void cc_cipher_exit(struct crypto_tfm *tfm) From 0155cd348be2c3ea83faea0dd722cb94aa378e36 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Mon, 29 Jun 2020 12:02:18 +0200 Subject: [PATCH 018/448] ARM: exynos: MCPM: Restore big.LITTLE cpuidle support [ Upstream commit ea9dd8f61c8a890843f68e8dc0062ce78365aab8 ] Call exynos_cpu_power_up(cpunr) unconditionally. This is needed by the big.LITTLE cpuidle driver and has no side-effects on other code paths. The additional soft-reset call during little core power up has been added to properly boot all cores on the Exynos5422-based boards with secure firmware (like Odroid XU3/XU4 family). This however broke big.LITTLE CPUidle driver, which worked only on boards without secure firmware (like Peach-Pit/Pi Chromebooks). Apply the workaround only when board is running under secure firmware. Fixes: 833b5794e330 ("ARM: EXYNOS: reset Little cores when cpu is up") Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Luba Signed-off-by: Krzysztof Kozlowski Signed-off-by: Sasha Levin --- arch/arm/mach-exynos/mcpm-exynos.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index 9a681b421ae1..cd861c57d5ad 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -26,6 +26,7 @@ #define EXYNOS5420_USE_L2_COMMON_UP_STATE BIT(30) static void __iomem *ns_sram_base_addr __ro_after_init; +static bool secure_firmware __ro_after_init; /* * The common v7_exit_coherency_flush API could not be used because of the @@ -58,15 +59,16 @@ static void __iomem *ns_sram_base_addr __ro_after_init; static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) { unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER); + bool state; pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER || cluster >= EXYNOS5420_NR_CLUSTERS) return -EINVAL; - if (!exynos_cpu_power_state(cpunr)) { - exynos_cpu_power_up(cpunr); - + state = exynos_cpu_power_state(cpunr); + exynos_cpu_power_up(cpunr); + if (!state && secure_firmware) { /* * This assumes the cluster number of the big cores(Cortex A15) * is 0 and the Little cores(Cortex A7) is 1. @@ -258,6 +260,8 @@ static int __init exynos_mcpm_init(void) return -ENOMEM; } + secure_firmware = exynos_secure_firmware_available(); + /* * To increase the stability of KFC reset we need to program * the PMU SPARE3 register From 420acbfdd64bde674b66f1f32a178a5d00920d71 Mon Sep 17 00:00:00 2001 From: Cristian Marussi Date: Fri, 19 Jun 2020 23:03:30 +0100 Subject: [PATCH 019/448] firmware: arm_scmi: Fix SCMI genpd domain probing [ Upstream commit e0f1a30cf184821499eeb67daedd7a3f21bbcb0b ] When, at probe time, an SCMI communication failure inhibits the capacity to query power domains states, such domains should be skipped. Registering partially initialized SCMI power domains with genpd will causes kernel panic. arm-scmi timed out in resp(caller: scmi_power_state_get+0xa4/0xd0) scmi-power-domain scmi_dev.2: failed to get state for domain 9 Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 Mem abort info: ESR = 0x96000006 EC = 0x25: DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 Data abort info: ISV = 0, ISS = 0x00000006 CM = 0, WnR = 0 user pgtable: 4k pages, 48-bit VAs, pgdp=00000009f3691000 [0000000000000000] pgd=00000009f1ca0003, p4d=00000009f1ca0003, pud=00000009f35ea003, pmd=0000000000000000 Internal error: Oops: 96000006 [#1] PREEMPT SMP CPU: 2 PID: 381 Comm: bash Not tainted 5.8.0-rc1-00011-gebd118c2cca8 #2 Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno Development Platform, BIOS EDK II Jan 3 2020 Internal error: Oops: 96000006 [#1] PREEMPT SMP pstate: 80000005 (Nzcv daif -PAN -UAO BTYPE=--) pc : of_genpd_add_provider_onecell+0x98/0x1f8 lr : of_genpd_add_provider_onecell+0x48/0x1f8 Call trace: of_genpd_add_provider_onecell+0x98/0x1f8 scmi_pm_domain_probe+0x174/0x1e8 scmi_dev_probe+0x90/0xe0 really_probe+0xe4/0x448 driver_probe_device+0xfc/0x168 device_driver_attach+0x7c/0x88 bind_store+0xe8/0x128 drv_attr_store+0x2c/0x40 sysfs_kf_write+0x4c/0x60 kernfs_fop_write+0x114/0x230 __vfs_write+0x24/0x50 vfs_write+0xbc/0x1e0 ksys_write+0x70/0xf8 __arm64_sys_write+0x24/0x30 el0_svc_common.constprop.3+0x94/0x160 do_el0_svc+0x2c/0x98 el0_sync_handler+0x148/0x1a8 el0_sync+0x158/0x180 Do not register any power domain that failed to be queried with genpd. Fixes: 898216c97ed2 ("firmware: arm_scmi: add device power domain support using genpd") Link: https://lore.kernel.org/r/20200619220330.12217-1-cristian.marussi@arm.com Signed-off-by: Cristian Marussi Signed-off-by: Sudeep Holla Signed-off-by: Sasha Levin --- drivers/firmware/arm_scmi/scmi_pm_domain.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/firmware/arm_scmi/scmi_pm_domain.c b/drivers/firmware/arm_scmi/scmi_pm_domain.c index 87f737e01473..041f8152272b 100644 --- a/drivers/firmware/arm_scmi/scmi_pm_domain.c +++ b/drivers/firmware/arm_scmi/scmi_pm_domain.c @@ -85,7 +85,10 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) for (i = 0; i < num_domains; i++, scmi_pd++) { u32 state; - domains[i] = &scmi_pd->genpd; + if (handle->power_ops->state_get(handle, i, &state)) { + dev_warn(dev, "failed to get state for domain %d\n", i); + continue; + } scmi_pd->domain = i; scmi_pd->handle = handle; @@ -94,13 +97,10 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd->genpd.power_off = scmi_pd_power_off; scmi_pd->genpd.power_on = scmi_pd_power_on; - if (handle->power_ops->state_get(handle, i, &state)) { - dev_warn(dev, "failed to get state for domain %d\n", i); - continue; - } - pm_genpd_init(&scmi_pd->genpd, NULL, state == SCMI_POWER_STATE_GENERIC_OFF); + + domains[i] = &scmi_pd->genpd; } scmi_pd_data->domains = domains; From 4d7115d29201a1dfa77ac1b7bc3f29606b14b700 Mon Sep 17 00:00:00 2001 From: Alim Akhtar Date: Sun, 5 Jul 2020 12:39:17 +0530 Subject: [PATCH 020/448] arm64: dts: exynos: Fix silent hang after boot on Espresso [ Upstream commit b072714bfc0e42c984b8fd6e069f3ca17de8137a ] Once regulators are disabled after kernel boot, on Espresso board silent hang observed because of LDO7 being disabled. LDO7 actually provide power to CPU cores and non-cpu blocks circuitries. Keep this regulator always-on to fix this hang. Fixes: 9589f7721e16 ("arm64: dts: Add S2MPS15 PMIC node on exynos7-espresso") Signed-off-by: Alim Akhtar Signed-off-by: Krzysztof Kozlowski Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/exynos/exynos7-espresso.dts | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/exynos/exynos7-espresso.dts b/arch/arm64/boot/dts/exynos/exynos7-espresso.dts index 080e0f56e108..61ee7b6a3159 100644 --- a/arch/arm64/boot/dts/exynos/exynos7-espresso.dts +++ b/arch/arm64/boot/dts/exynos/exynos7-espresso.dts @@ -157,6 +157,7 @@ regulator-min-microvolt = <700000>; regulator-max-microvolt = <1150000>; regulator-enable-ramp-delay = <125>; + regulator-always-on; }; ldo8_reg: LDO8 { From 047187eb0a3f5aa233ecd1d01102eeb8fc64a67a Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Tue, 30 Jun 2020 12:21:22 +0100 Subject: [PATCH 021/448] sched/uclamp: Fix initialization of struct uclamp_rq [ Upstream commit d81ae8aac85ca2e307d273f6dc7863a721bf054e ] struct uclamp_rq was zeroed out entirely in assumption that in the first call to uclamp_rq_inc() they'd be initialized correctly in accordance to default settings. But when next patch introduces a static key to skip uclamp_rq_{inc,dec}() until userspace opts in to use uclamp, schedutil will fail to perform any frequency changes because the rq->uclamp[UCLAMP_MAX].value is zeroed at init and stays as such. Which means all rqs are capped to 0 by default. Fix it by making sure we do proper initialization at init without relying on uclamp_rq_inc() doing it later. Fixes: 69842cba9ace ("sched/uclamp: Add CPU's clamp buckets refcounting") Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Valentin Schneider Tested-by: Lukasz Luba Link: https://lkml.kernel.org/r/20200630112123.12076-2-qais.yousef@arm.com Signed-off-by: Sasha Levin --- kernel/sched/core.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 38ae3cf9d173..b34b5c6e2524 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1238,6 +1238,20 @@ static void uclamp_fork(struct task_struct *p) } } +static void __init init_uclamp_rq(struct rq *rq) +{ + enum uclamp_id clamp_id; + struct uclamp_rq *uc_rq = rq->uclamp; + + for_each_clamp_id(clamp_id) { + uc_rq[clamp_id] = (struct uclamp_rq) { + .value = uclamp_none(clamp_id) + }; + } + + rq->uclamp_flags = 0; +} + static void __init init_uclamp(void) { struct uclamp_se uc_max = {}; @@ -1246,11 +1260,8 @@ static void __init init_uclamp(void) mutex_init(&uclamp_mutex); - for_each_possible_cpu(cpu) { - memset(&cpu_rq(cpu)->uclamp, 0, - sizeof(struct uclamp_rq)*UCLAMP_CNT); - cpu_rq(cpu)->uclamp_flags = 0; - } + for_each_possible_cpu(cpu) + init_uclamp_rq(cpu_rq(cpu)); for_each_clamp_id(clamp_id) { uclamp_se_set(&init_task.uclamp_req[clamp_id], From 38702b9081c997256fceb7fb9fab1abfbcc4fde0 Mon Sep 17 00:00:00 2001 From: Sudeep Holla Date: Thu, 9 Jul 2020 09:17:05 +0100 Subject: [PATCH 022/448] clk: scmi: Fix min and max rate when registering clocks with discrete rates [ Upstream commit fcd2e0deae50bce48450f14c8fc5611b08d7438c ] Currently we are not initializing the scmi clock with discrete rates correctly. We fetch the min_rate and max_rate value only for clocks with ranges and ignore the ones with discrete rates. This will lead to wrong initialization of rate range when clock supports discrete rate. Fix this by using the first and the last rate in the sorted list of the discrete clock rates while registering the clock. Link: https://lore.kernel.org/r/20200709081705.46084-2-sudeep.holla@arm.com Fixes: 6d6a1d82eaef7 ("clk: add support for clocks provided by SCMI") Reviewed-by: Stephen Boyd Reported-and-tested-by: Dien Pham Signed-off-by: Sudeep Holla Signed-off-by: Sasha Levin --- drivers/clk/clk-scmi.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index 886f7c5df51a..e3cdb4a282fe 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -103,6 +103,8 @@ static const struct clk_ops scmi_clk_ops = { static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk) { int ret; + unsigned long min_rate, max_rate; + struct clk_init_data init = { .flags = CLK_GET_RATE_NOCACHE, .num_parents = 0, @@ -112,9 +114,23 @@ static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk) sclk->hw.init = &init; ret = devm_clk_hw_register(dev, &sclk->hw); - if (!ret) - clk_hw_set_rate_range(&sclk->hw, sclk->info->range.min_rate, - sclk->info->range.max_rate); + if (ret) + return ret; + + if (sclk->info->rate_discrete) { + int num_rates = sclk->info->list.num_rates; + + if (num_rates <= 0) + return -EINVAL; + + min_rate = sclk->info->list.rates[0]; + max_rate = sclk->info->list.rates[num_rates - 1]; + } else { + min_rate = sclk->info->range.min_rate; + max_rate = sclk->info->range.max_rate; + } + + clk_hw_set_rate_range(&sclk->hw, min_rate, max_rate); return ret; } From b8ad79dde63ffa94810ed6436d0847b6b730797c Mon Sep 17 00:00:00 2001 From: Finn Thain Date: Sun, 31 May 2020 09:12:13 +1000 Subject: [PATCH 023/448] m68k: mac: Don't send IOP message until channel is idle [ Upstream commit aeb445bf2194d83e12e85bf5c65baaf1f093bd8f ] In the following sequence of calls, iop_do_send() gets called when the "send" channel is not in the IOP_MSG_IDLE state: iop_ism_irq() iop_handle_send() (msg->handler)() iop_send_message() iop_do_send() Avoid this by testing the channel state before calling iop_do_send(). When sending, and iop_send_queue is empty, call iop_do_send() because the channel is idle. If iop_send_queue is not empty, iop_do_send() will get called later by iop_handle_send(). Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Finn Thain Tested-by: Stan Johnson Cc: Joshua Thompson Link: https://lore.kernel.org/r/6d667c39e53865661fa5a48f16829d18ed8abe54.1590880333.git.fthain@telegraphics.com.au Signed-off-by: Geert Uytterhoeven Signed-off-by: Sasha Levin --- arch/m68k/mac/iop.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c index 9bfa17015768..d8f2282978f9 100644 --- a/arch/m68k/mac/iop.c +++ b/arch/m68k/mac/iop.c @@ -416,7 +416,8 @@ static void iop_handle_send(uint iop_num, uint chan) msg->status = IOP_MSGSTATUS_UNUSED; msg = msg->next; iop_send_queue[iop_num][chan] = msg; - if (msg) iop_do_send(msg); + if (msg && iop_readb(iop, IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE) + iop_do_send(msg); } /* @@ -490,16 +491,12 @@ int iop_send_message(uint iop_num, uint chan, void *privdata, if (!(q = iop_send_queue[iop_num][chan])) { iop_send_queue[iop_num][chan] = msg; + iop_do_send(msg); } else { while (q->next) q = q->next; q->next = msg; } - if (iop_readb(iop_base[iop_num], - IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE) { - iop_do_send(msg); - } - return 0; } From 78448034fafbb6d7127b458bc5685e211ebf98fe Mon Sep 17 00:00:00 2001 From: Finn Thain Date: Sun, 31 May 2020 09:12:13 +1000 Subject: [PATCH 024/448] m68k: mac: Fix IOP status/control register writes [ Upstream commit 931fc82a6aaf4e2e4a5490addaa6a090d78c24a7 ] When writing values to the IOP status/control register make sure those values do not have any extraneous bits that will clear interrupt flags. To place the SCC IOP into bypass mode would be desirable but this is not achieved by writing IOP_DMAINACTIVE | IOP_RUN | IOP_AUTOINC | IOP_BYPASS to the control register. Drop this ineffective register write. Remove the flawed and unused iop_bypass() function. Make use of the unused iop_stop() function. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Finn Thain Tested-by: Stan Johnson Cc: Joshua Thompson Link: https://lore.kernel.org/r/09bcb7359a1719a18b551ee515da3c4c3cf709e6.1590880333.git.fthain@telegraphics.com.au Signed-off-by: Geert Uytterhoeven Signed-off-by: Sasha Levin --- arch/m68k/mac/iop.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c index d8f2282978f9..c432bfafe63e 100644 --- a/arch/m68k/mac/iop.c +++ b/arch/m68k/mac/iop.c @@ -183,7 +183,7 @@ static __inline__ void iop_writeb(volatile struct mac_iop *iop, __u16 addr, __u8 static __inline__ void iop_stop(volatile struct mac_iop *iop) { - iop->status_ctrl &= ~IOP_RUN; + iop->status_ctrl = IOP_AUTOINC; } static __inline__ void iop_start(volatile struct mac_iop *iop) @@ -191,14 +191,9 @@ static __inline__ void iop_start(volatile struct mac_iop *iop) iop->status_ctrl = IOP_RUN | IOP_AUTOINC; } -static __inline__ void iop_bypass(volatile struct mac_iop *iop) -{ - iop->status_ctrl |= IOP_BYPASS; -} - static __inline__ void iop_interrupt(volatile struct mac_iop *iop) { - iop->status_ctrl |= IOP_IRQ; + iop->status_ctrl = IOP_IRQ | IOP_RUN | IOP_AUTOINC; } static int iop_alive(volatile struct mac_iop *iop) @@ -244,7 +239,6 @@ void __init iop_preinit(void) } else { iop_base[IOP_NUM_SCC] = (struct mac_iop *) SCC_IOP_BASE_QUADRA; } - iop_base[IOP_NUM_SCC]->status_ctrl = 0x87; iop_scc_present = 1; } else { iop_base[IOP_NUM_SCC] = NULL; @@ -256,7 +250,7 @@ void __init iop_preinit(void) } else { iop_base[IOP_NUM_ISM] = (struct mac_iop *) ISM_IOP_BASE_QUADRA; } - iop_base[IOP_NUM_ISM]->status_ctrl = 0; + iop_stop(iop_base[IOP_NUM_ISM]); iop_ism_present = 1; } else { iop_base[IOP_NUM_ISM] = NULL; From ed48a02d4cbd19408abb7ce2433b9d67901ce9fa Mon Sep 17 00:00:00 2001 From: Lu Wei Date: Fri, 10 Jul 2020 17:30:17 +0800 Subject: [PATCH 025/448] platform/x86: intel-hid: Fix return value check in check_acpi_dev() [ Upstream commit 71fbe886ce6dd0be17f20aded9c63fe58edd2806 ] In the function check_acpi_dev(), if it fails to create platform device, the return value is ERR_PTR() or NULL. Thus it must use IS_ERR_OR_NULL() to check return value. Fixes: ecc83e52b28c ("intel-hid: new hid event driver for hotkeys") Reported-by: Hulk Robot Signed-off-by: Lu Wei Signed-off-by: Andy Shevchenko Signed-off-by: Sasha Levin --- drivers/platform/x86/intel-hid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/x86/intel-hid.c b/drivers/platform/x86/intel-hid.c index 7a506c1d0113..ad1399dcb21f 100644 --- a/drivers/platform/x86/intel-hid.c +++ b/drivers/platform/x86/intel-hid.c @@ -570,7 +570,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) return AE_OK; if (acpi_match_device_ids(dev, ids) == 0) - if (acpi_create_platform_device(dev, NULL)) + if (!IS_ERR_OR_NULL(acpi_create_platform_device(dev, NULL))) dev_info(&dev->dev, "intel-hid: created platform device\n"); From 4361bec62bda94ef8499212f1052d9bb864a99ec Mon Sep 17 00:00:00 2001 From: Lu Wei Date: Fri, 10 Jul 2020 17:30:18 +0800 Subject: [PATCH 026/448] platform/x86: intel-vbtn: Fix return value check in check_acpi_dev() [ Upstream commit 64dd4a5a7d214a07e3d9f40227ec30ac8ba8796e ] In the function check_acpi_dev(), if it fails to create platform device, the return value is ERR_PTR() or NULL. Thus it must use IS_ERR_OR_NULL() to check return value. Fixes: 332e081225fc ("intel-vbtn: new driver for Intel Virtual Button") Reported-by: Hulk Robot Signed-off-by: Lu Wei Signed-off-by: Andy Shevchenko Signed-off-by: Sasha Levin --- drivers/platform/x86/intel-vbtn.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c index cb2a80fdd8f4..3393ee95077f 100644 --- a/drivers/platform/x86/intel-vbtn.c +++ b/drivers/platform/x86/intel-vbtn.c @@ -286,7 +286,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) return AE_OK; if (acpi_match_device_ids(dev, ids) == 0) - if (acpi_create_platform_device(dev, NULL)) + if (!IS_ERR_OR_NULL(acpi_create_platform_device(dev, NULL))) dev_info(&dev->dev, "intel-vbtn: created platform device\n"); From e21665164e99f4dba79d14c3458b942b79e08a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Sat, 4 Jul 2020 17:58:55 +0200 Subject: [PATCH 027/448] ARM: dts: gose: Fix ports node name for adv7180 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit d344234abde938ae1062edb6c05852b0bafb4a03 ] When adding the adv7180 device node the ports node was misspelled as port, fix this. Fixes: 8cae359049a88b75 ("ARM: dts: gose: add composite video input") Signed-off-by: Niklas Söderlund Link: https://lore.kernel.org/r/20200704155856.3037010-2-niklas.soderlund+renesas@ragnatech.se Signed-off-by: Geert Uytterhoeven Signed-off-by: Sasha Levin --- arch/arm/boot/dts/r8a7793-gose.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/r8a7793-gose.dts b/arch/arm/boot/dts/r8a7793-gose.dts index 42f3313e6988..dc435ac95d23 100644 --- a/arch/arm/boot/dts/r8a7793-gose.dts +++ b/arch/arm/boot/dts/r8a7793-gose.dts @@ -339,7 +339,7 @@ reg = <0x20>; remote = <&vin1>; - port { + ports { #address-cells = <1>; #size-cells = <0>; From 1b3cb69fd559388306bb4a132a35abc29d7120c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Mon, 13 Jul 2020 13:10:16 +0200 Subject: [PATCH 028/448] ARM: dts: gose: Fix ports node name for adv7612 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 59692ac5a7bb8c97ff440fc8917828083fbc38d6 ] When adding the adv7612 device node the ports node was misspelled as port, fix this. Fixes: bc63cd87f3ce924f ("ARM: dts: gose: add HDMI input") Signed-off-by: Niklas Söderlund Link: https://lore.kernel.org/r/20200713111016.523189-1-niklas.soderlund+renesas@ragnatech.se Signed-off-by: Geert Uytterhoeven Signed-off-by: Sasha Levin --- arch/arm/boot/dts/r8a7793-gose.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/r8a7793-gose.dts b/arch/arm/boot/dts/r8a7793-gose.dts index dc435ac95d23..9f507393c375 100644 --- a/arch/arm/boot/dts/r8a7793-gose.dts +++ b/arch/arm/boot/dts/r8a7793-gose.dts @@ -399,7 +399,7 @@ interrupts = <2 IRQ_TYPE_LEVEL_LOW>; default-input = <0>; - port { + ports { #address-cells = <1>; #size-cells = <0>; From cd9f5d2b399984d294b3324d3ddbf860863599dc Mon Sep 17 00:00:00 2001 From: yu kuai Date: Thu, 4 Jun 2020 20:33:01 +0800 Subject: [PATCH 029/448] ARM: at91: pm: add missing put_device() call in at91_pm_sram_init() [ Upstream commit f87a4f022c44e5b87e842a9f3e644fba87e8385f ] if of_find_device_by_node() succeed, at91_pm_sram_init() doesn't have a corresponding put_device(). Thus add a jump target to fix the exception handling for this function implementation. Fixes: d2e467905596 ("ARM: at91: pm: use the mmio-sram pool to access SRAM") Signed-off-by: yu kuai Signed-off-by: Alexandre Belloni Link: https://lore.kernel.org/r/20200604123301.3905837-1-yukuai3@huawei.com Signed-off-by: Sasha Levin --- arch/arm/mach-at91/pm.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 52665f30d236..6bc3000deb86 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -592,13 +592,13 @@ static void __init at91_pm_sram_init(void) sram_pool = gen_pool_get(&pdev->dev, NULL); if (!sram_pool) { pr_warn("%s: sram pool unavailable!\n", __func__); - return; + goto out_put_device; } sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz); if (!sram_base) { pr_warn("%s: unable to alloc sram!\n", __func__); - return; + goto out_put_device; } sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base); @@ -606,12 +606,17 @@ static void __init at91_pm_sram_init(void) at91_pm_suspend_in_sram_sz, false); if (!at91_suspend_sram_fn) { pr_warn("SRAM: Could not map\n"); - return; + goto out_put_device; } /* Copy the pm suspend handler to SRAM */ at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn, &at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz); + return; + +out_put_device: + put_device(&pdev->dev); + return; } static bool __init at91_is_pm_mode_active(int pm_mode) From acbe4a1dc54cb8c21494997f7ab13d2991d0ae73 Mon Sep 17 00:00:00 2001 From: Chen-Yu Tsai Date: Sat, 18 Jul 2020 00:00:47 +0800 Subject: [PATCH 030/448] ARM: dts: sunxi: bananapi-m2-plus-v1.2: Add regulator supply to all CPU cores [ Upstream commit 55b271af765b0e03d1ff29502f81644b1a3c87fd ] The device tree currently only assigns the a supply for the first CPU core, when in reality the regulator supply is shared by all four cores. This might cause an issue if the implementation does not realize the sharing of the supply. Assign the same regulator supply to the remaining CPU cores to address this. Fixes: 6eeb4180d4b9 ("ARM: dts: sunxi: h3-h5: Add Bananapi M2+ v1.2 device trees") Signed-off-by: Chen-Yu Tsai Signed-off-by: Maxime Ripard Link: https://lore.kernel.org/r/20200717160053.31191-3-wens@kernel.org Signed-off-by: Sasha Levin --- arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi b/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi index 22466afd38a3..a628b5ee72b6 100644 --- a/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi +++ b/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi @@ -28,3 +28,15 @@ &cpu0 { cpu-supply = <®_vdd_cpux>; }; + +&cpu1 { + cpu-supply = <®_vdd_cpux>; +}; + +&cpu2 { + cpu-supply = <®_vdd_cpux>; +}; + +&cpu3 { + cpu-supply = <®_vdd_cpux>; +}; From e22730350d9edd40f125f473a3f20db46d41040f Mon Sep 17 00:00:00 2001 From: Chen-Yu Tsai Date: Sat, 18 Jul 2020 00:00:48 +0800 Subject: [PATCH 031/448] ARM: dts: sunxi: bananapi-m2-plus-v1.2: Fix CPU supply voltages [ Upstream commit e4dae01bf08b754de79072441c357737220b873f ] The Bananapi M2+ uses a GPIO line to change the effective resistance of the CPU supply regulator's feedback resistor network. The voltages described in the device tree were given directly by the vendor. This turns out to be slightly off compared to the real values. The updated voltages are based on calculations of the feedback resistor network, and verified down to three decimal places with a multi-meter. Fixes: 6eeb4180d4b9 ("ARM: dts: sunxi: h3-h5: Add Bananapi M2+ v1.2 device trees") Signed-off-by: Chen-Yu Tsai Signed-off-by: Maxime Ripard Link: https://lore.kernel.org/r/20200717160053.31191-4-wens@kernel.org Signed-off-by: Sasha Levin --- arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi b/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi index a628b5ee72b6..235994a4a2eb 100644 --- a/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi +++ b/arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi @@ -16,12 +16,12 @@ regulator-type = "voltage"; regulator-boot-on; regulator-always-on; - regulator-min-microvolt = <1100000>; - regulator-max-microvolt = <1300000>; + regulator-min-microvolt = <1108475>; + regulator-max-microvolt = <1308475>; regulator-ramp-delay = <50>; /* 4ms */ gpios = <&r_pio 0 1 GPIO_ACTIVE_HIGH>; /* PL1 */ gpios-states = <0x1>; - states = <1100000 0>, <1300000 1>; + states = <1108475 0>, <1308475 1>; }; }; From b1fe27d227c6d2b375106522565c37d151d5b921 Mon Sep 17 00:00:00 2001 From: Dilip Kota Date: Fri, 17 Jul 2020 14:27:50 +0800 Subject: [PATCH 032/448] spi: lantiq: fix: Rx overflow error in full duplex mode [ Upstream commit 661ccf2b3f1360be50242726f7c26ced6a9e7d52 ] In full duplex mode, rx overflow error is observed. To overcome the error, wait until the complete data got received and proceed further. Fixes: 17f84b793c01 ("spi: lantiq-ssc: add support for Lantiq SSC SPI controller") Signed-off-by: Dilip Kota Link: https://lore.kernel.org/r/efb650b0faa49a00788c4e0ca8ef7196bdba851d.1594957019.git.eswara.kota@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/spi/spi-lantiq-ssc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/spi/spi-lantiq-ssc.c b/drivers/spi/spi-lantiq-ssc.c index 9dfe8b04e688..55394bdbc5a3 100644 --- a/drivers/spi/spi-lantiq-ssc.c +++ b/drivers/spi/spi-lantiq-ssc.c @@ -184,6 +184,7 @@ struct lantiq_ssc_spi { unsigned int tx_fifo_size; unsigned int rx_fifo_size; unsigned int base_cs; + unsigned int fdx_tx_level; }; static u32 lantiq_ssc_readl(const struct lantiq_ssc_spi *spi, u32 reg) @@ -481,6 +482,7 @@ static void tx_fifo_write(struct lantiq_ssc_spi *spi) u32 data; unsigned int tx_free = tx_fifo_free(spi); + spi->fdx_tx_level = 0; while (spi->tx_todo && tx_free) { switch (spi->bits_per_word) { case 2 ... 8: @@ -509,6 +511,7 @@ static void tx_fifo_write(struct lantiq_ssc_spi *spi) lantiq_ssc_writel(spi, data, LTQ_SPI_TB); tx_free--; + spi->fdx_tx_level++; } } @@ -520,6 +523,13 @@ static void rx_fifo_read_full_duplex(struct lantiq_ssc_spi *spi) u32 data; unsigned int rx_fill = rx_fifo_level(spi); + /* + * Wait until all expected data to be shifted in. + * Otherwise, rx overrun may occur. + */ + while (rx_fill != spi->fdx_tx_level) + rx_fill = rx_fifo_level(spi); + while (rx_fill) { data = lantiq_ssc_readl(spi, LTQ_SPI_RB); From 3a17c7bfe705eb64d6acfc388882e2db2d373bed Mon Sep 17 00:00:00 2001 From: Tyler Hicks Date: Fri, 10 Jul 2020 14:29:55 -0500 Subject: [PATCH 033/448] tpm: Require that all digests are present in TCG_PCR_EVENT2 structures [ Upstream commit 7f3d176f5f7e3f0477bf82df0f600fcddcdcc4e4 ] Require that the TCG_PCR_EVENT2.digests.count value strictly matches the value of TCG_EfiSpecIdEvent.numberOfAlgorithms in the event field of the TCG_PCClientPCREvent event log header. Also require that TCG_EfiSpecIdEvent.numberOfAlgorithms is non-zero. The TCG PC Client Platform Firmware Profile Specification section 9.1 (Family "2.0", Level 00 Revision 1.04) states: For each Hash algorithm enumerated in the TCG_PCClientPCREvent entry, there SHALL be a corresponding digest in all TCG_PCR_EVENT2 structures. Note: This includes EV_NO_ACTION events which do not extend the PCR. Section 9.4.5.1 provides this description of TCG_EfiSpecIdEvent.numberOfAlgorithms: The number of Hash algorithms in the digestSizes field. This field MUST be set to a value of 0x01 or greater. Enforce these restrictions, as required by the above specification, in order to better identify and ignore invalid sequences of bytes at the end of an otherwise valid TPM2 event log. Firmware doesn't always have the means necessary to inform the kernel of the actual event log size so the kernel's event log parsing code should be stringent when parsing the event log for resiliency against firmware bugs. This is true, for example, when firmware passes the event log to the kernel via a reserved memory region described in device tree. POWER and some ARM systems use the "linux,sml-base" and "linux,sml-size" device tree properties to describe the memory region used to pass the event log from firmware to the kernel. Unfortunately, the "linux,sml-size" property describes the size of the entire reserved memory region rather than the size of the event long within the memory region and the event log format does not include information describing the size of the event log. tpm_read_log_of(), in drivers/char/tpm/eventlog/of.c, is where the "linux,sml-size" property is used. At the end of that function, log->bios_event_log_end is pointing at the end of the reserved memory region. That's typically 0x10000 bytes offset from "linux,sml-base", depending on what's defined in the device tree source. The firmware event log only fills a portion of those 0x10000 bytes and the rest of the memory region should be zeroed out by firmware. Even in the case of a properly zeroed bytes in the remainder of the memory region, the only thing allowing the kernel's event log parser to detect the end of the event log is the following conditional in __calc_tpm2_event_size(): if (event_type == 0 && event_field->event_size == 0) size = 0; If that wasn't there, __calc_tpm2_event_size() would think that a 16 byte sequence of zeroes, following an otherwise valid event log, was a valid event. However, problems can occur if a single bit is set in the offset corresponding to either the TCG_PCR_EVENT2.eventType or TCG_PCR_EVENT2.eventSize fields, after the last valid event log entry. This could confuse the parser into thinking that an additional entry is present in the event log and exposing this invalid entry to userspace in the /sys/kernel/security/tpm0/binary_bios_measurements file. Such problems have been seen if firmware does not fully zero the memory region upon a warm reboot. This patch significantly raises the bar on how difficult it is for stale/invalid memory to confuse the kernel's event log parser but there's still, ultimately, a reliance on firmware to properly initialize the remainder of the memory region reserved for the event log as the parser cannot be expected to detect a stale but otherwise properly formatted firmware event log entry. Fixes: fd5c78694f3f ("tpm: fix handling of the TPM 2.0 event logs") Signed-off-by: Tyler Hicks Reviewed-by: Jarkko Sakkinen Signed-off-by: Jarkko Sakkinen Signed-off-by: Sasha Levin --- include/linux/tpm_eventlog.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h index eccfd3a4e4c8..f3caeeb7a0d0 100644 --- a/include/linux/tpm_eventlog.h +++ b/include/linux/tpm_eventlog.h @@ -211,9 +211,16 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event, efispecid = (struct tcg_efi_specid_event_head *)event_header->event; - /* Check if event is malformed. */ + /* + * Perform validation of the event in order to identify malformed + * events. This function may be asked to parse arbitrary byte sequences + * immediately following a valid event log. The caller expects this + * function to recognize that the byte sequence is not a valid event + * and to return an event size of 0. + */ if (memcmp(efispecid->signature, TCG_SPECID_SIG, - sizeof(TCG_SPECID_SIG)) || count > efispecid->num_algs) { + sizeof(TCG_SPECID_SIG)) || + !efispecid->num_algs || count != efispecid->num_algs) { size = 0; goto out; } From 80242590651c2a180a47f360dff1b73d1c175c09 Mon Sep 17 00:00:00 2001 From: Gregory Herrero Date: Fri, 17 Jul 2020 16:33:38 +0200 Subject: [PATCH 034/448] recordmcount: only record relocation of type R_AARCH64_CALL26 on arm64. [ Upstream commit ea0eada45632f4807b2f49de951072283e2d781c ] Currently, if a section has a relocation to '_mcount' symbol, a new __mcount_loc entry will be added whatever the relocation type is. This is problematic when a relocation to '_mcount' is in the middle of a section and is not a call for ftrace use. Such relocation could be generated with below code for example: bool is_mcount(unsigned long addr) { return (target == (unsigned long) &_mcount); } With this snippet of code, ftrace will try to patch the mcount location generated by this code on module load and fail with: Call trace: ftrace_bug+0xa0/0x28c ftrace_process_locs+0x2f4/0x430 ftrace_module_init+0x30/0x38 load_module+0x14f0/0x1e78 __do_sys_finit_module+0x100/0x11c __arm64_sys_finit_module+0x28/0x34 el0_svc_common+0x88/0x194 el0_svc_handler+0x38/0x8c el0_svc+0x8/0xc ---[ end trace d828d06b36ad9d59 ]--- ftrace failed to modify [] 0xffffa2dbf3a3a41c actual: 66:a9:3c:90 Initializing ftrace call sites ftrace record flags: 2000000 (0) expected tramp: ffffa2dc6cf66724 So Limit the relocation type to R_AARCH64_CALL26 as in perl version of recordmcount. Fixes: af64d2aa872a ("ftrace: Add arm64 support to recordmcount") Signed-off-by: Gregory Herrero Acked-by: Steven Rostedt (VMware) Link: https://lore.kernel.org/r/20200717143338.19302-1-gregory.herrero@oracle.com Signed-off-by: Catalin Marinas Signed-off-by: Sasha Levin --- scripts/recordmcount.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c index 7225107a9aaf..e59022b3f125 100644 --- a/scripts/recordmcount.c +++ b/scripts/recordmcount.c @@ -434,6 +434,11 @@ static int arm_is_fake_mcount(Elf32_Rel const *rp) return 1; } +static int arm64_is_fake_mcount(Elf64_Rel const *rp) +{ + return ELF64_R_TYPE(w(rp->r_info)) != R_AARCH64_CALL26; +} + /* 64-bit EM_MIPS has weird ELF64_Rela.r_info. * http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf * We interpret Table 29 Relocation Operation (Elf64_Rel, Elf64_Rela) [p.40] @@ -547,6 +552,7 @@ static int do_file(char const *const fname) make_nop = make_nop_arm64; rel_type_nop = R_AARCH64_NONE; ideal_nop = ideal_nop4_arm64; + is_fake_mcount64 = arm64_is_fake_mcount; break; case EM_IA_64: reltype = R_IA64_IMM64; break; case EM_MIPS: /* reltype: e_class */ break; From afa16b50e2aa3a2f20a6ed38e3f998b43f628911 Mon Sep 17 00:00:00 2001 From: Vladimir Zapolskiy Date: Fri, 24 Jul 2020 03:50:13 +0300 Subject: [PATCH 035/448] regulator: fix memory leak on error path of regulator_register() [ Upstream commit 9177514ce34902b3adb2abd490b6ad05d1cfcb43 ] The change corrects registration and deregistration on error path of a regulator, the problem was manifested by a reported memory leak on deferred probe: as3722-regulator as3722-regulator: regulator 13 register failed -517 # cat /sys/kernel/debug/kmemleak unreferenced object 0xecc43740 (size 64): comm "swapper/0", pid 1, jiffies 4294937640 (age 712.880s) hex dump (first 32 bytes): 72 65 67 75 6c 61 74 6f 72 2e 32 34 00 5a 5a 5a regulator.24.ZZZ 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ backtrace: [<0c4c3d1c>] __kmalloc_track_caller+0x15c/0x2c0 [<40c0ad48>] kvasprintf+0x64/0xd4 [<109abd29>] kvasprintf_const+0x70/0x84 [] kobject_set_name_vargs+0x34/0xa8 [<62282ea2>] dev_set_name+0x40/0x64 [] regulator_register+0x3a4/0x1344 [<16a9543f>] devm_regulator_register+0x4c/0x84 [<51a4c6a1>] as3722_regulator_probe+0x294/0x754 ... The memory leak problem was introduced as a side ef another fix in regulator_register() error path, I believe that the proper fix is to decouple device_register() function into its two compounds and initialize a struct device before assigning any values to its fields and then using it before actual registration of a device happens. This lets to call put_device() safely after initialization, and, since now a release callback is called, kfree(rdev->constraints) shall be removed to exclude a double free condition. Fixes: a3cde9534ebd ("regulator: core: fix regulator_register() error paths to properly release rdev") Signed-off-by: Vladimir Zapolskiy Cc: Wen Yang Link: https://lore.kernel.org/r/20200724005013.23278-1-vz@mleia.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/regulator/core.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 0011bdc15afb..a17aebe0aa7a 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -4994,7 +4994,6 @@ regulator_register(const struct regulator_desc *regulator_desc, struct regulator_dev *rdev; bool dangling_cfg_gpiod = false; bool dangling_of_gpiod = false; - bool reg_device_fail = false; struct device *dev; int ret, i; @@ -5123,10 +5122,12 @@ regulator_register(const struct regulator_desc *regulator_desc, } /* register with sysfs */ + device_initialize(&rdev->dev); rdev->dev.class = ®ulator_class; rdev->dev.parent = dev; dev_set_name(&rdev->dev, "regulator.%lu", (unsigned long) atomic_inc_return(®ulator_no)); + dev_set_drvdata(&rdev->dev, rdev); /* set regulator constraints */ if (init_data) @@ -5177,12 +5178,9 @@ regulator_register(const struct regulator_desc *regulator_desc, !rdev->desc->fixed_uV) rdev->is_switch = true; - dev_set_drvdata(&rdev->dev, rdev); - ret = device_register(&rdev->dev); - if (ret != 0) { - reg_device_fail = true; + ret = device_add(&rdev->dev); + if (ret != 0) goto unset_supplies; - } rdev_init_debugfs(rdev); @@ -5204,17 +5202,15 @@ unset_supplies: mutex_unlock(®ulator_list_mutex); wash: kfree(rdev->coupling_desc.coupled_rdevs); - kfree(rdev->constraints); mutex_lock(®ulator_list_mutex); regulator_ena_gpio_free(rdev); mutex_unlock(®ulator_list_mutex); + put_device(&rdev->dev); + rdev = NULL; clean: if (dangling_of_gpiod) gpiod_put(config->ena_gpiod); - if (reg_device_fail) - put_device(&rdev->dev); - else - kfree(rdev); + kfree(rdev); kfree(config); rinse: if (dangling_cfg_gpiod) From 0b1799662a61a71d6f986a831ba48c8af116a29e Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 11 Jul 2020 11:31:11 +0200 Subject: [PATCH 036/448] io_uring: fix sq array offset calculation [ Upstream commit b36200f543ff07a1cb346aa582349141df2c8068 ] rings_size() sets sq_offset to the total size of the rings (the returned value which is used for memory allocation). This is wrong: sq array should be located within the rings, not after them. Set sq_offset to where it should be. Fixes: 75b28affdd6a ("io_uring: allocate the two rings together") Signed-off-by: Dmitry Vyukov Acked-by: Hristo Venev Cc: io-uring@vger.kernel.org Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- fs/io_uring.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index c1aaee061dae..046042025025 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3391,6 +3391,9 @@ static unsigned long rings_size(unsigned sq_entries, unsigned cq_entries, return SIZE_MAX; #endif + if (sq_offset) + *sq_offset = off; + sq_array_size = array_size(sizeof(u32), sq_entries); if (sq_array_size == SIZE_MAX) return SIZE_MAX; @@ -3398,9 +3401,6 @@ static unsigned long rings_size(unsigned sq_entries, unsigned cq_entries, if (check_add_overflow(off, sq_array_size, &off)) return SIZE_MAX; - if (sq_offset) - *sq_offset = off; - return off; } From 9600bdd6924afecf1104ecc5f83e068f585c856f Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Thu, 23 Jul 2020 08:43:56 +0800 Subject: [PATCH 037/448] spi: rockchip: Fix error in SPI slave pio read [ Upstream commit 4294e4accf8d695ea5605f6b189008b692e3e82c ] The RXFLR is possible larger than rx_left in Rockchip SPI, fix it. Fixes: 01b59ce5dac8 ("spi: rockchip: use irq rather than polling") Signed-off-by: Jon Lin Tested-by: Emil Renner Berthing Reviewed-by: Heiko Stuebner Reviewed-by: Emil Renner Berthing Link: https://lore.kernel.org/r/20200723004356.6390-3-jon.lin@rock-chips.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/spi/spi-rockchip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 2cc6d9951b52..008b64f4e031 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -286,7 +286,7 @@ static void rockchip_spi_pio_writer(struct rockchip_spi *rs) static void rockchip_spi_pio_reader(struct rockchip_spi *rs) { u32 words = readl_relaxed(rs->regs + ROCKCHIP_SPI_RXFLR); - u32 rx_left = rs->rx_left - words; + u32 rx_left = (rs->rx_left > words) ? rs->rx_left - words : 0; /* the hardware doesn't allow us to change fifo threshold * level while spi is enabled, so instead make sure to leave From 3f4f3b350a8af8c798c8239a6fbc5fbd839c5300 Mon Sep 17 00:00:00 2001 From: Yu Kuai Date: Tue, 21 Jul 2020 21:45:51 +0800 Subject: [PATCH 038/448] ARM: socfpga: PM: add missing put_device() call in socfpga_setup_ocram_self_refresh() [ Upstream commit 3ad7b4e8f89d6bcc9887ca701cf2745a6aedb1a0 ] if of_find_device_by_node() succeed, socfpga_setup_ocram_self_refresh doesn't have a corresponding put_device(). Thus add a jump target to fix the exception handling for this function implementation. Fixes: 44fd8c7d4005 ("ARM: socfpga: support suspend to ram") Signed-off-by: Yu Kuai Signed-off-by: Dinh Nguyen Signed-off-by: Sasha Levin --- arch/arm/mach-socfpga/pm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-socfpga/pm.c b/arch/arm/mach-socfpga/pm.c index 6ed887cf8dc9..365c0428b21b 100644 --- a/arch/arm/mach-socfpga/pm.c +++ b/arch/arm/mach-socfpga/pm.c @@ -49,14 +49,14 @@ static int socfpga_setup_ocram_self_refresh(void) if (!ocram_pool) { pr_warn("%s: ocram pool unavailable!\n", __func__); ret = -ENODEV; - goto put_node; + goto put_device; } ocram_base = gen_pool_alloc(ocram_pool, socfpga_sdram_self_refresh_sz); if (!ocram_base) { pr_warn("%s: unable to alloc ocram!\n", __func__); ret = -ENOMEM; - goto put_node; + goto put_device; } ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base); @@ -67,7 +67,7 @@ static int socfpga_setup_ocram_self_refresh(void) if (!suspend_ocram_base) { pr_warn("%s: __arm_ioremap_exec failed!\n", __func__); ret = -ENOMEM; - goto put_node; + goto put_device; } /* Copy the code that puts DDR in self refresh to ocram */ @@ -81,6 +81,8 @@ static int socfpga_setup_ocram_self_refresh(void) if (!socfpga_sdram_self_refresh_in_ocram) ret = -EFAULT; +put_device: + put_device(&pdev->dev); put_node: of_node_put(np); From 2f53a4b54e25bd897c22d0080ece89e6865d8aba Mon Sep 17 00:00:00 2001 From: Chengming Zhou Date: Thu, 30 Jul 2020 17:03:21 +0800 Subject: [PATCH 039/448] iocost: Fix check condition of iocg abs_vdebt [ Upstream commit d9012a59db54442d5b2fcfdfcded35cf566397d3 ] We shouldn't skip iocg when its abs_vdebt is not zero. Fixes: 0b80f9866e6b ("iocost: protect iocg->abs_vdebt with iocg->waitq.lock") Signed-off-by: Chengming Zhou Acked-by: Tejun Heo Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- block/blk-iocost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/blk-iocost.c b/block/blk-iocost.c index 4d2bda812d9b..dcc6685d5bec 100644 --- a/block/blk-iocost.c +++ b/block/blk-iocost.c @@ -1377,7 +1377,7 @@ static void ioc_timer_fn(struct timer_list *timer) * should have woken up in the last period and expire idle iocgs. */ list_for_each_entry_safe(iocg, tiocg, &ioc->active_iocgs, active_list) { - if (!waitqueue_active(&iocg->waitq) && iocg->abs_vdebt && + if (!waitqueue_active(&iocg->waitq) && !iocg->abs_vdebt && !iocg_is_idle(iocg)) continue; From 7915a3c04139cb44d26d8de3aed8abbfc735586f Mon Sep 17 00:00:00 2001 From: Tiezhu Yang Date: Sat, 6 Jun 2020 17:50:16 +0800 Subject: [PATCH 040/448] irqchip/ti-sci-inta: Fix return value about devm_ioremap_resource() [ Upstream commit 4b127a14cb1385dd355c7673d975258d5d668922 ] When call function devm_ioremap_resource(), we should use IS_ERR() to check the return value and return PTR_ERR() if failed. Fixes: 9f1463b86c13 ("irqchip/ti-sci-inta: Add support for Interrupt Aggregator driver") Signed-off-by: Tiezhu Yang Signed-off-by: Marc Zyngier Reviewed-by: Grygorii Strashko Link: https://lore.kernel.org/r/1591437017-5295-2-git-send-email-yangtiezhu@loongson.cn Signed-off-by: Sasha Levin --- drivers/irqchip/irq-ti-sci-inta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-ti-sci-inta.c b/drivers/irqchip/irq-ti-sci-inta.c index fa7488863bd0..0a35499c4672 100644 --- a/drivers/irqchip/irq-ti-sci-inta.c +++ b/drivers/irqchip/irq-ti-sci-inta.c @@ -571,7 +571,7 @@ static int ti_sci_inta_irq_domain_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); inta->base = devm_ioremap_resource(dev, res); if (IS_ERR(inta->base)) - return -ENODEV; + return PTR_ERR(inta->base); domain = irq_domain_add_linear(dev_of_node(dev), ti_sci_get_num_resources(inta->vint), From 0f09c88f207c0b6a45454e770829a7aba814059e Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Mon, 15 Jun 2020 15:42:46 -0700 Subject: [PATCH 041/448] seccomp: Fix ioctl number for SECCOMP_IOCTL_NOTIF_ID_VALID [ Upstream commit 47e33c05f9f07cac3de833e531bcac9ae052c7ca ] When SECCOMP_IOCTL_NOTIF_ID_VALID was first introduced it had the wrong direction flag set. While this isn't a big deal as nothing currently enforces these bits in the kernel, it should be defined correctly. Fix the define and provide support for the old command until it is no longer needed for backward compatibility. Fixes: 6a21cc50f0c7 ("seccomp: add a return code to trap to userspace") Signed-off-by: Kees Cook Signed-off-by: Sasha Levin --- include/uapi/linux/seccomp.h | 3 ++- kernel/seccomp.c | 9 +++++++++ tools/testing/selftests/seccomp/seccomp_bpf.c | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/seccomp.h b/include/uapi/linux/seccomp.h index 90734aa5aa36..b5f901af79f0 100644 --- a/include/uapi/linux/seccomp.h +++ b/include/uapi/linux/seccomp.h @@ -93,5 +93,6 @@ struct seccomp_notif_resp { #define SECCOMP_IOCTL_NOTIF_RECV SECCOMP_IOWR(0, struct seccomp_notif) #define SECCOMP_IOCTL_NOTIF_SEND SECCOMP_IOWR(1, \ struct seccomp_notif_resp) -#define SECCOMP_IOCTL_NOTIF_ID_VALID SECCOMP_IOR(2, __u64) +#define SECCOMP_IOCTL_NOTIF_ID_VALID SECCOMP_IOW(2, __u64) + #endif /* _UAPI_LINUX_SECCOMP_H */ diff --git a/kernel/seccomp.c b/kernel/seccomp.c index 2c697ce7be21..e0fd97235653 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c @@ -42,6 +42,14 @@ #include #include +/* + * When SECCOMP_IOCTL_NOTIF_ID_VALID was first introduced, it had the + * wrong direction flag in the ioctl number. This is the broken one, + * which the kernel needs to keep supporting until all userspaces stop + * using the wrong command number. + */ +#define SECCOMP_IOCTL_NOTIF_ID_VALID_WRONG_DIR SECCOMP_IOR(2, __u64) + enum notify_state { SECCOMP_NOTIFY_INIT, SECCOMP_NOTIFY_SENT, @@ -1168,6 +1176,7 @@ static long seccomp_notify_ioctl(struct file *file, unsigned int cmd, return seccomp_notify_recv(filter, buf); case SECCOMP_IOCTL_NOTIF_SEND: return seccomp_notify_send(filter, buf); + case SECCOMP_IOCTL_NOTIF_ID_VALID_WRONG_DIR: case SECCOMP_IOCTL_NOTIF_ID_VALID: return seccomp_notify_id_valid(filter, buf); default: diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c index 96bbda4f10fc..19c7351eeb74 100644 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c @@ -177,7 +177,7 @@ struct seccomp_metadata { #define SECCOMP_IOCTL_NOTIF_RECV SECCOMP_IOWR(0, struct seccomp_notif) #define SECCOMP_IOCTL_NOTIF_SEND SECCOMP_IOWR(1, \ struct seccomp_notif_resp) -#define SECCOMP_IOCTL_NOTIF_ID_VALID SECCOMP_IOR(2, __u64) +#define SECCOMP_IOCTL_NOTIF_ID_VALID SECCOMP_IOW(2, __u64) struct seccomp_notif { __u64 id; From 6f01de256dd00fa2bd677950a841a9a44f7645d0 Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Thu, 2 Jul 2020 12:35:02 +0100 Subject: [PATCH 042/448] md: raid0/linear: fix dereference before null check on pointer mddev [ Upstream commit 9a5a85972c073f720d81a7ebd08bfe278e6e16db ] Pointer mddev is being dereferenced with a test_bit call before mddev is being null checked, this may cause a null pointer dereference. Fix this by moving the null pointer checks to sanity check mddev before it is dereferenced. Addresses-Coverity: ("Dereference before null check") Fixes: 62f7b1989c02 ("md raid0/linear: Mark array as 'broken' and fail BIOs if a member is gone") Signed-off-by: Colin Ian King Reviewed-by: Guilherme G. Piccoli Signed-off-by: Song Liu Signed-off-by: Sasha Levin --- drivers/md/md.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index 5a378a453a2d..acef01e519d0 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -376,6 +376,11 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio) struct mddev *mddev = q->queuedata; unsigned int sectors; + if (mddev == NULL || mddev->pers == NULL) { + bio_io_error(bio); + return BLK_QC_T_NONE; + } + if (unlikely(test_bit(MD_BROKEN, &mddev->flags)) && (rw == WRITE)) { bio_io_error(bio); return BLK_QC_T_NONE; @@ -383,10 +388,6 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio) blk_queue_split(q, &bio); - if (mddev == NULL || mddev->pers == NULL) { - bio_io_error(bio); - return BLK_QC_T_NONE; - } if (mddev->ro == 1 && unlikely(rw == WRITE)) { if (bio_sectors(bio) != 0) bio->bi_status = BLK_STS_IOERR; From b98a96662a4e8e6e41afb2b95786d276b85caf77 Mon Sep 17 00:00:00 2001 From: Sagi Grimberg Date: Fri, 24 Jul 2020 15:10:12 -0700 Subject: [PATCH 043/448] nvme-tcp: fix controller reset hang during traffic [ Upstream commit 2875b0aecabe2f081a8432e2bc85b85df0529490 ] commit fe35ec58f0d3 ("block: update hctx map when use multiple maps") exposed an issue where we may hang trying to wait for queue freeze during I/O. We call blk_mq_update_nr_hw_queues which in case of multiple queue maps (which we have now for default/read/poll) is attempting to freeze the queue. However we never started queue freeze when starting the reset, which means that we have inflight pending requests that entered the queue that we will not complete once the queue is quiesced. So start a freeze before we quiesce the queue, and unfreeze the queue after we successfully connected the I/O queues (and make sure to call blk_mq_update_nr_hw_queues only after we are sure that the queue was already frozen). This follows to how the pci driver handles resets. Fixes: fe35ec58f0d3 ("block: update hctx map when use multiple maps") Signed-off-by: Sagi Grimberg Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- drivers/nvme/host/tcp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 53e113a18a54..0166ff0e4738 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -1684,15 +1684,20 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new) ret = PTR_ERR(ctrl->connect_q); goto out_free_tag_set; } - } else { - blk_mq_update_nr_hw_queues(ctrl->tagset, - ctrl->queue_count - 1); } ret = nvme_tcp_start_io_queues(ctrl); if (ret) goto out_cleanup_connect_q; + if (!new) { + nvme_start_queues(ctrl); + nvme_wait_freeze(ctrl); + blk_mq_update_nr_hw_queues(ctrl->tagset, + ctrl->queue_count - 1); + nvme_unfreeze(ctrl); + } + return 0; out_cleanup_connect_q: @@ -1797,6 +1802,7 @@ static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl, { if (ctrl->queue_count <= 1) return; + nvme_start_freeze(ctrl); nvme_stop_queues(ctrl); nvme_tcp_stop_io_queues(ctrl); if (ctrl->tagset) { From 4e8691ba0e78312891db3ae4cc47b5c7f41a1b7f Mon Sep 17 00:00:00 2001 From: Sagi Grimberg Date: Mon, 27 Jul 2020 17:32:09 -0700 Subject: [PATCH 044/448] nvme-rdma: fix controller reset hang during traffic [ Upstream commit 9f98772ba307dd89a3d17dc2589f213d3972fc64 ] commit fe35ec58f0d3 ("block: update hctx map when use multiple maps") exposed an issue where we may hang trying to wait for queue freeze during I/O. We call blk_mq_update_nr_hw_queues which in case of multiple queue maps (which we have now for default/read/poll) is attempting to freeze the queue. However we never started queue freeze when starting the reset, which means that we have inflight pending requests that entered the queue that we will not complete once the queue is quiesced. So start a freeze before we quiesce the queue, and unfreeze the queue after we successfully connected the I/O queues (and make sure to call blk_mq_update_nr_hw_queues only after we are sure that the queue was already frozen). This follows to how the pci driver handles resets. Fixes: fe35ec58f0d3 ("block: update hctx map when use multiple maps") Signed-off-by: Sagi Grimberg Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- drivers/nvme/host/rdma.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index cd0d49978190..d0336545e1fe 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c @@ -890,15 +890,20 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new) ret = PTR_ERR(ctrl->ctrl.connect_q); goto out_free_tag_set; } - } else { - blk_mq_update_nr_hw_queues(&ctrl->tag_set, - ctrl->ctrl.queue_count - 1); } ret = nvme_rdma_start_io_queues(ctrl); if (ret) goto out_cleanup_connect_q; + if (!new) { + nvme_start_queues(&ctrl->ctrl); + nvme_wait_freeze(&ctrl->ctrl); + blk_mq_update_nr_hw_queues(ctrl->ctrl.tagset, + ctrl->ctrl.queue_count - 1); + nvme_unfreeze(&ctrl->ctrl); + } + return 0; out_cleanup_connect_q: @@ -931,6 +936,7 @@ static void nvme_rdma_teardown_io_queues(struct nvme_rdma_ctrl *ctrl, bool remove) { if (ctrl->ctrl.queue_count > 1) { + nvme_start_freeze(&ctrl->ctrl); nvme_stop_queues(&ctrl->ctrl); nvme_rdma_stop_io_queues(ctrl); if (ctrl->ctrl.tagset) { From f0a8c0254fde58bddbdb821cc86f2be801741b46 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Mon, 27 Jul 2020 18:08:02 +0200 Subject: [PATCH 045/448] nvme-multipath: fix logic for non-optimized paths [ Upstream commit 3f6e3246db0e6f92e784965d9d0edb8abe6c6b74 ] Handle the special case where we have exactly one optimized path, which we should keep using in this case. Fixes: 75c10e732724 ("nvme-multipath: round-robin I/O policy") Signed off-by: Martin Wilck Signed-off-by: Hannes Reinecke Reviewed-by: Sagi Grimberg Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- drivers/nvme/host/multipath.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 5433aa2f7601..38d25d7c6bca 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -249,6 +249,12 @@ static struct nvme_ns *nvme_round_robin_path(struct nvme_ns_head *head, fallback = ns; } + /* No optimized path found, re-check the current path */ + if (!nvme_path_is_disabled(old) && + old->ana_state == NVME_ANA_OPTIMIZED) { + found = old; + goto out; + } if (!fallback) return NULL; found = fallback; From 86f305a9aca0053477f2c101ff6ecced37da210c Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Mon, 27 Jul 2020 18:08:03 +0200 Subject: [PATCH 046/448] nvme-multipath: do not fall back to __nvme_find_path() for non-optimized paths [ Upstream commit fbd6a42d8932e172921c7de10468a2e12c34846b ] When nvme_round_robin_path() finds a valid namespace we should be using it; falling back to __nvme_find_path() for non-optimized paths will cause the result from nvme_round_robin_path() to be ignored for non-optimized paths. Fixes: 75c10e732724 ("nvme-multipath: round-robin I/O policy") Signed-off-by: Martin Wilck Signed-off-by: Hannes Reinecke Reviewed-by: Sagi Grimberg Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- drivers/nvme/host/multipath.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 38d25d7c6bca..484aad0d0c9c 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -275,10 +275,13 @@ inline struct nvme_ns *nvme_find_path(struct nvme_ns_head *head) struct nvme_ns *ns; ns = srcu_dereference(head->current_path[node], &head->srcu); - if (READ_ONCE(head->subsys->iopolicy) == NVME_IOPOLICY_RR && ns) - ns = nvme_round_robin_path(head, node, ns); - if (unlikely(!ns || !nvme_path_is_optimized(ns))) - ns = __nvme_find_path(head, node); + if (unlikely(!ns)) + return __nvme_find_path(head, node); + + if (READ_ONCE(head->subsys->iopolicy) == NVME_IOPOLICY_RR) + return nvme_round_robin_path(head, node, ns); + if (unlikely(!nvme_path_is_optimized(ns))) + return __nvme_find_path(head, node); return ns; } From 94fd6f72a82621ced478a0a417f4dccc244f7df5 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Wed, 29 Apr 2020 13:42:32 +0300 Subject: [PATCH 047/448] drm/tilcdc: fix leak & null ref in panel_connector_get_modes [ Upstream commit 3f9c1c872cc97875ddc8d63bc9fe6ee13652b933 ] If videomode_from_timings() returns true, the mode allocated with drm_mode_create will be leaked. Also, the return value of drm_mode_create() is never checked, and thus could cause NULL deref. Fix these two issues. Signed-off-by: Tomi Valkeinen Link: https://patchwork.freedesktop.org/patch/msgid/20200429104234.18910-1-tomi.valkeinen@ti.com Reviewed-by: Jyri Sarha Acked-by: Sam Ravnborg Signed-off-by: Sasha Levin --- drivers/gpu/drm/tilcdc/tilcdc_panel.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c index 5584e656b857..8c4fd1aa4c2d 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c @@ -143,12 +143,16 @@ static int panel_connector_get_modes(struct drm_connector *connector) int i; for (i = 0; i < timings->num_timings; i++) { - struct drm_display_mode *mode = drm_mode_create(dev); + struct drm_display_mode *mode; struct videomode vm; if (videomode_from_timings(timings, &vm, i)) break; + mode = drm_mode_create(dev); + if (!mode) + break; + drm_display_mode_from_videomode(&vm, mode); mode->type = DRM_MODE_TYPE_DRIVER; From f8b0407f6a5f7a846684d0a0471dfbd252565b9a Mon Sep 17 00:00:00 2001 From: Maulik Shah Date: Mon, 22 Jun 2020 12:23:25 +0530 Subject: [PATCH 048/448] soc: qcom: rpmh-rsc: Set suppress_bind_attrs flag [ Upstream commit 1a53ce9ab4faeb841b33d62d23283dc76c0e7c5a ] rpmh-rsc driver is fairly core to system and should not be removable once its probed. However it allows to unbind driver from sysfs using below command which results into a crash on sc7180. echo 18200000.rsc > /sys/bus/platform/drivers/rpmh/unbind Lets prevent unbind at runtime by setting suppress_bind_attrs flag. Reviewed-by: Stephen Boyd Signed-off-by: Maulik Shah Link: https://lore.kernel.org/r/1592808805-2437-1-git-send-email-mkshah@codeaurora.org Signed-off-by: Bjorn Andersson Signed-off-by: Sasha Levin --- drivers/soc/qcom/rpmh-rsc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c index 0ba1f465db12..8924fcd9f5f5 100644 --- a/drivers/soc/qcom/rpmh-rsc.c +++ b/drivers/soc/qcom/rpmh-rsc.c @@ -715,6 +715,7 @@ static struct platform_driver rpmh_driver = { .driver = { .name = "rpmh", .of_match_table = rpmh_drv_match, + .suppress_bind_attrs = true, }, }; From 0e656b7e85c35b708399de067ee2319702922dd8 Mon Sep 17 00:00:00 2001 From: Lihong Kou Date: Tue, 23 Jun 2020 20:28:41 +0800 Subject: [PATCH 049/448] Bluetooth: add a mutex lock to avoid UAF in do_enale_set [ Upstream commit f9c70bdc279b191da8d60777c627702c06e4a37d ] In the case we set or free the global value listen_chan in different threads, we can encounter the UAF problems because the method is not protected by any lock, add one to avoid this bug. BUG: KASAN: use-after-free in l2cap_chan_close+0x48/0x990 net/bluetooth/l2cap_core.c:730 Read of size 8 at addr ffff888096950000 by task kworker/1:102/2868 CPU: 1 PID: 2868 Comm: kworker/1:102 Not tainted 5.5.0-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: events do_enable_set Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x1fb/0x318 lib/dump_stack.c:118 print_address_description+0x74/0x5c0 mm/kasan/report.c:374 __kasan_report+0x149/0x1c0 mm/kasan/report.c:506 kasan_report+0x26/0x50 mm/kasan/common.c:641 __asan_report_load8_noabort+0x14/0x20 mm/kasan/generic_report.c:135 l2cap_chan_close+0x48/0x990 net/bluetooth/l2cap_core.c:730 do_enable_set+0x660/0x900 net/bluetooth/6lowpan.c:1074 process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264 worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410 kthread+0x332/0x350 kernel/kthread.c:255 ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352 Allocated by task 2870: save_stack mm/kasan/common.c:72 [inline] set_track mm/kasan/common.c:80 [inline] __kasan_kmalloc+0x118/0x1c0 mm/kasan/common.c:515 kasan_kmalloc+0x9/0x10 mm/kasan/common.c:529 kmem_cache_alloc_trace+0x221/0x2f0 mm/slab.c:3551 kmalloc include/linux/slab.h:555 [inline] kzalloc include/linux/slab.h:669 [inline] l2cap_chan_create+0x50/0x320 net/bluetooth/l2cap_core.c:446 chan_create net/bluetooth/6lowpan.c:640 [inline] bt_6lowpan_listen net/bluetooth/6lowpan.c:959 [inline] do_enable_set+0x6a4/0x900 net/bluetooth/6lowpan.c:1078 process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264 worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410 kthread+0x332/0x350 kernel/kthread.c:255 ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352 Freed by task 2870: save_stack mm/kasan/common.c:72 [inline] set_track mm/kasan/common.c:80 [inline] kasan_set_free_info mm/kasan/common.c:337 [inline] __kasan_slab_free+0x12e/0x1e0 mm/kasan/common.c:476 kasan_slab_free+0xe/0x10 mm/kasan/common.c:485 __cache_free mm/slab.c:3426 [inline] kfree+0x10d/0x220 mm/slab.c:3757 l2cap_chan_destroy net/bluetooth/l2cap_core.c:484 [inline] kref_put include/linux/kref.h:65 [inline] l2cap_chan_put+0x170/0x190 net/bluetooth/l2cap_core.c:498 do_enable_set+0x66c/0x900 net/bluetooth/6lowpan.c:1075 process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264 worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410 kthread+0x332/0x350 kernel/kthread.c:255 ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352 The buggy address belongs to the object at ffff888096950000 which belongs to the cache kmalloc-2k of size 2048 The buggy address is located 0 bytes inside of 2048-byte region [ffff888096950000, ffff888096950800) The buggy address belongs to the page: page:ffffea00025a5400 refcount:1 mapcount:0 mapping:ffff8880aa400e00 index:0x0 flags: 0xfffe0000000200(slab) raw: 00fffe0000000200 ffffea00027d1548 ffffea0002397808 ffff8880aa400e00 raw: 0000000000000000 ffff888096950000 0000000100000001 0000000000000000 page dumped because: kasan: bad access detected Memory state around the buggy address: ffff88809694ff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ffff88809694ff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >ffff888096950000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff888096950080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff888096950100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ================================================================== Reported-by: syzbot+96414aa0033c363d8458@syzkaller.appspotmail.com Signed-off-by: Lihong Kou Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- net/bluetooth/6lowpan.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c index 4febc82a7c76..52fb6d6d6d58 100644 --- a/net/bluetooth/6lowpan.c +++ b/net/bluetooth/6lowpan.c @@ -50,6 +50,7 @@ static bool enable_6lowpan; /* We are listening incoming connections via this channel */ static struct l2cap_chan *listen_chan; +static DEFINE_MUTEX(set_lock); struct lowpan_peer { struct list_head list; @@ -1070,12 +1071,14 @@ static void do_enable_set(struct work_struct *work) enable_6lowpan = set_enable->flag; + mutex_lock(&set_lock); if (listen_chan) { l2cap_chan_close(listen_chan, 0); l2cap_chan_put(listen_chan); } listen_chan = bt_6lowpan_listen(); + mutex_unlock(&set_lock); kfree(set_enable); } @@ -1127,11 +1130,13 @@ static ssize_t lowpan_control_write(struct file *fp, if (ret == -EINVAL) return ret; + mutex_lock(&set_lock); if (listen_chan) { l2cap_chan_close(listen_chan, 0); l2cap_chan_put(listen_chan); listen_chan = NULL; } + mutex_unlock(&set_lock); if (conn) { struct lowpan_peer *peer; From a6619810135b5365d1d4b83791a4e1f1464a0a41 Mon Sep 17 00:00:00 2001 From: Luis Chamberlain Date: Fri, 19 Jun 2020 20:47:27 +0000 Subject: [PATCH 050/448] loop: be paranoid on exit and prevent new additions / removals [ Upstream commit 200f93377220504c5e56754823e7adfea6037f1a ] Be pedantic on removal as well and hold the mutex. This should prevent uses of addition while we exit. Signed-off-by: Luis Chamberlain Reviewed-by: Ming Lei Reviewed-by: Christoph Hellwig Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/block/loop.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 565e35e69f24..bddbbf5b3dda 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -2325,6 +2325,8 @@ static void __exit loop_exit(void) range = max_loop ? max_loop << part_shift : 1UL << MINORBITS; + mutex_lock(&loop_ctl_mutex); + idr_for_each(&loop_index_idr, &loop_exit_cb, NULL); idr_destroy(&loop_index_idr); @@ -2332,6 +2334,8 @@ static void __exit loop_exit(void) unregister_blkdev(LOOP_MAJOR, "loop"); misc_deregister(&loop_misc); + + mutex_unlock(&loop_ctl_mutex); } module_init(loop_init); From fa80032cee45d0829eae0566f0d13653e54a59a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Mon, 17 Aug 2020 14:17:23 -0700 Subject: [PATCH 051/448] ANDROID: fix a bug in quota2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If quota is precisely equal to skb->len then a notification would not be sent due to immediately hitting 0. This fixes that, and takes the opportunity to slightly clean up the code and make quota behave more correctly for packet mode as well. Test: builds, net tests continue to pass Bug: 164336990 Signed-off-by: Maciej Żenczykowski Change-Id: I78a11b48794496255513a6226c0469d809d7aa56 (cherry picked from commit b20eacd8ddbd1dbf403df94f5ba6384e6fef0113) --- net/netfilter/xt_quota2.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/net/netfilter/xt_quota2.c b/net/netfilter/xt_quota2.c index c42724469759..c9a06d0652fe 100644 --- a/net/netfilter/xt_quota2.c +++ b/net/netfilter/xt_quota2.c @@ -306,6 +306,8 @@ quota_mt2(const struct sk_buff *skb, struct xt_action_param *par) { struct xt_quota_mtinfo2 *q = (void *)par->matchinfo; struct xt_quota_counter *e = q->master; + int charge = (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len; + bool no_change = q->flags & XT_QUOTA_NO_CHANGE; bool ret = q->flags & XT_QUOTA_INVERT; spin_lock_bh(&e->lock); @@ -314,24 +316,21 @@ quota_mt2(const struct sk_buff *skb, struct xt_action_param *par) * While no_change is pointless in "grow" mode, we will * implement it here simply to have a consistent behavior. */ - if (!(q->flags & XT_QUOTA_NO_CHANGE)) { - e->quota += (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len; - } - ret = true; + if (!no_change) + e->quota += charge; + ret = true; /* note: does not respect inversion (bug??) */ } else { - if (e->quota >= skb->len) { - if (!(q->flags & XT_QUOTA_NO_CHANGE)) - e->quota -= (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len; + if (e->quota > charge) { + if (!no_change) + e->quota -= charge; ret = !ret; - } else { + } else if (e->quota) { /* We are transitioning, log that fact. */ - if (e->quota) { - quota2_log(xt_hooknum(par), - skb, - xt_in(par), - xt_out(par), - q->name); - } + quota2_log(xt_hooknum(par), + skb, + xt_in(par), + xt_out(par), + q->name); /* we do not allow even small packets from now on */ e->quota = 0; } From 6402b231824f45355e2e0ade4f9cba5249fc0a8a Mon Sep 17 00:00:00 2001 From: "Paul E. McKenney" Date: Fri, 8 May 2020 14:15:37 -0700 Subject: [PATCH 052/448] fs/btrfs: Add cond_resched() for try_release_extent_mapping() stalls [ Upstream commit 9f47eb5461aaeb6cb8696f9d11503ae90e4d5cb0 ] Very large I/Os can cause the following RCU CPU stall warning: RIP: 0010:rb_prev+0x8/0x50 Code: 49 89 c0 49 89 d1 48 89 c2 48 89 f8 e9 e5 fd ff ff 4c 89 48 10 c3 4c = 89 06 c3 4c 89 40 10 c3 0f 1f 00 48 8b 0f 48 39 cf 74 38 <48> 8b 47 10 48 85 c0 74 22 48 8b 50 08 48 85 d2 74 0c 48 89 d0 48 RSP: 0018:ffffc9002212bab0 EFLAGS: 00000287 ORIG_RAX: ffffffffffffff13 RAX: ffff888821f93630 RBX: ffff888821f93630 RCX: ffff888821f937e0 RDX: 0000000000000000 RSI: 0000000000102000 RDI: ffff888821f93630 RBP: 0000000000103000 R08: 000000000006c000 R09: 0000000000000238 R10: 0000000000102fff R11: ffffc9002212bac8 R12: 0000000000000001 R13: ffffffffffffffff R14: 0000000000102000 R15: ffff888821f937e0 __lookup_extent_mapping+0xa0/0x110 try_release_extent_mapping+0xdc/0x220 btrfs_releasepage+0x45/0x70 shrink_page_list+0xa39/0xb30 shrink_inactive_list+0x18f/0x3b0 shrink_lruvec+0x38e/0x6b0 shrink_node+0x14d/0x690 do_try_to_free_pages+0xc6/0x3e0 try_to_free_mem_cgroup_pages+0xe6/0x1e0 reclaim_high.constprop.73+0x87/0xc0 mem_cgroup_handle_over_high+0x66/0x150 exit_to_usermode_loop+0x82/0xd0 do_syscall_64+0xd4/0x100 entry_SYSCALL_64_after_hwframe+0x44/0xa9 On a PREEMPT=n kernel, the try_release_extent_mapping() function's "while" loop might run for a very long time on a large I/O. This commit therefore adds a cond_resched() to this loop, providing RCU any needed quiescent states. Signed-off-by: Paul E. McKenney Signed-off-by: Sasha Levin --- fs/btrfs/extent_io.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 1a089a642422..99dcb3897659 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4481,6 +4481,8 @@ int try_release_extent_mapping(struct page *page, gfp_t mask) /* once for us */ free_extent_map(em); + + cond_resched(); /* Allow large-extent preemption. */ } } return try_release_extent_state(tree, page, mask); From 2f04f5bcf6d9aa511af473ac481a4a2cd305b034 Mon Sep 17 00:00:00 2001 From: Jack Xiao Date: Wed, 5 Jun 2019 16:30:13 +0800 Subject: [PATCH 053/448] drm/amdgpu: avoid dereferencing a NULL pointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 55611b507fd6453d26030c0c0619fdf0c262766d ] Check if irq_src is NULL to avoid dereferencing a NULL pointer, for MES ring is uneccessary to recieve an interrupt notification. Signed-off-by: Jack Xiao Acked-by: Alex Deucher Reviewed-by: Hawking Zhang Reviewed-by: Christian König Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c index 23085b352cf2..c212d5fc665c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c @@ -404,7 +404,9 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring, ring->fence_drv.gpu_addr = adev->uvd.inst[ring->me].gpu_addr + index; } amdgpu_fence_write(ring, atomic_read(&ring->fence_drv.last_seq)); - amdgpu_irq_get(adev, irq_src, irq_type); + + if (irq_src) + amdgpu_irq_get(adev, irq_src, irq_type); ring->fence_drv.irq_src = irq_src; ring->fence_drv.irq_type = irq_type; @@ -539,8 +541,9 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev) /* no need to trigger GPU reset as we are unloading */ amdgpu_fence_driver_force_completion(ring); } - amdgpu_irq_put(adev, ring->fence_drv.irq_src, - ring->fence_drv.irq_type); + if (ring->fence_drv.irq_src) + amdgpu_irq_put(adev, ring->fence_drv.irq_src, + ring->fence_drv.irq_type); drm_sched_fini(&ring->sched); del_timer_sync(&ring->fence_drv.fallback_timer); for (j = 0; j <= ring->fence_drv.num_fences_mask; ++j) @@ -576,8 +579,9 @@ void amdgpu_fence_driver_suspend(struct amdgpu_device *adev) } /* disable the interrupt */ - amdgpu_irq_put(adev, ring->fence_drv.irq_src, - ring->fence_drv.irq_type); + if (ring->fence_drv.irq_src) + amdgpu_irq_put(adev, ring->fence_drv.irq_src, + ring->fence_drv.irq_type); } } @@ -603,8 +607,9 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev) continue; /* enable the interrupt */ - amdgpu_irq_get(adev, ring->fence_drv.irq_src, - ring->fence_drv.irq_type); + if (ring->fence_drv.irq_src) + amdgpu_irq_get(adev, ring->fence_drv.irq_src, + ring->fence_drv.irq_type); } } From cab45cfa00b875ab5f80b692e04aad5d949ac9e3 Mon Sep 17 00:00:00 2001 From: Aditya Pakki Date: Sat, 13 Jun 2020 21:21:22 -0500 Subject: [PATCH 054/448] drm/radeon: Fix reference count leaks caused by pm_runtime_get_sync [ Upstream commit 9fb10671011143d15b6b40d6d5fa9c52c57e9d63 ] On calling pm_runtime_get_sync() the reference count of the device is incremented. In case of failure, decrement the reference count before returning the error. Acked-by: Evan Quan Signed-off-by: Aditya Pakki Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/radeon/radeon_display.c | 4 +++- drivers/gpu/drm/radeon/radeon_drv.c | 4 +++- drivers/gpu/drm/radeon/radeon_kms.c | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 0826efd9b5f5..f9f74150d0d7 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -631,8 +631,10 @@ radeon_crtc_set_config(struct drm_mode_set *set, dev = set->crtc->dev; ret = pm_runtime_get_sync(dev->dev); - if (ret < 0) + if (ret < 0) { + pm_runtime_put_autosuspend(dev->dev); return ret; + } ret = drm_crtc_helper_set_config(set, ctx); diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 6128792ab883..7d417b9a5250 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c @@ -555,8 +555,10 @@ long radeon_drm_ioctl(struct file *filp, long ret; dev = file_priv->minor->dev; ret = pm_runtime_get_sync(dev->dev); - if (ret < 0) + if (ret < 0) { + pm_runtime_put_autosuspend(dev->dev); return ret; + } ret = drm_ioctl(filp, cmd, arg); diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 2bb0187c5bc7..709c4ef5e7d5 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c @@ -638,8 +638,10 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) file_priv->driver_priv = NULL; r = pm_runtime_get_sync(dev->dev); - if (r < 0) + if (r < 0) { + pm_runtime_put_autosuspend(dev->dev); return r; + } /* new gpu have virtual address space support */ if (rdev->family >= CHIP_CAYMAN) { From 8b8d17d9ff8aebc8c2f21d69a13638bc72079a0d Mon Sep 17 00:00:00 2001 From: Sedat Dilek Date: Fri, 3 Jul 2020 16:32:06 +0200 Subject: [PATCH 055/448] crypto: aesni - Fix build with LLVM_IAS=1 [ Upstream commit 3347c8a079d67af21760a78cc5f2abbcf06d9571 ] When building with LLVM_IAS=1 means using Clang's Integrated Assembly (IAS) from LLVM/Clang >= v10.0.1-rc1+ instead of GNU/as from GNU/binutils I see the following breakage in Debian/testing AMD64: :15:74: error: too many positional arguments PRECOMPUTE 8*3+8(%rsp), %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, ^ arch/x86/crypto/aesni-intel_asm.S:1598:2: note: while in macro instantiation GCM_INIT %r9, 8*3 +8(%rsp), 8*3 +16(%rsp), 8*3 +24(%rsp) ^ :47:2: error: unknown use of instruction mnemonic without a size suffix GHASH_4_ENCRYPT_4_PARALLEL_dec %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc ^ arch/x86/crypto/aesni-intel_asm.S:1599:2: note: while in macro instantiation GCM_ENC_DEC dec ^ :15:74: error: too many positional arguments PRECOMPUTE 8*3+8(%rsp), %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, ^ arch/x86/crypto/aesni-intel_asm.S:1686:2: note: while in macro instantiation GCM_INIT %r9, 8*3 +8(%rsp), 8*3 +16(%rsp), 8*3 +24(%rsp) ^ :47:2: error: unknown use of instruction mnemonic without a size suffix GHASH_4_ENCRYPT_4_PARALLEL_enc %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, enc ^ arch/x86/crypto/aesni-intel_asm.S:1687:2: note: while in macro instantiation GCM_ENC_DEC enc Craig Topper suggested me in ClangBuiltLinux issue #1050: > I think the "too many positional arguments" is because the parser isn't able > to handle the trailing commas. > > The "unknown use of instruction mnemonic" is because the macro was named > GHASH_4_ENCRYPT_4_PARALLEL_DEC but its being instantiated with > GHASH_4_ENCRYPT_4_PARALLEL_dec I guess gas ignores case on the > macro instantiation, but llvm doesn't. First, I removed the trailing comma in the PRECOMPUTE line. Second, I substituted: 1. GHASH_4_ENCRYPT_4_PARALLEL_DEC -> GHASH_4_ENCRYPT_4_PARALLEL_dec 2. GHASH_4_ENCRYPT_4_PARALLEL_ENC -> GHASH_4_ENCRYPT_4_PARALLEL_enc With these changes I was able to build with LLVM_IAS=1 and boot on bare metal. I confirmed that this works with Linux-kernel v5.7.5 final. NOTE: This patch is on top of Linux v5.7 final. Thanks to Craig and especially Nick for double-checking and his comments. Suggested-by: Craig Topper Suggested-by: Craig Topper Suggested-by: Nick Desaulniers Reviewed-by: Nick Desaulniers Cc: "ClangBuiltLinux" Link: https://github.com/ClangBuiltLinux/linux/issues/1050 Link: https://bugs.llvm.org/show_bug.cgi?id=24494 Signed-off-by: Sedat Dilek Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- arch/x86/crypto/aesni-intel_asm.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S index e40bdf024ba7..9afeb58c910e 100644 --- a/arch/x86/crypto/aesni-intel_asm.S +++ b/arch/x86/crypto/aesni-intel_asm.S @@ -266,7 +266,7 @@ ALL_F: .octa 0xffffffffffffffffffffffffffffffff PSHUFB_XMM %xmm2, %xmm0 movdqu %xmm0, CurCount(%arg2) # ctx_data.current_counter = iv - PRECOMPUTE \SUBKEY, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, + PRECOMPUTE \SUBKEY, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7 movdqu HashKey(%arg2), %xmm13 CALC_AAD_HASH %xmm13, \AAD, \AADLEN, %xmm0, %xmm1, %xmm2, %xmm3, \ @@ -978,7 +978,7 @@ _initial_blocks_done\@: * arg1, %arg3, %arg4 are used as pointers only, not modified * %r11 is the data offset value */ -.macro GHASH_4_ENCRYPT_4_PARALLEL_ENC TMP1 TMP2 TMP3 TMP4 TMP5 \ +.macro GHASH_4_ENCRYPT_4_PARALLEL_enc TMP1 TMP2 TMP3 TMP4 TMP5 \ TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation movdqa \XMM1, \XMM5 @@ -1186,7 +1186,7 @@ aes_loop_par_enc_done\@: * arg1, %arg3, %arg4 are used as pointers only, not modified * %r11 is the data offset value */ -.macro GHASH_4_ENCRYPT_4_PARALLEL_DEC TMP1 TMP2 TMP3 TMP4 TMP5 \ +.macro GHASH_4_ENCRYPT_4_PARALLEL_dec TMP1 TMP2 TMP3 TMP4 TMP5 \ TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation movdqa \XMM1, \XMM5 From 9ca4266935635b685d569b07006398c01dd653af Mon Sep 17 00:00:00 2001 From: Evgeny Novikov Date: Fri, 19 Jun 2020 19:21:36 +0300 Subject: [PATCH 056/448] video: fbdev: savage: fix memory leak on error handling path in probe [ Upstream commit e8d35898a78e34fc854ed9680bc3f9caedab08cd ] savagefb_probe() calls savage_init_fb_info() that can successfully allocate memory for info->pixmap.addr but then fail when fb_alloc_cmap() fails. savagefb_probe() goes to label failed_init and does not free allocated memory. It is not valid to go to label failed_mmio since savage_init_fb_info() can fail during memory allocation as well. So, the patch free allocated memory on the error handling path in savage_init_fb_info() itself. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov Cc: Antonino Daplas Signed-off-by: Bartlomiej Zolnierkiewicz Link: https://patchwork.freedesktop.org/patch/msgid/20200619162136.9010-1-novikov@ispras.ru Signed-off-by: Sasha Levin --- drivers/video/fbdev/savage/savagefb_driver.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/video/fbdev/savage/savagefb_driver.c b/drivers/video/fbdev/savage/savagefb_driver.c index 512789f5f884..d5d22d9c0f56 100644 --- a/drivers/video/fbdev/savage/savagefb_driver.c +++ b/drivers/video/fbdev/savage/savagefb_driver.c @@ -2158,6 +2158,8 @@ static int savage_init_fb_info(struct fb_info *info, struct pci_dev *dev, info->flags |= FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; + else + kfree(info->pixmap.addr); } #endif return err; From 6754d2a86c438d738d893ea5c93f3eff06d02a63 Mon Sep 17 00:00:00 2001 From: Evgeny Novikov Date: Tue, 30 Jun 2020 22:54:51 +0300 Subject: [PATCH 057/448] video: fbdev: neofb: fix memory leak in neo_scan_monitor() [ Upstream commit edcb3895a751c762a18d25c8d9846ce9759ed7e1 ] neofb_probe() calls neo_scan_monitor() that can successfully allocate a memory for info->monspecs.modedb and proceed to case 0x03. There it does not free the memory and returns -1. neofb_probe() goes to label err_scan_monitor, thus, it does not free this memory through calling fb_destroy_modedb() as well. We can not go to label err_init_hw since neo_scan_monitor() can fail during memory allocation. So, the patch frees the memory directly for case 0x03. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov Cc: Jani Nikula Cc: Mike Rapoport Cc: Daniel Vetter Cc: Andrew Morton Signed-off-by: Bartlomiej Zolnierkiewicz Link: https://patchwork.freedesktop.org/patch/msgid/20200630195451.18675-1-novikov@ispras.ru Signed-off-by: Sasha Levin --- drivers/video/fbdev/neofb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/video/fbdev/neofb.c b/drivers/video/fbdev/neofb.c index b770946a0920..76464000933d 100644 --- a/drivers/video/fbdev/neofb.c +++ b/drivers/video/fbdev/neofb.c @@ -1820,6 +1820,7 @@ static int neo_scan_monitor(struct fb_info *info) #else printk(KERN_ERR "neofb: Only 640x480, 800x600/480 and 1024x768 panels are currently supported\n"); + kfree(info->monspecs.modedb); return -1; #endif default: From 2ac7df0910e51dc006a5baeb12908c4432930b4a Mon Sep 17 00:00:00 2001 From: Tony Lindgren Date: Mon, 13 Jul 2020 09:59:47 -0700 Subject: [PATCH 058/448] bus: ti-sysc: Add missing quirk flags for usb_host_hs [ Upstream commit 4254632dba27271f6de66efd87e444ee405dee29 ] Similar to what we have for the legacy platform data, we need to configure SWSUP_SIDLE and SWSUP_MSTANDBY quirks for usb_host_hs. These are needed to drop the legacy platform data for usb_host_hs. Signed-off-by: Tony Lindgren Signed-off-by: Sasha Levin --- drivers/bus/ti-sysc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c index f8bc052cd853..770a780dfa54 100644 --- a/drivers/bus/ti-sysc.c +++ b/drivers/bus/ti-sysc.c @@ -1371,6 +1371,10 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY), SYSC_QUIRK("tptc", 0, 0, -ENODEV, -ENODEV, 0x40007c00, 0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY), + SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff, + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY), + SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -ENODEV, 0x50700101, 0xffffffff, + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY), SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050, 0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY), SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -ENODEV, 0x4ea2080d, 0xffffffff, @@ -1440,8 +1444,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK("tpcc", 0, 0, -ENODEV, -ENODEV, 0x40014c00, 0xffffffff, 0), SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000004, 0xffffffff, 0), SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000008, 0xffffffff, 0), - SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff, 0), - SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -ENODEV, 0x50700101, 0xffffffff, 0), SYSC_QUIRK("venc", 0x58003000, 0, -ENODEV, -ENODEV, 0x00000002, 0xffffffff, 0), SYSC_QUIRK("vfpe", 0, 0, 0x104, -ENODEV, 0x4d001200, 0xffffffff, 0), #endif From d72c0f225a2f745fd00b9f7776331dec2f639589 Mon Sep 17 00:00:00 2001 From: Zhao Heming Date: Thu, 9 Jul 2020 11:29:29 +0800 Subject: [PATCH 059/448] md-cluster: fix wild pointer of unlock_all_bitmaps() [ Upstream commit 60f80d6f2d07a6d8aee485a1d1252327eeee0c81 ] reproduction steps: ``` node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb node2 # mdadm -A /dev/md0 /dev/sda /dev/sdb node1 # mdadm -G /dev/md0 -b none mdadm: failed to remove clustered bitmap. node1 # mdadm -S --scan ^C <==== mdadm hung & kernel crash ``` kernel stack: ``` [ 335.230657] general protection fault: 0000 [#1] SMP NOPTI [...] [ 335.230848] Call Trace: [ 335.230873] ? unlock_all_bitmaps+0x5/0x70 [md_cluster] [ 335.230886] unlock_all_bitmaps+0x3d/0x70 [md_cluster] [ 335.230899] leave+0x10f/0x190 [md_cluster] [ 335.230932] ? md_super_wait+0x93/0xa0 [md_mod] [ 335.230947] ? leave+0x5/0x190 [md_cluster] [ 335.230973] md_cluster_stop+0x1a/0x30 [md_mod] [ 335.230999] md_bitmap_free+0x142/0x150 [md_mod] [ 335.231013] ? _cond_resched+0x15/0x40 [ 335.231025] ? mutex_lock+0xe/0x30 [ 335.231056] __md_stop+0x1c/0xa0 [md_mod] [ 335.231083] do_md_stop+0x160/0x580 [md_mod] [ 335.231119] ? 0xffffffffc05fb078 [ 335.231148] md_ioctl+0xa04/0x1930 [md_mod] [ 335.231165] ? filename_lookup+0xf2/0x190 [ 335.231179] blkdev_ioctl+0x93c/0xa10 [ 335.231205] ? _cond_resched+0x15/0x40 [ 335.231214] ? __check_object_size+0xd4/0x1a0 [ 335.231224] block_ioctl+0x39/0x40 [ 335.231243] do_vfs_ioctl+0xa0/0x680 [ 335.231253] ksys_ioctl+0x70/0x80 [ 335.231261] __x64_sys_ioctl+0x16/0x20 [ 335.231271] do_syscall_64+0x65/0x1f0 [ 335.231278] entry_SYSCALL_64_after_hwframe+0x44/0xa9 ``` Signed-off-by: Zhao Heming Signed-off-by: Song Liu Signed-off-by: Sasha Levin --- drivers/md/md-cluster.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index 813a99ffa86f..73fd50e77975 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c @@ -1518,6 +1518,7 @@ static void unlock_all_bitmaps(struct mddev *mddev) } } kfree(cinfo->other_bitmap_lockres); + cinfo->other_bitmap_lockres = NULL; } } From 454a00e9ed83efc5a276ac66b31ac7ae4d023a71 Mon Sep 17 00:00:00 2001 From: Lyude Paul Date: Tue, 17 Mar 2020 14:54:06 -0400 Subject: [PATCH 060/448] drm/nouveau/kms/nv50-: Fix disabling dithering [ Upstream commit fb2420b701edbf96c2b6d557f0139902f455dc2b ] While we expose the ability to turn off hardware dithering for nouveau, we actually make the mistake of turning it on anyway, due to dithering_depth containing a non-zero value if our dithering depth isn't also set to 6 bpc. So, fix it by never enabling dithering when it's disabled. Signed-off-by: Lyude Paul Reviewed-by: Ben Skeggs Acked-by: Dave Airlie Link: https://patchwork.freedesktop.org/patch/msgid/20200627194657.156514-6-lyude@redhat.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/nouveau/dispnv50/head.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c index c9692df2b76c..46578108a430 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/head.c +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c @@ -83,18 +83,20 @@ nv50_head_atomic_check_dither(struct nv50_head_atom *armh, { u32 mode = 0x00; - if (asyc->dither.mode == DITHERING_MODE_AUTO) { - if (asyh->base.depth > asyh->or.bpc * 3) - mode = DITHERING_MODE_DYNAMIC2X2; - } else { - mode = asyc->dither.mode; - } + if (asyc->dither.mode) { + if (asyc->dither.mode == DITHERING_MODE_AUTO) { + if (asyh->base.depth > asyh->or.bpc * 3) + mode = DITHERING_MODE_DYNAMIC2X2; + } else { + mode = asyc->dither.mode; + } - if (asyc->dither.depth == DITHERING_DEPTH_AUTO) { - if (asyh->or.bpc >= 8) - mode |= DITHERING_DEPTH_8BPC; - } else { - mode |= asyc->dither.depth; + if (asyc->dither.depth == DITHERING_DEPTH_AUTO) { + if (asyh->or.bpc >= 8) + mode |= DITHERING_DEPTH_8BPC; + } else { + mode |= asyc->dither.depth; + } } asyh->dither.enable = mode; From 274f4e9c575ab6032cf2318839b5a5af1d8c31f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Ca=C3=B1uelo?= Date: Mon, 1 Jun 2020 08:33:06 +0200 Subject: [PATCH 061/448] arm64: dts: hisilicon: hikey: fixes to comply with adi, adv7533 DT binding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit bbe28fc3cbabbef781bcdf847615d52ce2e26e42 ] hi3660-hikey960.dts: Define a 'ports' node for 'adv7533: adv7533@39' and the 'adi,dsi-lanes' property to make it compliant with the adi,adv7533 DT binding. This fills the requirements to meet the binding requirements, remote endpoints are not defined. hi6220-hikey.dts: Change property name s/pd-gpio/pd-gpios, gpio properties should be plural. This is just a cosmetic change. Signed-off-by: Ricardo Cañuelo Acked-by: Laurent Pinchart Signed-off-by: Wei Xu Signed-off-by: Sasha Levin --- arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts | 11 +++++++++++ arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts index e035cf195b19..8c4bfbaf3a80 100644 --- a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts +++ b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts @@ -530,6 +530,17 @@ status = "ok"; compatible = "adi,adv7533"; reg = <0x39>; + adi,dsi-lanes = <4>; + ports { + #address-cells = <1>; + #size-cells = <0>; + port@0 { + reg = <0>; + }; + port@1 { + reg = <1>; + }; + }; }; }; diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts index c14205cd6bf5..3e47150c05ec 100644 --- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts @@ -516,7 +516,7 @@ reg = <0x39>; interrupt-parent = <&gpio1>; interrupts = <1 2>; - pd-gpio = <&gpio0 4 0>; + pd-gpios = <&gpio0 4 0>; adi,dsi-lanes = <4>; #sound-dai-cells = <0>; From 20e7c445606967ed9c45f68c16da0adc8359f362 Mon Sep 17 00:00:00 2001 From: Navid Emamdoost Date: Mon, 15 Jun 2020 01:12:20 -0500 Subject: [PATCH 062/448] drm/etnaviv: fix ref count leak via pm_runtime_get_sync [ Upstream commit c5d5a32ead1e3a61a07a1e59eb52a53e4a6b2a7f ] in etnaviv_gpu_submit, etnaviv_gpu_recover_hang, etnaviv_gpu_debugfs, and etnaviv_gpu_init the call to pm_runtime_get_sync increments the counter even in case of failure, leading to incorrect ref count. In case of failure, decrement the ref count before returning. Signed-off-by: Navid Emamdoost Signed-off-by: Lucas Stach Signed-off-by: Sasha Levin --- drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index d47d1a8e0219..8a26ea2a5334 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -713,7 +713,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) ret = pm_runtime_get_sync(gpu->dev); if (ret < 0) { dev_err(gpu->dev, "Failed to enable GPU power domain\n"); - return ret; + goto pm_put; } etnaviv_hw_identify(gpu); @@ -802,6 +802,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) fail: pm_runtime_mark_last_busy(gpu->dev); +pm_put: pm_runtime_put_autosuspend(gpu->dev); return ret; @@ -842,7 +843,7 @@ int etnaviv_gpu_debugfs(struct etnaviv_gpu *gpu, struct seq_file *m) ret = pm_runtime_get_sync(gpu->dev); if (ret < 0) - return ret; + goto pm_put; dma_lo = gpu_read(gpu, VIVS_FE_DMA_LOW); dma_hi = gpu_read(gpu, VIVS_FE_DMA_HIGH); @@ -965,6 +966,7 @@ int etnaviv_gpu_debugfs(struct etnaviv_gpu *gpu, struct seq_file *m) ret = 0; pm_runtime_mark_last_busy(gpu->dev); +pm_put: pm_runtime_put_autosuspend(gpu->dev); return ret; @@ -978,7 +980,7 @@ void etnaviv_gpu_recover_hang(struct etnaviv_gpu *gpu) dev_err(gpu->dev, "recover hung GPU!\n"); if (pm_runtime_get_sync(gpu->dev) < 0) - return; + goto pm_put; mutex_lock(&gpu->lock); @@ -997,6 +999,7 @@ void etnaviv_gpu_recover_hang(struct etnaviv_gpu *gpu) mutex_unlock(&gpu->lock); pm_runtime_mark_last_busy(gpu->dev); +pm_put: pm_runtime_put_autosuspend(gpu->dev); } @@ -1269,8 +1272,10 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit) if (!submit->runtime_resumed) { ret = pm_runtime_get_sync(gpu->dev); - if (ret < 0) + if (ret < 0) { + pm_runtime_put_noidle(gpu->dev); return NULL; + } submit->runtime_resumed = true; } @@ -1287,6 +1292,7 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit) ret = event_alloc(gpu, nr_events, event); if (ret) { DRM_ERROR("no free events\n"); + pm_runtime_put_noidle(gpu->dev); return NULL; } From db0a2e4857dd8a0235091e3c753e356f2291bd56 Mon Sep 17 00:00:00 2001 From: Aditya Pakki Date: Sat, 13 Jun 2020 20:48:37 -0500 Subject: [PATCH 063/448] drm/nouveau: fix reference count leak in nouveau_debugfs_strap_peek [ Upstream commit 8f29432417b11039ef960ab18987c7d61b2b5396 ] nouveau_debugfs_strap_peek() calls pm_runtime_get_sync() that increments the reference count. In case of failure, decrement the ref count before returning the error. Signed-off-by: Aditya Pakki Signed-off-by: Ben Skeggs Signed-off-by: Sasha Levin --- drivers/gpu/drm/nouveau/nouveau_debugfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c index 7dfbbbc1beea..5c314f135dd1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c @@ -54,8 +54,10 @@ nouveau_debugfs_strap_peek(struct seq_file *m, void *data) int ret; ret = pm_runtime_get_sync(drm->dev->dev); - if (ret < 0 && ret != -EACCES) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_autosuspend(drm->dev->dev); return ret; + } seq_printf(m, "0x%08x\n", nvif_rd32(&drm->client.device.object, 0x101000)); From 3b69bcd45426f24e38e2f20ec0f40d0730368c6e Mon Sep 17 00:00:00 2001 From: Aditya Pakki Date: Sat, 13 Jun 2020 20:41:56 -0500 Subject: [PATCH 064/448] drm/nouveau: fix multiple instances of reference count leaks [ Upstream commit 659fb5f154c3434c90a34586f3b7aa1c39cf6062 ] On calling pm_runtime_get_sync() the reference count of the device is incremented. In case of failure, decrement the ref count before returning the error. Signed-off-by: Aditya Pakki Signed-off-by: Ben Skeggs Signed-off-by: Sasha Levin --- drivers/gpu/drm/nouveau/nouveau_drm.c | 8 ++++++-- drivers/gpu/drm/nouveau/nouveau_gem.c | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index b1beed40e746..5347e5bdee8c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -1052,8 +1052,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv) /* need to bring up power immediately if opening device */ ret = pm_runtime_get_sync(dev->dev); - if (ret < 0 && ret != -EACCES) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_autosuspend(dev->dev); return ret; + } get_task_comm(tmpname, current); snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid)); @@ -1135,8 +1137,10 @@ nouveau_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) long ret; ret = pm_runtime_get_sync(dev->dev); - if (ret < 0 && ret != -EACCES) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_autosuspend(dev->dev); return ret; + } switch (_IOC_NR(cmd) - DRM_COMMAND_BASE) { case DRM_NOUVEAU_NVIF: diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 1324c19f4e5c..fbfe25422774 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -45,8 +45,10 @@ nouveau_gem_object_del(struct drm_gem_object *gem) int ret; ret = pm_runtime_get_sync(dev); - if (WARN_ON(ret < 0 && ret != -EACCES)) + if (WARN_ON(ret < 0 && ret != -EACCES)) { + pm_runtime_put_autosuspend(dev); return; + } if (gem->import_attach) drm_prime_gem_destroy(gem, nvbo->bo.sg); From 7795eb18ce7d5e9e4ab3ce81739dc084aba8fa6e Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Mon, 20 Jul 2020 15:11:41 +0900 Subject: [PATCH 065/448] mmc: sdhci-cadence: do not use hardware tuning for SD mode [ Upstream commit adc40a5179df30421a5537bfeb4545100ab97d5e ] As commit ef6b75671b5f ("mmc: sdhci-cadence: send tune request twice to work around errata") stated, this IP has an errata. This commit applies the second workaround for the SD mode. Due to the errata, it is not possible to use the hardware tuning provided by SDHCI_HOST_CONTROL2. Use the software-controlled tuning like the eMMC mode. Set sdhci_host_ops::platform_execute_tuning instead of overriding mmc_host_ops::execute_tuning. Signed-off-by: Masahiro Yamada Link: https://lore.kernel.org/r/20200720061141.172944-1-yamada.masahiro@socionext.com Signed-off-by: Ulf Hansson Signed-off-by: Sasha Levin --- drivers/mmc/host/sdhci-cadence.c | 147 ++++++++++++++++--------------- 1 file changed, 74 insertions(+), 73 deletions(-) diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c index 5f2e9696ee4d..0c2489446bd7 100644 --- a/drivers/mmc/host/sdhci-cadence.c +++ b/drivers/mmc/host/sdhci-cadence.c @@ -194,6 +194,79 @@ static u32 sdhci_cdns_get_emmc_mode(struct sdhci_cdns_priv *priv) return FIELD_GET(SDHCI_CDNS_HRS06_MODE, tmp); } +static int sdhci_cdns_set_tune_val(struct sdhci_host *host, unsigned int val) +{ + struct sdhci_cdns_priv *priv = sdhci_cdns_priv(host); + void __iomem *reg = priv->hrs_addr + SDHCI_CDNS_HRS06; + u32 tmp; + int i, ret; + + if (WARN_ON(!FIELD_FIT(SDHCI_CDNS_HRS06_TUNE, val))) + return -EINVAL; + + tmp = readl(reg); + tmp &= ~SDHCI_CDNS_HRS06_TUNE; + tmp |= FIELD_PREP(SDHCI_CDNS_HRS06_TUNE, val); + + /* + * Workaround for IP errata: + * The IP6116 SD/eMMC PHY design has a timing issue on receive data + * path. Send tune request twice. + */ + for (i = 0; i < 2; i++) { + tmp |= SDHCI_CDNS_HRS06_TUNE_UP; + writel(tmp, reg); + + ret = readl_poll_timeout(reg, tmp, + !(tmp & SDHCI_CDNS_HRS06_TUNE_UP), + 0, 1); + if (ret) + return ret; + } + + return 0; +} + +/* + * In SD mode, software must not use the hardware tuning and instead perform + * an almost identical procedure to eMMC. + */ +static int sdhci_cdns_execute_tuning(struct sdhci_host *host, u32 opcode) +{ + int cur_streak = 0; + int max_streak = 0; + int end_of_streak = 0; + int i; + + /* + * Do not execute tuning for UHS_SDR50 or UHS_DDR50. + * The delay is set by probe, based on the DT properties. + */ + if (host->timing != MMC_TIMING_MMC_HS200 && + host->timing != MMC_TIMING_UHS_SDR104) + return 0; + + for (i = 0; i < SDHCI_CDNS_MAX_TUNING_LOOP; i++) { + if (sdhci_cdns_set_tune_val(host, i) || + mmc_send_tuning(host->mmc, opcode, NULL)) { /* bad */ + cur_streak = 0; + } else { /* good */ + cur_streak++; + if (cur_streak > max_streak) { + max_streak = cur_streak; + end_of_streak = i; + } + } + } + + if (!max_streak) { + dev_err(mmc_dev(host->mmc), "no tuning point found\n"); + return -EIO; + } + + return sdhci_cdns_set_tune_val(host, end_of_streak - max_streak / 2); +} + static void sdhci_cdns_set_uhs_signaling(struct sdhci_host *host, unsigned int timing) { @@ -233,6 +306,7 @@ static const struct sdhci_ops sdhci_cdns_ops = { .get_timeout_clock = sdhci_cdns_get_timeout_clock, .set_bus_width = sdhci_set_bus_width, .reset = sdhci_reset, + .platform_execute_tuning = sdhci_cdns_execute_tuning, .set_uhs_signaling = sdhci_cdns_set_uhs_signaling, }; @@ -245,78 +319,6 @@ static const struct sdhci_pltfm_data sdhci_cdns_pltfm_data = { .ops = &sdhci_cdns_ops, }; -static int sdhci_cdns_set_tune_val(struct sdhci_host *host, unsigned int val) -{ - struct sdhci_cdns_priv *priv = sdhci_cdns_priv(host); - void __iomem *reg = priv->hrs_addr + SDHCI_CDNS_HRS06; - u32 tmp; - int i, ret; - - if (WARN_ON(!FIELD_FIT(SDHCI_CDNS_HRS06_TUNE, val))) - return -EINVAL; - - tmp = readl(reg); - tmp &= ~SDHCI_CDNS_HRS06_TUNE; - tmp |= FIELD_PREP(SDHCI_CDNS_HRS06_TUNE, val); - - /* - * Workaround for IP errata: - * The IP6116 SD/eMMC PHY design has a timing issue on receive data - * path. Send tune request twice. - */ - for (i = 0; i < 2; i++) { - tmp |= SDHCI_CDNS_HRS06_TUNE_UP; - writel(tmp, reg); - - ret = readl_poll_timeout(reg, tmp, - !(tmp & SDHCI_CDNS_HRS06_TUNE_UP), - 0, 1); - if (ret) - return ret; - } - - return 0; -} - -static int sdhci_cdns_execute_tuning(struct mmc_host *mmc, u32 opcode) -{ - struct sdhci_host *host = mmc_priv(mmc); - int cur_streak = 0; - int max_streak = 0; - int end_of_streak = 0; - int i; - - /* - * This handler only implements the eMMC tuning that is specific to - * this controller. Fall back to the standard method for SD timing. - */ - if (host->timing != MMC_TIMING_MMC_HS200) - return sdhci_execute_tuning(mmc, opcode); - - if (WARN_ON(opcode != MMC_SEND_TUNING_BLOCK_HS200)) - return -EINVAL; - - for (i = 0; i < SDHCI_CDNS_MAX_TUNING_LOOP; i++) { - if (sdhci_cdns_set_tune_val(host, i) || - mmc_send_tuning(host->mmc, opcode, NULL)) { /* bad */ - cur_streak = 0; - } else { /* good */ - cur_streak++; - if (cur_streak > max_streak) { - max_streak = cur_streak; - end_of_streak = i; - } - } - } - - if (!max_streak) { - dev_err(mmc_dev(host->mmc), "no tuning point found\n"); - return -EIO; - } - - return sdhci_cdns_set_tune_val(host, end_of_streak - max_streak / 2); -} - static void sdhci_cdns_hs400_enhanced_strobe(struct mmc_host *mmc, struct mmc_ios *ios) { @@ -377,7 +379,6 @@ static int sdhci_cdns_probe(struct platform_device *pdev) priv->hrs_addr = host->ioaddr; priv->enhanced_strobe = false; host->ioaddr += SDHCI_CDNS_SRS_BASE; - host->mmc_host_ops.execute_tuning = sdhci_cdns_execute_tuning; host->mmc_host_ops.hs400_enhanced_strobe = sdhci_cdns_hs400_enhanced_strobe; sdhci_enable_v4_mode(host); From e633add66d1725c6a082a3fb3b34b07d8dcf02cf Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 17 Jul 2020 15:12:29 -0400 Subject: [PATCH 066/448] btrfs: fix lockdep splat from btrfs_dump_space_info [ Upstream commit ab0db043c35da3477e57d4d516492b2d51a5ca0f ] When running with -o enospc_debug you can get the following splat if one of the dump_space_info's trip ====================================================== WARNING: possible circular locking dependency detected 5.8.0-rc5+ #20 Tainted: G OE ------------------------------------------------------ dd/563090 is trying to acquire lock: ffff9e7dbf4f1e18 (&ctl->tree_lock){+.+.}-{2:2}, at: btrfs_dump_free_space+0x2b/0xa0 [btrfs] but task is already holding lock: ffff9e7e2284d428 (&cache->lock){+.+.}-{2:2}, at: btrfs_dump_space_info+0xaa/0x120 [btrfs] which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #3 (&cache->lock){+.+.}-{2:2}: _raw_spin_lock+0x25/0x30 btrfs_add_reserved_bytes+0x3c/0x3c0 [btrfs] find_free_extent+0x7ef/0x13b0 [btrfs] btrfs_reserve_extent+0x9b/0x180 [btrfs] btrfs_alloc_tree_block+0xc1/0x340 [btrfs] alloc_tree_block_no_bg_flush+0x4a/0x60 [btrfs] __btrfs_cow_block+0x122/0x530 [btrfs] btrfs_cow_block+0x106/0x210 [btrfs] commit_cowonly_roots+0x55/0x300 [btrfs] btrfs_commit_transaction+0x4ed/0xac0 [btrfs] sync_filesystem+0x74/0x90 generic_shutdown_super+0x22/0x100 kill_anon_super+0x14/0x30 btrfs_kill_super+0x12/0x20 [btrfs] deactivate_locked_super+0x36/0x70 cleanup_mnt+0x104/0x160 task_work_run+0x5f/0x90 __prepare_exit_to_usermode+0x1bd/0x1c0 do_syscall_64+0x5e/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #2 (&space_info->lock){+.+.}-{2:2}: _raw_spin_lock+0x25/0x30 btrfs_block_rsv_release+0x1a6/0x3f0 [btrfs] btrfs_inode_rsv_release+0x4f/0x170 [btrfs] btrfs_clear_delalloc_extent+0x155/0x480 [btrfs] clear_state_bit+0x81/0x1a0 [btrfs] __clear_extent_bit+0x25c/0x5d0 [btrfs] clear_extent_bit+0x15/0x20 [btrfs] btrfs_invalidatepage+0x2b7/0x3c0 [btrfs] truncate_cleanup_page+0x47/0xe0 truncate_inode_pages_range+0x238/0x840 truncate_pagecache+0x44/0x60 btrfs_setattr+0x202/0x5e0 [btrfs] notify_change+0x33b/0x490 do_truncate+0x76/0xd0 path_openat+0x687/0xa10 do_filp_open+0x91/0x100 do_sys_openat2+0x215/0x2d0 do_sys_open+0x44/0x80 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #1 (&tree->lock#2){+.+.}-{2:2}: _raw_spin_lock+0x25/0x30 find_first_extent_bit+0x32/0x150 [btrfs] write_pinned_extent_entries.isra.0+0xc5/0x100 [btrfs] __btrfs_write_out_cache+0x172/0x480 [btrfs] btrfs_write_out_cache+0x7a/0xf0 [btrfs] btrfs_write_dirty_block_groups+0x286/0x3b0 [btrfs] commit_cowonly_roots+0x245/0x300 [btrfs] btrfs_commit_transaction+0x4ed/0xac0 [btrfs] close_ctree+0xf9/0x2f5 [btrfs] generic_shutdown_super+0x6c/0x100 kill_anon_super+0x14/0x30 btrfs_kill_super+0x12/0x20 [btrfs] deactivate_locked_super+0x36/0x70 cleanup_mnt+0x104/0x160 task_work_run+0x5f/0x90 __prepare_exit_to_usermode+0x1bd/0x1c0 do_syscall_64+0x5e/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #0 (&ctl->tree_lock){+.+.}-{2:2}: __lock_acquire+0x1240/0x2460 lock_acquire+0xab/0x360 _raw_spin_lock+0x25/0x30 btrfs_dump_free_space+0x2b/0xa0 [btrfs] btrfs_dump_space_info+0xf4/0x120 [btrfs] btrfs_reserve_extent+0x176/0x180 [btrfs] __btrfs_prealloc_file_range+0x145/0x550 [btrfs] cache_save_setup+0x28d/0x3b0 [btrfs] btrfs_start_dirty_block_groups+0x1fc/0x4f0 [btrfs] btrfs_commit_transaction+0xcc/0xac0 [btrfs] btrfs_alloc_data_chunk_ondemand+0x162/0x4c0 [btrfs] btrfs_check_data_free_space+0x4c/0xa0 [btrfs] btrfs_buffered_write.isra.0+0x19b/0x740 [btrfs] btrfs_file_write_iter+0x3cf/0x610 [btrfs] new_sync_write+0x11e/0x1b0 vfs_write+0x1c9/0x200 ksys_write+0x68/0xe0 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 other info that might help us debug this: Chain exists of: &ctl->tree_lock --> &space_info->lock --> &cache->lock Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&cache->lock); lock(&space_info->lock); lock(&cache->lock); lock(&ctl->tree_lock); *** DEADLOCK *** 6 locks held by dd/563090: #0: ffff9e7e21d18448 (sb_writers#14){.+.+}-{0:0}, at: vfs_write+0x195/0x200 #1: ffff9e7dd0410ed8 (&sb->s_type->i_mutex_key#19){++++}-{3:3}, at: btrfs_file_write_iter+0x86/0x610 [btrfs] #2: ffff9e7e21d18638 (sb_internal#2){.+.+}-{0:0}, at: start_transaction+0x40b/0x5b0 [btrfs] #3: ffff9e7e1f05d688 (&cur_trans->cache_write_mutex){+.+.}-{3:3}, at: btrfs_start_dirty_block_groups+0x158/0x4f0 [btrfs] #4: ffff9e7e2284ddb8 (&space_info->groups_sem){++++}-{3:3}, at: btrfs_dump_space_info+0x69/0x120 [btrfs] #5: ffff9e7e2284d428 (&cache->lock){+.+.}-{2:2}, at: btrfs_dump_space_info+0xaa/0x120 [btrfs] stack backtrace: CPU: 3 PID: 563090 Comm: dd Tainted: G OE 5.8.0-rc5+ #20 Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./890FX Deluxe5, BIOS P1.40 05/03/2011 Call Trace: dump_stack+0x96/0xd0 check_noncircular+0x162/0x180 __lock_acquire+0x1240/0x2460 ? wake_up_klogd.part.0+0x30/0x40 lock_acquire+0xab/0x360 ? btrfs_dump_free_space+0x2b/0xa0 [btrfs] _raw_spin_lock+0x25/0x30 ? btrfs_dump_free_space+0x2b/0xa0 [btrfs] btrfs_dump_free_space+0x2b/0xa0 [btrfs] btrfs_dump_space_info+0xf4/0x120 [btrfs] btrfs_reserve_extent+0x176/0x180 [btrfs] __btrfs_prealloc_file_range+0x145/0x550 [btrfs] ? btrfs_qgroup_reserve_data+0x1d/0x60 [btrfs] cache_save_setup+0x28d/0x3b0 [btrfs] btrfs_start_dirty_block_groups+0x1fc/0x4f0 [btrfs] btrfs_commit_transaction+0xcc/0xac0 [btrfs] ? start_transaction+0xe0/0x5b0 [btrfs] btrfs_alloc_data_chunk_ondemand+0x162/0x4c0 [btrfs] btrfs_check_data_free_space+0x4c/0xa0 [btrfs] btrfs_buffered_write.isra.0+0x19b/0x740 [btrfs] ? ktime_get_coarse_real_ts64+0xa8/0xd0 ? trace_hardirqs_on+0x1c/0xe0 btrfs_file_write_iter+0x3cf/0x610 [btrfs] new_sync_write+0x11e/0x1b0 vfs_write+0x1c9/0x200 ksys_write+0x68/0xe0 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 This is because we're holding the block_group->lock while trying to dump the free space cache. However we don't need this lock, we just need it to read the values for the printk, so move the free space cache dumping outside of the block group lock. Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- fs/btrfs/space-info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 7889a59a57fa..6f484f0d347e 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -304,8 +304,8 @@ again: cache->key.objectid, cache->key.offset, btrfs_block_group_used(&cache->item), cache->pinned, cache->reserved, cache->ro ? "[readonly]" : ""); - btrfs_dump_free_space(cache, bytes); spin_unlock(&cache->lock); + btrfs_dump_free_space(cache, bytes); } if (++index < BTRFS_NR_RAID_TYPES) goto again; From 0e76c2ffb8f0bd347e749e1ada2ca64ac1ce75fe Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Mon, 27 Jul 2020 15:14:59 +0800 Subject: [PATCH 067/448] usb: mtu3: clear dual mode of u3port when disable device [ Upstream commit f1e51e99ed498d4aa9ae5df28e43d558ea627781 ] If not clear u3port's dual mode when disable device, the IP will fail to enter sleep mode when suspend. Signed-off-by: Chunfeng Yun Link: https://lore.kernel.org/r/1595834101-13094-10-git-send-email-chunfeng.yun@mediatek.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/usb/mtu3/mtu3_core.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c index 9dd02160cca9..e3780d4d6514 100644 --- a/drivers/usb/mtu3/mtu3_core.c +++ b/drivers/usb/mtu3/mtu3_core.c @@ -131,8 +131,12 @@ static void mtu3_device_disable(struct mtu3 *mtu) mtu3_setbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_DIS | SSUSB_U2_PORT_PDN); - if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG) + if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG) { mtu3_clrbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL); + if (mtu->is_u3_ip) + mtu3_clrbits(ibase, SSUSB_U3_CTRL(0), + SSUSB_U3_PORT_DUAL_MODE); + } mtu3_setbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN); } From fae8ff2dfd8d233188c9beefeb0840a3083a4584 Mon Sep 17 00:00:00 2001 From: Akhil P Oommen Date: Fri, 17 Jul 2020 20:04:18 +0530 Subject: [PATCH 068/448] drm: msm: a6xx: fix gpu failure after system resume [ Upstream commit 57c0bd517c06b088106b0236ed604056c8e06da5 ] On targets where GMU is available, GMU takes over the ownership of GX GDSC during its initialization. So, move the refcount-get on GX PD before we initialize the GMU. This ensures that nobody can collapse the GX GDSC once GMU owns the GX GDSC. This patch fixes some GMU OOB errors seen during GPU wake up during a system resume. Reported-by: Matthias Kaehlcke Signed-off-by: Akhil P Oommen Tested-by: Matthias Kaehlcke Reviewed-by: Jordan Crouse Signed-off-by: Rob Clark Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index e62b286947a7..9ea748667fab 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -713,10 +713,19 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) /* Turn on the resources */ pm_runtime_get_sync(gmu->dev); + /* + * "enable" the GX power domain which won't actually do anything but it + * will make sure that the refcounting is correct in case we need to + * bring down the GX after a GMU failure + */ + if (!IS_ERR_OR_NULL(gmu->gxpd)) + pm_runtime_get_sync(gmu->gxpd); + /* Use a known rate to bring up the GMU */ clk_set_rate(gmu->core_clk, 200000000); ret = clk_bulk_prepare_enable(gmu->nr_clocks, gmu->clocks); if (ret) { + pm_runtime_put(gmu->gxpd); pm_runtime_put(gmu->dev); return ret; } @@ -752,19 +761,12 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) /* Set the GPU to the highest power frequency */ __a6xx_gmu_set_freq(gmu, gmu->nr_gpu_freqs - 1); - /* - * "enable" the GX power domain which won't actually do anything but it - * will make sure that the refcounting is correct in case we need to - * bring down the GX after a GMU failure - */ - if (!IS_ERR_OR_NULL(gmu->gxpd)) - pm_runtime_get(gmu->gxpd); - out: /* On failure, shut down the GMU to leave it in a good state */ if (ret) { disable_irq(gmu->gmu_irq); a6xx_rpmh_stop(gmu); + pm_runtime_put(gmu->gxpd); pm_runtime_put(gmu->dev); } From df91fe834bd453fc2258021e3b2fb3ab90223eb8 Mon Sep 17 00:00:00 2001 From: Akhil P Oommen Date: Fri, 10 Jul 2020 02:01:55 +0530 Subject: [PATCH 069/448] drm/msm: Fix a null pointer access in msm_gem_shrinker_count() [ Upstream commit 3cbdc8d8b7f39a7af3ea7b8dfa75caaebfda4e56 ] Adding an msm_gem_object object to the inactive_list before completing its initialization is a bad idea because shrinker may pick it up from the inactive_list. Fix this by making sure that the initialization is complete before moving the msm_obj object to the inactive list. This patch fixes the below error: [10027.553044] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000068 [10027.573305] Mem abort info: [10027.590160] ESR = 0x96000006 [10027.597905] EC = 0x25: DABT (current EL), IL = 32 bits [10027.614430] SET = 0, FnV = 0 [10027.624427] EA = 0, S1PTW = 0 [10027.632722] Data abort info: [10027.638039] ISV = 0, ISS = 0x00000006 [10027.647459] CM = 0, WnR = 0 [10027.654345] user pgtable: 4k pages, 39-bit VAs, pgdp=00000001e3a6a000 [10027.672681] [0000000000000068] pgd=0000000198c31003, pud=0000000198c31003, pmd=0000000000000000 [10027.693900] Internal error: Oops: 96000006 [#1] PREEMPT SMP [10027.738261] CPU: 3 PID: 214 Comm: kswapd0 Tainted: G S 5.4.40 #1 [10027.745766] Hardware name: Qualcomm Technologies, Inc. SC7180 IDP (DT) [10027.752472] pstate: 80c00009 (Nzcv daif +PAN +UAO) [10027.757409] pc : mutex_is_locked+0x14/0x2c [10027.761626] lr : msm_gem_shrinker_count+0x70/0xec [10027.766454] sp : ffffffc011323ad0 [10027.769867] x29: ffffffc011323ad0 x28: ffffffe677e4b878 [10027.775324] x27: 0000000000000cc0 x26: 0000000000000000 [10027.780783] x25: ffffff817114a708 x24: 0000000000000008 [10027.786242] x23: ffffff8023ab7170 x22: 0000000000000001 [10027.791701] x21: ffffff817114a080 x20: 0000000000000119 [10027.797160] x19: 0000000000000068 x18: 00000000000003bc [10027.802621] x17: 0000000004a34210 x16: 00000000000000c0 [10027.808083] x15: 0000000000000000 x14: 0000000000000000 [10027.813542] x13: ffffffe677e0a3c0 x12: 0000000000000000 [10027.819000] x11: 0000000000000000 x10: ffffff8174b94340 [10027.824461] x9 : 0000000000000000 x8 : 0000000000000000 [10027.829919] x7 : 00000000000001fc x6 : ffffffc011323c88 [10027.835373] x5 : 0000000000000001 x4 : ffffffc011323d80 [10027.840832] x3 : ffffffff0477b348 x2 : 0000000000000000 [10027.846290] x1 : ffffffc011323b68 x0 : 0000000000000068 [10027.851748] Call trace: [10027.854264] mutex_is_locked+0x14/0x2c [10027.858121] msm_gem_shrinker_count+0x70/0xec [10027.862603] shrink_slab+0xc0/0x4b4 [10027.866187] shrink_node+0x4a8/0x818 [10027.869860] kswapd+0x624/0x890 [10027.873097] kthread+0x11c/0x12c [10027.876424] ret_from_fork+0x10/0x18 [10027.880102] Code: f9000bf3 910003fd aa0003f3 d503201f (f9400268) [10027.886362] ---[ end trace df5849a1a3543251 ]--- [10027.891518] Kernel panic - not syncing: Fatal exception Signed-off-by: Akhil P Oommen Signed-off-by: Rob Clark Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/msm_gem.c | 36 ++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 5a6a79fbc9d6..d92a0ffe2a76 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -977,10 +977,8 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, static int msm_gem_new_impl(struct drm_device *dev, uint32_t size, uint32_t flags, - struct drm_gem_object **obj, - bool struct_mutex_locked) + struct drm_gem_object **obj) { - struct msm_drm_private *priv = dev->dev_private; struct msm_gem_object *msm_obj; switch (flags & MSM_BO_CACHE_MASK) { @@ -1006,15 +1004,6 @@ static int msm_gem_new_impl(struct drm_device *dev, INIT_LIST_HEAD(&msm_obj->submit_entry); INIT_LIST_HEAD(&msm_obj->vmas); - if (struct_mutex_locked) { - WARN_ON(!mutex_is_locked(&dev->struct_mutex)); - list_add_tail(&msm_obj->mm_list, &priv->inactive_list); - } else { - mutex_lock(&dev->struct_mutex); - list_add_tail(&msm_obj->mm_list, &priv->inactive_list); - mutex_unlock(&dev->struct_mutex); - } - *obj = &msm_obj->base; return 0; @@ -1024,6 +1013,7 @@ static struct drm_gem_object *_msm_gem_new(struct drm_device *dev, uint32_t size, uint32_t flags, bool struct_mutex_locked) { struct msm_drm_private *priv = dev->dev_private; + struct msm_gem_object *msm_obj; struct drm_gem_object *obj = NULL; bool use_vram = false; int ret; @@ -1044,14 +1034,15 @@ static struct drm_gem_object *_msm_gem_new(struct drm_device *dev, if (size == 0) return ERR_PTR(-EINVAL); - ret = msm_gem_new_impl(dev, size, flags, &obj, struct_mutex_locked); + ret = msm_gem_new_impl(dev, size, flags, &obj); if (ret) goto fail; + msm_obj = to_msm_bo(obj); + if (use_vram) { struct msm_gem_vma *vma; struct page **pages; - struct msm_gem_object *msm_obj = to_msm_bo(obj); mutex_lock(&msm_obj->lock); @@ -1086,6 +1077,15 @@ static struct drm_gem_object *_msm_gem_new(struct drm_device *dev, mapping_set_gfp_mask(obj->filp->f_mapping, GFP_HIGHUSER); } + if (struct_mutex_locked) { + WARN_ON(!mutex_is_locked(&dev->struct_mutex)); + list_add_tail(&msm_obj->mm_list, &priv->inactive_list); + } else { + mutex_lock(&dev->struct_mutex); + list_add_tail(&msm_obj->mm_list, &priv->inactive_list); + mutex_unlock(&dev->struct_mutex); + } + return obj; fail: @@ -1108,6 +1108,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, struct drm_gem_object *msm_gem_import(struct drm_device *dev, struct dma_buf *dmabuf, struct sg_table *sgt) { + struct msm_drm_private *priv = dev->dev_private; struct msm_gem_object *msm_obj; struct drm_gem_object *obj; uint32_t size; @@ -1121,7 +1122,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev, size = PAGE_ALIGN(dmabuf->size); - ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj, false); + ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); if (ret) goto fail; @@ -1146,6 +1147,11 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev, } mutex_unlock(&msm_obj->lock); + + mutex_lock(&dev->struct_mutex); + list_add_tail(&msm_obj->mm_list, &priv->inactive_list); + mutex_unlock(&dev->struct_mutex); + return obj; fail: From 238e32468e0df0206cb5431aa2b72d733591e89c Mon Sep 17 00:00:00 2001 From: Michael Tretter Date: Thu, 17 Aug 2017 12:43:07 +0200 Subject: [PATCH 070/448] drm/debugfs: fix plain echo to connector "force" attribute [ Upstream commit c704b17071c4dc571dca3af4e4151dac51de081a ] Using plain echo to set the "force" connector attribute fails with -EINVAL, because echo appends a newline to the output. Replace strcmp with sysfs_streq to also accept strings that end with a newline. v2: use sysfs_streq instead of stripping trailing whitespace Signed-off-by: Michael Tretter Reviewed-by: Jani Nikula Signed-off-by: Emil Velikov Link: https://patchwork.freedesktop.org/patch/msgid/20170817104307.17124-1-m.tretter@pengutronix.de Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_debugfs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c index eab0f2687cd6..00debd02c322 100644 --- a/drivers/gpu/drm/drm_debugfs.c +++ b/drivers/gpu/drm/drm_debugfs.c @@ -337,13 +337,13 @@ static ssize_t connector_write(struct file *file, const char __user *ubuf, buf[len] = '\0'; - if (!strcmp(buf, "on")) + if (sysfs_streq(buf, "on")) connector->force = DRM_FORCE_ON; - else if (!strcmp(buf, "digital")) + else if (sysfs_streq(buf, "digital")) connector->force = DRM_FORCE_ON_DIGITAL; - else if (!strcmp(buf, "off")) + else if (sysfs_streq(buf, "off")) connector->force = DRM_FORCE_OFF; - else if (!strcmp(buf, "unspecified")) + else if (sysfs_streq(buf, "unspecified")) connector->force = DRM_FORCE_UNSPECIFIED; else return -EINVAL; From d17931fbe9dd9bbac435a028bd72e6855aeb4bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Tue, 12 May 2020 10:55:58 +0200 Subject: [PATCH 071/448] drm/radeon: disable AGP by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit ba806f98f868ce107aa9c453fef751de9980e4af ] Always use the PCI GART instead. We just have to many cases where AGP still causes problems. This means a performance regression for some GPUs, but also a bug fix for some others. Signed-off-by: Christian König Reviewed-by: Alex Deucher Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/radeon/radeon_drv.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 7d417b9a5250..c2573096d43c 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c @@ -174,12 +174,7 @@ int radeon_no_wb; int radeon_modeset = -1; int radeon_dynclks = -1; int radeon_r4xx_atom = 0; -#ifdef __powerpc__ -/* Default to PCI on PowerPC (fdo #95017) */ int radeon_agpmode = -1; -#else -int radeon_agpmode = 0; -#endif int radeon_vram_limit = 0; int radeon_gart_size = -1; /* auto */ int radeon_benchmarking = 0; From ae3033d3859691136642ca01e8fdae2a05ffcd3c Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Mon, 15 Jun 2020 09:44:45 +0200 Subject: [PATCH 072/448] irqchip/irq-mtk-sysirq: Replace spinlock with raw_spinlock [ Upstream commit 6eeb997ab5075e770a002c51351fa4ec2c6b5c39 ] This driver may take a regular spinlock when a raw spinlock (irq_desc->lock) is already taken which results in the following lockdep splat: ============================= [ BUG: Invalid wait context ] 5.7.0-rc7 #1 Not tainted ----------------------------- swapper/0/0 is trying to lock: ffffff800303b798 (&chip_data->lock){....}-{3:3}, at: mtk_sysirq_set_type+0x48/0xc0 other info that might help us debug this: context-{5:5} 2 locks held by swapper/0/0: #0: ffffff800302ee68 (&desc->request_mutex){....}-{4:4}, at: __setup_irq+0xc4/0x8a0 #1: ffffff800302ecf0 (&irq_desc_lock_class){....}-{2:2}, at: __setup_irq+0xe4/0x8a0 stack backtrace: CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.7.0-rc7 #1 Hardware name: Pumpkin MT8516 (DT) Call trace: dump_backtrace+0x0/0x180 show_stack+0x14/0x20 dump_stack+0xd0/0x118 __lock_acquire+0x8c8/0x2270 lock_acquire+0xf8/0x470 _raw_spin_lock_irqsave+0x50/0x78 mtk_sysirq_set_type+0x48/0xc0 __irq_set_trigger+0x58/0x170 __setup_irq+0x420/0x8a0 request_threaded_irq+0xd8/0x190 timer_of_init+0x1e8/0x2c4 mtk_gpt_init+0x5c/0x1dc timer_probe+0x74/0xf4 time_init+0x14/0x44 start_kernel+0x394/0x4f0 Replace the spinlock_t with raw_spinlock_t to avoid this warning. Signed-off-by: Bartosz Golaszewski Signed-off-by: Marc Zyngier Link: https://lore.kernel.org/r/20200615074445.3579-1-brgl@bgdev.pl Signed-off-by: Sasha Levin --- drivers/irqchip/irq-mtk-sysirq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/irqchip/irq-mtk-sysirq.c b/drivers/irqchip/irq-mtk-sysirq.c index 73eae5966a40..6ff98b87e5c0 100644 --- a/drivers/irqchip/irq-mtk-sysirq.c +++ b/drivers/irqchip/irq-mtk-sysirq.c @@ -15,7 +15,7 @@ #include struct mtk_sysirq_chip_data { - spinlock_t lock; + raw_spinlock_t lock; u32 nr_intpol_bases; void __iomem **intpol_bases; u32 *intpol_words; @@ -37,7 +37,7 @@ static int mtk_sysirq_set_type(struct irq_data *data, unsigned int type) reg_index = chip_data->which_word[hwirq]; offset = hwirq & 0x1f; - spin_lock_irqsave(&chip_data->lock, flags); + raw_spin_lock_irqsave(&chip_data->lock, flags); value = readl_relaxed(base + reg_index * 4); if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_EDGE_FALLING) { if (type == IRQ_TYPE_LEVEL_LOW) @@ -53,7 +53,7 @@ static int mtk_sysirq_set_type(struct irq_data *data, unsigned int type) data = data->parent_data; ret = data->chip->irq_set_type(data, type); - spin_unlock_irqrestore(&chip_data->lock, flags); + raw_spin_unlock_irqrestore(&chip_data->lock, flags); return ret; } @@ -212,7 +212,7 @@ static int __init mtk_sysirq_of_init(struct device_node *node, ret = -ENOMEM; goto out_free_which_word; } - spin_lock_init(&chip_data->lock); + raw_spin_lock_init(&chip_data->lock); return 0; From 87834546ea2c9d9e2e3dbf10a1f3d27b05a94218 Mon Sep 17 00:00:00 2001 From: "Paul E. McKenney" Date: Thu, 16 Apr 2020 16:46:10 -0700 Subject: [PATCH 073/448] mm/mmap.c: Add cond_resched() for exit_mmap() CPU stalls [ Upstream commit 0a3b3c253a1eb2c7fe7f34086d46660c909abeb3 ] A large process running on a heavily loaded system can encounter the following RCU CPU stall warning: rcu: INFO: rcu_sched self-detected stall on CPU rcu: 3-....: (20998 ticks this GP) idle=4ea/1/0x4000000000000002 softirq=556558/556558 fqs=5190 (t=21013 jiffies g=1005461 q=132576) NMI backtrace for cpu 3 CPU: 3 PID: 501900 Comm: aio-free-ring-w Kdump: loaded Not tainted 5.2.9-108_fbk12_rc3_3858_gb83b75af7909 #1 Hardware name: Wiwynn HoneyBadger/PantherPlus, BIOS HBM6.71 02/03/2016 Call Trace: dump_stack+0x46/0x60 nmi_cpu_backtrace.cold.3+0x13/0x50 ? lapic_can_unplug_cpu.cold.27+0x34/0x34 nmi_trigger_cpumask_backtrace+0xba/0xca rcu_dump_cpu_stacks+0x99/0xc7 rcu_sched_clock_irq.cold.87+0x1aa/0x397 ? tick_sched_do_timer+0x60/0x60 update_process_times+0x28/0x60 tick_sched_timer+0x37/0x70 __hrtimer_run_queues+0xfe/0x270 hrtimer_interrupt+0xf4/0x210 smp_apic_timer_interrupt+0x5e/0x120 apic_timer_interrupt+0xf/0x20 RIP: 0010:kmem_cache_free+0x223/0x300 Code: 88 00 00 00 0f 85 ca 00 00 00 41 8b 55 18 31 f6 f7 da 41 f6 45 0a 02 40 0f 94 c6 83 c6 05 9c 41 5e fa e8 a0 a7 01 00 41 56 9d <49> 8b 47 08 a8 03 0f 85 87 00 00 00 65 48 ff 08 e9 3d fe ff ff 65 RSP: 0018:ffffc9000e8e3da8 EFLAGS: 00000206 ORIG_RAX: ffffffffffffff13 RAX: 0000000000020000 RBX: ffff88861b9de960 RCX: 0000000000000030 RDX: fffffffffffe41e8 RSI: 000060777fe3a100 RDI: 000000000001be18 RBP: ffffea00186e7780 R08: ffffffffffffffff R09: ffffffffffffffff R10: ffff88861b9dea28 R11: ffff88887ffde000 R12: ffffffff81230a1f R13: ffff888854684dc0 R14: 0000000000000206 R15: ffff8888547dbc00 ? remove_vma+0x4f/0x60 remove_vma+0x4f/0x60 exit_mmap+0xd6/0x160 mmput+0x4a/0x110 do_exit+0x278/0xae0 ? syscall_trace_enter+0x1d3/0x2b0 ? handle_mm_fault+0xaa/0x1c0 do_group_exit+0x3a/0xa0 __x64_sys_exit_group+0x14/0x20 do_syscall_64+0x42/0x100 entry_SYSCALL_64_after_hwframe+0x44/0xa9 And on a PREEMPT=n kernel, the "while (vma)" loop in exit_mmap() can run for a very long time given a large process. This commit therefore adds a cond_resched() to this loop, providing RCU any needed quiescent states. Cc: Andrew Morton Cc: Reviewed-by: Shakeel Butt Reviewed-by: Joel Fernandes (Google) Signed-off-by: Paul E. McKenney Signed-off-by: Sasha Levin --- mm/mmap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/mmap.c b/mm/mmap.c index ea1ba2db4f4f..a3584a90c55c 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -3172,6 +3172,7 @@ void exit_mmap(struct mm_struct *mm) if (vma->vm_flags & VM_ACCOUNT) nr_accounted += vma_pages(vma); vma = remove_vma(vma); + cond_resched(); } vm_unacct_memory(nr_accounted); } From fae763f1357bceae0a41a5d02898bf1c968964eb Mon Sep 17 00:00:00 2001 From: Alex Deucher Date: Wed, 17 Jun 2020 16:33:47 -0400 Subject: [PATCH 074/448] drm/amdgpu/display bail early in dm_pp_get_static_clocks [ Upstream commit 376814f5fcf1aadda501d1413d56e8af85d19a97 ] If there are no supported callbacks. We'll fall back to the nominal clocks. Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1170 Reviewed-by: Evan Quan Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c index 785322cd4c6c..7241d4c20778 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c @@ -530,6 +530,8 @@ bool dm_pp_get_static_clocks( &pp_clk_info); else if (adev->smu.funcs) ret = smu_get_current_clocks(&adev->smu, &pp_clk_info); + else + return false; if (ret) return false; From 4360d9b560bde62984a202cd0f372306bbe8c638 Mon Sep 17 00:00:00 2001 From: Evan Quan Date: Sun, 28 Jun 2020 19:12:42 +0800 Subject: [PATCH 075/448] drm/amd/powerplay: fix compile error with ARCH=arc [ Upstream commit 9822ba2ead1baa3de4860ad9472f652c4cc78c9c ] Fix the compile error below: drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c: In function 'smu_v11_0_init_microcode': >> arch/arc/include/asm/bug.h:22:2: error: implicit declaration of function 'pr_warn'; did you mean 'pci_warn'? [-Werror=implicit-function-declaration] 22 | pr_warn("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ | ^~~~~~~ drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:176:3: note: in expansion of macro 'BUG' 176 | BUG(); Reported-by: kernel test robot Signed-off-by: Evan Quan Acked-by: Alex Deucher Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c index 0922d9cd858a..c4d8c52c6b9c 100644 --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c @@ -171,7 +171,8 @@ static int smu_v11_0_init_microcode(struct smu_context *smu) chip_name = "navi12"; break; default: - BUG(); + dev_err(adev->dev, "Unsupported ASIC type %d\n", adev->asic_type); + return -EINVAL; } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_smc.bin", chip_name); From 5908a17b247ddafe19470f7413c86f277ebe7195 Mon Sep 17 00:00:00 2001 From: Wenbo Zhang Date: Fri, 10 Jul 2020 05:20:35 -0400 Subject: [PATCH 076/448] bpf: Fix fds_example SIGSEGV error [ Upstream commit eef8a42d6ce087d1c81c960ae0d14f955b742feb ] The `BPF_LOG_BUF_SIZE`'s value is `UINT32_MAX >> 8`, so define an array with it on stack caused an overflow. Signed-off-by: Wenbo Zhang Signed-off-by: Daniel Borkmann Acked-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/20200710092035.28919-1-ethercflow@gmail.com Signed-off-by: Sasha Levin --- samples/bpf/fds_example.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/bpf/fds_example.c b/samples/bpf/fds_example.c index 2d4b717726b6..34b3fca788e8 100644 --- a/samples/bpf/fds_example.c +++ b/samples/bpf/fds_example.c @@ -30,6 +30,8 @@ #define BPF_M_MAP 1 #define BPF_M_PROG 2 +char bpf_log_buf[BPF_LOG_BUF_SIZE]; + static void usage(void) { printf("Usage: fds_example [...]\n"); @@ -57,7 +59,6 @@ static int bpf_prog_create(const char *object) BPF_EXIT_INSN(), }; size_t insns_cnt = sizeof(insns) / sizeof(struct bpf_insn); - char bpf_log_buf[BPF_LOG_BUF_SIZE]; struct bpf_object *obj; int prog_fd; From 29dd5e5309b1ec1c9ef42b3de07f4de1473e23cd Mon Sep 17 00:00:00 2001 From: Wright Feng Date: Thu, 4 Jun 2020 02:18:33 -0500 Subject: [PATCH 077/448] brcmfmac: keep SDIO watchdog running when console_interval is non-zero [ Upstream commit eccbf46b15bb3e35d004148f7c3a8fa8e9b26c1e ] brcmfmac host driver makes SDIO bus sleep and stops SDIO watchdog if no pending event or data. As a result, host driver does not poll firmware console buffer before buffer overflow, which leads to missing firmware logs. We should not stop SDIO watchdog if console_interval is non-zero in debug build. Signed-off-by: Wright Feng Signed-off-by: Chi-hsien Lin Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200604071835.3842-4-wright.feng@cypress.com Signed-off-by: Sasha Levin --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index d43247a95ce5..38e6809f16c7 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -3685,7 +3685,11 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus) if (bus->idlecount > bus->idletime) { brcmf_dbg(SDIO, "idle\n"); sdio_claim_host(bus->sdiodev->func1); - brcmf_sdio_wd_timer(bus, false); +#ifdef DEBUG + if (!BRCMF_FWCON_ON() || + bus->console_interval == 0) +#endif + brcmf_sdio_wd_timer(bus, false); bus->idlecount = 0; brcmf_sdio_bus_sleep(bus, true, false); sdio_release_host(bus->sdiodev->func1); From 1c53aefa2866dd5d62d9d0ab5bd096ab197aa54b Mon Sep 17 00:00:00 2001 From: Prasanna Kerekoppa Date: Thu, 4 Jun 2020 02:18:35 -0500 Subject: [PATCH 078/448] brcmfmac: To fix Bss Info flag definition Bug [ Upstream commit fa3266541b13f390eb35bdbc38ff4a03368be004 ] Bss info flag definition need to be fixed from 0x2 to 0x4 This flag is for rssi info received on channel. All Firmware branches defined as 0x4 and this is bug in brcmfmac. Signed-off-by: Prasanna Kerekoppa Signed-off-by: Chi-hsien Lin Signed-off-by: Wright Feng Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200604071835.3842-6-wright.feng@cypress.com Signed-off-by: Sasha Levin --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h index 37c512036e0e..ce18433aaefb 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h @@ -19,7 +19,7 @@ #define BRCMF_ARP_OL_PEER_AUTO_REPLY 0x00000008 #define BRCMF_BSS_INFO_VERSION 109 /* curr ver of brcmf_bss_info_le struct */ -#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0002 +#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0004 #define BRCMF_STA_BRCM 0x00000001 /* Running a Broadcom driver */ #define BRCMF_STA_WME 0x00000002 /* WMM association */ From ce3ae44103ca55735941cc95be540c02447dcdcf Mon Sep 17 00:00:00 2001 From: Wright Feng Date: Wed, 24 Jun 2020 04:16:07 -0500 Subject: [PATCH 079/448] brcmfmac: set state of hanger slot to FREE when flushing PSQ [ Upstream commit fcdd7a875def793c38d7369633af3eba6c7cf089 ] When USB or SDIO device got abnormal bus disconnection, host driver tried to clean up the skbs in PSQ and TXQ (The skb's pointer in hanger slot linked to PSQ and TSQ), so we should set the state of skb hanger slot to BRCMF_FWS_HANGER_ITEM_STATE_FREE before freeing skb. In brcmf_fws_bus_txq_cleanup it already sets BRCMF_FWS_HANGER_ITEM_STATE_FREE before freeing skb, therefore we add the same thing in brcmf_fws_psq_flush to avoid following warning message. [ 1580.012880] ------------ [ cut here ]------------ [ 1580.017550] WARNING: CPU: 3 PID: 3065 at drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c:49 brcmu_pkt_buf_free_skb+0x21/0x30 [brcmutil] [ 1580.184017] Call Trace: [ 1580.186514] brcmf_fws_cleanup+0x14e/0x190 [brcmfmac] [ 1580.191594] brcmf_fws_del_interface+0x70/0x90 [brcmfmac] [ 1580.197029] brcmf_proto_bcdc_del_if+0xe/0x10 [brcmfmac] [ 1580.202418] brcmf_remove_interface+0x69/0x190 [brcmfmac] [ 1580.207888] brcmf_detach+0x90/0xe0 [brcmfmac] [ 1580.212385] brcmf_usb_disconnect+0x76/0xb0 [brcmfmac] [ 1580.217557] usb_unbind_interface+0x72/0x260 [ 1580.221857] device_release_driver_internal+0x141/0x200 [ 1580.227152] device_release_driver+0x12/0x20 [ 1580.231460] bus_remove_device+0xfd/0x170 [ 1580.235504] device_del+0x1d9/0x300 [ 1580.239041] usb_disable_device+0x9e/0x270 [ 1580.243160] usb_disconnect+0x94/0x270 [ 1580.246980] hub_event+0x76d/0x13b0 [ 1580.250499] process_one_work+0x144/0x360 [ 1580.254564] worker_thread+0x4d/0x3c0 [ 1580.258247] kthread+0x109/0x140 [ 1580.261515] ? rescuer_thread+0x340/0x340 [ 1580.265543] ? kthread_park+0x60/0x60 [ 1580.269237] ? SyS_exit_group+0x14/0x20 [ 1580.273118] ret_from_fork+0x25/0x30 [ 1580.300446] ------------ [ cut here ]------------ Acked-by: Arend van Spriel Signed-off-by: Wright Feng Signed-off-by: Chi-hsien Lin Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200624091608.25154-2-wright.feng@cypress.com Signed-off-by: Sasha Levin --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c index 2bd892df83cc..eadc64454839 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c @@ -643,6 +643,7 @@ static inline int brcmf_fws_hanger_poppkt(struct brcmf_fws_hanger *h, static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q, int ifidx) { + struct brcmf_fws_hanger_item *hi; bool (*matchfn)(struct sk_buff *, void *) = NULL; struct sk_buff *skb; int prec; @@ -654,6 +655,9 @@ static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q, skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx); while (skb) { hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT); + hi = &fws->hanger.items[hslot]; + WARN_ON(skb != hi->pkt); + hi->state = BRCMF_FWS_HANGER_ITEM_STATE_FREE; brcmf_fws_hanger_poppkt(&fws->hanger, hslot, &skb, true); brcmu_pkt_buf_free_skb(skb); From ef62e5411db29944a2d5642f8cde1240a71e796b Mon Sep 17 00:00:00 2001 From: Armas Spann Date: Sat, 11 Jul 2020 11:43:21 +0200 Subject: [PATCH 080/448] platform/x86: asus-nb-wmi: add support for ASUS ROG Zephyrus G14 and G15 [ Upstream commit 13bceda68fb9ef388ad40d355ab8d03ee64d14c2 ] Add device support for the new ASUS ROG Zephyrus G14 (GA401I) and G15 (GA502I) series. This is accomplished by two new quirk entries (one per each series), as well as all current available G401I/G502I DMI_PRODUCT_NAMEs to match the corresponding devices. Signed-off-by: Armas Spann Signed-off-by: Andy Shevchenko Signed-off-by: Sasha Levin --- drivers/platform/x86/asus-nb-wmi.c | 82 ++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c index 0d42477946f3..59b78a181723 100644 --- a/drivers/platform/x86/asus-nb-wmi.c +++ b/drivers/platform/x86/asus-nb-wmi.c @@ -110,6 +110,16 @@ static struct quirk_entry quirk_asus_forceals = { .wmi_force_als_set = true, }; +static struct quirk_entry quirk_asus_ga401i = { + .wmi_backlight_power = true, + .wmi_backlight_set_devstate = true, +}; + +static struct quirk_entry quirk_asus_ga502i = { + .wmi_backlight_power = true, + .wmi_backlight_set_devstate = true, +}; + static int dmi_matched(const struct dmi_system_id *dmi) { pr_info("Identified laptop model '%s'\n", dmi->ident); @@ -411,6 +421,78 @@ static const struct dmi_system_id asus_quirks[] = { }, .driver_data = &quirk_asus_forceals, }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA401IH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA401IH"), + }, + .driver_data = &quirk_asus_ga401i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA401II", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA401II"), + }, + .driver_data = &quirk_asus_ga401i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA401IU", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA401IU"), + }, + .driver_data = &quirk_asus_ga401i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA401IV", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA401IV"), + }, + .driver_data = &quirk_asus_ga401i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA401IVC", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA401IVC"), + }, + .driver_data = &quirk_asus_ga401i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA502II", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA502II"), + }, + .driver_data = &quirk_asus_ga502i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA502IU", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA502IU"), + }, + .driver_data = &quirk_asus_ga502i, + }, + { + .callback = dmi_matched, + .ident = "ASUSTeK COMPUTER INC. GA502IV", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "GA502IV"), + }, + .driver_data = &quirk_asus_ga502i, + }, {}, }; From ff3fde9d4519ca5259ba6c8102c94c470277bb88 Mon Sep 17 00:00:00 2001 From: Bolarinwa Olayemi Saheed Date: Mon, 13 Jul 2020 19:55:27 +0200 Subject: [PATCH 081/448] iwlegacy: Check the return value of pcie_capability_read_*() [ Upstream commit 9018fd7f2a73e9b290f48a56b421558fa31e8b75 ] On failure pcie_capability_read_dword() sets it's last parameter, val to 0. However, with Patch 14/14, it is possible that val is set to ~0 on failure. This would introduce a bug because (x & x) == (~0 & x). This bug can be avoided without changing the function's behaviour if the return value of pcie_capability_read_dword is checked to confirm success. Check the return value of pcie_capability_read_dword() to ensure success. Suggested-by: Bjorn Helgaas Signed-off-by: Bolarinwa Olayemi Saheed Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200713175529.29715-3-refactormyself@gmail.com Signed-off-by: Sasha Levin --- drivers/net/wireless/intel/iwlegacy/common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/intel/iwlegacy/common.c b/drivers/net/wireless/intel/iwlegacy/common.c index 746749f37996..1107b96a8a88 100644 --- a/drivers/net/wireless/intel/iwlegacy/common.c +++ b/drivers/net/wireless/intel/iwlegacy/common.c @@ -4286,8 +4286,8 @@ il_apm_init(struct il_priv *il) * power savings, even without L1. */ if (il->cfg->set_l0s) { - pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl); - if (lctl & PCI_EXP_LNKCTL_ASPM_L1) { + ret = pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl); + if (!ret && (lctl & PCI_EXP_LNKCTL_ASPM_L1)) { /* L1-ASPM enabled; disable(!) L0S */ il_set_bit(il, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED); From 691ae7c87ff79c9a1aa4b6b2e82dcc48528e492e Mon Sep 17 00:00:00 2001 From: Dmitry Osipenko Date: Mon, 29 Jun 2020 06:18:41 +0300 Subject: [PATCH 082/448] gpu: host1x: debug: Fix multiple channels emitting messages simultaneously [ Upstream commit 35681862808472a0a4b9a8817ae2789c0b5b3edc ] Once channel's job is hung, it dumps the channel's state into KMSG before tearing down the offending job. If multiple channels hang at once, then they dump messages simultaneously, making the debug info unreadable, and thus, useless. This patch adds mutex which allows only one channel to emit debug messages at a time. Signed-off-by: Dmitry Osipenko Signed-off-by: Thierry Reding Signed-off-by: Sasha Levin --- drivers/gpu/host1x/debug.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/host1x/debug.c b/drivers/gpu/host1x/debug.c index c0392672a842..1b4997bda1c7 100644 --- a/drivers/gpu/host1x/debug.c +++ b/drivers/gpu/host1x/debug.c @@ -16,6 +16,8 @@ #include "debug.h" #include "channel.h" +static DEFINE_MUTEX(debug_lock); + unsigned int host1x_debug_trace_cmdbuf; static pid_t host1x_debug_force_timeout_pid; @@ -52,12 +54,14 @@ static int show_channel(struct host1x_channel *ch, void *data, bool show_fifo) struct output *o = data; mutex_lock(&ch->cdma.lock); + mutex_lock(&debug_lock); if (show_fifo) host1x_hw_show_channel_fifo(m, ch, o); host1x_hw_show_channel_cdma(m, ch, o); + mutex_unlock(&debug_lock); mutex_unlock(&ch->cdma.lock); return 0; From d000795c9f25f95419d4787c295a2874e1e34609 Mon Sep 17 00:00:00 2001 From: Shannon Nelson Date: Tue, 21 Jul 2020 13:34:07 -0700 Subject: [PATCH 083/448] ionic: update eid test for overflow [ Upstream commit 3fbc9bb6ca32d12d4d32a7ae32abef67ac95f889 ] Fix up our comparison to better handle a potential (but largely unlikely) wrap around. Signed-off-by: Shannon Nelson Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/pensando/ionic/ionic_lif.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c index c00ec9a02097..e66002251596 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c @@ -666,7 +666,7 @@ static bool ionic_notifyq_service(struct ionic_cq *cq, eid = le64_to_cpu(comp->event.eid); /* Have we run out of new completions to process? */ - if (eid <= lif->last_eid) + if ((s64)(eid - lif->last_eid) <= 0) return false; lif->last_eid = eid; From 7404ce0f639cf5d40b63da747e6a550355c6d974 Mon Sep 17 00:00:00 2001 From: shirley her Date: Mon, 20 Jul 2020 18:17:33 -0700 Subject: [PATCH 084/448] mmc: sdhci-pci-o2micro: Bug fix for O2 host controller Seabird1 [ Upstream commit cdd2b769789ae1a030e1a26f6c37c5833cabcb34 ] To fix support for the O2 host controller Seabird1, set the quirk SDHCI_QUIRK2_PRESET_VALUE_BROKEN and the capability bit MMC_CAP2_NO_SDIO. Moreover, assign the ->get_cd() callback. Signed-off-by: Shirley Her Link: https://lore.kernel.org/r/20200721011733.8416-1-shirley.her@bayhubtech.com [Ulf: Updated the commit message] Signed-off-by: Ulf Hansson Signed-off-by: Sasha Levin --- drivers/mmc/host/sdhci-pci-o2micro.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mmc/host/sdhci-pci-o2micro.c b/drivers/mmc/host/sdhci-pci-o2micro.c index fa8105087d68..41a2394313dd 100644 --- a/drivers/mmc/host/sdhci-pci-o2micro.c +++ b/drivers/mmc/host/sdhci-pci-o2micro.c @@ -561,6 +561,12 @@ int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot *slot) slot->host->mmc_host_ops.get_cd = sdhci_o2_get_cd; } + if (chip->pdev->device == PCI_DEVICE_ID_O2_SEABIRD1) { + slot->host->mmc_host_ops.get_cd = sdhci_o2_get_cd; + host->mmc->caps2 |= MMC_CAP2_NO_SDIO; + host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN; + } + host->mmc_host_ops.execute_tuning = sdhci_o2_execute_tuning; if (chip->pdev->device != PCI_DEVICE_ID_O2_FUJIN2) From 77d7ce9ccb3376be9f160c6820377b5a0d08ae62 Mon Sep 17 00:00:00 2001 From: Evgeny Novikov Date: Tue, 21 Jul 2020 23:15:58 +0300 Subject: [PATCH 085/448] usb: gadget: net2280: fix memory leak on probe error handling paths [ Upstream commit 2468c877da428ebfd701142c4cdfefcfb7d4c00e ] Driver does not release memory for device on error handling paths in net2280_probe() when gadget_release() is not registered yet. The patch fixes the bug like in other similar drivers. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/gadget/udc/net2280.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c index 51efee21915f..7c616d7641c6 100644 --- a/drivers/usb/gadget/udc/net2280.c +++ b/drivers/usb/gadget/udc/net2280.c @@ -3782,8 +3782,10 @@ static int net2280_probe(struct pci_dev *pdev, const struct pci_device_id *id) return 0; done: - if (dev) + if (dev) { net2280_remove(pdev); + kfree(dev); + } return retval; } From 296184490e2c925eb4af50b62ce05666a5fded73 Mon Sep 17 00:00:00 2001 From: Sasi Kumar Date: Wed, 22 Jul 2020 13:07:42 -0400 Subject: [PATCH 086/448] bdc: Fix bug causing crash after multiple disconnects [ Upstream commit a95bdfd22076497288868c028619bc5995f5cc7f ] Multiple connects/disconnects can cause a crash on the second disconnect. The driver had a problem where it would try to send endpoint commands after it was disconnected which is not allowed by the hardware. The fix is to only allow the endpoint commands when the endpoint is connected. This will also fix issues that showed up when using configfs to create gadgets. Signed-off-by: Sasi Kumar Signed-off-by: Al Cooper Acked-by: Florian Fainelli Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/gadget/udc/bdc/bdc_core.c | 4 ++++ drivers/usb/gadget/udc/bdc/bdc_ep.c | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c index cc4a16e253ac..174555e94a6c 100644 --- a/drivers/usb/gadget/udc/bdc/bdc_core.c +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c @@ -282,6 +282,7 @@ static void bdc_mem_init(struct bdc *bdc, bool reinit) * in that case reinit is passed as 1 */ if (reinit) { + int i; /* Enable interrupts */ temp = bdc_readl(bdc->regs, BDC_BDCSC); temp |= BDC_GIE; @@ -291,6 +292,9 @@ static void bdc_mem_init(struct bdc *bdc, bool reinit) /* Initialize SRR to 0 */ memset(bdc->srr.sr_bds, 0, NUM_SR_ENTRIES * sizeof(struct bdc_bd)); + /* clear ep flags to avoid post disconnect stops/deconfigs */ + for (i = 1; i < bdc->num_eps; ++i) + bdc->bdc_ep_array[i]->flags = 0; } else { /* One time initiaization only */ /* Enable status report function pointers */ diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.c b/drivers/usb/gadget/udc/bdc/bdc_ep.c index d49c6dc1082d..9ddc0b4e92c9 100644 --- a/drivers/usb/gadget/udc/bdc/bdc_ep.c +++ b/drivers/usb/gadget/udc/bdc/bdc_ep.c @@ -615,7 +615,6 @@ int bdc_ep_enable(struct bdc_ep *ep) } bdc_dbg_bd_list(bdc, ep); /* only for ep0: config ep is called for ep0 from connect event */ - ep->flags |= BDC_EP_ENABLED; if (ep->ep_num == 1) return ret; @@ -759,10 +758,13 @@ static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req) __func__, ep->name, start_bdi, end_bdi); dev_dbg(bdc->dev, "ep_dequeue ep=%p ep->desc=%p\n", ep, (void *)ep->usb_ep.desc); - /* Stop the ep to see where the HW is ? */ - ret = bdc_stop_ep(bdc, ep->ep_num); - /* if there is an issue with stopping ep, then no need to go further */ - if (ret) + /* if still connected, stop the ep to see where the HW is ? */ + if (!(bdc_readl(bdc->regs, BDC_USPC) & BDC_PST_MASK)) { + ret = bdc_stop_ep(bdc, ep->ep_num); + /* if there is an issue, then no need to go further */ + if (ret) + return 0; + } else return 0; /* @@ -1911,7 +1913,9 @@ static int bdc_gadget_ep_disable(struct usb_ep *_ep) __func__, ep->name, ep->flags); if (!(ep->flags & BDC_EP_ENABLED)) { - dev_warn(bdc->dev, "%s is already disabled\n", ep->name); + if (bdc->gadget.speed != USB_SPEED_UNKNOWN) + dev_warn(bdc->dev, "%s is already disabled\n", + ep->name); return 0; } spin_lock_irqsave(&bdc->lock, flags); From 8fb05790b55b9480c772fade457893265e1faa08 Mon Sep 17 00:00:00 2001 From: Danesh Petigara Date: Wed, 22 Jul 2020 13:07:45 -0400 Subject: [PATCH 087/448] usb: bdc: Halt controller on suspend [ Upstream commit 5fc453d7de3d0c345812453823a3a56783c5f82c ] GISB bus error kernel panics have been observed during S2 transition tests on the 7271t platform. The errors are a result of the BDC interrupt handler trying to access BDC register space after the system's suspend callbacks have completed. Adding a suspend hook to the BDC driver that halts the controller before S2 entry thus preventing unwanted access to the BDC register space during this transition. Signed-off-by: Danesh Petigara Signed-off-by: Al Cooper Acked-by: Florian Fainelli Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/gadget/udc/bdc/bdc_core.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c index 174555e94a6c..3d33499db50b 100644 --- a/drivers/usb/gadget/udc/bdc/bdc_core.c +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c @@ -605,9 +605,14 @@ static int bdc_remove(struct platform_device *pdev) static int bdc_suspend(struct device *dev) { struct bdc *bdc = dev_get_drvdata(dev); + int ret; - clk_disable_unprepare(bdc->clk); - return 0; + /* Halt the controller */ + ret = bdc_stop(bdc); + if (!ret) + clk_disable_unprepare(bdc->clk); + + return ret; } static int bdc_resume(struct device *dev) From db9b14ae4b6a7675e65faf8098555ce5e075051b Mon Sep 17 00:00:00 2001 From: Jim Cromie Date: Sun, 19 Jul 2020 17:10:47 -0600 Subject: [PATCH 088/448] dyndbg: fix a BUG_ON in ddebug_describe_flags [ Upstream commit f678ce8cc3cb2ad29df75d8824c74f36398ba871 ] ddebug_describe_flags() currently fills a caller provided string buffer, after testing its size (also passed) in a BUG_ON. Fix this by replacing them with a known-big-enough string buffer wrapped in a struct, and passing that instead. Also simplify ddebug_describe_flags() flags parameter from a struct to a member in that struct, and hoist the member deref up to the caller. This makes the function reusable (soon) where flags are unpacked. Acked-by: Signed-off-by: Jim Cromie Link: https://lore.kernel.org/r/20200719231058.1586423-8-jim.cromie@gmail.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- lib/dynamic_debug.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index c60409138e13..ccf05719b1ad 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -87,22 +87,22 @@ static struct { unsigned flag:8; char opt_char; } opt_array[] = { { _DPRINTK_FLAGS_NONE, '_' }, }; +struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; }; + /* format a string into buf[] which describes the _ddebug's flags */ -static char *ddebug_describe_flags(struct _ddebug *dp, char *buf, - size_t maxlen) +static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb) { - char *p = buf; + char *p = fb->buf; int i; - BUG_ON(maxlen < 6); for (i = 0; i < ARRAY_SIZE(opt_array); ++i) - if (dp->flags & opt_array[i].flag) + if (flags & opt_array[i].flag) *p++ = opt_array[i].opt_char; - if (p == buf) + if (p == fb->buf) *p++ = '_'; *p = '\0'; - return buf; + return fb->buf; } #define vpr_info(fmt, ...) \ @@ -144,7 +144,7 @@ static int ddebug_change(const struct ddebug_query *query, struct ddebug_table *dt; unsigned int newflags; unsigned int nfound = 0; - char flagbuf[10]; + struct flagsbuf fbuf; /* search for matching ddebugs */ mutex_lock(&ddebug_lock); @@ -201,8 +201,7 @@ static int ddebug_change(const struct ddebug_query *query, vpr_info("changed %s:%d [%s]%s =%s\n", trim_prefix(dp->filename), dp->lineno, dt->mod_name, dp->function, - ddebug_describe_flags(dp, flagbuf, - sizeof(flagbuf))); + ddebug_describe_flags(dp->flags, &fbuf)); } } mutex_unlock(&ddebug_lock); @@ -816,7 +815,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p) { struct ddebug_iter *iter = m->private; struct _ddebug *dp = p; - char flagsbuf[10]; + struct flagsbuf flags; vpr_info("called m=%p p=%p\n", m, p); @@ -829,7 +828,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p) seq_printf(m, "%s:%u [%s]%s =%s \"", trim_prefix(dp->filename), dp->lineno, iter->table->mod_name, dp->function, - ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf))); + ddebug_describe_flags(dp->flags, &flags)); seq_escape(m, dp->format, "\t\r\n\""); seq_puts(m, "\"\n"); From ca6654d7da5932c42de7ea935c00452c505a5f71 Mon Sep 17 00:00:00 2001 From: Coly Li Date: Sat, 25 Jul 2020 20:00:26 +0800 Subject: [PATCH 089/448] bcache: fix super block seq numbers comparision in register_cache_set() [ Upstream commit 117f636ea695270fe492d0c0c9dfadc7a662af47 ] In register_cache_set(), c is pointer to struct cache_set, and ca is pointer to struct cache, if ca->sb.seq > c->sb.seq, it means this registering cache has up to date version and other members, the in- memory version and other members should be updated to the newer value. But current implementation makes a cache set only has a single cache device, so the above assumption works well except for a special case. The execption is when a cache device new created and both ca->sb.seq and c->sb.seq are 0, because the super block is never flushed out yet. In the location for the following if() check, 2156 if (ca->sb.seq > c->sb.seq) { 2157 c->sb.version = ca->sb.version; 2158 memcpy(c->sb.set_uuid, ca->sb.set_uuid, 16); 2159 c->sb.flags = ca->sb.flags; 2160 c->sb.seq = ca->sb.seq; 2161 pr_debug("set version = %llu\n", c->sb.version); 2162 } c->sb.version is not initialized yet and valued 0. When ca->sb.seq is 0, the if() check will fail (because both values are 0), and the cache set version, set_uuid, flags and seq won't be updated. The above problem is hiden for current code, because the bucket size is compatible among different super block version. And the next time when running cache set again, ca->sb.seq will be larger than 0 and cache set super block version will be updated properly. But if the large bucket feature is enabled, sb->bucket_size is the low 16bits of the bucket size. For a power of 2 value, when the actual bucket size exceeds 16bit width, sb->bucket_size will always be 0. Then read_super_common() will fail because the if() check to is_power_of_2(sb->bucket_size) is false. This is how the long time hidden bug is triggered. This patch modifies the if() check to the following way, 2156 if (ca->sb.seq > c->sb.seq || c->sb.seq == 0) { Then cache set's version, set_uuid, flags and seq will always be updated corectly including for a new created cache device. Signed-off-by: Coly Li Reviewed-by: Hannes Reinecke Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/md/bcache/super.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 68901745eb20..168d64707859 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -2091,7 +2091,14 @@ found: sysfs_create_link(&c->kobj, &ca->kobj, buf)) goto err; - if (ca->sb.seq > c->sb.seq) { + /* + * A special case is both ca->sb.seq and c->sb.seq are 0, + * such condition happens on a new created cache device whose + * super block is never flushed yet. In this case c->sb.version + * and other members should be updated too, otherwise we will + * have a mistaken super block version in cache set. + */ + if (ca->sb.seq > c->sb.seq || c->sb.seq == 0) { c->sb.version = ca->sb.version; memcpy(c->sb.set_uuid, ca->sb.set_uuid, 16); c->sb.flags = ca->sb.flags; From 1e8d2186551b1d2fe5da94ad5553907dae04671a Mon Sep 17 00:00:00 2001 From: Erik Kaneda Date: Mon, 20 Jul 2020 10:31:20 -0700 Subject: [PATCH 090/448] ACPICA: Do not increment operation_region reference counts for field units [ Upstream commit 6a54ebae6d047c988a31f5ac5a64ab5cf83797a2 ] ACPICA commit e17b28cfcc31918d0db9547b6b274b09c413eb70 Object reference counts are used as a part of ACPICA's garbage collection mechanism. This mechanism keeps track of references to heap-allocated structures such as the ACPI operand objects. Recent server firmware has revealed that this reference count can overflow on large servers that declare many field units under the same operation_region. This occurs because each field unit declaration will add a reference count to the source operation_region. This change solves the reference count overflow for operation_regions objects by preventing fieldunits from incrementing their operation_region's reference count. Each operation_region's reference count will not be changed by named objects declared under the Field operator. During namespace deletion, the operation_region namespace node will be deleted and each fieldunit will be deleted without touching the deleted operation_region object. Link: https://github.com/acpica/acpica/commit/e17b28cf Signed-off-by: Erik Kaneda Signed-off-by: Bob Moore Signed-off-by: Rafael J. Wysocki Signed-off-by: Sasha Levin --- drivers/acpi/acpica/exprep.c | 4 ---- drivers/acpi/acpica/utdelete.c | 6 +----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c index 728d752f7adc..85f799c9c25c 100644 --- a/drivers/acpi/acpica/exprep.c +++ b/drivers/acpi/acpica/exprep.c @@ -473,10 +473,6 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info) (u8)access_byte_width; } } - /* An additional reference for the container */ - - acpi_ut_add_reference(obj_desc->field.region_obj); - ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n", obj_desc->field.start_field_bit_offset, diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c index c365faf4e6cd..4c0d4e434196 100644 --- a/drivers/acpi/acpica/utdelete.c +++ b/drivers/acpi/acpica/utdelete.c @@ -568,11 +568,6 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action) next_object = object->buffer_field.buffer_obj; break; - case ACPI_TYPE_LOCAL_REGION_FIELD: - - next_object = object->field.region_obj; - break; - case ACPI_TYPE_LOCAL_BANK_FIELD: next_object = object->bank_field.bank_obj; @@ -613,6 +608,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action) } break; + case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_REGION: default: From 167708cbebd3014de55234fa7f10b676c605186c Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 1 Jul 2020 13:36:00 -0700 Subject: [PATCH 091/448] drm/msm: ratelimit crtc event overflow error [ Upstream commit 5e16372b5940b1fecc3cc887fc02a50ba148d373 ] This can happen a lot when things go pear shaped. Lets not flood dmesg when this happens. Signed-off-by: Rob Clark Reviewed-by: Abhinav Kumar Signed-off-by: Rob Clark Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index ce59adff06aa..36c85c05b7cf 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -381,7 +381,7 @@ static void dpu_crtc_frame_event_cb(void *data, u32 event) spin_unlock_irqrestore(&dpu_crtc->spin_lock, flags); if (!fevent) { - DRM_ERROR("crtc%d event %d overflow\n", crtc->base.id, event); + DRM_ERROR_RATELIMITED("crtc%d event %d overflow\n", crtc->base.id, event); return; } From 1a981f4d6c971b83a7eaf6da47c14398524c4e3b Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 20 Mar 2020 16:23:34 +0300 Subject: [PATCH 092/448] drm/gem: Fix a leak in drm_gem_objects_lookup() [ Upstream commit ec0bb482de0ad5e4aba2a4537ea53eaeb77d11a6 ] If the "handles" allocation or the copy_from_user() fails then we leak "objs". It's supposed to be freed in panfrost_job_cleanup(). Fixes: c117aa4d8701 ("drm: Add a drm_gem_objects_lookup helper") Signed-off-by: Dan Carpenter Signed-off-by: Emil Velikov Link: https://patchwork.freedesktop.org/patch/msgid/20200320132334.GC95012@mwanda Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_gem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 46ad14470d06..1fdc85a71cec 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -710,6 +710,8 @@ int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, if (!objs) return -ENOMEM; + *objs_out = objs; + handles = kvmalloc_array(count, sizeof(u32), GFP_KERNEL); if (!handles) { ret = -ENOMEM; @@ -723,8 +725,6 @@ int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, } ret = objects_lookup(filp, handles, count, objs); - *objs_out = objs; - out: kvfree(handles); return ret; From 7669b6beb4fd322f40503ee28ccd5e3a44737f59 Mon Sep 17 00:00:00 2001 From: Douglas Anderson Date: Fri, 8 May 2020 16:33:29 -0700 Subject: [PATCH 093/448] drm/bridge: ti-sn65dsi86: Clear old error bits before AUX transfers [ Upstream commit baef4d56195b6d6e0f681f6eac03d8c6db011d34 ] The AUX channel transfer error bits in the status register are latched and need to be cleared. Clear them before doing our transfer so we don't see old bits and get confused. Without this patch having a single failure would mean that all future transfers would look like they failed. Fixes: b814ec6d4535 ("drm/bridge: ti-sn65dsi86: Implement AUX channel") Signed-off-by: Douglas Anderson Reviewed-by: Rob Clark Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20200508163314.1.Idfa69d5d3fc9623083c0ff78572fea87dccb199c@changeid Signed-off-by: Sasha Levin --- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 0a580957c8cf..f1de4bb6558c 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -647,6 +647,12 @@ static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux, buf[i]); } + /* Clear old status bits before start so we don't get confused */ + regmap_write(pdata->regmap, SN_AUX_CMD_STATUS_REG, + AUX_IRQ_STATUS_NAT_I2C_FAIL | + AUX_IRQ_STATUS_AUX_RPLY_TOUT | + AUX_IRQ_STATUS_AUX_SHORT); + regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val | AUX_CMD_SEND); ret = regmap_read_poll_timeout(pdata->regmap, SN_AUX_CMD_REG, val, From e3b04e1b5b03e46488666d081adf1046afc7635a Mon Sep 17 00:00:00 2001 From: Qiushi Wu Date: Fri, 22 May 2020 09:34:51 +0100 Subject: [PATCH 094/448] agp/intel: Fix a memory leak on module initialisation failure [ Upstream commit b975abbd382fe442713a4c233549abb90e57c22b ] In intel_gtt_setup_scratch_page(), pointer "page" is not released if pci_dma_mapping_error() return an error, leading to a memory leak on module initialisation failure. Simply fix this issue by freeing "page" before return. Fixes: 0e87d2b06cb46 ("intel-gtt: initialize our own scratch page") Signed-off-by: Qiushi Wu Reviewed-by: Chris Wilson Signed-off-by: Chris Wilson Link: https://patchwork.freedesktop.org/patch/msgid/20200522083451.7448-1-chris@chris-wilson.co.uk Signed-off-by: Sasha Levin --- drivers/char/agp/intel-gtt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c index b161bdf60000..0941d38b2d32 100644 --- a/drivers/char/agp/intel-gtt.c +++ b/drivers/char/agp/intel-gtt.c @@ -304,8 +304,10 @@ static int intel_gtt_setup_scratch_page(void) if (intel_private.needs_dmar) { dma_addr = pci_map_page(intel_private.pcidev, page, 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); - if (pci_dma_mapping_error(intel_private.pcidev, dma_addr)) + if (pci_dma_mapping_error(intel_private.pcidev, dma_addr)) { + __free_page(page); return -EINVAL; + } intel_private.scratch_page_dma = dma_addr; } else From be9903c9ebe48dec103946ca8750d00077e878ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= Date: Wed, 3 Jun 2020 10:22:26 +0200 Subject: [PATCH 095/448] mwifiex: Fix firmware filename for sd8977 chipset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 47fd3ee25e13cc5add48ba2ed71f7ee964b9c3a4 ] Firmware for sd8977 chipset is distributed by Marvell package and also as part of the linux-firmware repository in filename sdsd8977_combo_v2.bin. This patch fixes mwifiex driver to load correct firmware file for sd8977. Fixes: 1a0f547831dce ("mwifiex: add support for sd8977 chipset") Signed-off-by: Pali Rohár Acked-by: Ganapathi Bhat Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/net/wireless/marvell/mwifiex/sdio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.h b/drivers/net/wireless/marvell/mwifiex/sdio.h index f672bdf52cc1..9364e2c267f7 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.h +++ b/drivers/net/wireless/marvell/mwifiex/sdio.h @@ -36,7 +36,7 @@ #define SD8897_DEFAULT_FW_NAME "mrvl/sd8897_uapsta.bin" #define SD8887_DEFAULT_FW_NAME "mrvl/sd8887_uapsta.bin" #define SD8801_DEFAULT_FW_NAME "mrvl/sd8801_uapsta.bin" -#define SD8977_DEFAULT_FW_NAME "mrvl/sd8977_uapsta.bin" +#define SD8977_DEFAULT_FW_NAME "mrvl/sdsd8977_combo_v2.bin" #define SD8987_DEFAULT_FW_NAME "mrvl/sd8987_uapsta.bin" #define SD8997_DEFAULT_FW_NAME "mrvl/sd8997_uapsta.bin" From 89b09156ed415a988fe58fa0a9c58e78cbfc7f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= Date: Wed, 3 Jun 2020 10:22:27 +0200 Subject: [PATCH 096/448] mwifiex: Fix firmware filename for sd8997 chipset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 2e1fcac52a9ea53e5a13a585d48a29a0fb4a9daf ] Firmware for sd8997 chipset is distributed by Marvell package and also as part of the linux-firmware repository in filename sdsd8997_combo_v4.bin. This patch fixes mwifiex driver to load correct firmware file for sd8997. Fixes: 6d85ef00d9dfe ("mwifiex: add support for 8997 chipset") Signed-off-by: Pali Rohár Acked-by: Ganapathi Bhat Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/net/wireless/marvell/mwifiex/sdio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.h b/drivers/net/wireless/marvell/mwifiex/sdio.h index 9364e2c267f7..2d9ec225aead 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.h +++ b/drivers/net/wireless/marvell/mwifiex/sdio.h @@ -38,7 +38,7 @@ #define SD8801_DEFAULT_FW_NAME "mrvl/sd8801_uapsta.bin" #define SD8977_DEFAULT_FW_NAME "mrvl/sdsd8977_combo_v2.bin" #define SD8987_DEFAULT_FW_NAME "mrvl/sd8987_uapsta.bin" -#define SD8997_DEFAULT_FW_NAME "mrvl/sd8997_uapsta.bin" +#define SD8997_DEFAULT_FW_NAME "mrvl/sdsd8997_combo_v4.bin" #define BLOCK_MODE 1 #define BYTE_MODE 0 From 671f14a14471d2ec7d6344094b345658b0c89b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= Date: Wed, 3 Jun 2020 10:22:28 +0200 Subject: [PATCH 097/448] btmrvl: Fix firmware filename for sd8977 chipset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit dbec3af5f13b88a96e31f252957ae1a82484a923 ] Firmware for sd8977 chipset is distributed by Marvell package and also as part of the linux-firmware repository in filename sdsd8977_combo_v2.bin. This patch fixes mwifiex driver to load correct firmware file for sd8977. Fixes: 8c57983bf7a79 ("Bluetooth: btmrvl: add support for sd8977 chipset") Signed-off-by: Pali Rohár Acked-by: Ganapathi Bhat Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/btmrvl_sdio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index 0f3a020703ab..7aa2c94720bc 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c @@ -328,7 +328,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8897 = { static const struct btmrvl_sdio_device btmrvl_sdio_sd8977 = { .helper = NULL, - .firmware = "mrvl/sd8977_uapsta.bin", + .firmware = "mrvl/sdsd8977_combo_v2.bin", .reg = &btmrvl_reg_8977, .support_pscan_win_report = true, .sd_blksz_fw_dl = 256, @@ -1831,6 +1831,6 @@ MODULE_FIRMWARE("mrvl/sd8787_uapsta.bin"); MODULE_FIRMWARE("mrvl/sd8797_uapsta.bin"); MODULE_FIRMWARE("mrvl/sd8887_uapsta.bin"); MODULE_FIRMWARE("mrvl/sd8897_uapsta.bin"); -MODULE_FIRMWARE("mrvl/sd8977_uapsta.bin"); +MODULE_FIRMWARE("mrvl/sdsd8977_combo_v2.bin"); MODULE_FIRMWARE("mrvl/sd8987_uapsta.bin"); MODULE_FIRMWARE("mrvl/sd8997_uapsta.bin"); From d9e13b0c26cf4ef481c622e861c4236299af96ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= Date: Wed, 3 Jun 2020 10:22:29 +0200 Subject: [PATCH 098/448] btmrvl: Fix firmware filename for sd8997 chipset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 00eb0cb36fad53315047af12e83c643d3a2c2e49 ] Firmware for sd8997 chipset is distributed by Marvell package and also as part of the linux-firmware repository in filename sdsd8997_combo_v4.bin. This patch fixes mwifiex driver to load correct firmware file for sd8997. Fixes: f0ef67485f591 ("Bluetooth: btmrvl: add sd8997 chipset support") Signed-off-by: Pali Rohár Acked-by: Ganapathi Bhat Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/btmrvl_sdio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index 7aa2c94720bc..4c7978cb1786 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c @@ -346,7 +346,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8987 = { static const struct btmrvl_sdio_device btmrvl_sdio_sd8997 = { .helper = NULL, - .firmware = "mrvl/sd8997_uapsta.bin", + .firmware = "mrvl/sdsd8997_combo_v4.bin", .reg = &btmrvl_reg_8997, .support_pscan_win_report = true, .sd_blksz_fw_dl = 256, @@ -1833,4 +1833,4 @@ MODULE_FIRMWARE("mrvl/sd8887_uapsta.bin"); MODULE_FIRMWARE("mrvl/sd8897_uapsta.bin"); MODULE_FIRMWARE("mrvl/sdsd8977_combo_v2.bin"); MODULE_FIRMWARE("mrvl/sd8987_uapsta.bin"); -MODULE_FIRMWARE("mrvl/sd8997_uapsta.bin"); +MODULE_FIRMWARE("mrvl/sdsd8997_combo_v4.bin"); From e95d33905a4e5f6db211792fe3c68d18c87e027a Mon Sep 17 00:00:00 2001 From: Dejin Zheng Date: Thu, 23 Apr 2020 00:07:19 +0800 Subject: [PATCH 099/448] video: fbdev: sm712fb: fix an issue about iounmap for a wrong address [ Upstream commit 98bd4f72988646c35569e1e838c0ab80d06c77f6 ] the sfb->fb->screen_base is not save the value get by iounmap() when the chip id is 0x720. so iounmap() for address sfb->fb->screen_base is not right. Fixes: 1461d6672864854 ("staging: sm7xxfb: merge sm712fb with fbdev") Cc: Andy Shevchenko Cc: Sudip Mukherjee Cc: Teddy Wang Cc: Greg Kroah-Hartman Signed-off-by: Dejin Zheng Signed-off-by: Bartlomiej Zolnierkiewicz Link: https://patchwork.freedesktop.org/patch/msgid/20200422160719.27763-1-zhengdejin5@gmail.com Signed-off-by: Sasha Levin --- drivers/video/fbdev/sm712fb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c index 207d0add684b..246681414577 100644 --- a/drivers/video/fbdev/sm712fb.c +++ b/drivers/video/fbdev/sm712fb.c @@ -1429,6 +1429,8 @@ static int smtc_map_smem(struct smtcfb_info *sfb, static void smtc_unmap_smem(struct smtcfb_info *sfb) { if (sfb && sfb->fb->screen_base) { + if (sfb->chip_id == 0x720) + sfb->fb->screen_base -= 0x00200000; iounmap(sfb->fb->screen_base); sfb->fb->screen_base = NULL; } From 703a2e85a3a82f1fef63f57cc4a1cc7d8d058913 Mon Sep 17 00:00:00 2001 From: Dejin Zheng Date: Fri, 24 Apr 2020 00:42:51 +0800 Subject: [PATCH 100/448] console: newport_con: fix an issue about leak related system resources [ Upstream commit fd4b8243877250c05bb24af7fea5567110c9720b ] A call of the function do_take_over_console() can fail here. The corresponding system resources were not released then. Thus add a call of iounmap() and release_mem_region() together with the check of a failure predicate. and also add release_mem_region() on device removal. Fixes: e86bb8acc0fdc ("[PATCH] VT binding: Make newport_con support binding") Suggested-by: Bartlomiej Zolnierkiewicz Signed-off-by: Dejin Zheng Reviewed-by: Andy Shevchenko Cc: Greg Kroah-Hartman cc: Thomas Gleixner Cc: Andrew Morton Signed-off-by: Bartlomiej Zolnierkiewicz Link: https://patchwork.freedesktop.org/patch/msgid/20200423164251.3349-1-zhengdejin5@gmail.com Signed-off-by: Sasha Levin --- drivers/video/console/newport_con.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index 00dddf6e08b0..2d2ee17052e8 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c @@ -32,6 +32,8 @@ #include #include +#define NEWPORT_LEN 0x10000 + #define FONT_DATA ((unsigned char *)font_vga_8x16.data) /* borrowed from fbcon.c */ @@ -43,6 +45,7 @@ static unsigned char *font_data[MAX_NR_CONSOLES]; static struct newport_regs *npregs; +static unsigned long newport_addr; static int logo_active; static int topscan; @@ -702,7 +705,6 @@ const struct consw newport_con = { static int newport_probe(struct gio_device *dev, const struct gio_device_id *id) { - unsigned long newport_addr; int err; if (!dev->resource.start) @@ -712,7 +714,7 @@ static int newport_probe(struct gio_device *dev, return -EBUSY; /* we only support one Newport as console */ newport_addr = dev->resource.start + 0xF0000; - if (!request_mem_region(newport_addr, 0x10000, "Newport")) + if (!request_mem_region(newport_addr, NEWPORT_LEN, "Newport")) return -ENODEV; npregs = (struct newport_regs *)/* ioremap cannot fail */ @@ -720,6 +722,11 @@ static int newport_probe(struct gio_device *dev, console_lock(); err = do_take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1); console_unlock(); + + if (err) { + iounmap((void *)npregs); + release_mem_region(newport_addr, NEWPORT_LEN); + } return err; } @@ -727,6 +734,7 @@ static void newport_remove(struct gio_device *dev) { give_up_console(&newport_con); iounmap((void *)npregs); + release_mem_region(newport_addr, NEWPORT_LEN); } static struct gio_device_id newport_ids[] = { From d9411fcc9a4894b9a79b312bd51b3df6b4cc4105 Mon Sep 17 00:00:00 2001 From: Christophe JAILLET Date: Wed, 29 Apr 2020 10:45:05 +0200 Subject: [PATCH 101/448] video: pxafb: Fix the function used to balance a 'dma_alloc_coherent()' call [ Upstream commit 499a2c41b954518c372873202d5e7714e22010c4 ] 'dma_alloc_coherent()' must be balanced by a call to 'dma_free_coherent()' not 'dma_free_wc()'. The correct dma_free_ function is already used in the error handling path of the probe function. Fixes: 77e196752bdd ("[ARM] pxafb: allow video memory size to be configurable") Signed-off-by: Christophe JAILLET Cc: Sumit Semwal Cc: Rafael J. Wysocki Cc: Jonathan Corbet Cc: Viresh Kumar Cc: Jani Nikula cc: Mauro Carvalho Chehab Cc: Eric Miao Signed-off-by: Bartlomiej Zolnierkiewicz Link: https://patchwork.freedesktop.org/patch/msgid/20200429084505.108897-1-christophe.jaillet@wanadoo.fr Signed-off-by: Sasha Levin --- drivers/video/fbdev/pxafb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c index f70c9f79622e..27635926cea3 100644 --- a/drivers/video/fbdev/pxafb.c +++ b/drivers/video/fbdev/pxafb.c @@ -2425,8 +2425,8 @@ static int pxafb_remove(struct platform_device *dev) free_pages_exact(fbi->video_mem, fbi->video_mem_size); - dma_free_wc(&dev->dev, fbi->dma_buff_size, fbi->dma_buff, - fbi->dma_buff_phys); + dma_free_coherent(&dev->dev, fbi->dma_buff_size, fbi->dma_buff, + fbi->dma_buff_phys); return 0; } From b4a09e491d38cbc048a6123a200ac9d8f522dc18 Mon Sep 17 00:00:00 2001 From: Evan Green Date: Thu, 4 Jun 2020 10:59:11 -0700 Subject: [PATCH 102/448] ath10k: Acquire tx_lock in tx error paths [ Upstream commit a738e766e3ed92c4ee5ec967777276b5ce11dd2c ] ath10k_htt_tx_free_msdu_id() has a lockdep assertion that htt->tx_lock is held. Acquire the lock in a couple of error paths when calling that function to ensure this condition is met. Fixes: 6421969f248fd ("ath10k: refactor tx pending management") Fixes: e62ee5c381c59 ("ath10k: Add support for htt_data_tx_desc_64 descriptor") Signed-off-by: Evan Green Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200604105901.1.I5b8b0c7ee0d3e51a73248975a9da61401b8f3900@changeid Signed-off-by: Sasha Levin --- drivers/net/wireless/ath/ath10k/htt_tx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c index 735482877a1f..c38e1963ebc0 100644 --- a/drivers/net/wireless/ath/ath10k/htt_tx.c +++ b/drivers/net/wireless/ath/ath10k/htt_tx.c @@ -1540,7 +1540,9 @@ static int ath10k_htt_tx_32(struct ath10k_htt *htt, err_unmap_msdu: dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); err_free_msdu_id: + spin_lock_bh(&htt->tx_lock); ath10k_htt_tx_free_msdu_id(htt, msdu_id); + spin_unlock_bh(&htt->tx_lock); err: return res; } @@ -1747,7 +1749,9 @@ static int ath10k_htt_tx_64(struct ath10k_htt *htt, err_unmap_msdu: dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); err_free_msdu_id: + spin_lock_bh(&htt->tx_lock); ath10k_htt_tx_free_msdu_id(htt, msdu_id); + spin_unlock_bh(&htt->tx_lock); err: return res; } From 8080ccd312332ec2bcaca7159d4afe5ee347a46a Mon Sep 17 00:00:00 2001 From: Tomasz Duszynski Date: Mon, 1 Jun 2020 18:15:52 +0200 Subject: [PATCH 103/448] iio: improve IIO_CONCENTRATION channel type description [ Upstream commit df16c33a4028159d1ba8a7061c9fa950b58d1a61 ] IIO_CONCENTRATION together with INFO_RAW specifier is used for reporting raw concentrations of pollutants. Raw value should be meaningless before being properly scaled. Because of that description shouldn't mention raw value unit whatsoever. Fix this by rephrasing existing description so it follows conventions used throughout IIO ABI docs. Fixes: 8ff6b3bc94930 ("iio: chemical: Add IIO_CONCENTRATION channel type") Signed-off-by: Tomasz Duszynski Acked-by: Matt Ranostay Signed-off-by: Jonathan Cameron Signed-off-by: Sasha Levin --- Documentation/ABI/testing/sysfs-bus-iio | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio index 680451695422..c3767d4d01a6 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -1566,7 +1566,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw KernelVersion: 4.3 Contact: linux-iio@vger.kernel.org Description: - Raw (unscaled no offset etc.) percentage reading of a substance. + Raw (unscaled no offset etc.) reading of a substance. Units + after application of scale and offset are percents. What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw From 018192e8586017971021adc95970b3cf2c7379ad Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 16 Jun 2020 23:21:24 +0200 Subject: [PATCH 104/448] drm/etnaviv: Fix error path on failure to enable bus clk [ Upstream commit f8794feaf65cdc97767604cf864775d20b97f397 ] Since commit 65f037e8e908 ("drm/etnaviv: add support for slave interface clock") the reg clock is enabled before the bus clock and we need to undo its enablement on error. Fixes: 65f037e8e908 ("drm/etnaviv: add support for slave interface clock") Signed-off-by: Lubomir Rintel Signed-off-by: Lucas Stach Signed-off-by: Sasha Levin --- drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index 8a26ea2a5334..85de8551ce86 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -1463,7 +1463,7 @@ static int etnaviv_gpu_clk_enable(struct etnaviv_gpu *gpu) if (gpu->clk_bus) { ret = clk_prepare_enable(gpu->clk_bus); if (ret) - return ret; + goto disable_clk_reg; } if (gpu->clk_core) { @@ -1486,6 +1486,9 @@ disable_clk_core: disable_clk_bus: if (gpu->clk_bus) clk_disable_unprepare(gpu->clk_bus); +disable_clk_reg: + if (gpu->clk_reg) + clk_disable_unprepare(gpu->clk_reg); return ret; } From 8bfd16c687cfd40e6fad9a2176a2b26a7ce2f0d8 Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Thu, 18 Jun 2020 11:04:00 +0100 Subject: [PATCH 105/448] drm/arm: fix unintentional integer overflow on left shift [ Upstream commit 5f368ddea6fec519bdb93b5368f6a844b6ea27a6 ] Shifting the integer value 1 is evaluated using 32-bit arithmetic and then used in an expression that expects a long value leads to a potential integer overflow. Fix this by using the BIT macro to perform the shift to avoid the overflow. Addresses-Coverity: ("Unintentional integer overflow") Fixes: ad49f8602fe8 ("drm/arm: Add support for Mali Display Processors") Signed-off-by: Colin Ian King Acked-by: Liviu Dudau Signed-off-by: Liviu Dudau Link: https://patchwork.freedesktop.org/patch/msgid/20200618100400.11464-1-colin.king@canonical.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/arm/malidp_planes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c index 3c70a53813bf..0b2bb485d9be 100644 --- a/drivers/gpu/drm/arm/malidp_planes.c +++ b/drivers/gpu/drm/arm/malidp_planes.c @@ -928,7 +928,7 @@ int malidp_de_planes_init(struct drm_device *drm) const struct malidp_hw_regmap *map = &malidp->dev->hw->map; struct malidp_plane *plane = NULL; enum drm_plane_type plane_type; - unsigned long crtcs = 1 << drm->mode_config.num_crtc; + unsigned long crtcs = BIT(drm->mode_config.num_crtc); unsigned long flags = DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) | From cc51ca36105966901cf927e9a49aa44109fa2df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Tue, 9 Jun 2020 13:08:46 +0200 Subject: [PATCH 106/448] clk: bcm63xx-gate: fix last clock availability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit cf8030d7035bd3e89c9e66f7193a7fc8057a9b9a ] In order to make the last clock available, maxbit has to be set to the highest bit value plus 1. Fixes: 1c099779c1e2 ("clk: add BCM63XX gated clock controller driver") Signed-off-by: Álvaro Fernández Rojas Link: https://lore.kernel.org/r/20200609110846.4029620-1-noltari@gmail.com Reviewed-by: Florian Fainelli Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/bcm/clk-bcm63xx-gate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/clk/bcm/clk-bcm63xx-gate.c b/drivers/clk/bcm/clk-bcm63xx-gate.c index 98e884957db8..911a29bd744e 100644 --- a/drivers/clk/bcm/clk-bcm63xx-gate.c +++ b/drivers/clk/bcm/clk-bcm63xx-gate.c @@ -155,6 +155,7 @@ static int clk_bcm63xx_probe(struct platform_device *pdev) for (entry = table; entry->name; entry++) maxbit = max_t(u8, maxbit, entry->bit); + maxbit++; hw = devm_kzalloc(&pdev->dev, struct_size(hw, data.hws, maxbit), GFP_KERNEL); From 6db3579dd3a464197e7d7ef00497ab9913e368f8 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Tue, 5 May 2020 16:19:17 +0200 Subject: [PATCH 107/448] leds: lm355x: avoid enum conversion warning [ Upstream commit 985b1f596f9ed56f42b8c2280005f943e1434c06 ] clang points out that doing arithmetic between diffent enums is usually a mistake: drivers/leds/leds-lm355x.c:167:28: warning: bitwise operation between different enumeration types ('enum lm355x_tx2' and 'enum lm355x_ntc') [-Wenum-enum-conversion] reg_val = pdata->pin_tx2 | pdata->ntc_pin; ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~ drivers/leds/leds-lm355x.c:178:28: warning: bitwise operation between different enumeration types ('enum lm355x_tx2' and 'enum lm355x_ntc') [-Wenum-enum-conversion] reg_val = pdata->pin_tx2 | pdata->ntc_pin | pdata->pass_mode; ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~ In this driver, it is intentional, so add a cast to hide the false-positive warning. It appears to be the only instance of this warning at the moment. Fixes: b98d13c72592 ("leds: Add new LED driver for lm355x chips") Signed-off-by: Arnd Bergmann Signed-off-by: Pavel Machek Signed-off-by: Sasha Levin --- drivers/leds/leds-lm355x.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/leds/leds-lm355x.c b/drivers/leds/leds-lm355x.c index a5abb499574b..129f475aebf2 100644 --- a/drivers/leds/leds-lm355x.c +++ b/drivers/leds/leds-lm355x.c @@ -165,18 +165,19 @@ static int lm355x_chip_init(struct lm355x_chip_data *chip) /* input and output pins configuration */ switch (chip->type) { case CHIP_LM3554: - reg_val = pdata->pin_tx2 | pdata->ntc_pin; + reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin; ret = regmap_update_bits(chip->regmap, 0xE0, 0x28, reg_val); if (ret < 0) goto out; - reg_val = pdata->pass_mode; + reg_val = (u32)pdata->pass_mode; ret = regmap_update_bits(chip->regmap, 0xA0, 0x04, reg_val); if (ret < 0) goto out; break; case CHIP_LM3556: - reg_val = pdata->pin_tx2 | pdata->ntc_pin | pdata->pass_mode; + reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin | + (u32)pdata->pass_mode; ret = regmap_update_bits(chip->regmap, 0x0A, 0xC4, reg_val); if (ret < 0) goto out; From ecab4ef93ce6fa9f0fb5a50c72d6e0f9aa0dad4d Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Fri, 19 Jun 2020 19:52:01 +0000 Subject: [PATCH 108/448] Bluetooth: btusb: fix up firmware download sequence [ Upstream commit f645125711c80f9651e4a57403d799070c6ad13b ] Data RAM on the device have to be powered on before starting to download the firmware. Fixes: a1c49c434e15 ("Bluetooth: btusb: Add protocol support for MediaTek MT7668U USB devices") Co-developed-by: Mark Chen Signed-off-by: Mark Chen Signed-off-by: Sean Wang Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/btusb.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 9c3b063e1a1f..f3f0529564da 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -2792,7 +2792,7 @@ static int btusb_mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) const u8 *fw_ptr; size_t fw_size; int err, dlen; - u8 flag; + u8 flag, param; err = request_firmware(&fw, fwname, &hdev->dev); if (err < 0) { @@ -2800,6 +2800,20 @@ static int btusb_mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) return err; } + /* Power on data RAM the firmware relies on. */ + param = 1; + wmt_params.op = BTMTK_WMT_FUNC_CTRL; + wmt_params.flag = 3; + wmt_params.dlen = sizeof(param); + wmt_params.data = ¶m; + wmt_params.status = NULL; + + err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); + if (err < 0) { + bt_dev_err(hdev, "Failed to power on data RAM (%d)", err); + return err; + } + fw_ptr = fw->data; fw_size = fw->size; From a728697b74b78c1ec696afdb211a6d50247e3f74 Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Fri, 19 Jun 2020 19:52:02 +0000 Subject: [PATCH 109/448] Bluetooth: btmtksdio: fix up firmware download sequence [ Upstream commit 737cd06072a72e8984e41af8e5919338d0c5bf2b ] Data RAM on the device have to be powered on before starting to download the firmware. Fixes: 9aebfd4a2200 ("Bluetooth: mediatek: add support for MediaTek MT7663S and MT7668S SDIO devices") Co-developed-by: Mark Chen Signed-off-by: Mark Chen Signed-off-by: Sean Wang Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/btmtksdio.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index 813338288453..b7de7cb8cca9 100644 --- a/drivers/bluetooth/btmtksdio.c +++ b/drivers/bluetooth/btmtksdio.c @@ -684,7 +684,7 @@ static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) const u8 *fw_ptr; size_t fw_size; int err, dlen; - u8 flag; + u8 flag, param; err = request_firmware(&fw, fwname, &hdev->dev); if (err < 0) { @@ -692,6 +692,20 @@ static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) return err; } + /* Power on data RAM the firmware relies on. */ + param = 1; + wmt_params.op = MTK_WMT_FUNC_CTRL; + wmt_params.flag = 3; + wmt_params.dlen = sizeof(param); + wmt_params.data = ¶m; + wmt_params.status = NULL; + + err = mtk_hci_wmt_sync(hdev, &wmt_params); + if (err < 0) { + bt_dev_err(hdev, "Failed to power on data RAM (%d)", err); + return err; + } + fw_ptr = fw->data; fw_size = fw->size; From 79962a7a1dd1f06af60d30563bf48b20ab1e75ec Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 7 May 2020 23:33:14 +0200 Subject: [PATCH 110/448] media: cxusb-analog: fix V4L2 dependency [ Upstream commit 1a55caf010c46d4f2073f9e92e97ef65358c16bf ] CONFIG_DVB_USB_CXUSB_ANALOG is a 'bool' symbol with a dependency on the tristate CONFIG_VIDEO_V4L2, which means it can be enabled as =y even when its dependency is =m. This leads to a link failure: drivers/media/usb/dvb-usb/cxusb-analog.o: In function `cxusb_medion_analog_init': cxusb-analog.c:(.text+0x92): undefined reference to `v4l2_subdev_call_wrappers' drivers/media/usb/dvb-usb/cxusb-analog.o: In function `cxusb_medion_register_analog': cxusb-analog.c:(.text+0x466): undefined reference to `v4l2_device_register' cxusb-analog.c:(.text+0x4c3): undefined reference to `v4l2_i2c_new_subdev' cxusb-analog.c:(.text+0x4fb): undefined reference to `v4l2_subdev_call_wrappers' ... Change the dependency only disallow the analog portion of the driver in that configuration. Fixes: e478d4054054 ("media: cxusb: add analog mode support for Medion MD95700") Signed-off-by: Arnd Bergmann Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/usb/dvb-usb/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/usb/dvb-usb/Kconfig b/drivers/media/usb/dvb-usb/Kconfig index 1a3e5f965ae4..2d7a5c1c84af 100644 --- a/drivers/media/usb/dvb-usb/Kconfig +++ b/drivers/media/usb/dvb-usb/Kconfig @@ -150,6 +150,7 @@ config DVB_USB_CXUSB config DVB_USB_CXUSB_ANALOG bool "Analog support for the Conexant USB2.0 hybrid reference design" depends on DVB_USB_CXUSB && VIDEO_V4L2 + depends on VIDEO_V4L2=y || VIDEO_V4L2=DVB_USB_CXUSB select VIDEO_CX25840 select VIDEOBUF2_VMALLOC help From 8fe0119f5c638ddfa9522e5e814b826bddca0e1b Mon Sep 17 00:00:00 2001 From: Chuhong Yuan Date: Wed, 3 Jun 2020 18:40:48 +0200 Subject: [PATCH 111/448] media: marvell-ccic: Add missed v4l2_async_notifier_cleanup() [ Upstream commit 4603a5b4a87ccd6fb90cbfa10195291cfcf6ba34 ] mccic_register() forgets to cleanup the notifier in its error handler. mccic_shutdown() also misses calling v4l2_async_notifier_cleanup(). Add the missed calls to fix them. Fixes: 3eefe36cc00c ("media: marvell-ccic: use async notifier to get the sensor") Signed-off-by: Chuhong Yuan Signed-off-by: Sakari Ailus Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/marvell-ccic/mcam-core.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c index 803baf97f06e..6de8b3d99fb9 100644 --- a/drivers/media/platform/marvell-ccic/mcam-core.c +++ b/drivers/media/platform/marvell-ccic/mcam-core.c @@ -1940,6 +1940,7 @@ int mccic_register(struct mcam_camera *cam) out: v4l2_async_notifier_unregister(&cam->notifier); v4l2_device_unregister(&cam->v4l2_dev); + v4l2_async_notifier_cleanup(&cam->notifier); return ret; } EXPORT_SYMBOL_GPL(mccic_register); @@ -1961,6 +1962,7 @@ void mccic_shutdown(struct mcam_camera *cam) v4l2_ctrl_handler_free(&cam->ctrl_handler); v4l2_async_notifier_unregister(&cam->notifier); v4l2_device_unregister(&cam->v4l2_dev); + v4l2_async_notifier_cleanup(&cam->notifier); } EXPORT_SYMBOL_GPL(mccic_shutdown); From d85cebc8656f74b13e7119809227edc33af35dc2 Mon Sep 17 00:00:00 2001 From: Chuhong Yuan Date: Wed, 3 Jun 2020 18:41:22 +0200 Subject: [PATCH 112/448] media: omap3isp: Add missed v4l2_ctrl_handler_free() for preview_init_entities() [ Upstream commit dc7690a73017e1236202022e26a6aa133f239c8c ] preview_init_entities() does not call v4l2_ctrl_handler_free() when it fails. Add the missed function to fix it. Fixes: de1135d44f4f ("[media] omap3isp: CCDC, preview engine and resizer") Signed-off-by: Chuhong Yuan Reviewed-by: Laurent Pinchart Signed-off-by: Sakari Ailus Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/omap3isp/isppreview.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/omap3isp/isppreview.c b/drivers/media/platform/omap3isp/isppreview.c index 97d660606d98..b8c2b8bba826 100644 --- a/drivers/media/platform/omap3isp/isppreview.c +++ b/drivers/media/platform/omap3isp/isppreview.c @@ -2287,7 +2287,7 @@ static int preview_init_entities(struct isp_prev_device *prev) me->ops = &preview_media_ops; ret = media_entity_pads_init(me, PREV_PADS_NUM, pads); if (ret < 0) - return ret; + goto error_handler_free; preview_init_formats(sd, NULL); @@ -2320,6 +2320,8 @@ error_video_out: omap3isp_video_cleanup(&prev->video_in); error_video_in: media_entity_cleanup(&prev->subdev.entity); +error_handler_free: + v4l2_ctrl_handler_free(&prev->ctrls); return ret; } From a1773c8b04a4e1f702b02fd2e6957dc5a27f6253 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart Date: Thu, 25 Jun 2020 14:12:52 -0500 Subject: [PATCH 113/448] ASoC: SOF: nocodec: add missing .owner field [ Upstream commit 8753889e2720c1ef7ebf03370e384f5bf5ff4fab ] This field is required for ASoC cards. Not setting it will result in a module->name pointer being NULL and generate problems such as cat /proc/asound/modules 0 (efault) Fixes: 8017b8fd37bf ('ASoC: SOF: Add Nocodec machine driver support') Reported-by: Jaroslav Kysela Suggested-by: Takashi Iwai Signed-off-by: Pierre-Louis Bossart Reviewed-by: Kai Vehmanen Link: https://lore.kernel.org/r/20200625191308.3322-2-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/sof/nocodec.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/sof/nocodec.c b/sound/soc/sof/nocodec.c index ea0fe9a09f3f..71410116add1 100644 --- a/sound/soc/sof/nocodec.c +++ b/sound/soc/sof/nocodec.c @@ -14,6 +14,7 @@ static struct snd_soc_card sof_nocodec_card = { .name = "nocodec", /* the sof- prefix is added by the core */ + .owner = THIS_MODULE }; static int sof_nocodec_bes_setup(struct device *dev, From d92cc98b7423ae61d253ea4dcb4f1f6aaee2dd7d Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart Date: Thu, 25 Jun 2020 14:12:55 -0500 Subject: [PATCH 114/448] ASoC: Intel: bxt_rt298: add missing .owner field [ Upstream commit 88cee34b776f80d2da04afb990c2a28c36799c43 ] This field is required for ASoC cards. Not setting it will result in a module->name pointer being NULL and generate problems such as cat /proc/asound/modules 0 (efault) Fixes: 76016322ec56 ('ASoC: Intel: Add Broxton-P machine driver') Reported-by: Jaroslav Kysela Suggested-by: Takashi Iwai Signed-off-by: Pierre-Louis Bossart Reviewed-by: Kai Vehmanen Link: https://lore.kernel.org/r/20200625191308.3322-5-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/intel/boards/bxt_rt298.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sound/soc/intel/boards/bxt_rt298.c b/sound/soc/intel/boards/bxt_rt298.c index adf416a49b48..60fb87495050 100644 --- a/sound/soc/intel/boards/bxt_rt298.c +++ b/sound/soc/intel/boards/bxt_rt298.c @@ -556,6 +556,7 @@ static int bxt_card_late_probe(struct snd_soc_card *card) /* broxton audio machine driver for SPT + RT298S */ static struct snd_soc_card broxton_rt298 = { .name = "broxton-rt298", + .owner = THIS_MODULE, .dai_link = broxton_rt298_dais, .num_links = ARRAY_SIZE(broxton_rt298_dais), .controls = broxton_controls, @@ -571,6 +572,7 @@ static struct snd_soc_card broxton_rt298 = { static struct snd_soc_card geminilake_rt298 = { .name = "geminilake-rt298", + .owner = THIS_MODULE, .dai_link = broxton_rt298_dais, .num_links = ARRAY_SIZE(broxton_rt298_dais), .controls = broxton_controls, From 6f2b14006d44b126b6ec54f40366c89983099f32 Mon Sep 17 00:00:00 2001 From: Christophe JAILLET Date: Thu, 25 Jun 2020 22:47:30 +0200 Subject: [PATCH 115/448] scsi: cumana_2: Fix different dev_id between request_irq() and free_irq() [ Upstream commit 040ab9c4fd0070cd5fa71ba3a7b95b8470db9b4d ] The dev_id used in request_irq() and free_irq() should match. Use 'info' in both cases. Link: https://lore.kernel.org/r/20200625204730.943520-1-christophe.jaillet@wanadoo.fr Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Acked-by: Russell King Signed-off-by: Christophe JAILLET Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/arm/cumana_2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c index a1f3e9ee4e63..14e1d001253c 100644 --- a/drivers/scsi/arm/cumana_2.c +++ b/drivers/scsi/arm/cumana_2.c @@ -450,7 +450,7 @@ static int cumanascsi2_probe(struct expansion_card *ec, if (info->info.scsi.dma != NO_DMA) free_dma(info->info.scsi.dma); - free_irq(ec->irq, host); + free_irq(ec->irq, info); out_release: fas216_release(host); From 835c6f7c0a941d1d4fd0cf744918e88326d8fcc2 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Tue, 5 May 2020 17:03:29 +0100 Subject: [PATCH 116/448] drm/mipi: use dcs write for mipi_dsi_dcs_set_tear_scanline [ Upstream commit 7a05c3b6d24b8460b3cec436cf1d33fac43c8450 ] The helper uses the MIPI_DCS_SET_TEAR_SCANLINE, although it's currently using the generic write. This does not look right. Perhaps some platforms don't distinguish between the two writers? Cc: Robert Chiras Cc: Vinay Simha BN Cc: Jani Nikula Cc: Thierry Reding Fixes: e83950816367 ("drm/dsi: Implement set tear scanline") Signed-off-by: Emil Velikov Reviewed-by: Thierry Reding Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20200505160329.2976059-3-emil.l.velikov@gmail.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_mipi_dsi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index bd2498bbd74a..b99f96dcc6f1 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -1029,11 +1029,11 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format); */ int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline) { - u8 payload[3] = { MIPI_DCS_SET_TEAR_SCANLINE, scanline >> 8, - scanline & 0xff }; + u8 payload[2] = { scanline >> 8, scanline & 0xff }; ssize_t err; - err = mipi_dsi_generic_write(dsi, payload, sizeof(payload)); + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_SCANLINE, payload, + sizeof(payload)); if (err < 0) return err; From db377d8caf083cbd4cf33b47c473ff5b8815d270 Mon Sep 17 00:00:00 2001 From: Wang Hai Date: Tue, 2 Jun 2020 20:07:33 +0800 Subject: [PATCH 117/448] cxl: Fix kobject memleak [ Upstream commit 85c5cbeba8f4fb28e6b9bfb3e467718385f78f76 ] Currently the error return path from kobject_init_and_add() is not followed by a call to kobject_put() - which means we are leaking the kobject. Fix it by adding a call to kobject_put() in the error path of kobject_init_and_add(). Fixes: b087e6190ddc ("cxl: Export optional AFU configuration record in sysfs") Reported-by: Hulk Robot Signed-off-by: Wang Hai Acked-by: Andrew Donnellan Acked-by: Frederic Barrat Link: https://lore.kernel.org/r/20200602120733.5943-1-wanghai38@huawei.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/misc/cxl/sysfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c index f0263d1a1fdf..d97a243ad30c 100644 --- a/drivers/misc/cxl/sysfs.c +++ b/drivers/misc/cxl/sysfs.c @@ -624,7 +624,7 @@ static struct afu_config_record *cxl_sysfs_afu_new_cr(struct cxl_afu *afu, int c rc = kobject_init_and_add(&cr->kobj, &afu_config_record_type, &afu->dev.kobj, "cr%i", cr->cr); if (rc) - goto err; + goto err1; rc = sysfs_create_bin_file(&cr->kobj, &cr->config_attr); if (rc) From 87a30aa61f60818f4e169480da6db769ae6023dd Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Wed, 24 Jun 2020 13:07:10 +0100 Subject: [PATCH 118/448] drm/radeon: fix array out-of-bounds read and write issues [ Upstream commit 7ee78aff9de13d5dccba133f4a0de5367194b243 ] There is an off-by-one bounds check on the index into arrays table->mc_reg_address and table->mc_reg_table_entry[k].mc_data[j] that can lead to reads and writes outside of arrays. Fix the bound checking off-by-one error. Addresses-Coverity: ("Out-of-bounds read/write") Fixes: cc8dbbb4f62a ("drm/radeon: add dpm support for CI dGPUs (v2)") Signed-off-by: Colin Ian King Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/radeon/ci_dpm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c index f9685cce1652..1e62e7bbf1b1 100644 --- a/drivers/gpu/drm/radeon/ci_dpm.c +++ b/drivers/gpu/drm/radeon/ci_dpm.c @@ -4366,7 +4366,7 @@ static int ci_set_mc_special_registers(struct radeon_device *rdev, table->mc_reg_table_entry[k].mc_data[j] |= 0x100; } j++; - if (j > SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE) + if (j >= SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE) return -EINVAL; if (!pi->mem_gddr5) { From f27a965b042f8c25acef470dc19723487d2263b5 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 29 Jun 2020 17:09:06 +0200 Subject: [PATCH 119/448] staging: vchiq_arm: Add a matching unregister call [ Upstream commit 5d9272e28a9a6117fb63f5f930991304765caa32 ] All the registered children of vchiq have a corresponding call to platform_device_unregister except bcm2835_audio. Fix that. Fixes: 25c7597af20d ("staging: vchiq_arm: Register a platform device for audio") Signed-off-by: Phil Elwell Signed-off-by: Jacopo Mondi Signed-off-by: Nicolas Saenz Julienne Link: https://lore.kernel.org/r/20200629150945.10720-9-nsaenzjulienne@suse.de Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c index af6bf0736b52..eb76cc2cbfd8 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -3257,6 +3257,7 @@ failed_platform_init: static int vchiq_remove(struct platform_device *pdev) { + platform_device_unregister(bcm2835_audio); platform_device_unregister(bcm2835_camera); vchiq_debugfs_deinit(); device_destroy(vchiq_class, vchiq_devid); From 8d5ce7e06ff8febef39e9d9f48f2436cc0e1915b Mon Sep 17 00:00:00 2001 From: Wei Yongjun Date: Thu, 18 Jun 2020 14:19:53 +0000 Subject: [PATCH 120/448] iavf: fix error return code in iavf_init_get_resources() [ Upstream commit 753f3884f253de6b6d3a516e6651bda0baf4aede ] Fix to return negative error code -ENOMEM from the error handling case instead of 0, as done elsewhere in this function. Fixes: b66c7bc1cd4d ("iavf: Refactor init state machine") Signed-off-by: Wei Yongjun Tested-by: Andrew Bowers Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/iavf/iavf_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index bacc5fb7eba2..905fc45b4a58 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -1863,8 +1863,10 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); - if (!adapter->rss_key || !adapter->rss_lut) + if (!adapter->rss_key || !adapter->rss_lut) { + err = -ENOMEM; goto err_mem; + } if (RSS_AQ(adapter)) adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; else From 67642ac2ac0b64f19089033115d1a8cbe326fd26 Mon Sep 17 00:00:00 2001 From: Tony Nguyen Date: Wed, 24 Jun 2020 09:04:22 -0700 Subject: [PATCH 121/448] iavf: Fix updating statistics [ Upstream commit 9358076642f14cec8c414850d5a909cafca3a9d6 ] Commit bac8486116b0 ("iavf: Refactor the watchdog state machine") inverted the logic for when to update statistics. Statistics should be updated when no other commands are pending, instead they were only requested when a command was processed. iavf_request_stats() would see a pending request and not request statistics to be updated. This caused statistics to never be updated; fix the logic. Fixes: bac8486116b0 ("iavf: Refactor the watchdog state machine") Signed-off-by: Tony Nguyen Tested-by: Andrew Bowers Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/iavf/iavf_main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index 905fc45b4a58..34124c213d27 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -1948,7 +1948,10 @@ static void iavf_watchdog_task(struct work_struct *work) iavf_send_api_ver(adapter); } } else { - if (!iavf_process_aq_command(adapter) && + /* An error will be returned if no commands were + * processed; use this opportunity to update stats + */ + if (iavf_process_aq_command(adapter) && adapter->state == __IAVF_RUNNING) iavf_request_stats(adapter); } From 691081c0558a2eb9165765a329ee75d98cf4c56e Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Fri, 26 Jun 2020 14:49:10 -0300 Subject: [PATCH 122/448] RDMA/core: Fix bogus WARN_ON during ib_unregister_device_queued() [ Upstream commit 0cb42c0265837fafa2b4f302c8a7fed2631d7869 ] ib_unregister_device_queued() can only be used by drivers using the new dealloc_device callback flow, and it has a safety WARN_ON to ensure drivers are using it properly. However, if unregister and register are raced there is a special destruction path that maintains the uniform error handling semantic of 'caller does ib_dealloc_device() on failure'. This requires disabling the dealloc_device callback which triggers the WARN_ON. Instead of using NULL to disable the callback use a special function pointer so the WARN_ON does not trigger. Fixes: d0899892edd0 ("RDMA/device: Provide APIs from the core code to help unregistration") Link: https://lore.kernel.org/r/0-v1-a36d512e0a99+762-syz_dealloc_driver_jgg@nvidia.com Reported-by: syzbot+4088ed905e4ae2b0e13b@syzkaller.appspotmail.com Suggested-by: Hillf Danton Reviewed-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/device.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 10ae6c6eab0a..59dc9f3cfb37 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -1330,6 +1330,10 @@ out: return ret; } +static void prevent_dealloc_device(struct ib_device *ib_dev) +{ +} + /** * ib_register_device - Register an IB device with IB core * @device:Device to register @@ -1397,11 +1401,11 @@ int ib_register_device(struct ib_device *device, const char *name) * possibility for a parallel unregistration along with this * error flow. Since we have a refcount here we know any * parallel flow is stopped in disable_device and will see the - * NULL pointers, causing the responsibility to + * special dealloc_driver pointer, causing the responsibility to * ib_dealloc_device() to revert back to this thread. */ dealloc_fn = device->ops.dealloc_driver; - device->ops.dealloc_driver = NULL; + device->ops.dealloc_driver = prevent_dealloc_device; ib_device_put(device); __ib_unregister_device(device); device->ops.dealloc_driver = dealloc_fn; @@ -1449,7 +1453,8 @@ static void __ib_unregister_device(struct ib_device *ib_dev) * Drivers using the new flow may not call ib_dealloc_device except * in error unwind prior to registration success. */ - if (ib_dev->ops.dealloc_driver) { + if (ib_dev->ops.dealloc_driver && + ib_dev->ops.dealloc_driver != prevent_dealloc_device) { WARN_ON(kref_read(&ib_dev->dev.kobj.kref) <= 1); ib_dealloc_device(ib_dev); } From 76189426da566f198e8152c11e9efa32d0d166ee Mon Sep 17 00:00:00 2001 From: Christophe JAILLET Date: Fri, 26 Jun 2020 05:59:48 +0200 Subject: [PATCH 123/448] scsi: powertec: Fix different dev_id between request_irq() and free_irq() [ Upstream commit d179f7c763241c1dc5077fca88ddc3c47d21b763 ] The dev_id used in request_irq() and free_irq() should match. Use 'info' in both cases. Link: https://lore.kernel.org/r/20200626035948.944148-1-christophe.jaillet@wanadoo.fr Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Christophe JAILLET Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/arm/powertec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/arm/powertec.c b/drivers/scsi/arm/powertec.c index c795537a671c..2dc0df005cb3 100644 --- a/drivers/scsi/arm/powertec.c +++ b/drivers/scsi/arm/powertec.c @@ -378,7 +378,7 @@ static int powertecscsi_probe(struct expansion_card *ec, if (info->info.scsi.dma != NO_DMA) free_dma(info->info.scsi.dma); - free_irq(ec->irq, host); + free_irq(ec->irq, info); out_release: fas216_release(host); From 45a769a10126e12a89f6240c4c89647fc690fb80 Mon Sep 17 00:00:00 2001 From: Christophe JAILLET Date: Fri, 26 Jun 2020 06:05:53 +0200 Subject: [PATCH 124/448] scsi: eesox: Fix different dev_id between request_irq() and free_irq() [ Upstream commit 86f2da1112ccf744ad9068b1d5d9843faf8ddee6 ] The dev_id used in request_irq() and free_irq() should match. Use 'info' in both cases. Link: https://lore.kernel.org/r/20200626040553.944352-1-christophe.jaillet@wanadoo.fr Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Christophe JAILLET Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/arm/eesox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/arm/eesox.c b/drivers/scsi/arm/eesox.c index 134f040d58e2..f441ec8eb93d 100644 --- a/drivers/scsi/arm/eesox.c +++ b/drivers/scsi/arm/eesox.c @@ -571,7 +571,7 @@ static int eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id) if (info->info.scsi.dma != NO_DMA) free_dma(info->info.scsi.dma); - free_irq(ec->irq, host); + free_irq(ec->irq, info); out_remove: fas216_remove(host); From 0c122fc90d02c74cc2cde6f39c9fce0dc2979e2f Mon Sep 17 00:00:00 2001 From: Julian Anastasov Date: Wed, 1 Jul 2020 18:17:19 +0300 Subject: [PATCH 125/448] ipvs: allow connection reuse for unconfirmed conntrack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit f0a5e4d7a594e0fe237d3dfafb069bb82f80f42f ] YangYuxi is reporting that connection reuse is causing one-second delay when SYN hits existing connection in TIME_WAIT state. Such delay was added to give time to expire both the IPVS connection and the corresponding conntrack. This was considered a rare case at that time but it is causing problem for some environments such as Kubernetes. As nf_conntrack_tcp_packet() can decide to release the conntrack in TIME_WAIT state and to replace it with a fresh NEW conntrack, we can use this to allow rescheduling just by tuning our check: if the conntrack is confirmed we can not schedule it to different real server and the one-second delay still applies but if new conntrack was created, we are free to select new real server without any delays. YangYuxi lists some of the problem reports: - One second connection delay in masquerading mode: https://marc.info/?t=151683118100004&r=1&w=2 - IPVS low throughput #70747 https://github.com/kubernetes/kubernetes/issues/70747 - Apache Bench can fill up ipvs service proxy in seconds #544 https://github.com/cloudnativelabs/kube-router/issues/544 - Additional 1s latency in `host -> service IP -> pod` https://github.com/kubernetes/kubernetes/issues/90854 Fixes: f719e3754ee2 ("ipvs: drop first packet to redirect conntrack") Co-developed-by: YangYuxi Signed-off-by: YangYuxi Signed-off-by: Julian Anastasov Reviewed-by: Simon Horman Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin --- include/net/ip_vs.h | 10 ++++------ net/netfilter/ipvs/ip_vs_core.c | 12 +++++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index 078887c8c586..7c37e3c3b1c7 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h @@ -1624,18 +1624,16 @@ static inline void ip_vs_conn_drop_conntrack(struct ip_vs_conn *cp) } #endif /* CONFIG_IP_VS_NFCT */ -/* Really using conntrack? */ -static inline bool ip_vs_conn_uses_conntrack(struct ip_vs_conn *cp, - struct sk_buff *skb) +/* Using old conntrack that can not be redirected to another real server? */ +static inline bool ip_vs_conn_uses_old_conntrack(struct ip_vs_conn *cp, + struct sk_buff *skb) { #ifdef CONFIG_IP_VS_NFCT enum ip_conntrack_info ctinfo; struct nf_conn *ct; - if (!(cp->flags & IP_VS_CONN_F_NFCT)) - return false; ct = nf_ct_get(skb, &ctinfo); - if (ct) + if (ct && nf_ct_is_confirmed(ct)) return true; #endif return false; diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c index 8b80ab794a92..64a05906cc0e 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c @@ -2061,14 +2061,14 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int conn_reuse_mode = sysctl_conn_reuse_mode(ipvs); if (conn_reuse_mode && !iph.fragoffs && is_new_conn(skb, &iph) && cp) { - bool uses_ct = false, resched = false; + bool old_ct = false, resched = false; if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp->dest && unlikely(!atomic_read(&cp->dest->weight))) { resched = true; - uses_ct = ip_vs_conn_uses_conntrack(cp, skb); + old_ct = ip_vs_conn_uses_old_conntrack(cp, skb); } else if (is_new_conn_expected(cp, conn_reuse_mode)) { - uses_ct = ip_vs_conn_uses_conntrack(cp, skb); + old_ct = ip_vs_conn_uses_old_conntrack(cp, skb); if (!atomic_read(&cp->n_control)) { resched = true; } else { @@ -2076,15 +2076,17 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int * that uses conntrack while it is still * referenced by controlled connection(s). */ - resched = !uses_ct; + resched = !old_ct; } } if (resched) { + if (!old_ct) + cp->flags &= ~IP_VS_CONN_F_NFCT; if (!atomic_read(&cp->n_control)) ip_vs_conn_expire_now(cp); __ip_vs_conn_put(cp); - if (uses_ct) + if (old_ct) return NF_DROP; cp = NULL; } From 210ab36cdaa9886515896b0c991ab04c2c8c742f Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 8 May 2020 16:40:22 +0200 Subject: [PATCH 126/448] media: firewire: Using uninitialized values in node_probe() [ Upstream commit 2505a210fc126599013aec2be741df20aaacc490 ] If fw_csr_string() returns -ENOENT, then "name" is uninitialized. So then the "strlen(model_names[i]) <= name_len" is true because strlen() is unsigned and -ENOENT is type promoted to a very high positive value. Then the "strncmp(name, model_names[i], name_len)" uses uninitialized data because "name" is uninitialized. Fixes: 92374e886c75 ("[media] firedtv: drop obsolete backend abstraction") Signed-off-by: Dan Carpenter Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/firewire/firedtv-fw.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/firewire/firedtv-fw.c b/drivers/media/firewire/firedtv-fw.c index 97144734eb05..3f1ca40b9b98 100644 --- a/drivers/media/firewire/firedtv-fw.c +++ b/drivers/media/firewire/firedtv-fw.c @@ -272,6 +272,8 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id) name_len = fw_csr_string(unit->directory, CSR_MODEL, name, sizeof(name)); + if (name_len < 0) + return name_len; for (i = ARRAY_SIZE(model_names); --i; ) if (strlen(model_names[i]) <= name_len && strncmp(name, model_names[i], name_len) == 0) From 951a2126157729fed13f942b6a7f106d96ab8b5c Mon Sep 17 00:00:00 2001 From: Chuhong Yuan Date: Thu, 28 May 2020 08:41:47 +0200 Subject: [PATCH 127/448] media: exynos4-is: Add missed check for pinctrl_lookup_state() [ Upstream commit 18ffec750578f7447c288647d7282c7d12b1d969 ] fimc_md_get_pinctrl() misses a check for pinctrl_lookup_state(). Add the missed check to fix it. Fixes: 4163851f7b99 ("[media] s5p-fimc: Use pinctrl API for camera ports configuration]") Signed-off-by: Chuhong Yuan Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/exynos4-is/media-dev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c index 9aaf3b8060d5..9c31d950cddf 100644 --- a/drivers/media/platform/exynos4-is/media-dev.c +++ b/drivers/media/platform/exynos4-is/media-dev.c @@ -1270,6 +1270,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd) pctl->state_idle = pinctrl_lookup_state(pctl->pinctrl, PINCTRL_STATE_IDLE); + if (IS_ERR(pctl->state_idle)) + return PTR_ERR(pctl->state_idle); + return 0; } From deaf69f5b028b926a0a0b85913de974cdebbe824 Mon Sep 17 00:00:00 2001 From: Dariusz Marcinkiewicz Date: Mon, 22 Jun 2020 13:46:36 +0200 Subject: [PATCH 128/448] media: cros-ec-cec: do not bail on device_init_wakeup failure [ Upstream commit 6f01dfb760c027d5dd6199d91ee9599f2676b5c6 ] Do not fail probing when device_init_wakeup fails. device_init_wakeup fails when the device is already enabled as wakeup device. Hence, the driver fails to probe the device if: - The device has already been enabled for wakeup (by e.g. sysfs) - The driver has been unloaded and is being loaded again. This goal of the patch is to fix the above cases. Overwhelming majority of the drivers do not check device_init_wakeup return code. Fixes: cd70de2d356ee ("media: platform: Add ChromeOS EC CEC driver") Signed-off-by: Dariusz Marcinkiewicz Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/cros-ec-cec/cros-ec-cec.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/media/platform/cros-ec-cec/cros-ec-cec.c b/drivers/media/platform/cros-ec-cec/cros-ec-cec.c index 4a3b3810fd89..31390ce2dbf2 100644 --- a/drivers/media/platform/cros-ec-cec/cros-ec-cec.c +++ b/drivers/media/platform/cros-ec-cec/cros-ec-cec.c @@ -278,11 +278,7 @@ static int cros_ec_cec_probe(struct platform_device *pdev) platform_set_drvdata(pdev, cros_ec_cec); cros_ec_cec->cros_ec = cros_ec; - ret = device_init_wakeup(&pdev->dev, 1); - if (ret) { - dev_err(&pdev->dev, "failed to initialize wakeup\n"); - return ret; - } + device_init_wakeup(&pdev->dev, 1); cros_ec_cec->adap = cec_allocate_adapter(&cros_ec_cec_ops, cros_ec_cec, DRV_NAME, From 2c5170b451b726ac5d73f3c4d82b52c91dbbe014 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 29 Jun 2020 14:47:17 -0700 Subject: [PATCH 129/448] xfs: don't eat an EIO/ENOSPC writeback error when scrubbing data fork [ Upstream commit eb0efe5063bb10bcb653e4f8e92a74719c03a347 ] The data fork scrubber calls filemap_write_and_wait to flush dirty pages and delalloc reservations out to disk prior to checking the data fork's extent mappings. Unfortunately, this means that scrub can consume the EIO/ENOSPC errors that would otherwise have stayed around in the address space until (we hope) the writer application calls fsync to persist data and collect errors. The end result is that programs that wrote to a file might never see the error code and proceed as if nothing were wrong. xfs_scrub is not in a position to notify file writers about the writeback failure, and it's only here to check metadata, not file contents. Therefore, if writeback fails, we should stuff the error code back into the address space so that an fsync by the writer application can pick that up. Fixes: 99d9d8d05da2 ("xfs: scrub inode block mappings") Signed-off-by: Darrick J. Wong Reviewed-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Sasha Levin --- fs/xfs/scrub/bmap.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/fs/xfs/scrub/bmap.c b/fs/xfs/scrub/bmap.c index fa6ea6407992..392fb4df5c12 100644 --- a/fs/xfs/scrub/bmap.c +++ b/fs/xfs/scrub/bmap.c @@ -45,9 +45,27 @@ xchk_setup_inode_bmap( */ if (S_ISREG(VFS_I(sc->ip)->i_mode) && sc->sm->sm_type == XFS_SCRUB_TYPE_BMBTD) { + struct address_space *mapping = VFS_I(sc->ip)->i_mapping; + inode_dio_wait(VFS_I(sc->ip)); - error = filemap_write_and_wait(VFS_I(sc->ip)->i_mapping); - if (error) + + /* + * Try to flush all incore state to disk before we examine the + * space mappings for the data fork. Leave accumulated errors + * in the mapping for the writer threads to consume. + * + * On ENOSPC or EIO writeback errors, we continue into the + * extent mapping checks because write failures do not + * necessarily imply anything about the correctness of the file + * metadata. The metadata and the file data could be on + * completely separate devices; a media failure might only + * affect a subset of the disk, etc. We can handle delalloc + * extents in the scrubber, so leaving them in memory is fine. + */ + error = filemap_fdatawrite(mapping); + if (!error) + error = filemap_fdatawait_keep_errors(mapping); + if (error && (error != -ENOSPC && error != -EIO)) goto out; } From 6093eae667d63c994b70f1e9e560a564ef3686f5 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 29 Jun 2020 14:47:18 -0700 Subject: [PATCH 130/448] xfs: fix reflink quota reservation accounting error [ Upstream commit 83895227aba1ade33e81f586aa7b6b1e143096a5 ] Quota reservations are supposed to account for the blocks that might be allocated due to a bmap btree split. Reflink doesn't do this, so fix this to make the quota accounting more accurate before we start rearranging things. Fixes: 862bb360ef56 ("xfs: reflink extents from one file to another") Signed-off-by: Darrick J. Wong Reviewed-by: Brian Foster Signed-off-by: Sasha Levin --- fs/xfs/xfs_reflink.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 6a4fd1738b08..904d8285c226 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1005,6 +1005,7 @@ xfs_reflink_remap_extent( xfs_filblks_t rlen; xfs_filblks_t unmap_len; xfs_off_t newlen; + int64_t qres; int error; unmap_len = irec->br_startoff + irec->br_blockcount - destoff; @@ -1027,13 +1028,19 @@ xfs_reflink_remap_extent( xfs_ilock(ip, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, ip, 0); - /* If we're not just clearing space, then do we have enough quota? */ - if (real_extent) { - error = xfs_trans_reserve_quota_nblks(tp, ip, - irec->br_blockcount, 0, XFS_QMOPT_RES_REGBLKS); - if (error) - goto out_cancel; - } + /* + * Reserve quota for this operation. We don't know if the first unmap + * in the dest file will cause a bmap btree split, so we always reserve + * at least enough blocks for that split. If the extent being mapped + * in is written, we need to reserve quota for that too. + */ + qres = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); + if (real_extent) + qres += irec->br_blockcount; + error = xfs_trans_reserve_quota_nblks(tp, ip, qres, 0, + XFS_QMOPT_RES_REGBLKS); + if (error) + goto out_cancel; trace_xfs_reflink_remap(ip, irec->br_startoff, irec->br_blockcount, irec->br_startblock); From 8fbefed6c3a05148a9713f1636f5adaf3dcdafda Mon Sep 17 00:00:00 2001 From: Zhu Yanjun Date: Tue, 30 Jun 2020 15:36:05 +0300 Subject: [PATCH 131/448] RDMA/rxe: Skip dgid check in loopback mode [ Upstream commit 5c99274be8864519328aa74bc550ba410095bc1c ] In the loopback tests, the following call trace occurs. Call Trace: __rxe_do_task+0x1a/0x30 [rdma_rxe] rxe_qp_destroy+0x61/0xa0 [rdma_rxe] rxe_destroy_qp+0x20/0x60 [rdma_rxe] ib_destroy_qp_user+0xcc/0x220 [ib_core] uverbs_free_qp+0x3c/0xc0 [ib_uverbs] destroy_hw_idr_uobject+0x24/0x70 [ib_uverbs] uverbs_destroy_uobject+0x43/0x1b0 [ib_uverbs] uobj_destroy+0x41/0x70 [ib_uverbs] __uobj_get_destroy+0x39/0x70 [ib_uverbs] ib_uverbs_destroy_qp+0x88/0xc0 [ib_uverbs] ib_uverbs_handler_UVERBS_METHOD_INVOKE_WRITE+0xb9/0xf0 [ib_uverbs] ib_uverbs_cmd_verbs+0xb16/0xc30 [ib_uverbs] The root cause is that the actual RDMA connection is not created in the loopback tests and the rxe_match_dgid will fail randomly. To fix this call trace which appear in the loopback tests, skip check of the dgid. Fixes: 8700e3e7c485 ("Soft RoCE driver") Link: https://lore.kernel.org/r/20200630123605.446959-1-leon@kernel.org Signed-off-by: Zhu Yanjun Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/sw/rxe/rxe_recv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_recv.c b/drivers/infiniband/sw/rxe/rxe_recv.c index 831ad578a7b2..46e111c218fd 100644 --- a/drivers/infiniband/sw/rxe/rxe_recv.c +++ b/drivers/infiniband/sw/rxe/rxe_recv.c @@ -330,10 +330,14 @@ err1: static int rxe_match_dgid(struct rxe_dev *rxe, struct sk_buff *skb) { + struct rxe_pkt_info *pkt = SKB_TO_PKT(skb); const struct ib_gid_attr *gid_attr; union ib_gid dgid; union ib_gid *pdgid; + if (pkt->mask & RXE_LOOPBACK_MASK) + return 0; + if (skb->protocol == htons(ETH_P_IP)) { ipv6_addr_set_v4mapped(ip_hdr(skb)->daddr, (struct in6_addr *)&dgid); @@ -366,7 +370,7 @@ void rxe_rcv(struct sk_buff *skb) if (unlikely(skb->len < pkt->offset + RXE_BTH_BYTES)) goto drop; - if (unlikely(rxe_match_dgid(rxe, skb) < 0)) { + if (rxe_match_dgid(rxe, skb) < 0) { pr_warn_ratelimited("failed matching dgid\n"); goto drop; } From cc5f55c46a71244535f976b2f40ccce8d3626c32 Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Thu, 25 Jun 2020 18:14:55 -0500 Subject: [PATCH 132/448] PCI: Fix pci_cfg_wait queue locking problem [ Upstream commit 2a7e32d0547f41c5ce244f84cf5d6ca7fccee7eb ] The pci_cfg_wait queue is used to prevent user-space config accesses to devices while they are recovering from reset. Previously we used these operations on pci_cfg_wait: __add_wait_queue(&pci_cfg_wait, ...) __remove_wait_queue(&pci_cfg_wait, ...) wake_up_all(&pci_cfg_wait) The wake_up acquires the wait queue lock, but the add and remove do not. Originally these were all protected by the pci_lock, but cdcb33f98244 ("PCI: Avoid possible deadlock on pci_lock and p->pi_lock"), moved wake_up_all() outside pci_lock, so it could race with add/remove operations, which caused occasional kernel panics, e.g., during vfio-pci hotplug/unplug testing: Unable to handle kernel read from unreadable memory at virtual address ffff802dac469000 Resolve this by using wait_event() instead of __add_wait_queue() and __remove_wait_queue(). The wait queue lock is held by both wait_event() and wake_up_all(), so it provides mutual exclusion. Fixes: cdcb33f98244 ("PCI: Avoid possible deadlock on pci_lock and p->pi_lock") Link: https://lore.kernel.org/linux-pci/79827f2f-9b43-4411-1376-b9063b67aee3@huawei.com/T/#u Based-on: https://lore.kernel.org/linux-pci/20191210031527.40136-1-zhengxiang9@huawei.com/ Based-on-patch-by: Xiang Zheng Signed-off-by: Bjorn Helgaas Tested-by: Xiang Zheng Cc: Heyi Guo Cc: Biaoxiang Ye Signed-off-by: Sasha Levin --- drivers/pci/access.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 2fccb5762c76..0914ddeae17f 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -204,17 +204,13 @@ EXPORT_SYMBOL(pci_bus_set_ops); static DECLARE_WAIT_QUEUE_HEAD(pci_cfg_wait); static noinline void pci_wait_cfg(struct pci_dev *dev) + __must_hold(&pci_lock) { - DECLARE_WAITQUEUE(wait, current); - - __add_wait_queue(&pci_cfg_wait, &wait); do { - set_current_state(TASK_UNINTERRUPTIBLE); raw_spin_unlock_irq(&pci_lock); - schedule(); + wait_event(pci_cfg_wait, !dev->block_cfg_access); raw_spin_lock_irq(&pci_lock); } while (dev->block_cfg_access); - __remove_wait_queue(&pci_cfg_wait, &wait); } /* Returns 0 on success, negative values indicate error. */ From 59f69f1edb5678d894fc735ccf234b04ae5b071a Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Sat, 29 Feb 2020 23:16:49 +0100 Subject: [PATCH 133/448] drm/stm: repair runtime power management MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit ebd267b2e3c25d5f93a08528b47c036569eb8744 ] Add missing pm_runtime_get_sync() into ltdc_crtc_atomic_enable() to match pm_runtime_put_sync() in ltdc_crtc_atomic_disable(), otherwise the LTDC might suspend via runtime PM, disable clock, and then fail to resume later on. The test which triggers it is roughly -- run qt5 application which uses eglfs platform and etnaviv, stop the application, sleep for 15 minutes, run the application again. This leads to a timeout waiting for vsync, because the LTDC has suspended, but did not resume. Fixes: 35ab6cfbf211 ("drm/stm: support runtime power management") Signed-off-by: Marek Vasut Cc: Yannick Fertré Cc: Philippe Cornu Cc: Benjamin Gaignard Cc: Vincent Abriou Cc: Maxime Coquelin Cc: Alexandre Torgue To: dri-devel@lists.freedesktop.org Cc: linux-stm32@st-md-mailman.stormreply.com Cc: linux-arm-kernel@lists.infradead.org Acked-by: Philippe Cornu Tested-by: Yannick Fertre Signed-off-by: Benjamin Gaignard Link: https://patchwork.freedesktop.org/patch/msgid/20200229221649.90813-1-marex@denx.de Signed-off-by: Sasha Levin --- drivers/gpu/drm/stm/ltdc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c index 3ab4fbf8eb0d..51571f7246ab 100644 --- a/drivers/gpu/drm/stm/ltdc.c +++ b/drivers/gpu/drm/stm/ltdc.c @@ -424,9 +424,12 @@ static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { struct ltdc_device *ldev = crtc_to_ltdc(crtc); + struct drm_device *ddev = crtc->dev; DRM_DEBUG_DRIVER("\n"); + pm_runtime_get_sync(ddev->dev); + /* Sets the background color value */ reg_write(ldev->regs, LTDC_BCCR, BCCR_BCBLACK); From adbb26e2d44e5cd48f550a4fbf57068e4148fa19 Mon Sep 17 00:00:00 2001 From: Heikki Krogerus Date: Thu, 4 Jun 2020 19:46:46 +0200 Subject: [PATCH 134/448] kobject: Avoid premature parent object freeing in kobject_cleanup() [ Upstream commit 079ad2fb4bf9eba8a0aaab014b49705cd7f07c66 ] If kobject_del() is invoked by kobject_cleanup() to delete the target kobject, it may cause its parent kobject to be freed before invoking the target kobject's ->release() method, which effectively means freeing the parent before dealing with the child entirely. That is confusing at best and it may also lead to functional issues if the callers of kobject_cleanup() are not careful enough about the order in which these calls are made, so avoid the problem by making kobject_cleanup() drop the last reference to the target kobject's parent at the end, after invoking the target kobject's ->release() method. [ rjw: Rewrite the subject and changelog, make kobject_cleanup() drop the parent reference only when __kobject_del() has been called. ] Reported-by: Naresh Kamboju Reported-by: kernel test robot Fixes: 7589238a8cf3 ("Revert "software node: Simplify software_node_release() function"") Suggested-by: Rafael J. Wysocki Signed-off-by: Heikki Krogerus Signed-off-by: Rafael J. Wysocki Link: https://lore.kernel.org/r/1908555.IiAGLGrh1Z@kreacher Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- lib/kobject.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/kobject.c b/lib/kobject.c index 83198cb37d8d..386873bdd51c 100644 --- a/lib/kobject.c +++ b/lib/kobject.c @@ -599,14 +599,7 @@ out: } EXPORT_SYMBOL_GPL(kobject_move); -/** - * kobject_del() - Unlink kobject from hierarchy. - * @kobj: object. - * - * This is the function that should be called to delete an object - * successfully added via kobject_add(). - */ -void kobject_del(struct kobject *kobj) +static void __kobject_del(struct kobject *kobj) { struct kernfs_node *sd; const struct kobj_type *ktype; @@ -625,9 +618,23 @@ void kobject_del(struct kobject *kobj) kobj->state_in_sysfs = 0; kobj_kset_leave(kobj); - kobject_put(kobj->parent); kobj->parent = NULL; } + +/** + * kobject_del() - Unlink kobject from hierarchy. + * @kobj: object. + * + * This is the function that should be called to delete an object + * successfully added via kobject_add(). + */ +void kobject_del(struct kobject *kobj) +{ + struct kobject *parent = kobj->parent; + + __kobject_del(kobj); + kobject_put(parent); +} EXPORT_SYMBOL(kobject_del); /** @@ -663,6 +670,7 @@ EXPORT_SYMBOL(kobject_get_unless_zero); */ static void kobject_cleanup(struct kobject *kobj) { + struct kobject *parent = kobj->parent; struct kobj_type *t = get_ktype(kobj); const char *name = kobj->name; @@ -684,7 +692,10 @@ static void kobject_cleanup(struct kobject *kobj) if (kobj->state_in_sysfs) { pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", kobject_name(kobj), kobj); - kobject_del(kobj); + __kobject_del(kobj); + } else { + /* avoid dropping the parent reference unnecessarily */ + parent = NULL; } if (t && t->release) { @@ -698,6 +709,8 @@ static void kobject_cleanup(struct kobject *kobj) pr_debug("kobject: '%s': free name\n", name); kfree_const(name); } + + kobject_put(parent); } #ifdef CONFIG_DEBUG_KOBJECT_RELEASE From d25c81232007aeb689f9690e0991305ff7474c49 Mon Sep 17 00:00:00 2001 From: Kai-Heng Feng Date: Thu, 2 Jul 2020 13:45:00 +0800 Subject: [PATCH 135/448] leds: core: Flush scheduled work for system suspend [ Upstream commit 302a085c20194bfa7df52e0fe684ee0c41da02e6 ] Sometimes LED won't be turned off by LED_CORE_SUSPENDRESUME flag upon system suspend. led_set_brightness_nopm() uses schedule_work() to set LED brightness. However, there's no guarantee that the scheduled work gets executed because no one flushes the work. So flush the scheduled work to make sure LED gets turned off. Signed-off-by: Kai-Heng Feng Acked-by: Jacek Anaszewski Fixes: 81fe8e5b73e3 ("leds: core: Add led_set_brightness_nosleep{nopm} functions") Signed-off-by: Pavel Machek Signed-off-by: Sasha Levin --- drivers/leds/led-class.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index d3e83c33783e..0a4823d9797a 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -172,6 +172,7 @@ void led_classdev_suspend(struct led_classdev *led_cdev) { led_cdev->flags |= LED_SUSPENDED; led_set_brightness_nopm(led_cdev, 0); + flush_work(&led_cdev->set_brightness_work); } EXPORT_SYMBOL_GPL(led_classdev_suspend); From 36f9ed95ec52b1d510adf1308475dd3583e8ecdc Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sun, 12 Jul 2020 01:53:17 +0300 Subject: [PATCH 136/448] drm: panel: simple: Fix bpc for LG LB070WV8 panel [ Upstream commit a6ae2fe5c9f9fd355a48fb7d21c863e5b20d6c9c ] The LG LB070WV8 panel incorrectly reports a 16 bits per component value, while the panel uses 8 bits per component. Fix it. Fixes: dd0150026901 ("drm/panel: simple: Add support for LG LB070WV8 800x480 7" panel") Signed-off-by: Laurent Pinchart Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20200711225317.28476-1-laurent.pinchart+renesas@ideasonboard.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/panel/panel-simple.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 8abb31f83ffc..6d9656323a3f 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -1935,7 +1935,7 @@ static const struct drm_display_mode lg_lb070wv8_mode = { static const struct panel_desc lg_lb070wv8 = { .modes = &lg_lb070wv8_mode, .num_modes = 1, - .bpc = 16, + .bpc = 8, .size = { .width = 151, .height = 91, From 8ffa0cf2b662b0e575f77b8fee4c5e164cf19ea9 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Wed, 8 Jul 2020 15:38:00 +0200 Subject: [PATCH 137/448] phy: exynos5-usbdrd: Calibrating makes sense only for USB2.0 PHY [ Upstream commit dcbabfeb17c3c2fdb6bc92a3031ecd37df1834a8 ] PHY calibration is needed only for USB2.0 (UTMI) PHY, so skip calling calibration code when phy_calibrate() is called for USB3.0 (PIPE3) PHY. Fixes: d8c80bb3b55b ("phy: exynos5-usbdrd: Calibrate LOS levels for exynos5420/5800") Signed-off-by: Marek Szyprowski Acked-by: Krzysztof Kozlowski Link: https://lore.kernel.org/r/20200708133800.3336-1-m.szyprowski@samsung.com Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/phy/samsung/phy-exynos5-usbdrd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/phy/samsung/phy-exynos5-usbdrd.c b/drivers/phy/samsung/phy-exynos5-usbdrd.c index e510732afb8b..7f6279fb4f8f 100644 --- a/drivers/phy/samsung/phy-exynos5-usbdrd.c +++ b/drivers/phy/samsung/phy-exynos5-usbdrd.c @@ -714,7 +714,9 @@ static int exynos5_usbdrd_phy_calibrate(struct phy *phy) struct phy_usb_instance *inst = phy_get_drvdata(phy); struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); - return exynos5420_usbdrd_phy_calibrate(phy_drd); + if (inst->phy_cfg->id == EXYNOS5_DRDPHY_UTMI) + return exynos5420_usbdrd_phy_calibrate(phy_drd); + return 0; } static const struct phy_ops exynos5_usbdrd_phy_ops = { From 6a292c4bc0271dd2e52f12edcb3afa26f85b2421 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Sun, 12 Jul 2020 08:24:53 -0700 Subject: [PATCH 138/448] drm/bridge: sil_sii8620: initialize return of sii8620_readb [ Upstream commit 02cd2d3144653e6e2a0c7ccaa73311e48e2dc686 ] clang static analysis flags this error sil-sii8620.c:184:2: warning: Undefined or garbage value returned to caller [core.uninitialized.UndefReturn] return ret; ^~~~~~~~~~ sii8620_readb calls sii8620_read_buf. sii8620_read_buf can return without setting its output pararmeter 'ret'. So initialize ret. Fixes: ce6e153f414a ("drm/bridge: add Silicon Image SiI8620 driver") Signed-off-by: Tom Rix Reviewed-by: Laurent Pinchart Reviewed-by: Andrzej Hajda Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20200712152453.27510-1-trix@redhat.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/bridge/sil-sii8620.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c index bd3165ee5354..04431dbac4a4 100644 --- a/drivers/gpu/drm/bridge/sil-sii8620.c +++ b/drivers/gpu/drm/bridge/sil-sii8620.c @@ -177,7 +177,7 @@ static void sii8620_read_buf(struct sii8620 *ctx, u16 addr, u8 *buf, int len) static u8 sii8620_readb(struct sii8620 *ctx, u16 addr) { - u8 ret; + u8 ret = 0; sii8620_read_buf(ctx, addr, &ret, 1); return ret; From 0c0d30eaf31c354878603e0caaf05f085134567d Mon Sep 17 00:00:00 2001 From: John Garry Date: Thu, 9 Jul 2020 20:23:19 +0800 Subject: [PATCH 139/448] scsi: scsi_debug: Add check for sdebug_max_queue during module init [ Upstream commit c87bf24cfb60bce27b4d2c7e56ebfd86fb9d16bb ] sdebug_max_queue should not exceed SDEBUG_CANQUEUE, otherwise crashes like this can be triggered by passing an out-of-range value: Hardware name: Huawei D06 /D06, BIOS Hisilicon D06 UEFI RC0 - V1.16.01 03/15/2019 pstate: 20400009 (nzCv daif +PAN -UAO BTYPE=--) pc : schedule_resp+0x2a4/0xa70 [scsi_debug] lr : schedule_resp+0x52c/0xa70 [scsi_debug] sp : ffff800022ab36f0 x29: ffff800022ab36f0 x28: ffff0023a935a610 x27: ffff800008e0a648 x26: 0000000000000003 x25: ffff0023e84f3200 x24: 00000000003d0900 x23: 0000000000000000 x22: 0000000000000000 x21: ffff0023be60a320 x20: ffff0023be60b538 x19: ffff800008e13000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000001 x8 : 0000000000000000 x7 : 0000000000000000 x6 : 00000000000000c1 x5 : 0000020000200000 x4 : dead0000000000ff x3 : 0000000000000200 x2 : 0000000000000200 x1 : ffff800008e13d88 x0 : 0000000000000000 Call trace: schedule_resp+0x2a4/0xa70 [scsi_debug] scsi_debug_queuecommand+0x2c4/0x9e0 [scsi_debug] scsi_queue_rq+0x698/0x840 __blk_mq_try_issue_directly+0x108/0x228 blk_mq_request_issue_directly+0x58/0x98 blk_mq_try_issue_list_directly+0x5c/0xf0 blk_mq_sched_insert_requests+0x18c/0x200 blk_mq_flush_plug_list+0x11c/0x190 blk_flush_plug_list+0xdc/0x110 blk_finish_plug+0x38/0x210 blkdev_direct_IO+0x450/0x4d8 generic_file_read_iter+0x84/0x180 blkdev_read_iter+0x3c/0x50 aio_read+0xc0/0x170 io_submit_one+0x5c8/0xc98 __arm64_sys_io_submit+0x1b0/0x258 el0_svc_common.constprop.3+0x68/0x170 do_el0_svc+0x24/0x90 el0_sync_handler+0x13c/0x1a8 el0_sync+0x158/0x180 Code: 528847e0 72a001e0 6b00003f 540018cd (3941c340) In addition, it should not be less than 1. So add checks for these, and fail the module init for those cases. [mkp: changed if condition to match error message] Link: https://lore.kernel.org/r/1594297400-24756-2-git-send-email-john.garry@huawei.com Fixes: c483739430f1 ("scsi_debug: add multiple queue support") Reviewed-by: Ming Lei Acked-by: Douglas Gilbert Signed-off-by: John Garry Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/scsi_debug.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 32965ec76965..44181a2cbf18 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -5296,6 +5296,12 @@ static int __init scsi_debug_init(void) pr_err("submit_queues must be 1 or more\n"); return -EINVAL; } + + if ((sdebug_max_queue > SDEBUG_CANQUEUE) || (sdebug_max_queue < 1)) { + pr_err("max_queue must be in range [1, %d]\n", SDEBUG_CANQUEUE); + return -EINVAL; + } + sdebug_q_arr = kcalloc(submit_queues, sizeof(struct sdebug_queue), GFP_KERNEL); if (sdebug_q_arr == NULL) From b7fc8591cae4475cbee3fda24e6e92277122bf9f Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 8 Jul 2020 14:58:57 +0300 Subject: [PATCH 140/448] mwifiex: Prevent memory corruption handling keys [ Upstream commit e18696786548244914f36ec3c46ac99c53df99c3 ] The length of the key comes from the network and it's a 16 bit number. It needs to be capped to prevent a buffer overflow. Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver") Signed-off-by: Dan Carpenter Acked-by: Ganapathi Bhat Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200708115857.GA13729@mwanda Signed-off-by: Sasha Levin --- .../wireless/marvell/mwifiex/sta_cmdresp.c | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c index 20c206da0631..7ae2c34f65db 100644 --- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c @@ -580,6 +580,11 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv, { struct host_cmd_ds_802_11_key_material *key = &resp->params.key_material; + int len; + + len = le16_to_cpu(key->key_param_set.key_len); + if (len > sizeof(key->key_param_set.key)) + return -EINVAL; if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) { if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) { @@ -593,9 +598,8 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv, memset(priv->aes_key.key_param_set.key, 0, sizeof(key->key_param_set.key)); - priv->aes_key.key_param_set.key_len = key->key_param_set.key_len; - memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key, - le16_to_cpu(priv->aes_key.key_param_set.key_len)); + priv->aes_key.key_param_set.key_len = cpu_to_le16(len); + memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key, len); return 0; } @@ -610,9 +614,14 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { struct host_cmd_ds_802_11_key_material_v2 *key_v2; - __le16 len; + int len; key_v2 = &resp->params.key_material_v2; + + len = le16_to_cpu(key_v2->key_param_set.key_params.aes.key_len); + if (len > WLAN_KEY_LEN_CCMP) + return -EINVAL; + if (le16_to_cpu(key_v2->action) == HostCmd_ACT_GEN_SET) { if ((le16_to_cpu(key_v2->key_param_set.key_info) & KEY_MCAST)) { mwifiex_dbg(priv->adapter, INFO, "info: key: GTK is set\n"); @@ -628,10 +637,9 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv, memset(priv->aes_key_v2.key_param_set.key_params.aes.key, 0, WLAN_KEY_LEN_CCMP); priv->aes_key_v2.key_param_set.key_params.aes.key_len = - key_v2->key_param_set.key_params.aes.key_len; - len = priv->aes_key_v2.key_param_set.key_params.aes.key_len; + cpu_to_le16(len); memcpy(priv->aes_key_v2.key_param_set.key_params.aes.key, - key_v2->key_param_set.key_params.aes.key, le16_to_cpu(len)); + key_v2->key_param_set.key_params.aes.key, len); return 0; } From 936e927ece9bddd9153764c3ae9fb12709593536 Mon Sep 17 00:00:00 2001 From: Amir Goldstein Date: Wed, 8 Jul 2020 14:11:40 +0300 Subject: [PATCH 141/448] kernfs: do not call fsnotify() with name without a parent [ Upstream commit 9991bb84b27a2594187898f261866cfc50255454 ] When creating an FS_MODIFY event on inode itself (not on parent) the file_name argument should be NULL. The change to send a non NULL name to inode itself was done on purpuse as part of another commit, as Tejun writes: "...While at it, supply the target file name to fsnotify() from kernfs_node->name.". But this is wrong practice and inconsistent with inotify behavior when watching a single file. When a child is being watched (as opposed to the parent directory) the inotify event should contain the watch descriptor, but not the file name. Fixes: df6a58c5c5aa ("kernfs: don't depend on d_find_any_alias()...") Link: https://lore.kernel.org/r/20200708111156.24659-5-amir73il@gmail.com Acked-by: Tejun Heo Acked-by: Greg Kroah-Hartman Signed-off-by: Amir Goldstein Signed-off-by: Jan Kara Signed-off-by: Sasha Levin --- fs/kernfs/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index e8c792b49616..c35bbaa19486 100644 --- a/fs/kernfs/file.c +++ b/fs/kernfs/file.c @@ -912,7 +912,7 @@ repeat: } fsnotify(inode, FS_MODIFY, inode, FSNOTIFY_EVENT_INODE, - &name, 0); + NULL, 0); iput(inode); } From 7beea356fabba055f1731a8b22db14e61727b500 Mon Sep 17 00:00:00 2001 From: Nathan Lynch Date: Fri, 12 Jun 2020 00:12:22 -0500 Subject: [PATCH 142/448] powerpc/rtas: don't online CPUs for partition suspend [ Upstream commit ec2fc2a9e9bbad9023aab65bc472ce7a3ca8608f ] Partition suspension, used for hibernation and migration, requires that the OS place all but one of the LPAR's processor threads into one of two states prior to calling the ibm,suspend-me RTAS function: * the architected offline state (via RTAS stop-self); or * the H_JOIN hcall, which does not return until the partition resumes execution Using H_CEDE as the offline mode, introduced by commit 3aa565f53c39 ("powerpc/pseries: Add hooks to put the CPU into an appropriate offline state"), means that any threads which are offline from Linux's point of view must be moved to one of those two states before a partition suspension can proceed. This was eventually addressed in commit 120496ac2d2d ("powerpc: Bring all threads online prior to migration/hibernation"), which added code to temporarily bring up any offline processor threads so they can call H_JOIN. Conceptually this is fine, but the implementation has had multiple races with cpu hotplug operations initiated from user space[1][2][3], the error handling is fragile, and it generates user-visible cpu hotplug events which is a lot of noise for a platform feature that's supposed to minimize disruption to workloads. With commit 3aa565f53c39 ("powerpc/pseries: Add hooks to put the CPU into an appropriate offline state") reverted, this code becomes unnecessary, so remove it. Since any offline CPUs now are truly offline from the platform's point of view, it is no longer necessary to bring up CPUs only to have them call H_JOIN and then go offline again upon resuming. Only active threads are required to call H_JOIN; stopped threads can be left alone. [1] commit a6717c01ddc2 ("powerpc/rtas: use device model APIs and serialization during LPM") [2] commit 9fb603050ffd ("powerpc/rtas: retry when cpu offline races with suspend/migration") [3] commit dfd718a2ed1f ("powerpc/rtas: Fix a potential race between CPU-Offline & Migration") Fixes: 120496ac2d2d ("powerpc: Bring all threads online prior to migration/hibernation") Signed-off-by: Nathan Lynch Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200612051238.1007764-3-nathanl@linux.ibm.com Signed-off-by: Sasha Levin --- arch/powerpc/include/asm/rtas.h | 2 - arch/powerpc/kernel/rtas.c | 122 +---------------------- arch/powerpc/platforms/pseries/suspend.c | 22 +--- 3 files changed, 3 insertions(+), 143 deletions(-) diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 3c1887351c71..bd227e0eab07 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h @@ -368,8 +368,6 @@ extern int rtas_set_indicator_fast(int indicator, int index, int new_value); extern void rtas_progress(char *s, unsigned short hex); extern int rtas_suspend_cpu(struct rtas_suspend_me_data *data); extern int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data); -extern int rtas_online_cpus_mask(cpumask_var_t cpus); -extern int rtas_offline_cpus_mask(cpumask_var_t cpus); extern int rtas_ibm_suspend_me(u64 handle); struct rtc_time; diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index c5fa251b8950..01210593d60c 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -842,96 +842,6 @@ static void rtas_percpu_suspend_me(void *info) __rtas_suspend_cpu((struct rtas_suspend_me_data *)info, 1); } -enum rtas_cpu_state { - DOWN, - UP, -}; - -#ifndef CONFIG_SMP -static int rtas_cpu_state_change_mask(enum rtas_cpu_state state, - cpumask_var_t cpus) -{ - if (!cpumask_empty(cpus)) { - cpumask_clear(cpus); - return -EINVAL; - } else - return 0; -} -#else -/* On return cpumask will be altered to indicate CPUs changed. - * CPUs with states changed will be set in the mask, - * CPUs with status unchanged will be unset in the mask. */ -static int rtas_cpu_state_change_mask(enum rtas_cpu_state state, - cpumask_var_t cpus) -{ - int cpu; - int cpuret = 0; - int ret = 0; - - if (cpumask_empty(cpus)) - return 0; - - for_each_cpu(cpu, cpus) { - struct device *dev = get_cpu_device(cpu); - - switch (state) { - case DOWN: - cpuret = device_offline(dev); - break; - case UP: - cpuret = device_online(dev); - break; - } - if (cpuret < 0) { - pr_debug("%s: cpu_%s for cpu#%d returned %d.\n", - __func__, - ((state == UP) ? "up" : "down"), - cpu, cpuret); - if (!ret) - ret = cpuret; - if (state == UP) { - /* clear bits for unchanged cpus, return */ - cpumask_shift_right(cpus, cpus, cpu); - cpumask_shift_left(cpus, cpus, cpu); - break; - } else { - /* clear bit for unchanged cpu, continue */ - cpumask_clear_cpu(cpu, cpus); - } - } - cond_resched(); - } - - return ret; -} -#endif - -int rtas_online_cpus_mask(cpumask_var_t cpus) -{ - int ret; - - ret = rtas_cpu_state_change_mask(UP, cpus); - - if (ret) { - cpumask_var_t tmp_mask; - - if (!alloc_cpumask_var(&tmp_mask, GFP_KERNEL)) - return ret; - - /* Use tmp_mask to preserve cpus mask from first failure */ - cpumask_copy(tmp_mask, cpus); - rtas_offline_cpus_mask(tmp_mask); - free_cpumask_var(tmp_mask); - } - - return ret; -} - -int rtas_offline_cpus_mask(cpumask_var_t cpus) -{ - return rtas_cpu_state_change_mask(DOWN, cpus); -} - int rtas_ibm_suspend_me(u64 handle) { long state; @@ -939,8 +849,6 @@ int rtas_ibm_suspend_me(u64 handle) unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; struct rtas_suspend_me_data data; DECLARE_COMPLETION_ONSTACK(done); - cpumask_var_t offline_mask; - int cpuret; if (!rtas_service_present("ibm,suspend-me")) return -ENOSYS; @@ -961,9 +869,6 @@ int rtas_ibm_suspend_me(u64 handle) return -EIO; } - if (!alloc_cpumask_var(&offline_mask, GFP_KERNEL)) - return -ENOMEM; - atomic_set(&data.working, 0); atomic_set(&data.done, 0); atomic_set(&data.error, 0); @@ -972,24 +877,8 @@ int rtas_ibm_suspend_me(u64 handle) lock_device_hotplug(); - /* All present CPUs must be online */ - cpumask_andnot(offline_mask, cpu_present_mask, cpu_online_mask); - cpuret = rtas_online_cpus_mask(offline_mask); - if (cpuret) { - pr_err("%s: Could not bring present CPUs online.\n", __func__); - atomic_set(&data.error, cpuret); - goto out; - } - cpu_hotplug_disable(); - /* Check if we raced with a CPU-Offline Operation */ - if (!cpumask_equal(cpu_present_mask, cpu_online_mask)) { - pr_info("%s: Raced against a concurrent CPU-Offline\n", __func__); - atomic_set(&data.error, -EAGAIN); - goto out_hotplug_enable; - } - /* Call function on all CPUs. One of us will make the * rtas call */ @@ -1000,18 +889,11 @@ int rtas_ibm_suspend_me(u64 handle) if (atomic_read(&data.error) != 0) printk(KERN_ERR "Error doing global join\n"); -out_hotplug_enable: + cpu_hotplug_enable(); - /* Take down CPUs not online prior to suspend */ - cpuret = rtas_offline_cpus_mask(offline_mask); - if (cpuret) - pr_warn("%s: Could not restore CPUs to offline state.\n", - __func__); - -out: unlock_device_hotplug(); - free_cpumask_var(offline_mask); + return atomic_read(&data.error); } #else /* CONFIG_PPC_PSERIES */ diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c index 0a24a5a185f0..f789693f61f4 100644 --- a/arch/powerpc/platforms/pseries/suspend.c +++ b/arch/powerpc/platforms/pseries/suspend.c @@ -132,15 +132,11 @@ static ssize_t store_hibernate(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { - cpumask_var_t offline_mask; int rc; if (!capable(CAP_SYS_ADMIN)) return -EPERM; - if (!alloc_cpumask_var(&offline_mask, GFP_KERNEL)) - return -ENOMEM; - stream_id = simple_strtoul(buf, NULL, 16); do { @@ -150,32 +146,16 @@ static ssize_t store_hibernate(struct device *dev, } while (rc == -EAGAIN); if (!rc) { - /* All present CPUs must be online */ - cpumask_andnot(offline_mask, cpu_present_mask, - cpu_online_mask); - rc = rtas_online_cpus_mask(offline_mask); - if (rc) { - pr_err("%s: Could not bring present CPUs online.\n", - __func__); - goto out; - } - stop_topology_update(); rc = pm_suspend(PM_SUSPEND_MEM); start_topology_update(); - - /* Take down CPUs not online prior to suspend */ - if (!rtas_offline_cpus_mask(offline_mask)) - pr_warn("%s: Could not restore CPUs to offline " - "state.\n", __func__); } stream_id = 0; if (!rc) rc = count; -out: - free_cpumask_var(offline_mask); + return rc; } From 978bef91cad7f0d074044e9864bbb41320d26359 Mon Sep 17 00:00:00 2001 From: Milton Miller Date: Thu, 16 Jul 2020 09:37:04 +1000 Subject: [PATCH 143/448] powerpc/vdso: Fix vdso cpu truncation [ Upstream commit a9f675f950a07d5c1dbcbb97aabac56f5ed085e3 ] The code in vdso_cpu_init that exposes the cpu and numa node to userspace via SPRG_VDSO incorrctly masks the cpu to 12 bits. This means that any kernel running on a box with more than 4096 threads (NR_CPUS advertises a limit of of 8192 cpus) would expose userspace to two cpu contexts running at the same time with the same cpu number. Note: I'm not aware of any distro shipping a kernel with support for more than 4096 threads today, nor of any system image that currently exceeds 4096 threads. Found via code browsing. Fixes: 18ad51dd342a7eb09dbcd059d0b451b616d4dafc ("powerpc: Add VDSO version of getcpu") Signed-off-by: Milton Miller Signed-off-by: Anton Blanchard Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200715233704.1352257-1-anton@ozlabs.org Signed-off-by: Sasha Levin --- arch/powerpc/kernel/vdso.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index eae9ddaecbcf..efb1ba40274a 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -682,7 +682,7 @@ int vdso_getcpu_init(void) node = cpu_to_node(cpu); WARN_ON_ONCE(node > 0xffff); - val = (cpu & 0xfff) | ((node & 0xffff) << 16); + val = (cpu & 0xffff) | ((node & 0xffff) << 16); mtspr(SPRN_SPRG_VDSO_WRITE, val); get_paca()->sprg_vdso = val; From 4cf66d70b5efcd360d0214f93009758b55c2025d Mon Sep 17 00:00:00 2001 From: Yuval Basson Date: Wed, 8 Jul 2020 22:55:26 +0300 Subject: [PATCH 144/448] RDMA/qedr: SRQ's bug fixes [ Upstream commit acca72e2b031b9fbb4184511072bd246a0abcebc ] QP's with the same SRQ, working on different CQs and running in parallel on different CPUs could lead to a race when maintaining the SRQ consumer count, and leads to FW running out of SRQs. Update the consumer atomically. Make sure the wqe_prod is updated after the sge_prod due to FW requirements. Fixes: 3491c9e799fb ("qedr: Add support for kernel mode SRQ's") Link: https://lore.kernel.org/r/20200708195526.31040-1-ybason@marvell.com Signed-off-by: Michal Kalderon Signed-off-by: Yuval Basson Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/hw/qedr/qedr.h | 4 ++-- drivers/infiniband/hw/qedr/verbs.c | 22 ++++++++++------------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/infiniband/hw/qedr/qedr.h b/drivers/infiniband/hw/qedr/qedr.h index 8e927f6c1520..ed56df319d2d 100644 --- a/drivers/infiniband/hw/qedr/qedr.h +++ b/drivers/infiniband/hw/qedr/qedr.h @@ -349,10 +349,10 @@ struct qedr_srq_hwq_info { u32 wqe_prod; u32 sge_prod; u32 wr_prod_cnt; - u32 wr_cons_cnt; + atomic_t wr_cons_cnt; u32 num_elems; - u32 *virt_prod_pair_addr; + struct rdma_srq_producers *virt_prod_pair_addr; dma_addr_t phy_prod_pair_addr; }; diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c index 8b4240c1cc76..16a994fd7d0a 100644 --- a/drivers/infiniband/hw/qedr/verbs.c +++ b/drivers/infiniband/hw/qedr/verbs.c @@ -3460,7 +3460,7 @@ static u32 qedr_srq_elem_left(struct qedr_srq_hwq_info *hw_srq) * count and consumer count and subtract it from max * work request supported so that we get elements left. */ - used = hw_srq->wr_prod_cnt - hw_srq->wr_cons_cnt; + used = hw_srq->wr_prod_cnt - (u32)atomic_read(&hw_srq->wr_cons_cnt); return hw_srq->max_wr - used; } @@ -3475,7 +3475,6 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, unsigned long flags; int status = 0; u32 num_sge; - u32 offset; spin_lock_irqsave(&srq->lock, flags); @@ -3488,7 +3487,8 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, if (!qedr_srq_elem_left(hw_srq) || wr->num_sge > srq->hw_srq.max_sges) { DP_ERR(dev, "Can't post WR (%d,%d) || (%d > %d)\n", - hw_srq->wr_prod_cnt, hw_srq->wr_cons_cnt, + hw_srq->wr_prod_cnt, + atomic_read(&hw_srq->wr_cons_cnt), wr->num_sge, srq->hw_srq.max_sges); status = -ENOMEM; *bad_wr = wr; @@ -3522,22 +3522,20 @@ int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, hw_srq->sge_prod++; } - /* Flush WQE and SGE information before + /* Update WQE and SGE information before * updating producer. */ - wmb(); + dma_wmb(); /* SRQ producer is 8 bytes. Need to update SGE producer index * in first 4 bytes and need to update WQE producer in * next 4 bytes. */ - *srq->hw_srq.virt_prod_pair_addr = hw_srq->sge_prod; - offset = offsetof(struct rdma_srq_producers, wqe_prod); - *((u8 *)srq->hw_srq.virt_prod_pair_addr + offset) = - hw_srq->wqe_prod; + srq->hw_srq.virt_prod_pair_addr->sge_prod = hw_srq->sge_prod; + /* Make sure sge producer is updated first */ + dma_wmb(); + srq->hw_srq.virt_prod_pair_addr->wqe_prod = hw_srq->wqe_prod; - /* Flush producer after updating it. */ - wmb(); wr = wr->next; } @@ -3956,7 +3954,7 @@ static int process_resp_one_srq(struct qedr_dev *dev, struct qedr_qp *qp, } else { __process_resp_one(dev, qp, cq, wc, resp, wr_id); } - srq->hw_srq.wr_cons_cnt++; + atomic_inc(&srq->hw_srq.wr_cons_cnt); return 1; } From 7ecfbee3b9c38f263e64c06aac5ca861ac57362a Mon Sep 17 00:00:00 2001 From: Mikhail Malygin Date: Thu, 16 Jul 2020 22:03:41 +0300 Subject: [PATCH 145/448] RDMA/rxe: Prevent access to wr->next ptr afrer wr is posted to send queue [ Upstream commit 5f0b2a6093a4d9aab093964c65083fe801ef1e58 ] rxe_post_send_kernel() iterates over linked list of wr's, until the wr->next ptr is NULL. However if we've got an interrupt after last wr is posted, control may be returned to the code after send completion callback is executed and wr memory is freed. As a result, wr->next pointer may contain incorrect value leading to panic. Store the wr->next on the stack before posting it. Fixes: 8700e3e7c485 ("Soft RoCE driver") Link: https://lore.kernel.org/r/20200716190340.23453-1-m.malygin@yadro.com Signed-off-by: Mikhail Malygin Signed-off-by: Sergey Kojushev Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/sw/rxe/rxe_verbs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c index 623129f27f5a..71358b0b8910 100644 --- a/drivers/infiniband/sw/rxe/rxe_verbs.c +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c @@ -679,6 +679,7 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr, unsigned int mask; unsigned int length = 0; int i; + struct ib_send_wr *next; while (wr) { mask = wr_opcode_mask(wr->opcode, qp); @@ -695,6 +696,8 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr, break; } + next = wr->next; + length = 0; for (i = 0; i < wr->num_sge; i++) length += wr->sg_list[i].length; @@ -705,7 +708,7 @@ static int rxe_post_send_kernel(struct rxe_qp *qp, const struct ib_send_wr *wr, *bad_wr = wr; break; } - wr = wr->next; + wr = next; } rxe_run_task(&qp->req.task, 1); From 209207562934ee9dbf6e9bb23a1641377b056bdb Mon Sep 17 00:00:00 2001 From: Tyler Hicks Date: Thu, 9 Jul 2020 01:19:00 -0500 Subject: [PATCH 146/448] ima: Have the LSM free its audit rule [ Upstream commit 9ff8a616dfab96a4fa0ddd36190907dc68886d9b ] Ask the LSM to free its audit rule rather than directly calling kfree(). Both AppArmor and SELinux do additional work in their audit_rule_free() hooks. Fix memory leaks by allowing the LSMs to perform necessary work. Fixes: b16942455193 ("ima: use the lsm policy update notifier") Signed-off-by: Tyler Hicks Cc: Janne Karhunen Cc: Casey Schaufler Reviewed-by: Mimi Zohar Signed-off-by: Mimi Zohar Signed-off-by: Sasha Levin --- security/integrity/ima/ima.h | 5 +++++ security/integrity/ima/ima_policy.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h index be469fce19e1..8173982e00ab 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h @@ -362,6 +362,7 @@ static inline void ima_free_modsig(struct modsig *modsig) #ifdef CONFIG_IMA_LSM_RULES #define security_filter_rule_init security_audit_rule_init +#define security_filter_rule_free security_audit_rule_free #define security_filter_rule_match security_audit_rule_match #else @@ -372,6 +373,10 @@ static inline int security_filter_rule_init(u32 field, u32 op, char *rulestr, return -EINVAL; } +static inline void security_filter_rule_free(void *lsmrule) +{ +} + static inline int security_filter_rule_match(u32 secid, u32 field, u32 op, void *lsmrule) { diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 558a7607bf93..e725d4187271 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -254,7 +254,7 @@ static void ima_lsm_free_rule(struct ima_rule_entry *entry) int i; for (i = 0; i < MAX_LSM_RULES; i++) { - kfree(entry->lsm[i].rule); + security_filter_rule_free(entry->lsm[i].rule); kfree(entry->lsm[i].args_p); } kfree(entry); From 2698fab03884012ecda119b9e5638969c33d27ce Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Thu, 16 Jul 2020 16:47:20 +0100 Subject: [PATCH 147/448] staging: rtl8192u: fix a dubious looking mask before a shift [ Upstream commit c4283950a9a4d3bf4a3f362e406c80ab14f10714 ] Currently the masking of ret with 0xff and followed by a right shift of 8 bits always leaves a zero result. It appears the mask of 0xff is incorrect and should be 0xff00, but I don't have the hardware to test this. Fix this to mask the upper 8 bits before shifting. [ Not tested ] Addresses-Coverity: ("Operands don't affect result") Fixes: 8fc8598e61f6 ("Staging: Added Realtek rtl8192u driver to staging") Signed-off-by: Colin Ian King Link: https://lore.kernel.org/r/20200716154720.1710252-1-colin.king@canonical.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/staging/rtl8192u/r8192U_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 511136dce3a4..ddc09616248a 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -2401,7 +2401,7 @@ static int rtl8192_read_eeprom_info(struct net_device *dev) ret = eprom_read(dev, (EEPROM_TX_PW_INDEX_CCK >> 1)); if (ret < 0) return ret; - priv->EEPROMTxPowerLevelCCK = ((u16)ret & 0xff) >> 8; + priv->EEPROMTxPowerLevelCCK = ((u16)ret & 0xff00) >> 8; } else priv->EEPROMTxPowerLevelCCK = 0x10; RT_TRACE(COMP_EPROM, "CCK Tx Power Levl: 0x%02x\n", priv->EEPROMTxPowerLevelCCK); From c537bd0732eaa261406861dc3ecdfd1d5bee70f2 Mon Sep 17 00:00:00 2001 From: Jing Xiangfeng Date: Fri, 17 Jul 2020 16:22:42 +0800 Subject: [PATCH 148/448] ASoC: meson: fixes the missed kfree() for axg_card_add_tdm_loopback [ Upstream commit bd054ece7d9cdd88e900df6625e951a01d9f655e ] axg_card_add_tdm_loopback() misses to call kfree() in an error path. We can use devm_kasprintf() to fix the issue, also improve maintainability. So use it instead. Fixes: c84836d7f650 ("ASoC: meson: axg-card: use modern dai_link style") Signed-off-by: Jing Xiangfeng Reviewed-by: Jerome Brunet Link: https://lore.kernel.org/r/20200717082242.130627-1-jingxiangfeng@huawei.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/meson/axg-card.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/meson/axg-card.c b/sound/soc/meson/axg-card.c index 1f698adde506..7126344017fa 100644 --- a/sound/soc/meson/axg-card.c +++ b/sound/soc/meson/axg-card.c @@ -266,7 +266,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card, lb = &card->dai_link[*index + 1]; - lb->name = kasprintf(GFP_KERNEL, "%s-lb", pad->name); + lb->name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-lb", pad->name); if (!lb->name) return -ENOMEM; From e82e9db82faf8465660c423dfee4f37910039410 Mon Sep 17 00:00:00 2001 From: Xiongfeng Wang Date: Fri, 17 Jul 2020 15:59:25 +0800 Subject: [PATCH 149/448] PCI/ASPM: Add missing newline in sysfs 'policy' [ Upstream commit 3167e3d340c092fd47924bc4d23117a3074ef9a9 ] When I cat ASPM parameter 'policy' by sysfs, it displays as follows. Add a newline for easy reading. Other sysfs attributes already include a newline. [root@localhost ~]# cat /sys/module/pcie_aspm/parameters/policy [default] performance powersave powersupersave [root@localhost ~]# Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support") Link: https://lore.kernel.org/r/1594972765-10404-1-git-send-email-wangxiongfeng2@huawei.com Signed-off-by: Xiongfeng Wang Signed-off-by: Bjorn Helgaas Signed-off-by: Sasha Levin --- drivers/pci/pcie/aspm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 4a0ec34062d6..7624c71011c6 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -1157,6 +1157,7 @@ static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp) cnt += sprintf(buffer + cnt, "[%s] ", policy_str[i]); else cnt += sprintf(buffer + cnt, "%s ", policy_str[i]); + cnt += sprintf(buffer + cnt, "\n"); return cnt; } From 6112c341ba3a1b1b0c0b65bbfefea04a001f4486 Mon Sep 17 00:00:00 2001 From: Yoshihiro Shimoda Date: Fri, 17 Jul 2020 20:44:56 +0900 Subject: [PATCH 150/448] phy: renesas: rcar-gen3-usb2: move irq registration to init [ Upstream commit 08b0ad375ca66181faee725b1b358bcae8d592ee ] If CONFIG_DEBUG_SHIRQ was enabled, r8a77951-salvator-xs could boot correctly. If we appended "earlycon keep_bootcon" to the kernel command like, we could get kernel log like below. SError Interrupt on CPU0, code 0xbf000002 -- SError CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.8.0-rc3-salvator-x-00505-g6c843129e6faaf01 #785 Hardware name: Renesas Salvator-X 2nd version board based on r8a77951 (DT) pstate: 60400085 (nZCv daIf +PAN -UAO BTYPE=--) pc : rcar_gen3_phy_usb2_irq+0x14/0x54 lr : free_irq+0xf4/0x27c This means free_irq() calls the interrupt handler while PM runtime is not getting if DEBUG_SHIRQ is enabled and rcar_gen3_phy_usb2_probe() failed. To fix the issue, move the irq registration place to rcar_gen3_phy_usb2_init() which is ready to handle the interrupts. Note that after the commit 549b6b55b005 ("phy: renesas: rcar-gen3-usb2: enable/disable independent irqs") which is merged into v5.2, since this driver creates multiple phy instances, needs to check whether one of phy instances is initialized. However, if we backport this patch to v5.1 or less, we don't need to check it because such kernel have single phy instance. Reported-by: Wolfram Sang Reported-by: Geert Uytterhoeven Fixes: 9f391c574efc ("phy: rcar-gen3-usb2: add runtime ID/VBUS pin detection") Signed-off-by: Yoshihiro Shimoda Link: https://lore.kernel.org/r/1594986297-12434-2-git-send-email-yoshihiro.shimoda.uh@renesas.com Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 61 +++++++++++++----------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c index bfb22f868857..5087b7c44d55 100644 --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c @@ -111,6 +111,7 @@ struct rcar_gen3_chan { struct work_struct work; struct mutex lock; /* protects rphys[...].powered */ enum usb_dr_mode dr_mode; + int irq; bool extcon_host; bool is_otg_channel; bool uses_otg_pins; @@ -389,12 +390,38 @@ static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch) rcar_gen3_device_recognition(ch); } +static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch) +{ + struct rcar_gen3_chan *ch = _ch; + void __iomem *usb2_base = ch->base; + u32 status = readl(usb2_base + USB2_OBINTSTA); + irqreturn_t ret = IRQ_NONE; + + if (status & USB2_OBINT_BITS) { + dev_vdbg(ch->dev, "%s: %08x\n", __func__, status); + writel(USB2_OBINT_BITS, usb2_base + USB2_OBINTSTA); + rcar_gen3_device_recognition(ch); + ret = IRQ_HANDLED; + } + + return ret; +} + static int rcar_gen3_phy_usb2_init(struct phy *p) { struct rcar_gen3_phy *rphy = phy_get_drvdata(p); struct rcar_gen3_chan *channel = rphy->ch; void __iomem *usb2_base = channel->base; u32 val; + int ret; + + if (!rcar_gen3_is_any_rphy_initialized(channel) && channel->irq >= 0) { + INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work); + ret = request_irq(channel->irq, rcar_gen3_phy_usb2_irq, + IRQF_SHARED, dev_name(channel->dev), channel); + if (ret < 0) + dev_err(channel->dev, "No irq handler (%d)\n", channel->irq); + } /* Initialize USB2 part */ val = readl(usb2_base + USB2_INT_ENABLE); @@ -433,6 +460,9 @@ static int rcar_gen3_phy_usb2_exit(struct phy *p) val &= ~USB2_INT_ENABLE_UCOM_INTEN; writel(val, usb2_base + USB2_INT_ENABLE); + if (channel->irq >= 0 && !rcar_gen3_is_any_rphy_initialized(channel)) + free_irq(channel->irq, channel); + return 0; } @@ -503,23 +533,6 @@ static const struct phy_ops rz_g1c_phy_usb2_ops = { .owner = THIS_MODULE, }; -static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch) -{ - struct rcar_gen3_chan *ch = _ch; - void __iomem *usb2_base = ch->base; - u32 status = readl(usb2_base + USB2_OBINTSTA); - irqreturn_t ret = IRQ_NONE; - - if (status & USB2_OBINT_BITS) { - dev_vdbg(ch->dev, "%s: %08x\n", __func__, status); - writel(USB2_OBINT_BITS, usb2_base + USB2_OBINTSTA); - rcar_gen3_device_recognition(ch); - ret = IRQ_HANDLED; - } - - return ret; -} - static const struct of_device_id rcar_gen3_phy_usb2_match_table[] = { { .compatible = "renesas,usb2-phy-r8a77470", @@ -598,7 +611,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) struct phy_provider *provider; struct resource *res; const struct phy_ops *phy_usb2_ops; - int irq, ret = 0, i; + int ret = 0, i; if (!dev->of_node) { dev_err(dev, "This driver needs device tree\n"); @@ -614,16 +627,8 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) if (IS_ERR(channel->base)) return PTR_ERR(channel->base); - /* call request_irq for OTG */ - irq = platform_get_irq_optional(pdev, 0); - if (irq >= 0) { - INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work); - irq = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq, - IRQF_SHARED, dev_name(dev), channel); - if (irq < 0) - dev_err(dev, "No irq handler (%d)\n", irq); - } - + /* get irq number here and request_irq for OTG in phy_init */ + channel->irq = platform_get_irq_optional(pdev, 0); channel->dr_mode = rcar_gen3_get_dr_mode(dev->of_node); if (channel->dr_mode != USB_DR_MODE_UNKNOWN) { int ret; From 44ae76d01d956a1ed0252914ad875c7831b9ad02 Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Thu, 9 Jul 2020 08:59:24 +0530 Subject: [PATCH 151/448] powerpc/book3s64/pkeys: Use PVR check instead of cpu feature [ Upstream commit d79e7a5f26f1d179cbb915a8bf2469b6d7431c29 ] We are wrongly using CPU_FTRS_POWER8 to check for P8 support. Instead, we should use PVR value. Now considering we are using CPU_FTRS_POWER8, that implies we returned true for P9 with older firmware. Keep the same behavior by checking for P9 PVR value. Fixes: cf43d3b26452 ("powerpc: Enable pkey subsystem") Signed-off-by: Aneesh Kumar K.V Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200709032946.881753-2-aneesh.kumar@linux.ibm.com Signed-off-by: Sasha Levin --- arch/powerpc/mm/book3s64/pkeys.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/mm/book3s64/pkeys.c b/arch/powerpc/mm/book3s64/pkeys.c index 66f307e873dc..432fd9fa8c3f 100644 --- a/arch/powerpc/mm/book3s64/pkeys.c +++ b/arch/powerpc/mm/book3s64/pkeys.c @@ -83,13 +83,17 @@ static int pkey_initialize(void) scan_pkey_feature(); /* - * Let's assume 32 pkeys on P8 bare metal, if its not defined by device - * tree. We make this exception since skiboot forgot to expose this - * property on power8. + * Let's assume 32 pkeys on P8/P9 bare metal, if its not defined by device + * tree. We make this exception since some version of skiboot forgot to + * expose this property on power8/9. */ - if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR) && - cpu_has_feature(CPU_FTRS_POWER8)) - pkeys_total = 32; + if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR)) { + unsigned long pvr = mfspr(SPRN_PVR); + + if (PVR_VER(pvr) == PVR_POWER8 || PVR_VER(pvr) == PVR_POWER8E || + PVR_VER(pvr) == PVR_POWER8NVL || PVR_VER(pvr) == PVR_POWER9) + pkeys_total = 32; + } /* * Adjust the upper limit, based on the number of bits supported by From 1a279871012d34c879c72eeaaf1f449b7d5e6731 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 11 Jun 2020 14:43:31 +0200 Subject: [PATCH 152/448] drm/imx: fix use after free [ Upstream commit ba807c94f67fd64b3051199810d9e4dd209fdc00 ] Component driver structures allocated with devm_kmalloc() in bind() are freed automatically after unbind(). Since the contained drm structures are accessed afterwards in drm_mode_config_cleanup(), move the allocation into probe() to extend the driver structure's lifetime to the lifetime of the device. This should eventually be changed to use drm resource managed allocations with lifetime of the drm device. We also need to ensure that all componets are available during the unbind() so we need to call component_unbind_all() before we free non-devres resources like planes. Note this patch fixes the the use after free bug but introduces a possible boot loop issue. The issue is triggered if the HDMI support is enabled and a component driver always return -EPROBE_DEFER, see discussion [1] for more details. [1] https://lkml.org/lkml/2020/3/24/1467 Fixes: 17b5001b5143 ("imx-drm: convert to componentised device support") Signed-off-by: Philipp Zabel [m.felsch@pengutronix: fix imx_tve_probe()] [m.felsch@pengutronix: resort component_unbind_all()) [m.felsch@pengutronix: adapt commit message] Signed-off-by: Marco Felsch Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/drm/imx/dw_hdmi-imx.c | 15 ++++++++++----- drivers/gpu/drm/imx/imx-drm-core.c | 3 ++- drivers/gpu/drm/imx/imx-ldb.c | 15 ++++++++++----- drivers/gpu/drm/imx/imx-tve.c | 15 ++++++++++----- drivers/gpu/drm/imx/ipuv3-crtc.c | 21 ++++++++++----------- drivers/gpu/drm/imx/parallel-display.c | 15 ++++++++++----- 6 files changed, 52 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c index f22cfbf9353e..2e12a4a3bfa1 100644 --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c @@ -212,9 +212,8 @@ static int dw_hdmi_imx_bind(struct device *dev, struct device *master, if (!pdev->dev.of_node) return -ENODEV; - hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); - if (!hdmi) - return -ENOMEM; + hdmi = dev_get_drvdata(dev); + memset(hdmi, 0, sizeof(*hdmi)); match = of_match_node(dw_hdmi_imx_dt_ids, pdev->dev.of_node); plat_data = match->data; @@ -239,8 +238,6 @@ static int dw_hdmi_imx_bind(struct device *dev, struct device *master, drm_encoder_init(drm, encoder, &dw_hdmi_imx_encoder_funcs, DRM_MODE_ENCODER_TMDS, NULL); - platform_set_drvdata(pdev, hdmi); - hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data); /* @@ -270,6 +267,14 @@ static const struct component_ops dw_hdmi_imx_ops = { static int dw_hdmi_imx_probe(struct platform_device *pdev) { + struct imx_hdmi *hdmi; + + hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); + if (!hdmi) + return -ENOMEM; + + platform_set_drvdata(pdev, hdmi); + return component_add(&pdev->dev, &dw_hdmi_imx_ops); } diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index da87c70e413b..881c36d0f16b 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c @@ -281,9 +281,10 @@ static void imx_drm_unbind(struct device *dev) drm_kms_helper_poll_fini(drm); + component_unbind_all(drm->dev, drm); + drm_mode_config_cleanup(drm); - component_unbind_all(drm->dev, drm); dev_set_drvdata(dev, NULL); drm_dev_put(drm); diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index 695f307f36b2..9af5a08d5490 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -593,9 +593,8 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data) int ret; int i; - imx_ldb = devm_kzalloc(dev, sizeof(*imx_ldb), GFP_KERNEL); - if (!imx_ldb) - return -ENOMEM; + imx_ldb = dev_get_drvdata(dev); + memset(imx_ldb, 0, sizeof(*imx_ldb)); imx_ldb->regmap = syscon_regmap_lookup_by_phandle(np, "gpr"); if (IS_ERR(imx_ldb->regmap)) { @@ -703,8 +702,6 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data) } } - dev_set_drvdata(dev, imx_ldb); - return 0; free_child: @@ -736,6 +733,14 @@ static const struct component_ops imx_ldb_ops = { static int imx_ldb_probe(struct platform_device *pdev) { + struct imx_ldb *imx_ldb; + + imx_ldb = devm_kzalloc(&pdev->dev, sizeof(*imx_ldb), GFP_KERNEL); + if (!imx_ldb) + return -ENOMEM; + + platform_set_drvdata(pdev, imx_ldb); + return component_add(&pdev->dev, &imx_ldb_ops); } diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c index 5bbfaa2cd0f4..9fd4b464e829 100644 --- a/drivers/gpu/drm/imx/imx-tve.c +++ b/drivers/gpu/drm/imx/imx-tve.c @@ -546,9 +546,8 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) int irq; int ret; - tve = devm_kzalloc(dev, sizeof(*tve), GFP_KERNEL); - if (!tve) - return -ENOMEM; + tve = dev_get_drvdata(dev); + memset(tve, 0, sizeof(*tve)); tve->dev = dev; spin_lock_init(&tve->lock); @@ -659,8 +658,6 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) if (ret) return ret; - dev_set_drvdata(dev, tve); - return 0; } @@ -680,6 +677,14 @@ static const struct component_ops imx_tve_ops = { static int imx_tve_probe(struct platform_device *pdev) { + struct imx_tve *tve; + + tve = devm_kzalloc(&pdev->dev, sizeof(*tve), GFP_KERNEL); + if (!tve) + return -ENOMEM; + + platform_set_drvdata(pdev, tve); + return component_add(&pdev->dev, &imx_tve_ops); } diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c index 63c0284f8b3c..2256c9789fc2 100644 --- a/drivers/gpu/drm/imx/ipuv3-crtc.c +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c @@ -438,21 +438,13 @@ static int ipu_drm_bind(struct device *dev, struct device *master, void *data) struct ipu_client_platformdata *pdata = dev->platform_data; struct drm_device *drm = data; struct ipu_crtc *ipu_crtc; - int ret; - ipu_crtc = devm_kzalloc(dev, sizeof(*ipu_crtc), GFP_KERNEL); - if (!ipu_crtc) - return -ENOMEM; + ipu_crtc = dev_get_drvdata(dev); + memset(ipu_crtc, 0, sizeof(*ipu_crtc)); ipu_crtc->dev = dev; - ret = ipu_crtc_init(ipu_crtc, pdata, drm); - if (ret) - return ret; - - dev_set_drvdata(dev, ipu_crtc); - - return 0; + return ipu_crtc_init(ipu_crtc, pdata, drm); } static void ipu_drm_unbind(struct device *dev, struct device *master, @@ -474,6 +466,7 @@ static const struct component_ops ipu_crtc_ops = { static int ipu_drm_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + struct ipu_crtc *ipu_crtc; int ret; if (!dev->platform_data) @@ -483,6 +476,12 @@ static int ipu_drm_probe(struct platform_device *pdev) if (ret) return ret; + ipu_crtc = devm_kzalloc(dev, sizeof(*ipu_crtc), GFP_KERNEL); + if (!ipu_crtc) + return -ENOMEM; + + dev_set_drvdata(dev, ipu_crtc); + return component_add(dev, &ipu_crtc_ops); } diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c index e7ce17503ae1..be55548f352a 100644 --- a/drivers/gpu/drm/imx/parallel-display.c +++ b/drivers/gpu/drm/imx/parallel-display.c @@ -204,9 +204,8 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) u32 bus_format = 0; const char *fmt; - imxpd = devm_kzalloc(dev, sizeof(*imxpd), GFP_KERNEL); - if (!imxpd) - return -ENOMEM; + imxpd = dev_get_drvdata(dev); + memset(imxpd, 0, sizeof(*imxpd)); edidp = of_get_property(np, "edid", &imxpd->edid_len); if (edidp) @@ -236,8 +235,6 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) if (ret) return ret; - dev_set_drvdata(dev, imxpd); - return 0; } @@ -259,6 +256,14 @@ static const struct component_ops imx_pd_ops = { static int imx_pd_probe(struct platform_device *pdev) { + struct imx_parallel_display *imxpd; + + imxpd = devm_kzalloc(&pdev->dev, sizeof(*imxpd), GFP_KERNEL); + if (!imxpd) + return -ENOMEM; + + platform_set_drvdata(pdev, imxpd); + return component_add(&pdev->dev, &imx_pd_ops); } From e66ffe919ed4cba99b0d393d490a6e655f8902ed Mon Sep 17 00:00:00 2001 From: Marco Felsch Date: Thu, 11 Jun 2020 14:43:32 +0200 Subject: [PATCH 153/448] drm/imx: tve: fix regulator_disable error path [ Upstream commit 7bb58b987fee26da2a1665c01033022624986b7c ] Add missing regulator_disable() as devm_action to avoid dedicated unbind() callback and fix the missing error handling. Fixes: fcbc51e54d2a ("staging: drm/imx: Add support for Television Encoder (TVEv2)") Signed-off-by: Marco Felsch Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/drm/imx/imx-tve.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c index 9fd4b464e829..f91c3eb7697b 100644 --- a/drivers/gpu/drm/imx/imx-tve.c +++ b/drivers/gpu/drm/imx/imx-tve.c @@ -494,6 +494,13 @@ static int imx_tve_register(struct drm_device *drm, struct imx_tve *tve) return 0; } +static void imx_tve_disable_regulator(void *data) +{ + struct imx_tve *tve = data; + + regulator_disable(tve->dac_reg); +} + static bool imx_tve_readable_reg(struct device *dev, unsigned int reg) { return (reg % 4 == 0) && (reg <= 0xdc); @@ -617,6 +624,9 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) ret = regulator_enable(tve->dac_reg); if (ret) return ret; + ret = devm_add_action_or_reset(dev, imx_tve_disable_regulator, tve); + if (ret) + return ret; } tve->clk = devm_clk_get(dev, "tve"); @@ -661,18 +671,8 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) return 0; } -static void imx_tve_unbind(struct device *dev, struct device *master, - void *data) -{ - struct imx_tve *tve = dev_get_drvdata(dev); - - if (!IS_ERR(tve->dac_reg)) - regulator_disable(tve->dac_reg); -} - static const struct component_ops imx_tve_ops = { .bind = imx_tve_bind, - .unbind = imx_tve_unbind, }; static int imx_tve_probe(struct platform_device *pdev) From 7e206d89e1c7cdc8b84b9b08aebbc363f7a9b4ad Mon Sep 17 00:00:00 2001 From: Steve Longerbeam Date: Wed, 17 Jun 2020 15:40:36 -0700 Subject: [PATCH 154/448] gpu: ipu-v3: Restore RGB32, BGR32 [ Upstream commit 22b2cfad752d4b278ea7c38c0ee961ca50198ce8 ] RGB32 and BGR32 formats were inadvertently removed from the switch statement in ipu_pixelformat_to_colorspace(). Restore them. Fixes: a59957172b0c ("gpu: ipu-v3: enable remaining 32-bit RGB V4L2 pixel formats") Signed-off-by: Steve Longerbeam Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/ipu-v3/ipu-common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index ee2a025e54cf..b3dae9ec1a38 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c @@ -124,6 +124,8 @@ enum ipu_color_space ipu_pixelformat_to_colorspace(u32 pixelformat) case V4L2_PIX_FMT_RGBX32: case V4L2_PIX_FMT_ARGB32: case V4L2_PIX_FMT_XRGB32: + case V4L2_PIX_FMT_RGB32: + case V4L2_PIX_FMT_BGR32: return IPUV3_COLORSPACE_RGB; default: return IPUV3_COLORSPACE_UNKNOWN; From 278b532dfeaf42fbcda8b69d0b7c4cb1e8eb9be0 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Fri, 17 Jul 2020 23:56:48 +0200 Subject: [PATCH 155/448] spi: lantiq-ssc: Fix warning by using WQ_MEM_RECLAIM [ Upstream commit ba3548cf29616b58c93bbaffc3d636898d009858 ] The lantiq-ssc driver uses internally an own workqueue to wait till the data is not only written out of the FIFO but really written to the wire. This workqueue is flushed while the SPI subsystem is working in some other system workqueue. The system workqueue is marked as WQ_MEM_RECLAIM, but the workqueue in the lantiq-ssc driver does not use WQ_MEM_RECLAIM for now. Add this flag too to prevent this warning. This fixes the following warning: [ 2.975956] WARNING: CPU: 1 PID: 17 at kernel/workqueue.c:2614 check_flush_dependency+0x168/0x184 [ 2.984752] workqueue: WQ_MEM_RECLAIM kblockd:blk_mq_run_work_fn is flushing !WQ_MEM_RECLAIM 1e100800.spi:0x0 Fixes: 891b7c5fbf61 ("mtd_blkdevs: convert to blk-mq") Signed-off-by: Hauke Mehrtens Link: https://lore.kernel.org/r/20200717215648.20522-1-hauke@hauke-m.de Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/spi/spi-lantiq-ssc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi-lantiq-ssc.c b/drivers/spi/spi-lantiq-ssc.c index 55394bdbc5a3..f9bc1705c0d4 100644 --- a/drivers/spi/spi-lantiq-ssc.c +++ b/drivers/spi/spi-lantiq-ssc.c @@ -917,7 +917,7 @@ static int lantiq_ssc_probe(struct platform_device *pdev) master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 8) | SPI_BPW_MASK(16) | SPI_BPW_MASK(32); - spi->wq = alloc_ordered_workqueue(dev_name(dev), 0); + spi->wq = alloc_ordered_workqueue(dev_name(dev), WQ_MEM_RECLAIM); if (!spi->wq) { err = -ENOMEM; goto err_clk_put; From 92581069807b4d36b6ad666b35c05cd175f21752 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Thu, 16 Jul 2020 10:50:55 +0200 Subject: [PATCH 156/448] USB: serial: iuu_phoenix: fix led-activity helpers [ Upstream commit de37458f8c2bfc465500a1dd0d15dbe96d2a698c ] The set-led command is eight bytes long and starts with a command byte followed by six bytes of RGB data and ends with a byte encoding a frequency (see iuu_led() and iuu_rgbf_fill_buffer()). The led activity helpers had a few long-standing bugs which corrupted the command packets by inserting a second command byte and thereby offsetting the RGB data and dropping the frequency in non-xmas mode. In xmas mode, a related off-by-one error left the frequency field uninitialised. Fixes: 60a8fc017103 ("USB: add iuu_phoenix driver") Reported-by: George Spelvin Link: https://lore.kernel.org/r/20200716085056.31471-1-johan@kernel.org Reviewed-by: Greg Kroah-Hartman Signed-off-by: Johan Hovold Signed-off-by: Sasha Levin --- drivers/usb/serial/iuu_phoenix.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c index b8dfeb4fb2ed..ffbb2a8901b2 100644 --- a/drivers/usb/serial/iuu_phoenix.c +++ b/drivers/usb/serial/iuu_phoenix.c @@ -353,10 +353,11 @@ static void iuu_led_activity_on(struct urb *urb) struct usb_serial_port *port = urb->context; int result; char *buf_ptr = port->write_urb->transfer_buffer; - *buf_ptr++ = IUU_SET_LED; + if (xmas) { - get_random_bytes(buf_ptr, 6); - *(buf_ptr+7) = 1; + buf_ptr[0] = IUU_SET_LED; + get_random_bytes(buf_ptr + 1, 6); + buf_ptr[7] = 1; } else { iuu_rgbf_fill_buffer(buf_ptr, 255, 255, 0, 0, 0, 0, 255); } @@ -374,13 +375,14 @@ static void iuu_led_activity_off(struct urb *urb) struct usb_serial_port *port = urb->context; int result; char *buf_ptr = port->write_urb->transfer_buffer; + if (xmas) { iuu_rxcmd(urb); return; - } else { - *buf_ptr++ = IUU_SET_LED; - iuu_rgbf_fill_buffer(buf_ptr, 0, 0, 255, 255, 0, 0, 255); } + + iuu_rgbf_fill_buffer(buf_ptr, 0, 0, 255, 255, 0, 0, 255); + usb_fill_bulk_urb(port->write_urb, port->serial->dev, usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), From c30281c4b28f065f3ca897bbf1dec6afe86c929e Mon Sep 17 00:00:00 2001 From: Kars Mulder Date: Tue, 7 Jul 2020 16:43:50 +0200 Subject: [PATCH 157/448] usb: core: fix quirks_param_set() writing to a const pointer [ Upstream commit b1b6bed3b5036509b449b5965285d5057ba42527 ] The function quirks_param_set() takes as argument a const char* pointer to the new value of the usbcore.quirks parameter. It then casts this pointer to a non-const char* pointer and passes it to the strsep() function, which overwrites the value. Fix this by creating a copy of the value using kstrdup() and letting that copy be written to by strsep(). Fixes: 027bd6cafd9a ("usb: core: Add "quirks" parameter for usbcore") Signed-off-by: Kars Mulder Link: https://lore.kernel.org/r/5ee2-5f048a00-21-618c5c00@230659773 Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/usb/core/quirks.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index e0b77674869c..c96c50faccf7 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -25,17 +25,23 @@ static unsigned int quirk_count; static char quirks_param[128]; -static int quirks_param_set(const char *val, const struct kernel_param *kp) +static int quirks_param_set(const char *value, const struct kernel_param *kp) { - char *p, *field; + char *val, *p, *field; u16 vid, pid; u32 flags; size_t i; int err; + val = kstrdup(value, GFP_KERNEL); + if (!val) + return -ENOMEM; + err = param_set_copystring(val, kp); - if (err) + if (err) { + kfree(val); return err; + } mutex_lock(&quirk_mutex); @@ -60,10 +66,11 @@ static int quirks_param_set(const char *val, const struct kernel_param *kp) if (!quirk_list) { quirk_count = 0; mutex_unlock(&quirk_mutex); + kfree(val); return -ENOMEM; } - for (i = 0, p = (char *)val; p && *p;) { + for (i = 0, p = val; p && *p;) { /* Each entry consists of VID:PID:flags */ field = strsep(&p, ":"); if (!field) @@ -144,6 +151,7 @@ static int quirks_param_set(const char *val, const struct kernel_param *kp) unlock: mutex_unlock(&quirk_mutex); + kfree(val); return 0; } From 6482f51199464d2d0419a3923baeca59f0abacf8 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 16 Jun 2020 12:19:49 +0300 Subject: [PATCH 158/448] thermal: ti-soc-thermal: Fix reversed condition in ti_thermal_expose_sensor() [ Upstream commit 0f348db01fdf128813fdd659fcc339038fb421a4 ] This condition is reversed and will cause breakage. Fixes: 7440f518dad9 ("thermal/drivers/ti-soc-thermal: Avoid dereferencing ERR_PTR") Signed-off-by: Dan Carpenter Signed-off-by: Daniel Lezcano Link: https://lore.kernel.org/r/20200616091949.GA11940@mwanda Signed-off-by: Sasha Levin --- drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c index 85776db4bf34..2ce4b19f312a 100644 --- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c +++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c @@ -169,7 +169,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id, data = ti_bandgap_get_sensor_data(bgp, id); - if (!IS_ERR_OR_NULL(data)) + if (IS_ERR_OR_NULL(data)) data = ti_thermal_build_data(bgp, id); if (!data) From 53eeba79c15272044c48e89f015d5a660fadb0cd Mon Sep 17 00:00:00 2001 From: Sai Prakash Ranjan Date: Thu, 16 Jul 2020 11:57:42 -0600 Subject: [PATCH 159/448] coresight: tmc: Fix TMC mode read in tmc_read_unprepare_etb() [ Upstream commit d021f5c5ff679432c5e9faee0fd7350db2efb97c ] Reading TMC mode register without proper coresight power management can lead to exceptions like the one in the call trace below in tmc_read_unprepare_etb() when the trace data is read after the sink is disabled. So fix this by having a check for coresight sysfs mode before reading TMC mode management register in tmc_read_unprepare_etb() similar to tmc_read_prepare_etb(). SError Interrupt on CPU6, code 0xbe000411 -- SError pstate: 80400089 (Nzcv daIf +PAN -UAO) pc : tmc_read_unprepare_etb+0x74/0x108 lr : tmc_read_unprepare_etb+0x54/0x108 sp : ffffff80d9507c30 x29: ffffff80d9507c30 x28: ffffff80b3569a0c x27: 0000000000000000 x26: 00000000000a0001 x25: ffffff80cbae9550 x24: 0000000000000010 x23: ffffffd07296b0f0 x22: ffffffd0109ee028 x21: 0000000000000000 x20: ffffff80d19e70e0 x19: ffffff80d19e7080 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: 0000000000000000 x10: dfffffd000000001 x9 : 0000000000000000 x8 : 0000000000000002 x7 : ffffffd071d0fe78 x6 : 0000000000000000 x5 : 0000000000000080 x4 : 0000000000000001 x3 : ffffffd071d0fe98 x2 : 0000000000000000 x1 : 0000000000000004 x0 : 0000000000000001 Kernel panic - not syncing: Asynchronous SError Interrupt Fixes: 4525412a5046 ("coresight: tmc: making prepare/unprepare functions generic") Reported-by: Mike Leach Signed-off-by: Sai Prakash Ranjan Tested-by: Mike Leach Signed-off-by: Mathieu Poirier Link: https://lore.kernel.org/r/20200716175746.3338735-14-mathieu.poirier@linaro.org Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/hwtracing/coresight/coresight-tmc-etf.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c index 36cce2bfb744..6375504ba8b0 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c @@ -639,15 +639,14 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) spin_lock_irqsave(&drvdata->spinlock, flags); - /* There is no point in reading a TMC in HW FIFO mode */ - mode = readl_relaxed(drvdata->base + TMC_MODE); - if (mode != TMC_MODE_CIRCULAR_BUFFER) { - spin_unlock_irqrestore(&drvdata->spinlock, flags); - return -EINVAL; - } - /* Re-enable the TMC if need be */ if (drvdata->mode == CS_MODE_SYSFS) { + /* There is no point in reading a TMC in HW FIFO mode */ + mode = readl_relaxed(drvdata->base + TMC_MODE); + if (mode != TMC_MODE_CIRCULAR_BUFFER) { + spin_unlock_irqrestore(&drvdata->spinlock, flags); + return -EINVAL; + } /* * The trace run will continue with the same allocated trace * buffer. As such zero-out the buffer so that we don't end From 54c9afe415dc33974311b9b99739155a014e4552 Mon Sep 17 00:00:00 2001 From: Madhavan Srinivasan Date: Sun, 14 Jun 2020 14:06:04 +0530 Subject: [PATCH 160/448] powerpc/perf: Fix missing is_sier_aviable() during build [ Upstream commit 3c9450c053f88e525b2db1e6990cdf34d14e7696 ] Compilation error: arch/powerpc/perf/perf_regs.c:80:undefined reference to `.is_sier_available' Currently is_sier_available() is part of core-book3s.c, which is added to build based on CONFIG_PPC_PERF_CTRS. A config with CONFIG_PERF_EVENTS and without CONFIG_PPC_PERF_CTRS will have a build break because of missing is_sier_available(). In practice it only breaks when CONFIG_FSL_EMB_PERF_EVENT=n because that also guards the usage of is_sier_available(). That only happens with CONFIG_PPC_BOOK3E_64=y and CONFIG_FSL_SOC_BOOKE=n. Patch adds is_sier_available() in asm/perf_event.h to fix the build break for configs missing CONFIG_PPC_PERF_CTRS. Fixes: 333804dc3b7a ("powerpc/perf: Update perf_regs structure to include SIER") Reported-by: Aneesh Kumar K.V Signed-off-by: Madhavan Srinivasan [mpe: Add detail about CONFIG_FSL_SOC_BOOKE] Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200614083604.302611-1-maddy@linux.ibm.com Signed-off-by: Sasha Levin --- arch/powerpc/include/asm/perf_event.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/powerpc/include/asm/perf_event.h b/arch/powerpc/include/asm/perf_event.h index 7426d7a90e1e..7aba3c7ea25c 100644 --- a/arch/powerpc/include/asm/perf_event.h +++ b/arch/powerpc/include/asm/perf_event.h @@ -12,6 +12,8 @@ #ifdef CONFIG_PPC_PERF_CTRS #include +#else +static inline bool is_sier_available(void) { return false; } #endif #ifdef CONFIG_FSL_EMB_PERF_EVENT From 2bf9418b7b119b56879ca667e517fa687ee73b13 Mon Sep 17 00:00:00 2001 From: Sean Wang Date: Wed, 8 Jul 2020 03:16:48 +0800 Subject: [PATCH 161/448] mt76: mt7615: fix potential memory leak in mcu message handler [ Upstream commit 9248c08c3fc4ef816c82aa49d01123f4746d349f ] Fix potential memory leak in mcu message handler on error condition. Fixes: 0e6a29e477f3 ("mt76: mt7615: add support to read temperature from mcu") Acked-by: Lorenzo Bianconi Signed-off-by: Sean Wang Signed-off-by: Felix Fietkau Signed-off-by: Sasha Levin --- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c index 842cd81704db..b6867d93c0e3 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c @@ -119,8 +119,10 @@ mt7615_mcu_parse_response(struct mt7615_dev *dev, int cmd, struct mt7615_mcu_rxd *rxd = (struct mt7615_mcu_rxd *)skb->data; int ret = 0; - if (seq != rxd->seq) - return -EAGAIN; + if (seq != rxd->seq) { + ret = -EAGAIN; + goto out; + } switch (cmd) { case -MCU_CMD_PATCH_SEM_CONTROL: @@ -134,6 +136,7 @@ mt7615_mcu_parse_response(struct mt7615_dev *dev, int cmd, default: break; } +out: dev_kfree_skb(skb); return ret; From db2eabff57cc56658da4d5ed545c9c7cbb230db8 Mon Sep 17 00:00:00 2001 From: Russell King Date: Tue, 21 Jul 2020 15:40:43 +0100 Subject: [PATCH 162/448] phy: armada-38x: fix NETA lockup when repeatedly switching speeds [ Upstream commit 1dea06cd643da38931382ebdc151efced201ffad ] The mvneta hardware appears to lock up in various random ways when repeatedly switching speeds between 1G and 2.5G, which involves reprogramming the COMPHY. It is not entirely clear why this happens, but best guess is that reprogramming the COMPHY glitches mvneta clocks causing the hardware to fail. It seems that rebooting resolves the failure, but not down/up cycling the interface alone. Various other approaches have been tried, such as trying to cleanly power down the COMPHY and then take it back through the power up initialisation, but this does not seem to help. It was finally noticed that u-boot's last step when configuring a COMPHY for "SGMII" mode was to poke at a register described as "GBE_CONFIGURATION_REG", which is undocumented in any external documentation. All that we have is the fact that u-boot sets a bit corresponding to the "SGMII" lane at the end of COMPHY initialisation. Experimentation shows that if we clear this bit prior to changing the speed, and then set it afterwards, mvneta does not suffer this problem on the SolidRun Clearfog when switching speeds between 1G and 2.5G. This problem was found while script-testing phylink. This fix also requires the corresponding change to DT to be effective. See "ARM: dts: armada-38x: fix NETA lockup when repeatedly switching speeds". Fixes: 14dc100b4411 ("phy: armada38x: add common phy support") Signed-off-by: Russell King Reviewed-by: Andrew Lunn Link: https://lore.kernel.org/r/E1jxtRj-0003Tz-CG@rmk-PC.armlinux.org.uk Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/phy/marvell/phy-armada38x-comphy.c | 45 ++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/drivers/phy/marvell/phy-armada38x-comphy.c b/drivers/phy/marvell/phy-armada38x-comphy.c index 6960dfd8ad8c..0fe408964334 100644 --- a/drivers/phy/marvell/phy-armada38x-comphy.c +++ b/drivers/phy/marvell/phy-armada38x-comphy.c @@ -41,6 +41,7 @@ struct a38x_comphy_lane { struct a38x_comphy { void __iomem *base; + void __iomem *conf; struct device *dev; struct a38x_comphy_lane lane[MAX_A38X_COMPHY]; }; @@ -54,6 +55,21 @@ static const u8 gbe_mux[MAX_A38X_COMPHY][MAX_A38X_PORTS] = { { 0, 0, 3 }, }; +static void a38x_set_conf(struct a38x_comphy_lane *lane, bool enable) +{ + struct a38x_comphy *priv = lane->priv; + u32 conf; + + if (priv->conf) { + conf = readl_relaxed(priv->conf); + if (enable) + conf |= BIT(lane->port); + else + conf &= ~BIT(lane->port); + writel(conf, priv->conf); + } +} + static void a38x_comphy_set_reg(struct a38x_comphy_lane *lane, unsigned int offset, u32 mask, u32 value) { @@ -97,6 +113,7 @@ static int a38x_comphy_set_mode(struct phy *phy, enum phy_mode mode, int sub) { struct a38x_comphy_lane *lane = phy_get_drvdata(phy); unsigned int gen; + int ret; if (mode != PHY_MODE_ETHERNET) return -EINVAL; @@ -115,13 +132,20 @@ static int a38x_comphy_set_mode(struct phy *phy, enum phy_mode mode, int sub) return -EINVAL; } + a38x_set_conf(lane, false); + a38x_comphy_set_speed(lane, gen, gen); - return a38x_comphy_poll(lane, COMPHY_STAT1, - COMPHY_STAT1_PLL_RDY_TX | - COMPHY_STAT1_PLL_RDY_RX, - COMPHY_STAT1_PLL_RDY_TX | - COMPHY_STAT1_PLL_RDY_RX); + ret = a38x_comphy_poll(lane, COMPHY_STAT1, + COMPHY_STAT1_PLL_RDY_TX | + COMPHY_STAT1_PLL_RDY_RX, + COMPHY_STAT1_PLL_RDY_TX | + COMPHY_STAT1_PLL_RDY_RX); + + if (ret == 0) + a38x_set_conf(lane, true); + + return ret; } static const struct phy_ops a38x_comphy_ops = { @@ -174,14 +198,21 @@ static int a38x_comphy_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - base = devm_ioremap_resource(&pdev->dev, res); + base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(base)) return PTR_ERR(base); priv->dev = &pdev->dev; priv->base = base; + /* Optional */ + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "conf"); + if (res) { + priv->conf = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(priv->conf)) + return PTR_ERR(priv->conf); + } + for_each_available_child_of_node(pdev->dev.of_node, child) { struct phy *phy; int ret; From b8f3c361ca2c0dcfefc873219bc60cff8cff8515 Mon Sep 17 00:00:00 2001 From: Yu Kuai Date: Tue, 21 Jul 2020 21:47:18 +0800 Subject: [PATCH 163/448] MIPS: OCTEON: add missing put_device() call in dwc3_octeon_device_init() [ Upstream commit e8b9fc10f2615b9a525fce56981e40b489528355 ] if of_find_device_by_node() succeed, dwc3_octeon_device_init() doesn't have a corresponding put_device(). Thus add put_device() to fix the exception handling for this function implementation. Fixes: 93e502b3c2d4 ("MIPS: OCTEON: Platform support for OCTEON III USB controller") Signed-off-by: Yu Kuai Signed-off-by: Thomas Bogendoerfer Signed-off-by: Sasha Levin --- arch/mips/cavium-octeon/octeon-usb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/mips/cavium-octeon/octeon-usb.c b/arch/mips/cavium-octeon/octeon-usb.c index cc88a08bc1f7..4017398519cf 100644 --- a/arch/mips/cavium-octeon/octeon-usb.c +++ b/arch/mips/cavium-octeon/octeon-usb.c @@ -518,6 +518,7 @@ static int __init dwc3_octeon_device_init(void) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { + put_device(&pdev->dev); dev_err(&pdev->dev, "No memory resources\n"); return -ENXIO; } @@ -529,8 +530,10 @@ static int __init dwc3_octeon_device_init(void) * know the difference. */ base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(base)) + if (IS_ERR(base)) { + put_device(&pdev->dev); return PTR_ERR(base); + } mutex_lock(&dwc3_octeon_clocks_mutex); dwc3_octeon_clocks_start(&pdev->dev, (u64)base); From b2c2b88b049684b89776036f9a03fcc2d1bb3c22 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Thu, 16 Jul 2020 14:09:48 +0200 Subject: [PATCH 164/448] usb: dwc2: Fix error path in gadget registration [ Upstream commit 33a06f1300a79cfd461cea0268f05e969d4f34ec ] When gadget registration fails, one should not call usb_del_gadget_udc(). Ensure this by setting gadget->udc to NULL. Also in case of a failure there is no need to disable low-level hardware, so return immiedetly instead of jumping to error_init label. This fixes the following kernel NULL ptr dereference on gadget failure (can be easily triggered with g_mass_storage without any module parameters): dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter besl=1 dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter g_np_tx_fifo_size=1024 dwc2 12480000.hsotg: EPs: 16, dedicated fifos, 7808 entries in SPRAM Mass Storage Function, version: 2009/09/11 LUN: removable file: (no medium) no file given for LUN0 g_mass_storage 12480000.hsotg: failed to start g_mass_storage: -22 8<--- cut here --- Unable to handle kernel NULL pointer dereference at virtual address 00000104 pgd = (ptrval) [00000104] *pgd=00000000 Internal error: Oops: 805 [#1] PREEMPT SMP ARM Modules linked in: CPU: 0 PID: 12 Comm: kworker/0:1 Not tainted 5.8.0-rc5 #3133 Hardware name: Samsung Exynos (Flattened Device Tree) Workqueue: events deferred_probe_work_func PC is at usb_del_gadget_udc+0x38/0xc4 LR is at __mutex_lock+0x31c/0xb18 ... Process kworker/0:1 (pid: 12, stack limit = 0x(ptrval)) Stack: (0xef121db0 to 0xef122000) ... [] (usb_del_gadget_udc) from [] (dwc2_hsotg_remove+0x10/0x20) [] (dwc2_hsotg_remove) from [] (dwc2_driver_probe+0x57c/0x69c) [] (dwc2_driver_probe) from [] (platform_drv_probe+0x6c/0xa4) [] (platform_drv_probe) from [] (really_probe+0x200/0x48c) [] (really_probe) from [] (driver_probe_device+0x78/0x1fc) [] (driver_probe_device) from [] (bus_for_each_drv+0x74/0xb8) [] (bus_for_each_drv) from [] (__device_attach+0xd4/0x16c) [] (__device_attach) from [] (bus_probe_device+0x88/0x90) [] (bus_probe_device) from [] (deferred_probe_work_func+0x3c/0xd0) [] (deferred_probe_work_func) from [] (process_one_work+0x234/0x7dc) [] (process_one_work) from [] (worker_thread+0x44/0x51c) [] (worker_thread) from [] (kthread+0x158/0x1a0) [] (kthread) from [] (ret_from_fork+0x14/0x20) Exception stack(0xef121fb0 to 0xef121ff8) ... ---[ end trace 9724c2fc7cc9c982 ]--- While fixing this also fix the double call to dwc2_lowlevel_hw_disable() if dr_mode is set to USB_DR_MODE_PERIPHERAL. In such case low-level hardware is already disabled before calling usb_add_gadget_udc(). That function correctly preserves low-level hardware state, there is no need for the second unconditional dwc2_lowlevel_hw_disable() call. Fixes: 207324a321a8 ("usb: dwc2: Postponed gadget registration to the udc class driver") Acked-by: Minas Harutyunyan Signed-off-by: Marek Szyprowski Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/dwc2/platform.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index 4e14c4f7fed7..34bb6124f1e2 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -514,6 +514,7 @@ static int dwc2_driver_probe(struct platform_device *dev) if (hsotg->gadget_enabled) { retval = usb_add_gadget_udc(hsotg->dev, &hsotg->gadget); if (retval) { + hsotg->gadget.udc = NULL; dwc2_hsotg_remove(hsotg); goto error; } @@ -522,7 +523,8 @@ static int dwc2_driver_probe(struct platform_device *dev) return 0; error: - dwc2_lowlevel_hw_disable(hsotg); + if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) + dwc2_lowlevel_hw_disable(hsotg); return retval; } From 1d7e19cf79f402f989ff97fc55a6cbfc07adfdbd Mon Sep 17 00:00:00 2001 From: Ruslan Bilovol Date: Fri, 3 Jul 2020 16:49:03 +0300 Subject: [PATCH 165/448] usb: gadget: f_uac2: fix AC Interface Header Descriptor wTotalLength [ Upstream commit a9cf8715180b18c62addbfe6f6267b8101903119 ] As per UAC2 spec (ch. 4.7.2), wTotalLength of AC Interface Header Descriptor "includes the combined length of this descriptor header and all Clock Source, Unit and Terminal descriptors." Thus add its size to its wTotalLength. Also after recent changes wTotalLength is calculated dynamically, update static definition of uac2_ac_header_descriptor accordingly Fixes: 132fcb460839 ("usb: gadget: Add Audio Class 2.0 Driver") Signed-off-by: Ruslan Bilovol Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/gadget/function/f_uac2.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c index db2d4980cb35..3633df6d7610 100644 --- a/drivers/usb/gadget/function/f_uac2.c +++ b/drivers/usb/gadget/function/f_uac2.c @@ -215,10 +215,7 @@ static struct uac2_ac_header_descriptor ac_hdr_desc = { .bDescriptorSubtype = UAC_MS_HEADER, .bcdADC = cpu_to_le16(0x200), .bCategory = UAC2_FUNCTION_IO_BOX, - .wTotalLength = cpu_to_le16(sizeof in_clk_src_desc - + sizeof out_clk_src_desc + sizeof usb_out_it_desc - + sizeof io_in_it_desc + sizeof usb_in_ot_desc - + sizeof io_out_ot_desc), + /* .wTotalLength = DYNAMIC */ .bmControls = 0, }; @@ -501,7 +498,7 @@ static void setup_descriptor(struct f_uac2_opts *opts) as_in_hdr_desc.bTerminalLink = usb_in_ot_desc.bTerminalID; iad_desc.bInterfaceCount = 1; - ac_hdr_desc.wTotalLength = 0; + ac_hdr_desc.wTotalLength = cpu_to_le16(sizeof(ac_hdr_desc)); if (EPIN_EN(opts)) { u16 len = le16_to_cpu(ac_hdr_desc.wTotalLength); From b41e8798f28805cd0ba6131229f29d794c8a2c28 Mon Sep 17 00:00:00 2001 From: Tomas Henzl Date: Thu, 9 Jul 2020 15:31:44 +0200 Subject: [PATCH 166/448] scsi: megaraid_sas: Clear affinity hint [ Upstream commit 1eb81df5c53b1e785fdef298d533feab991381e4 ] To avoid a warning in free_irq, clear the affinity hint. Link: https://lore.kernel.org/r/20200709133144.8363-1-thenzl@redhat.com Fixes: f0b9e7bdc309 ("scsi: megaraid_sas: Set affinity for high IOPS reply queues") Acked-by: Sumit Saxena Signed-off-by: Tomas Henzl Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/megaraid/megaraid_sas_base.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index 0cbe6740e0c9..2c2966a297c7 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -5586,9 +5586,13 @@ megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe) &instance->irq_context[i])) { dev_err(&instance->pdev->dev, "Failed to register IRQ for vector %d.\n", i); - for (j = 0; j < i; j++) + for (j = 0; j < i; j++) { + if (j < instance->low_latency_index_start) + irq_set_affinity_hint( + pci_irq_vector(pdev, j), NULL); free_irq(pci_irq_vector(pdev, j), &instance->irq_context[j]); + } /* Retry irq register for IO_APIC*/ instance->msix_vectors = 0; instance->msix_load_balance = false; @@ -5626,6 +5630,9 @@ megasas_destroy_irqs(struct megasas_instance *instance) { if (instance->msix_vectors) for (i = 0; i < instance->msix_vectors; i++) { + if (i < instance->low_latency_index_start) + irq_set_affinity_hint( + pci_irq_vector(instance->pdev, i), NULL); free_irq(pci_irq_vector(instance->pdev, i), &instance->irq_context[i]); } From f6f75b1756f73ae8cadcab051b9e8fdb0238f0bf Mon Sep 17 00:00:00 2001 From: Finn Thain Date: Thu, 23 Jul 2020 09:25:51 +1000 Subject: [PATCH 167/448] scsi: mesh: Fix panic after host or bus reset [ Upstream commit edd7dd2292ab9c3628b65c4d04514c3068ad54f6 ] Booting Linux with a Conner CP3200 drive attached to the MESH SCSI bus results in EH measures and a panic: [ 25.499838] mesh: configured for synchronous 5 MB/s [ 25.787154] mesh: performing initial bus reset... [ 29.867115] scsi host0: MESH [ 29.929527] mesh: target 0 synchronous at 3.6 MB/s [ 29.998763] scsi 0:0:0:0: Direct-Access CONNER CP3200-200mb-3.5 4040 PQ: 0 ANSI: 1 CCS [ 31.989975] sd 0:0:0:0: [sda] 415872 512-byte logical blocks: (213 MB/203 MiB) [ 32.070975] sd 0:0:0:0: [sda] Write Protect is off [ 32.137197] sd 0:0:0:0: [sda] Mode Sense: 5b 00 00 08 [ 32.209661] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 32.332708] sda: [mac] sda1 sda2 sda3 [ 32.417733] sd 0:0:0:0: [sda] Attached SCSI disk ... snip ... [ 76.687067] mesh_abort((ptrval)) [ 76.743606] mesh: state at (ptrval), regs at (ptrval), dma at (ptrval) [ 76.810798] ct=6000 seq=86 bs=4017 fc= 0 exc= 0 err= 0 im= 7 int= 0 sp=85 [ 76.880720] dma stat=84e0 cmdptr=1f73d000 [ 76.941387] phase=4 msgphase=0 conn_tgt=0 data_ptr=24576 [ 77.005567] dma_st=1 dma_ct=0 n_msgout=0 [ 77.065456] target 0: req=(ptrval) goes_out=0 saved_ptr=0 [ 77.130512] mesh_abort((ptrval)) [ 77.187670] mesh: state at (ptrval), regs at (ptrval), dma at (ptrval) [ 77.255594] ct=6000 seq=86 bs=4017 fc= 0 exc= 0 err= 0 im= 7 int= 0 sp=85 [ 77.325778] dma stat=84e0 cmdptr=1f73d000 [ 77.387239] phase=4 msgphase=0 conn_tgt=0 data_ptr=24576 [ 77.453665] dma_st=1 dma_ct=0 n_msgout=0 [ 77.515900] target 0: req=(ptrval) goes_out=0 saved_ptr=0 [ 77.582902] mesh_host_reset [ 88.187083] Kernel panic - not syncing: mesh: double DMA start ! [ 88.254510] CPU: 0 PID: 358 Comm: scsi_eh_0 Not tainted 5.6.13-pmac #1 [ 88.323302] Call Trace: [ 88.378854] [e16ddc58] [c0027080] panic+0x13c/0x308 (unreliable) [ 88.446221] [e16ddcb8] [c02b2478] mesh_start.part.12+0x130/0x414 [ 88.513298] [e16ddcf8] [c02b2fc8] mesh_queue+0x54/0x70 [ 88.577097] [e16ddd18] [c02a1848] scsi_send_eh_cmnd+0x374/0x384 [ 88.643476] [e16dddc8] [c02a1938] scsi_eh_tur+0x5c/0xb8 [ 88.707878] [e16dddf8] [c02a1ab8] scsi_eh_test_devices+0x124/0x178 [ 88.775663] [e16dde28] [c02a2094] scsi_eh_ready_devs+0x588/0x8a8 [ 88.843124] [e16dde98] [c02a31d8] scsi_error_handler+0x344/0x520 [ 88.910697] [e16ddf08] [c00409c8] kthread+0xe4/0xe8 [ 88.975166] [e16ddf38] [c000f234] ret_from_kernel_thread+0x14/0x1c [ 89.044112] Rebooting in 180 seconds.. In theory, a panic can happen after a bus or host reset with dma_started flag set. Fix this by halting the DMA before reinitializing the host. Don't assume that ms->current_req is set when halt_dma() is invoked as it may not hold for bus or host reset. BTW, this particular Conner drive can be made to work by inhibiting disconnect/reselect with 'mesh.resel_targets=0'. Link: https://lore.kernel.org/r/3952bc691e150a7128b29120999b6092071b039a.1595460351.git.fthain@telegraphics.com.au Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: Paul Mackerras Reported-and-tested-by: Stan Johnson Signed-off-by: Finn Thain Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/mesh.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index 74fb50644678..4dd50db90677 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c @@ -1045,6 +1045,8 @@ static void handle_error(struct mesh_state *ms) while ((in_8(&mr->bus_status1) & BS1_RST) != 0) udelay(1); printk("done\n"); + if (ms->dma_started) + halt_dma(ms); handle_reset(ms); /* request_q is empty, no point in mesh_start() */ return; @@ -1357,7 +1359,8 @@ static void halt_dma(struct mesh_state *ms) ms->conn_tgt, ms->data_ptr, scsi_bufflen(cmd), ms->tgts[ms->conn_tgt].data_goes_out); } - scsi_dma_unmap(cmd); + if (cmd) + scsi_dma_unmap(cmd); ms->dma_started = 0; } @@ -1712,6 +1715,9 @@ static int mesh_host_reset(struct scsi_cmnd *cmd) spin_lock_irqsave(ms->host->host_lock, flags); + if (ms->dma_started) + halt_dma(ms); + /* Reset the controller & dbdma channel */ out_le32(&md->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* stop dma */ out_8(&mr->exception, 0xff); /* clear all exception bits */ From a88f86763cbcef5410ba3cd287ced5542472e239 Mon Sep 17 00:00:00 2001 From: Chris Packham Date: Fri, 24 Jul 2020 11:21:20 +1200 Subject: [PATCH 168/448] net: dsa: mv88e6xxx: MV88E6097 does not support jumbo configuration [ Upstream commit 0f3c66a3c7b4e8b9f654b3c998e9674376a51b0f ] The MV88E6097 chip does not support configuring jumbo frames. Prior to commit 5f4366660d65 only the 6352, 6351, 6165 and 6320 chips configured jumbo mode. The refactor accidentally added the function for the 6097. Remove the erroneous function pointer assignment. Fixes: 5f4366660d65 ("net: dsa: mv88e6xxx: Refactor setting of jumbo frames") Signed-off-by: Chris Packham Reviewed-by: Andrew Lunn Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/mv88e6xxx/chip.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 6787d560e9e3..92e4d140df6f 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -3063,7 +3063,6 @@ static const struct mv88e6xxx_ops mv88e6097_ops = { .port_set_frame_mode = mv88e6351_port_set_frame_mode, .port_set_egress_floods = mv88e6352_port_set_egress_floods, .port_set_ether_type = mv88e6351_port_set_ether_type, - .port_set_jumbo_size = mv88e6165_port_set_jumbo_size, .port_egress_rate_limiting = mv88e6095_port_egress_rate_limiting, .port_pause_limit = mv88e6097_port_pause_limit, .port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit, From 845601756341b3b7f8022e1440e231db4ba941bd Mon Sep 17 00:00:00 2001 From: Finn Thain Date: Sun, 28 Jun 2020 14:23:12 +1000 Subject: [PATCH 169/448] macintosh/via-macii: Access autopoll_devs when inside lock [ Upstream commit 59ea38f6b3af5636edf541768a1ed721eeaca99e ] The interrupt handler should be excluded when accessing the autopoll_devs variable. Fixes: d95fd5fce88f0 ("m68k: Mac II ADB fixes") # v5.0+ Signed-off-by: Finn Thain Tested-by: Stan Johnson Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/5952dd8a9bc9de90f1acc4790c51dd42b4c98065.1593318192.git.fthain@telegraphics.com.au Signed-off-by: Sasha Levin --- drivers/macintosh/via-macii.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c index ac824d7b2dcf..6aa903529570 100644 --- a/drivers/macintosh/via-macii.c +++ b/drivers/macintosh/via-macii.c @@ -270,15 +270,12 @@ static int macii_autopoll(int devs) unsigned long flags; int err = 0; + local_irq_save(flags); + /* bit 1 == device 1, and so on. */ autopoll_devs = devs & 0xFFFE; - if (!autopoll_devs) - return 0; - - local_irq_save(flags); - - if (current_req == NULL) { + if (autopoll_devs && !current_req) { /* Send a Talk Reg 0. The controller will repeatedly transmit * this as long as it is idle. */ From 16416a1587430783a33b7cafc5727938428599ec Mon Sep 17 00:00:00 2001 From: Kishon Vijay Abraham I Date: Wed, 22 Jul 2020 16:33:11 +0530 Subject: [PATCH 170/448] PCI: cadence: Fix updating Vendor ID and Subsystem Vendor ID register [ Upstream commit e3bca37d15dca118f2ef1f0a068bb6e07846ea20 ] Commit 1b79c5284439 ("PCI: cadence: Add host driver for Cadence PCIe controller") in order to update Vendor ID, directly wrote to PCI_VENDOR_ID register. However PCI_VENDOR_ID in root port configuration space is read-only register and writing to it will have no effect. Use local management register to configure Vendor ID and Subsystem Vendor ID. Link: https://lore.kernel.org/r/20200722110317.4744-10-kishon@ti.com Fixes: 1b79c5284439 ("PCI: cadence: Add host driver for Cadence PCIe controller") Signed-off-by: Kishon Vijay Abraham I Signed-off-by: Lorenzo Pieralisi Reviewed-by: Rob Herring Signed-off-by: Sasha Levin --- drivers/pci/controller/pcie-cadence-host.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pcie-cadence-host.c b/drivers/pci/controller/pcie-cadence-host.c index 97e251090b4f..0dfc778f40a7 100644 --- a/drivers/pci/controller/pcie-cadence-host.c +++ b/drivers/pci/controller/pcie-cadence-host.c @@ -102,6 +102,7 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) { struct cdns_pcie *pcie = &rc->pcie; u32 value, ctrl; + u32 id; /* * Set the root complex BAR configuration register: @@ -121,8 +122,12 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) cdns_pcie_writel(pcie, CDNS_PCIE_LM_RC_BAR_CFG, value); /* Set root port configuration space */ - if (rc->vendor_id != 0xffff) - cdns_pcie_rp_writew(pcie, PCI_VENDOR_ID, rc->vendor_id); + if (rc->vendor_id != 0xffff) { + id = CDNS_PCIE_LM_ID_VENDOR(rc->vendor_id) | + CDNS_PCIE_LM_ID_SUBSYS(rc->vendor_id); + cdns_pcie_writel(pcie, CDNS_PCIE_LM_ID, id); + } + if (rc->device_id != 0xffff) cdns_pcie_rp_writew(pcie, PCI_DEVICE_ID, rc->device_id); From 3a2cd06a3d93ea4018cf1938fcfdbad868923232 Mon Sep 17 00:00:00 2001 From: Li Heng Date: Sat, 25 Jul 2020 10:56:27 +0800 Subject: [PATCH 171/448] RDMA/core: Fix return error value in _ib_modify_qp() to negative [ Upstream commit 47fda651d5af2506deac57d54887cf55ce26e244 ] The error codes in _ib_modify_qp() are supposed to be negative errno. Fixes: 7a5c938b9ed0 ("IB/core: Check for rdma_protocol_ib only after validating port_num") Link: https://lore.kernel.org/r/1595645787-20375-1-git-send-email-liheng40@huawei.com Reported-by: Hulk Robot Signed-off-by: Li Heng Reviewed-by: Parav Pandit Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/verbs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c index 6c4093d0a91d..d4815f29cfd2 100644 --- a/drivers/infiniband/core/verbs.c +++ b/drivers/infiniband/core/verbs.c @@ -1648,7 +1648,7 @@ static int _ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr, if (!(rdma_protocol_ib(qp->device, attr->alt_ah_attr.port_num) && rdma_protocol_ib(qp->device, port))) { - ret = EINVAL; + ret = -EINVAL; goto out; } } From 674992659a97d1a19295038d7e2aafca35d09813 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 23 Jul 2020 18:22:19 +0300 Subject: [PATCH 172/448] Smack: fix another vsscanf out of bounds [ Upstream commit a6bd4f6d9b07452b0b19842044a6c3ea384b0b88 ] This is similar to commit 84e99e58e8d1 ("Smack: slab-out-of-bounds in vsscanf") where we added a bounds check on "rule". Reported-by: syzbot+a22c6092d003d6fe1122@syzkaller.appspotmail.com Fixes: f7112e6c9abf ("Smack: allow for significantly longer Smack labels v4") Signed-off-by: Dan Carpenter Signed-off-by: Casey Schaufler Signed-off-by: Sasha Levin --- security/smack/smackfs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 840a192e9337..2bae1fc493d1 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -905,6 +905,10 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf, for (i = 0; i < catlen; i++) { rule += SMK_DIGITLEN; + if (rule > data + count) { + rc = -EOVERFLOW; + goto out; + } ret = sscanf(rule, "%u", &cat); if (ret != 1 || cat > SMACK_CIPSO_MAXCATNUM) goto out; From b2b8438ed831ea7f709970e77c62bb5692a2ea97 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 23 Jul 2020 18:23:05 +0300 Subject: [PATCH 173/448] Smack: prevent underflow in smk_set_cipso() [ Upstream commit 42a2df3e829f3c5562090391b33714b2e2e5ad4a ] We have an upper bound on "maplevel" but forgot to check for negative values. Fixes: e114e473771c ("Smack: Simplified Mandatory Access Control Kernel") Signed-off-by: Dan Carpenter Signed-off-by: Casey Schaufler Signed-off-by: Sasha Levin --- security/smack/smackfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 2bae1fc493d1..9c4308077574 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -884,7 +884,7 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf, } ret = sscanf(rule, "%d", &maplevel); - if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL) + if (ret != 1 || maplevel < 0 || maplevel > SMACK_CIPSO_MAXLEVEL) goto out; rule += SMK_DIGITLEN; From 8d91c73c13f1a25855c55ecbb7058266b59b9994 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Sun, 12 Jul 2020 12:23:51 -0700 Subject: [PATCH 174/448] power: supply: check if calc_soc succeeded in pm860x_init_battery [ Upstream commit ccf193dee1f0fff55b556928591f7818bac1b3b1 ] clang static analysis flags this error 88pm860x_battery.c:522:19: warning: Assigned value is garbage or undefined [core.uninitialized.Assign] info->start_soc = soc; ^ ~~~ soc is set by calling calc_soc. But calc_soc can return without setting soc. So check the return status and bail similarly to other checks in pm860x_init_battery and initialize soc to silence the warning. Fixes: a830d28b48bf ("power_supply: Enable battery-charger for 88pm860x") Signed-off-by: Tom Rix Signed-off-by: Sebastian Reichel Signed-off-by: Sasha Levin --- drivers/power/supply/88pm860x_battery.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/88pm860x_battery.c b/drivers/power/supply/88pm860x_battery.c index 5ca047b3f58f..23e7d6447ae9 100644 --- a/drivers/power/supply/88pm860x_battery.c +++ b/drivers/power/supply/88pm860x_battery.c @@ -433,7 +433,7 @@ static void pm860x_init_battery(struct pm860x_battery_info *info) int ret; int data; int bat_remove; - int soc; + int soc = 0; /* measure enable on GPADC1 */ data = MEAS1_GP1; @@ -496,7 +496,9 @@ static void pm860x_init_battery(struct pm860x_battery_info *info) } mutex_unlock(&info->lock); - calc_soc(info, OCV_MODE_ACTIVE, &soc); + ret = calc_soc(info, OCV_MODE_ACTIVE, &soc); + if (ret < 0) + goto out; data = pm860x_reg_read(info->i2c, PM8607_POWER_UP_LOG); bat_remove = data & BAT_WU_LOG; From ba5c28f78461ed2de137c1f3e9f56b48b11ec062 Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Tue, 21 Jul 2020 10:37:15 +0800 Subject: [PATCH 175/448] Bluetooth: hci_h5: Set HCI_UART_RESET_ON_INIT to correct flags [ Upstream commit a7ad4b6119d740b1ec5788f1b98be0fd1c1b5a5a ] HCI_UART_RESET_ON_INIT belongs in hdev_flags, not flags. Fixes: ce945552fde4a09 ("Bluetooth: hci_h5: Add support for serdev enumerated devices") Signed-off-by: Nicolas Boichat Reviewed-by: Hans de Goede Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/hci_h5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c index dacf297baf59..5df0651b6cd5 100644 --- a/drivers/bluetooth/hci_h5.c +++ b/drivers/bluetooth/hci_h5.c @@ -790,7 +790,7 @@ static int h5_serdev_probe(struct serdev_device *serdev) if (!h5) return -ENOMEM; - set_bit(HCI_UART_RESET_ON_INIT, &h5->serdev_hu.flags); + set_bit(HCI_UART_RESET_ON_INIT, &h5->serdev_hu.hdev_flags); h5->hu = &h5->serdev_hu; h5->serdev_hu.serdev = serdev; From 495b9d0dd0714e9e542e7c765243ecb0d6278cab Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Tue, 21 Jul 2020 10:37:16 +0800 Subject: [PATCH 176/448] Bluetooth: hci_serdev: Only unregister device if it was registered [ Upstream commit 202798db9570104728dce8bb57dfeed47ce764bc ] We should not call hci_unregister_dev if the device was not successfully registered. Fixes: c34dc3bfa7642fd ("Bluetooth: hci_serdev: Introduce hci_uart_unregister_device()") Signed-off-by: Nicolas Boichat Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- drivers/bluetooth/hci_serdev.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c index 4652896d4990..ad2f26cb2622 100644 --- a/drivers/bluetooth/hci_serdev.c +++ b/drivers/bluetooth/hci_serdev.c @@ -357,7 +357,8 @@ void hci_uart_unregister_device(struct hci_uart *hu) struct hci_dev *hdev = hu->hdev; clear_bit(HCI_UART_PROTO_READY, &hu->flags); - hci_unregister_dev(hdev); + if (test_bit(HCI_UART_REGISTERED, &hu->flags)) + hci_unregister_dev(hdev); hci_free_dev(hdev); cancel_work_sync(&hu->write_work); From 8cd2a4878787d62912d896d6523eb196ed5731b5 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Mon, 27 Jul 2020 01:34:39 +0200 Subject: [PATCH 177/448] net: dsa: rtl8366: Fix VLAN semantics [ Upstream commit 15ab7906cc9290afb006df1bb1074907fbcc7061 ] The RTL8366 would not handle adding new members (ports) to a VLAN: the code assumed that ->port_vlan_add() was only called once for a single port. When intializing the switch with .configure_vlan_while_not_filtering set to true, the function is called numerous times for adding all ports to VLAN1, which was something the code could not handle. Alter rtl8366_set_vlan() to just |= new members and untagged flags to 4k and MC VLAN table entries alike. This makes it possible to just add new ports to a VLAN. Put in some helpful debug code that can be used to find any further bugs here. Cc: DENG Qingfang Cc: Mauri Sandberg Reviewed-by: Florian Fainelli Fixes: d8652956cf37 ("net: dsa: realtek-smi: Add Realtek SMI driver") Signed-off-by: Linus Walleij Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/rtl8366.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c index ac88caca5ad4..a75dcd6698b8 100644 --- a/drivers/net/dsa/rtl8366.c +++ b/drivers/net/dsa/rtl8366.c @@ -43,18 +43,26 @@ int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member, int ret; int i; + dev_dbg(smi->dev, + "setting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n", + vid, member, untag); + /* Update the 4K table */ ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k); if (ret) return ret; - vlan4k.member = member; - vlan4k.untag = untag; + vlan4k.member |= member; + vlan4k.untag |= untag; vlan4k.fid = fid; ret = smi->ops->set_vlan_4k(smi, &vlan4k); if (ret) return ret; + dev_dbg(smi->dev, + "resulting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n", + vid, vlan4k.member, vlan4k.untag); + /* Try to find an existing MC entry for this VID */ for (i = 0; i < smi->num_vlan_mc; i++) { struct rtl8366_vlan_mc vlanmc; @@ -65,11 +73,16 @@ int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member, if (vid == vlanmc.vid) { /* update the MC entry */ - vlanmc.member = member; - vlanmc.untag = untag; + vlanmc.member |= member; + vlanmc.untag |= untag; vlanmc.fid = fid; ret = smi->ops->set_vlan_mc(smi, i, &vlanmc); + + dev_dbg(smi->dev, + "resulting VLAN%d MC members: 0x%02x, untagged: 0x%02x\n", + vid, vlanmc.member, vlanmc.untag); + break; } } From 5c0fd1e61b5a82e853c427da2a0634d5f1333da3 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Mon, 27 Jul 2020 01:34:40 +0200 Subject: [PATCH 178/448] net: dsa: rtl8366: Fix VLAN set-up [ Upstream commit 788abc6d9d278ed6fa1fa94db2098481a04152b7 ] Alter the rtl8366_vlan_add() to call rtl8366_set_vlan() inside the loop that goes over all VIDs since we now properly support calling that function more than once. Augment the loop to postincrement as this is more intuitive. The loop moved past the last VID but called rtl8366_set_vlan() with the port number instead of the VID, assuming a 1-to-1 correspondence between ports and VIDs. This was also a bug. Cc: DENG Qingfang Cc: Mauri Sandberg Reviewed-by: Florian Fainelli Fixes: d8652956cf37 ("net: dsa: realtek-smi: Add Realtek SMI driver") Signed-off-by: Linus Walleij Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/rtl8366.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c index a75dcd6698b8..1368816abaed 100644 --- a/drivers/net/dsa/rtl8366.c +++ b/drivers/net/dsa/rtl8366.c @@ -397,7 +397,7 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port, if (dsa_is_dsa_port(ds, port) || dsa_is_cpu_port(ds, port)) dev_err(smi->dev, "port is DSA or CPU port\n"); - for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) { + for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) { int pvid_val = 0; dev_info(smi->dev, "add VLAN %04x\n", vid); @@ -420,13 +420,13 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port, if (ret < 0) return; } - } - ret = rtl8366_set_vlan(smi, port, member, untag, 0); - if (ret) - dev_err(smi->dev, - "failed to set up VLAN %04x", - vid); + ret = rtl8366_set_vlan(smi, vid, member, untag, 0); + if (ret) + dev_err(smi->dev, + "failed to set up VLAN %04x", + vid); + } } EXPORT_SYMBOL_GPL(rtl8366_vlan_add); From 5f56aa0b1fec222480ccd6773eb67f90327310f6 Mon Sep 17 00:00:00 2001 From: Brian Foster Date: Wed, 15 Jul 2020 18:44:50 -0700 Subject: [PATCH 179/448] xfs: fix inode allocation block res calculation precedence [ Upstream commit b2a8864728683443f34a9fd33a2b78b860934cc1 ] The block reservation calculation for inode allocation is supposed to consist of the blocks required for the inode chunk plus (maxlevels-1) of the inode btree multiplied by the number of inode btrees in the fs (2 when finobt is enabled, 1 otherwise). Instead, the macro returns (ialloc_blocks + 2) due to a precedence error in the calculation logic. This leads to block reservation overruns via generic/531 on small block filesystems with finobt enabled. Add braces to fix the calculation and reserve the appropriate number of blocks. Fixes: 9d43b180af67 ("xfs: update inode allocation/free transaction reservations for finobt") Signed-off-by: Brian Foster Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Sasha Levin --- fs/xfs/libxfs/xfs_trans_space.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_trans_space.h b/fs/xfs/libxfs/xfs_trans_space.h index 88221c7a04cc..c6df01a2a158 100644 --- a/fs/xfs/libxfs/xfs_trans_space.h +++ b/fs/xfs/libxfs/xfs_trans_space.h @@ -57,7 +57,7 @@ XFS_DAREMOVE_SPACE_RES(mp, XFS_DATA_FORK) #define XFS_IALLOC_SPACE_RES(mp) \ (M_IGEO(mp)->ialloc_blks + \ - (xfs_sb_version_hasfinobt(&mp->m_sb) ? 2 : 1 * \ + ((xfs_sb_version_hasfinobt(&mp->m_sb) ? 2 : 1) * \ (M_IGEO(mp)->inobt_maxlevels - 1))) /* From 09c2050239fb7227bea8917e7436db75e952a555 Mon Sep 17 00:00:00 2001 From: Oliver O'Halloran Date: Mon, 27 Jul 2020 11:01:27 +1000 Subject: [PATCH 180/448] selftests/powerpc: Squash spurious errors due to device removal [ Upstream commit 5f8cf6475828b600ff6d000e580c961ac839cc61 ] For drivers that don't have the error handling callbacks we implement recovery by removing the device and re-probing it. This causes the sysfs directory for the PCI device to be removed which causes the following spurious error to be printed when checking the PE state: Breaking 0005:03:00.0... ./eeh-basic.sh: line 13: can't open /sys/bus/pci/devices/0005:03:00.0/eeh_pe_state: no such file 0005:03:00.0, waited 0/60 0005:03:00.0, waited 1/60 0005:03:00.0, waited 2/60 0005:03:00.0, waited 3/60 0005:03:00.0, waited 4/60 0005:03:00.0, waited 5/60 0005:03:00.0, waited 6/60 0005:03:00.0, waited 7/60 0005:03:00.0, Recovered after 8 seconds We currently try to avoid this by checking if the PE state file exists before reading from it. This is however inherently racy so re-work the state checking so that we only read from the file once, and we squash any errors that occur while reading. Fixes: 85d86c8aa52e ("selftests/powerpc: Add basic EEH selftest") Signed-off-by: Oliver O'Halloran Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200727010127.23698-1-oohall@gmail.com Signed-off-by: Sasha Levin --- tools/testing/selftests/powerpc/eeh/eeh-functions.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/powerpc/eeh/eeh-functions.sh b/tools/testing/selftests/powerpc/eeh/eeh-functions.sh index f52ed92b53e7..00dc32c0ed75 100755 --- a/tools/testing/selftests/powerpc/eeh/eeh-functions.sh +++ b/tools/testing/selftests/powerpc/eeh/eeh-functions.sh @@ -5,12 +5,17 @@ pe_ok() { local dev="$1" local path="/sys/bus/pci/devices/$dev/eeh_pe_state" - if ! [ -e "$path" ] ; then + # if a driver doesn't support the error handling callbacks then the + # device is recovered by removing and re-probing it. This causes the + # sysfs directory to disappear so read the PE state once and squash + # any potential error messages + local eeh_state="$(cat $path 2>/dev/null)" + if [ -z "$eeh_state" ]; then return 1; fi - local fw_state="$(cut -d' ' -f1 < $path)" - local sw_state="$(cut -d' ' -f2 < $path)" + local fw_state="$(echo $eeh_state | cut -d' ' -f1)" + local sw_state="$(echo $eeh_state | cut -d' ' -f2)" # If EEH_PE_ISOLATED or EEH_PE_RECOVERING are set then the PE is in an # error state or being recovered. Either way, not ok. From 69a797a0451742fa73ea6ad2936a0e9fd4c2302d Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Fri, 24 Jul 2020 23:17:24 +1000 Subject: [PATCH 181/448] powerpc/32s: Fix CONFIG_BOOK3S_601 uses [ Upstream commit df4d4ef22446b3a789a4efd74d34f2ec1e24deb2 ] We have two uses of CONFIG_BOOK3S_601, which doesn't exist. Fix them to use CONFIG_PPC_BOOK3S_601 which is the correct symbol. Fixes: 12c3f1fd87bf ("powerpc/32s: get rid of CPU_FTR_601 feature") Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200724131728.1643966-5-mpe@ellerman.id.au Signed-off-by: Sasha Levin --- arch/powerpc/include/asm/ptrace.h | 2 +- arch/powerpc/include/asm/timex.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h index ee3ada66deb5..c41220f4aad9 100644 --- a/arch/powerpc/include/asm/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h @@ -203,7 +203,7 @@ do { \ #endif /* __powerpc64__ */ #define arch_has_single_step() (1) -#ifndef CONFIG_BOOK3S_601 +#ifndef CONFIG_PPC_BOOK3S_601 #define arch_has_block_step() (true) #else #define arch_has_block_step() (false) diff --git a/arch/powerpc/include/asm/timex.h b/arch/powerpc/include/asm/timex.h index d2d2c4bd8435..6047402b0a4d 100644 --- a/arch/powerpc/include/asm/timex.h +++ b/arch/powerpc/include/asm/timex.h @@ -17,7 +17,7 @@ typedef unsigned long cycles_t; static inline cycles_t get_cycles(void) { - if (IS_ENABLED(CONFIG_BOOK3S_601)) + if (IS_ENABLED(CONFIG_PPC_BOOK3S_601)) return 0; return mftb(); From 3e95f258a14318a1c452a581a1c2e0f937b7ad78 Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Fri, 24 Jul 2020 23:17:26 +1000 Subject: [PATCH 182/448] powerpc/boot: Fix CONFIG_PPC_MPC52XX references [ Upstream commit e5eff89657e72a9050d95fde146b54c7dc165981 ] Commit 866bfc75f40e ("powerpc: conditionally compile platform-specific serial drivers") made some code depend on CONFIG_PPC_MPC52XX, which doesn't exist. Fix it to use CONFIG_PPC_MPC52xx. Fixes: 866bfc75f40e ("powerpc: conditionally compile platform-specific serial drivers") Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200724131728.1643966-7-mpe@ellerman.id.au Signed-off-by: Sasha Levin --- arch/powerpc/boot/Makefile | 2 +- arch/powerpc/boot/serial.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index dfbd7f22eef5..8c69bd07ada6 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile @@ -119,7 +119,7 @@ src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \ elf_util.c $(zlib-y) devtree.c stdlib.c \ oflib.c ofconsole.c cuboot.c -src-wlib-$(CONFIG_PPC_MPC52XX) += mpc52xx-psc.c +src-wlib-$(CONFIG_PPC_MPC52xx) += mpc52xx-psc.c src-wlib-$(CONFIG_PPC64_BOOT_WRAPPER) += opal-calls.S opal.c ifndef CONFIG_PPC64_BOOT_WRAPPER src-wlib-y += crtsavres.S diff --git a/arch/powerpc/boot/serial.c b/arch/powerpc/boot/serial.c index 9457863147f9..00179cd6bdd0 100644 --- a/arch/powerpc/boot/serial.c +++ b/arch/powerpc/boot/serial.c @@ -128,7 +128,7 @@ int serial_console_init(void) dt_is_compatible(devp, "fsl,cpm2-smc-uart")) rc = cpm_console_init(devp, &serial_cd); #endif -#ifdef CONFIG_PPC_MPC52XX +#ifdef CONFIG_PPC_MPC52xx else if (dt_is_compatible(devp, "fsl,mpc5200-psc-uart")) rc = mpc5200_psc_console_init(devp, &serial_cd); #endif From 04cf65b784d2e947b17c4034138ed1c249b894f0 Mon Sep 17 00:00:00 2001 From: Harish Date: Tue, 9 Jun 2020 13:44:23 +0530 Subject: [PATCH 183/448] selftests/powerpc: Fix CPU affinity for child process [ Upstream commit 854eb5022be04f81e318765f089f41a57c8e5d83 ] On systems with large number of cpus, test fails trying to set affinity by calling sched_setaffinity() with smaller size for affinity mask. This patch fixes it by making sure that the size of allocated affinity mask is dependent on the number of CPUs as reported by get_nprocs(). Fixes: 00b7ec5c9cf3 ("selftests/powerpc: Import Anton's context_switch2 benchmark") Reported-by: Shirisha Ganta Signed-off-by: Sandipan Das Signed-off-by: Harish Reviewed-by: Kamalesh Babulal Reviewed-by: Satheesh Rajendran Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200609081423.529664-1-harish@linux.ibm.com Signed-off-by: Sasha Levin --- .../powerpc/benchmarks/context_switch.c | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/powerpc/benchmarks/context_switch.c b/tools/testing/selftests/powerpc/benchmarks/context_switch.c index a2e8c9da7fa5..d50cc05df495 100644 --- a/tools/testing/selftests/powerpc/benchmarks/context_switch.c +++ b/tools/testing/selftests/powerpc/benchmarks/context_switch.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -104,8 +105,9 @@ static void start_thread_on(void *(*fn)(void *), void *arg, unsigned long cpu) static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu) { - int pid; - cpu_set_t cpuset; + int pid, ncpus; + cpu_set_t *cpuset; + size_t size; pid = fork(); if (pid == -1) { @@ -116,14 +118,23 @@ static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu) if (pid) return; - CPU_ZERO(&cpuset); - CPU_SET(cpu, &cpuset); + ncpus = get_nprocs(); + size = CPU_ALLOC_SIZE(ncpus); + cpuset = CPU_ALLOC(ncpus); + if (!cpuset) { + perror("malloc"); + exit(1); + } + CPU_ZERO_S(size, cpuset); + CPU_SET_S(cpu, size, cpuset); - if (sched_setaffinity(0, sizeof(cpuset), &cpuset)) { + if (sched_setaffinity(0, size, cpuset)) { perror("sched_setaffinity"); + CPU_FREE(cpuset); exit(1); } + CPU_FREE(cpuset); fn(arg); exit(0); From 07783db29f89878dca1b859373e7bf3a0896a7e9 Mon Sep 17 00:00:00 2001 From: Mark Zhang Date: Mon, 27 Jul 2020 12:58:28 +0300 Subject: [PATCH 184/448] RDMA/netlink: Remove CAP_NET_RAW check when dump a raw QP [ Upstream commit 1d70ad0f85435a7262de802b104e49e6598c50ff ] When dumping QPs bound to a counter, raw QPs should be allowed to dump without the CAP_NET_RAW privilege. This is consistent with what "rdma res show qp" does. Fixes: c4ffee7c9bdb ("RDMA/netlink: Implement counter dumpit calback") Link: https://lore.kernel.org/r/20200727095828.496195-1-leon@kernel.org Signed-off-by: Mark Zhang Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/nldev.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index 244ebf285fc3..e4905d9fecb0 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c @@ -702,9 +702,6 @@ static int fill_stat_counter_qps(struct sk_buff *msg, continue; qp = container_of(res, struct ib_qp, res); - if (qp->qp_type == IB_QPT_RAW_PACKET && !capable(CAP_NET_RAW)) - continue; - if (!qp->counter || (qp->counter->id != counter->id)) continue; From 0df3fad9c17fe4c83bd6c2f3e5b9d26e606f2b09 Mon Sep 17 00:00:00 2001 From: Hanjun Guo Date: Wed, 22 Jul 2020 17:44:28 +0800 Subject: [PATCH 185/448] PCI: Release IVRS table in AMD ACS quirk [ Upstream commit 090688fa4e448284aaa16136372397d7d10814db ] The acpi_get_table() should be coupled with acpi_put_table() if the mapped table is not used at runtime to release the table mapping. In pci_quirk_amd_sb_acs(), IVRS table is just used for checking AMD IOMMU is supported, not used at runtime, so put the table after using it. Fixes: 15b100dfd1c9 ("PCI: Claim ACS support for AMD southbridge devices") Link: https://lore.kernel.org/r/1595411068-15440-1-git-send-email-guohanjun@huawei.com Signed-off-by: Hanjun Guo Signed-off-by: Bjorn Helgaas Signed-off-by: Sasha Levin --- drivers/pci/quirks.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 4ac4b28e0ebb..9bc0f321aaf0 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -4446,6 +4446,8 @@ static int pci_quirk_amd_sb_acs(struct pci_dev *dev, u16 acs_flags) if (ACPI_FAILURE(status)) return -ENODEV; + acpi_put_table(header); + /* Filter out flags not applicable to multifunction */ acs_flags &= (PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC | PCI_ACS_DT); From 5412751327e87c02b9792ae31444cd4779624fd1 Mon Sep 17 00:00:00 2001 From: Sven Auhagen Date: Mon, 22 Jun 2020 14:01:23 +0200 Subject: [PATCH 186/448] cpufreq: ap806: fix cpufreq driver needs ap cpu clk [ Upstream commit 8c37ad2f523396e15cf002b29f8f796447c71932 ] The Armada 8K cpufreq driver needs the Armada AP CPU CLK to work. This dependency is currently not satisfied and the ARMADA_AP_CPU_CLK can not be selected independently. Add it to the cpufreq Armada8k driver. Fixes: f525a670533d ("cpufreq: ap806: add cpufreq driver for Armada 8K") Signed-off-by: Sven Auhagen Signed-off-by: Viresh Kumar Signed-off-by: Sasha Levin --- drivers/cpufreq/Kconfig.arm | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index a905796f7f85..25f11e9ec358 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -41,6 +41,7 @@ config ARM_ARMADA_37XX_CPUFREQ config ARM_ARMADA_8K_CPUFREQ tristate "Armada 8K CPUFreq driver" depends on ARCH_MVEBU && CPUFREQ_DT + select ARMADA_AP_CPU_CLK help This enables the CPUFreq driver support for Marvell Armada8k SOCs. From 5299edbfc19aefdd39bee651a1d27ea697bb2616 Mon Sep 17 00:00:00 2001 From: Sandipan Das Date: Thu, 30 Jul 2020 10:38:46 +0530 Subject: [PATCH 187/448] selftests/powerpc: Fix online CPU selection [ Upstream commit dfa03fff86027e58c8dba5c03ae68150d4e513ad ] The size of the CPU affinity mask must be large enough for systems with a very large number of CPUs. Otherwise, tests which try to determine the first online CPU by calling sched_getaffinity() will fail. This makes sure that the size of the allocated affinity mask is dependent on the number of CPUs as reported by get_nprocs_conf(). Fixes: 3752e453f6ba ("selftests/powerpc: Add tests of PMU EBBs") Reported-by: Shirisha Ganta Signed-off-by: Sandipan Das Reviewed-by: Kamalesh Babulal Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/a408c4b8e9a23bb39b539417a21eb0ff47bb5127.1596084858.git.sandipan@linux.ibm.com Signed-off-by: Sasha Levin --- tools/testing/selftests/powerpc/utils.c | 39 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/powerpc/utils.c b/tools/testing/selftests/powerpc/utils.c index c02d24835db4..176102eca994 100644 --- a/tools/testing/selftests/powerpc/utils.c +++ b/tools/testing/selftests/powerpc/utils.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -88,28 +89,40 @@ void *get_auxv_entry(int type) int pick_online_cpu(void) { - cpu_set_t mask; - int cpu; + int ncpus, cpu = -1; + cpu_set_t *mask; + size_t size; - CPU_ZERO(&mask); - - if (sched_getaffinity(0, sizeof(mask), &mask)) { - perror("sched_getaffinity"); + ncpus = get_nprocs_conf(); + size = CPU_ALLOC_SIZE(ncpus); + mask = CPU_ALLOC(ncpus); + if (!mask) { + perror("malloc"); return -1; } + CPU_ZERO_S(size, mask); + + if (sched_getaffinity(0, size, mask)) { + perror("sched_getaffinity"); + goto done; + } + /* We prefer a primary thread, but skip 0 */ - for (cpu = 8; cpu < CPU_SETSIZE; cpu += 8) - if (CPU_ISSET(cpu, &mask)) - return cpu; + for (cpu = 8; cpu < ncpus; cpu += 8) + if (CPU_ISSET_S(cpu, size, mask)) + goto done; /* Search for anything, but in reverse */ - for (cpu = CPU_SETSIZE - 1; cpu >= 0; cpu--) - if (CPU_ISSET(cpu, &mask)) - return cpu; + for (cpu = ncpus - 1; cpu >= 0; cpu--) + if (CPU_ISSET_S(cpu, size, mask)) + goto done; printf("No cpus in affinity mask?!\n"); - return -1; + +done: + CPU_FREE(mask); + return cpu; } bool is_ppc64le(void) From a9d54ebf8db0c46c9401be250694f0a69b9b6400 Mon Sep 17 00:00:00 2001 From: Jerome Brunet Date: Wed, 29 Jul 2020 17:44:53 +0200 Subject: [PATCH 188/448] ASoC: meson: axg-tdm-interface: fix link fmt setup [ Upstream commit 6878ba91ce84f7a07887a0615af70f969508839f ] The .set_fmt() callback of the axg tdm interface incorrectly test the content of SND_SOC_DAIFMT_MASTER_MASK as if it was a bitfield, which it is not. Implement the test correctly. Fixes: d60e4f1e4be5 ("ASoC: meson: add tdm interface driver") Signed-off-by: Jerome Brunet Link: https://lore.kernel.org/r/20200729154456.1983396-2-jbrunet@baylibre.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/meson/axg-tdm-interface.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-interface.c index d51f3344be7c..e25336f73912 100644 --- a/sound/soc/meson/axg-tdm-interface.c +++ b/sound/soc/meson/axg-tdm-interface.c @@ -119,16 +119,23 @@ static int axg_tdm_iface_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai); - /* These modes are not supported */ - if (fmt & (SND_SOC_DAIFMT_CBS_CFM | SND_SOC_DAIFMT_CBM_CFS)) { - dev_err(dai->dev, "only CBS_CFS and CBM_CFM are supported\n"); - return -EINVAL; - } + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { + case SND_SOC_DAIFMT_CBS_CFS: + if (!iface->mclk) { + dev_err(dai->dev, "cpu clock master: mclk missing\n"); + return -ENODEV; + } + break; - /* If the TDM interface is the clock master, it requires mclk */ - if (!iface->mclk && (fmt & SND_SOC_DAIFMT_CBS_CFS)) { - dev_err(dai->dev, "cpu clock master: mclk missing\n"); - return -ENODEV; + case SND_SOC_DAIFMT_CBM_CFM: + break; + + case SND_SOC_DAIFMT_CBS_CFM: + case SND_SOC_DAIFMT_CBM_CFS: + dev_err(dai->dev, "only CBS_CFS and CBM_CFM are supported\n"); + /* Fall-through */ + default: + return -EINVAL; } iface->fmt = fmt; @@ -319,7 +326,8 @@ static int axg_tdm_iface_hw_params(struct snd_pcm_substream *substream, if (ret) return ret; - if (iface->fmt & SND_SOC_DAIFMT_CBS_CFS) { + if ((iface->fmt & SND_SOC_DAIFMT_MASTER_MASK) == + SND_SOC_DAIFMT_CBS_CFS) { ret = axg_tdm_iface_set_sclk(dai, params); if (ret) return ret; From 0cc88bf694111c13d675f1174262f0c27962ead9 Mon Sep 17 00:00:00 2001 From: Jerome Brunet Date: Wed, 29 Jul 2020 17:44:54 +0200 Subject: [PATCH 189/448] ASoC: meson: axg-tdmin: fix g12a skew [ Upstream commit 80a254394fcfe55450b0351da298ca7231889219 ] After carefully checking the result provided by the TDMIN on the g12a and sm1 SoC families, the TDMIN skew offset appears to be 3 instead of 2 on the axg. Fixes: f01bc67f58fd ("ASoC: meson: axg-tdm-formatter: rework quirks settings") Signed-off-by: Jerome Brunet Link: https://lore.kernel.org/r/20200729154456.1983396-3-jbrunet@baylibre.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/meson/axg-tdmin.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sound/soc/meson/axg-tdmin.c b/sound/soc/meson/axg-tdmin.c index 973d4c02ef8d..3d002b4eb939 100644 --- a/sound/soc/meson/axg-tdmin.c +++ b/sound/soc/meson/axg-tdmin.c @@ -233,10 +233,26 @@ static const struct axg_tdm_formatter_driver axg_tdmin_drv = { }, }; +static const struct axg_tdm_formatter_driver g12a_tdmin_drv = { + .component_drv = &axg_tdmin_component_drv, + .regmap_cfg = &axg_tdmin_regmap_cfg, + .ops = &axg_tdmin_ops, + .quirks = &(const struct axg_tdm_formatter_hw) { + .invert_sclk = false, + .skew_offset = 3, + }, +}; + static const struct of_device_id axg_tdmin_of_match[] = { { .compatible = "amlogic,axg-tdmin", .data = &axg_tdmin_drv, + }, { + .compatible = "amlogic,g12a-tdmin", + .data = &g12a_tdmin_drv, + }, { + .compatible = "amlogic,sm1-tdmin", + .data = &g12a_tdmin_drv, }, {} }; MODULE_DEVICE_TABLE(of, axg_tdmin_of_match); From 115da6e650abdbcd9437352e63112c115e6412c0 Mon Sep 17 00:00:00 2001 From: Jerome Brunet Date: Wed, 29 Jul 2020 17:44:55 +0200 Subject: [PATCH 190/448] ASoC: meson: axg-tdm-formatters: fix sclk inversion [ Upstream commit 0d3f01dcdc234001f979a0af0b6b31cb9f25b6c1 ] After carefully checking, it appears that both tdmout and tdmin require the rising edge of the sclk they get to be synchronized with the frame sync event (which should be a rising edge of lrclk). TDMIN was improperly set before this patch. Remove the sclk_invert quirk which is no longer needed and fix the sclk phase. Fixes: 1a11d88f499c ("ASoC: meson: add tdm formatter base driver") Signed-off-by: Jerome Brunet Link: https://lore.kernel.org/r/20200729154456.1983396-4-jbrunet@baylibre.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/meson/axg-tdm-formatter.c | 11 ++++++----- sound/soc/meson/axg-tdm-formatter.h | 1 - sound/soc/meson/axg-tdmin.c | 2 -- sound/soc/meson/axg-tdmout.c | 3 --- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/sound/soc/meson/axg-tdm-formatter.c b/sound/soc/meson/axg-tdm-formatter.c index 358c8c0d861c..f7e8e9da68a0 100644 --- a/sound/soc/meson/axg-tdm-formatter.c +++ b/sound/soc/meson/axg-tdm-formatter.c @@ -70,7 +70,7 @@ EXPORT_SYMBOL_GPL(axg_tdm_formatter_set_channel_masks); static int axg_tdm_formatter_enable(struct axg_tdm_formatter *formatter) { struct axg_tdm_stream *ts = formatter->stream; - bool invert = formatter->drv->quirks->invert_sclk; + bool invert; int ret; /* Do nothing if the formatter is already enabled */ @@ -96,11 +96,12 @@ static int axg_tdm_formatter_enable(struct axg_tdm_formatter *formatter) return ret; /* - * If sclk is inverted, invert it back and provide the inversion - * required by the formatter + * If sclk is inverted, it means the bit should latched on the + * rising edge which is what our HW expects. If not, we need to + * invert it before the formatter. */ - invert ^= axg_tdm_sclk_invert(ts->iface->fmt); - ret = clk_set_phase(formatter->sclk, invert ? 180 : 0); + invert = axg_tdm_sclk_invert(ts->iface->fmt); + ret = clk_set_phase(formatter->sclk, invert ? 0 : 180); if (ret) return ret; diff --git a/sound/soc/meson/axg-tdm-formatter.h b/sound/soc/meson/axg-tdm-formatter.h index 9ef98e955cb2..a1f0dcc0ff13 100644 --- a/sound/soc/meson/axg-tdm-formatter.h +++ b/sound/soc/meson/axg-tdm-formatter.h @@ -16,7 +16,6 @@ struct snd_kcontrol; struct axg_tdm_formatter_hw { unsigned int skew_offset; - bool invert_sclk; }; struct axg_tdm_formatter_ops { diff --git a/sound/soc/meson/axg-tdmin.c b/sound/soc/meson/axg-tdmin.c index 3d002b4eb939..88ed95ae886b 100644 --- a/sound/soc/meson/axg-tdmin.c +++ b/sound/soc/meson/axg-tdmin.c @@ -228,7 +228,6 @@ static const struct axg_tdm_formatter_driver axg_tdmin_drv = { .regmap_cfg = &axg_tdmin_regmap_cfg, .ops = &axg_tdmin_ops, .quirks = &(const struct axg_tdm_formatter_hw) { - .invert_sclk = false, .skew_offset = 2, }, }; @@ -238,7 +237,6 @@ static const struct axg_tdm_formatter_driver g12a_tdmin_drv = { .regmap_cfg = &axg_tdmin_regmap_cfg, .ops = &axg_tdmin_ops, .quirks = &(const struct axg_tdm_formatter_hw) { - .invert_sclk = false, .skew_offset = 3, }, }; diff --git a/sound/soc/meson/axg-tdmout.c b/sound/soc/meson/axg-tdmout.c index 418ec314b37d..3ceabddae629 100644 --- a/sound/soc/meson/axg-tdmout.c +++ b/sound/soc/meson/axg-tdmout.c @@ -238,7 +238,6 @@ static const struct axg_tdm_formatter_driver axg_tdmout_drv = { .regmap_cfg = &axg_tdmout_regmap_cfg, .ops = &axg_tdmout_ops, .quirks = &(const struct axg_tdm_formatter_hw) { - .invert_sclk = true, .skew_offset = 1, }, }; @@ -248,7 +247,6 @@ static const struct axg_tdm_formatter_driver g12a_tdmout_drv = { .regmap_cfg = &axg_tdmout_regmap_cfg, .ops = &axg_tdmout_ops, .quirks = &(const struct axg_tdm_formatter_hw) { - .invert_sclk = true, .skew_offset = 2, }, }; @@ -309,7 +307,6 @@ static const struct axg_tdm_formatter_driver sm1_tdmout_drv = { .regmap_cfg = &axg_tdmout_regmap_cfg, .ops = &axg_tdmout_ops, .quirks = &(const struct axg_tdm_formatter_hw) { - .invert_sclk = true, .skew_offset = 2, }, }; From b8ae2bf5ccc66b6cc66567e4ef5b4f7220a458fe Mon Sep 17 00:00:00 2001 From: Shengjiu Wang Date: Fri, 31 Jul 2020 14:28:15 +0800 Subject: [PATCH 191/448] ASoC: fsl_sai: Fix value of FSL_SAI_CR1_RFW_MASK [ Upstream commit 5aef1ff2397d021f93d874b57dff032fdfac73de ] The fifo_depth is 64 on i.MX8QM/i.MX8QXP, 128 on i.MX8MQ, 16 on i.MX7ULP. Original FSL_SAI_CR1_RFW_MASK value 0x1F is not suitable for these platform, the FIFO watermark mask should be updated according to the fifo_depth. Fixes: a860fac42097 ("ASoC: fsl_sai: Add support for imx7ulp/imx8mq") Signed-off-by: Shengjiu Wang Reviewed-by: Fabio Estevam Link: https://lore.kernel.org/r/1596176895-28724-1-git-send-email-shengjiu.wang@nxp.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/fsl/fsl_sai.c | 5 +++-- sound/soc/fsl/fsl_sai.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 41b83ecaf008..914b75c23d1b 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -680,10 +680,11 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai) regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0); regmap_update_bits(sai->regmap, FSL_SAI_TCR1(ofs), - FSL_SAI_CR1_RFW_MASK, + FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), sai->soc_data->fifo_depth - FSL_SAI_MAXBURST_TX); regmap_update_bits(sai->regmap, FSL_SAI_RCR1(ofs), - FSL_SAI_CR1_RFW_MASK, FSL_SAI_MAXBURST_RX - 1); + FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), + FSL_SAI_MAXBURST_RX - 1); snd_soc_dai_init_dma_data(cpu_dai, &sai->dma_params_tx, &sai->dma_params_rx); diff --git a/sound/soc/fsl/fsl_sai.h b/sound/soc/fsl/fsl_sai.h index 76b15deea80c..6aba7d28f5f3 100644 --- a/sound/soc/fsl/fsl_sai.h +++ b/sound/soc/fsl/fsl_sai.h @@ -94,7 +94,7 @@ #define FSL_SAI_CSR_FRDE BIT(0) /* SAI Transmit and Receive Configuration 1 Register */ -#define FSL_SAI_CR1_RFW_MASK 0x1f +#define FSL_SAI_CR1_RFW_MASK(x) ((x) - 1) /* SAI Transmit and Receive Configuration 2 Register */ #define FSL_SAI_CR2_SYNC BIT(30) From 2fd47ea1e0635a5a43cb86a0a9eb3c289859b0ec Mon Sep 17 00:00:00 2001 From: Julian Wiedmann Date: Thu, 30 Jul 2020 17:01:20 +0200 Subject: [PATCH 192/448] s390/qeth: don't process empty bridge port events [ Upstream commit 02472e28b9a45471c6d8729ff2c7422baa9be46a ] Discard events that don't contain any entries. This shouldn't happen, but subsequent code relies on being able to use entry 0. So better be safe than accessing garbage. Fixes: b4d72c08b358 ("qeth: bridgeport support - basic control") Signed-off-by: Julian Wiedmann Reviewed-by: Alexandra Winter Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/s390/net/qeth_l2_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index 92bace3b28fd..4ce28aa490cd 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c @@ -1199,6 +1199,10 @@ static void qeth_bridge_state_change(struct qeth_card *card, int extrasize; QETH_CARD_TEXT(card, 2, "brstchng"); + if (qports->num_entries == 0) { + QETH_CARD_TEXT(card, 2, "BPempty"); + return; + } if (qports->entry_length != sizeof(struct qeth_sbp_port_entry)) { QETH_CARD_TEXT_(card, 2, "BPsz%04x", qports->entry_length); return; From fef9f09078b083881567155aedfaf0b10b3a81f0 Mon Sep 17 00:00:00 2001 From: Surabhi Boob Date: Wed, 29 Jul 2020 17:19:18 -0700 Subject: [PATCH 193/448] ice: Graceful error handling in HW table calloc failure [ Upstream commit bcc46cb8a077c6189b44f1555b8659837f748eb2 ] In the ice_init_hw_tbls, if the devm_kcalloc for es->written fails, catch that error and bail out gracefully, instead of continuing with a NULL pointer. Fixes: 32d63fa1e9f3 ("ice: Initialize DDP package structures") Signed-off-by: Surabhi Boob Tested-by: Andrew Bowers Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/ice/ice_flex_pipe.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/ice/ice_flex_pipe.c b/drivers/net/ethernet/intel/ice/ice_flex_pipe.c index cbd53b586c36..6cfe8eb7f47d 100644 --- a/drivers/net/ethernet/intel/ice/ice_flex_pipe.c +++ b/drivers/net/ethernet/intel/ice/ice_flex_pipe.c @@ -1535,10 +1535,12 @@ enum ice_status ice_init_hw_tbls(struct ice_hw *hw) es->ref_count = devm_kcalloc(ice_hw_to_dev(hw), es->count, sizeof(*es->ref_count), GFP_KERNEL); + if (!es->ref_count) + goto err; es->written = devm_kcalloc(ice_hw_to_dev(hw), es->count, sizeof(*es->written), GFP_KERNEL); - if (!es->ref_count) + if (!es->written) goto err; } return 0; From ff1ecaf751d739e76fe1e5c4b9d2b3e4c4c072cb Mon Sep 17 00:00:00 2001 From: Tsang-Shian Lin Date: Fri, 17 Jul 2020 14:49:31 +0800 Subject: [PATCH 194/448] rtw88: fix LDPC field for RA info [ Upstream commit ae44fa993e8e6c1a1d22e5ca03d9eadd53b2745b ] Convert the type of LDPC field to boolen because LDPC field of RA info H2C command to firmware is only one bit. Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver") Signed-off-by: Tsang-Shian Lin Signed-off-by: Yan-Hsuan Chuang Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200717064937.27966-2-yhchuang@realtek.com Signed-off-by: Sasha Levin --- drivers/net/wireless/realtek/rtw88/fw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index 35dbdb3c4f1e..8efaee7571f3 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -340,7 +340,7 @@ void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) SET_RA_INFO_INIT_RA_LVL(h2c_pkt, si->init_ra_lv); SET_RA_INFO_SGI_EN(h2c_pkt, si->sgi_enable); SET_RA_INFO_BW_MODE(h2c_pkt, si->bw_mode); - SET_RA_INFO_LDPC(h2c_pkt, si->ldpc_en); + SET_RA_INFO_LDPC(h2c_pkt, !!si->ldpc_en); SET_RA_INFO_NO_UPDATE(h2c_pkt, no_update); SET_RA_INFO_VHT_EN(h2c_pkt, si->vht_enable); SET_RA_INFO_DIS_PT(h2c_pkt, disable_pt); From 1b7546010b01b6956d82dff37d38da7c8d8da2eb Mon Sep 17 00:00:00 2001 From: Tsang-Shian Lin Date: Fri, 17 Jul 2020 14:49:32 +0800 Subject: [PATCH 195/448] rtw88: fix short GI capability based on current bandwidth [ Upstream commit 4dd86b901d1373ef8446ecb50a7ca009f3475211 ] Fix the transmission is not sent with short GI under some conditions even if the receiver supports short GI. If VHT capability IE exists in the beacon, the original code uses the short GI for 80M field as driver's short GI setting for transmission, even the current bandwidth is not 80MHz. Short GI supported fields for 20M/40M are informed in HT capability information element, and short GI supported field for 80M is informed in VHT capability information element. These three fields may be set to different values. Driver needs to record each short GI support field for each bandwidth, and send correct info depends on current bandwidth to the WiFi firmware. Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver") Signed-off-by: Tsang-Shian Lin Signed-off-by: Yan-Hsuan Chuang Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200717064937.27966-3-yhchuang@realtek.com Signed-off-by: Sasha Levin --- drivers/net/wireless/realtek/rtw88/main.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index 88e2252bf8a2..15c7a6fc37b9 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -553,8 +553,6 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) stbc_en = VHT_STBC_EN; if (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC) ldpc_en = VHT_LDPC_EN; - if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80) - is_support_sgi = true; } else if (sta->ht_cap.ht_supported) { ra_mask |= (sta->ht_cap.mcs.rx_mask[1] << 20) | (sta->ht_cap.mcs.rx_mask[0] << 12); @@ -562,9 +560,6 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) stbc_en = HT_STBC_EN; if (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING) ldpc_en = HT_LDPC_EN; - if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20 || - sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) - is_support_sgi = true; } if (efuse->hw_cap.nss == 1) @@ -606,12 +601,18 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) switch (sta->bandwidth) { case IEEE80211_STA_RX_BW_80: bw_mode = RTW_CHANNEL_WIDTH_80; + is_support_sgi = sta->vht_cap.vht_supported && + (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80); break; case IEEE80211_STA_RX_BW_40: bw_mode = RTW_CHANNEL_WIDTH_40; + is_support_sgi = sta->ht_cap.ht_supported && + (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40); break; default: bw_mode = RTW_CHANNEL_WIDTH_20; + is_support_sgi = sta->ht_cap.ht_supported && + (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20); break; } From 3bec3e41db0d2614f994641aacb209a25d3bdbf0 Mon Sep 17 00:00:00 2001 From: Yan-Hsuan Chuang Date: Fri, 17 Jul 2020 14:49:34 +0800 Subject: [PATCH 196/448] rtw88: coex: only skip coex triggered by BT info [ Upstream commit 3f194bd4ca1cd9b8eef34d37d562279dbeb80319 ] The coex mechanism used to skip upon the freeze flag is raised. That will cause the coex mechanism being skipped unexpectedly. Coex only wanted to keep the TDMA table from being changed by BT side. So, check the freeze and reason, if the coex reason is coming from BT info, skip it, to make sure the coex triggered by Wifi itself can work. This is required for the AP mode, while the control flow is different with STA mode. When starting an AP mode, the AP mode needs to start working immedaitely after leaving IPS, and the freeze flag could be raised. If the coex info is skipped, then the AP mode will not set the antenna owner, leads to TX stuck. Fixes: 4136214f7c46 ("rtw88: add BT co-existence support") Signed-off-by: Yan-Hsuan Chuang Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200717064937.27966-5-yhchuang@realtek.com Signed-off-by: Sasha Levin --- drivers/net/wireless/realtek/rtw88/coex.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c index 3e95ad198912..853ac1c2ed73 100644 --- a/drivers/net/wireless/realtek/rtw88/coex.c +++ b/drivers/net/wireless/realtek/rtw88/coex.c @@ -1923,7 +1923,8 @@ static void rtw_coex_run_coex(struct rtw_dev *rtwdev, u8 reason) if (coex_stat->wl_under_ips) return; - if (coex->freeze && !coex_stat->bt_setup_link) + if (coex->freeze && coex_dm->reason == COEX_RSN_BTINFO && + !coex_stat->bt_setup_link) return; coex_stat->cnt_wl[COEX_CNT_WL_COEXRUN]++; From 2684577dd9bc03aa6baf379df132a6d04e895a84 Mon Sep 17 00:00:00 2001 From: Wang Hai Date: Thu, 30 Jul 2020 15:39:39 +0800 Subject: [PATCH 197/448] wl1251: fix always return 0 error [ Upstream commit 20e6421344b5bc2f97b8e2db47b6994368417904 ] wl1251_event_ps_report() should not always return 0 because wl1251_ps_set_mode() may fail. Change it to return 'ret'. Fixes: f7ad1eed4d4b ("wl1251: retry power save entry") Reported-by: Hulk Robot Signed-off-by: Wang Hai Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200730073939.33704-1-wanghai38@huawei.com Signed-off-by: Sasha Levin --- drivers/net/wireless/ti/wl1251/event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/ti/wl1251/event.c b/drivers/net/wireless/ti/wl1251/event.c index 850864dbafa1..e6d426edab56 100644 --- a/drivers/net/wireless/ti/wl1251/event.c +++ b/drivers/net/wireless/ti/wl1251/event.c @@ -70,7 +70,7 @@ static int wl1251_event_ps_report(struct wl1251 *wl, break; } - return 0; + return ret; } static void wl1251_event_mbox_dump(struct event_mailbox *mbox) From 94bc0ab6043f91ea57dac02f7da93ae39256abb3 Mon Sep 17 00:00:00 2001 From: Andrii Nakryiko Date: Thu, 30 Jul 2020 19:42:44 -0700 Subject: [PATCH 198/448] tools, build: Propagate build failures from tools/build/Makefile.build [ Upstream commit a278f3d8191228212c553a5d4303fa603214b717 ] The '&&' command seems to have a bad effect when $(cmd_$(1)) exits with non-zero effect: the command failure is masked (despite `set -e`) and all but the first command of $(dep-cmd) is executed (successfully, as they are mostly printfs), thus overall returning 0 in the end. This means in practice that despite compilation errors, tools's build Makefile will return success. We see this very reliably with libbpf's Makefile, which doesn't get compilation error propagated properly. This in turns causes issues with selftests build, as well as bpftool and other projects that rely on building libbpf. The fix is simple: don't use &&. Given `set -e`, we don't need to chain commands with &&. The shell will exit on first failure, giving desired behavior and propagating error properly. Fixes: 275e2d95591e ("tools build: Move dependency copy into function") Signed-off-by: Andrii Nakryiko Signed-off-by: Daniel Borkmann Acked-by: Jiri Olsa Link: https://lore.kernel.org/bpf/20200731024244.872574-1-andriin@fb.com Signed-off-by: Sasha Levin --- tools/build/Build.include | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/build/Build.include b/tools/build/Build.include index 9ec01f4454f9..585486e40995 100644 --- a/tools/build/Build.include +++ b/tools/build/Build.include @@ -74,7 +74,8 @@ dep-cmd = $(if $(wildcard $(fixdep)), # dependencies in the cmd file if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)), \ @set -e; \ - $(echo-cmd) $(cmd_$(1)) && $(dep-cmd)) + $(echo-cmd) $(cmd_$(1)); \ + $(dep-cmd)) # if_changed - execute command if any prerequisite is newer than # target, or command line has changed From a4301de4be419f027b07356f5cdcfcea99859041 Mon Sep 17 00:00:00 2001 From: Tianjia Zhang Date: Sun, 2 Aug 2020 19:15:40 +0800 Subject: [PATCH 199/448] tools, bpftool: Fix wrong return value in do_dump() [ Upstream commit 041549b7b2c7811ec40e705c439211f00ade2dda ] In case of btf_id does not exist, a negative error code -ENOENT should be returned. Fixes: c93cc69004df3 ("bpftool: add ability to dump BTF types") Signed-off-by: Tianjia Zhang Signed-off-by: Daniel Borkmann Reviewed-by: Tobias Klauser Acked-by: Andrii Nakryiko Acked-by: John Fastabend Link: https://lore.kernel.org/bpf/20200802111540.5384-1-tianjia.zhang@linux.alibaba.com Signed-off-by: Sasha Levin --- tools/bpf/bpftool/btf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c index 9a9376d1d3df..66765f970bc5 100644 --- a/tools/bpf/bpftool/btf.c +++ b/tools/bpf/bpftool/btf.c @@ -510,7 +510,7 @@ static int do_dump(int argc, char **argv) goto done; } if (!btf) { - err = ENOENT; + err = -ENOENT; p_err("can't find btf with ID (%u)", btf_id); goto done; } From 87a43dac39c2ddc8c8da8457676234896e83196b Mon Sep 17 00:00:00 2001 From: Alex Vesker Date: Mon, 13 Jul 2020 14:09:04 +0300 Subject: [PATCH 200/448] net/mlx5: DR, Change push vlan action sequence [ Upstream commit b206490940216542c68563699b279eed3c55107c ] The DR TX state machine supports the following order: modify header, push vlan and encapsulation. Instead fs_dr would pass: push vlan, modify header and encapsulation. The above caused the rule creation to fail on invalid action sequence provided error. Fixes: 6a48faeeca10 ("net/mlx5: Add direct rule fs_cmd implementation") Signed-off-by: Alex Vesker Reviewed-by: Maor Gottlieb Signed-off-by: Saeed Mahameed Signed-off-by: Sasha Levin --- .../mellanox/mlx5/core/steering/fs_dr.c | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c index 1e32e2443f73..348f02e336f6 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c @@ -247,29 +247,9 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, /* The order of the actions are must to be keep, only the following * order is supported by SW steering: - * TX: push vlan -> modify header -> encap + * TX: modify header -> push vlan -> encap * RX: decap -> pop vlan -> modify header */ - if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH) { - tmp_action = create_action_push_vlan(domain, &fte->action.vlan[0]); - if (!tmp_action) { - err = -ENOMEM; - goto free_actions; - } - fs_dr_actions[fs_dr_num_actions++] = tmp_action; - actions[num_actions++] = tmp_action; - } - - if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2) { - tmp_action = create_action_push_vlan(domain, &fte->action.vlan[1]); - if (!tmp_action) { - err = -ENOMEM; - goto free_actions; - } - fs_dr_actions[fs_dr_num_actions++] = tmp_action; - actions[num_actions++] = tmp_action; - } - if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_DECAP) { enum mlx5dr_action_reformat_type decap_type = DR_ACTION_REFORMAT_TYP_TNL_L2_TO_L2; @@ -322,6 +302,26 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, actions[num_actions++] = fte->action.modify_hdr->action.dr_action; + if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH) { + tmp_action = create_action_push_vlan(domain, &fte->action.vlan[0]); + if (!tmp_action) { + err = -ENOMEM; + goto free_actions; + } + fs_dr_actions[fs_dr_num_actions++] = tmp_action; + actions[num_actions++] = tmp_action; + } + + if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2) { + tmp_action = create_action_push_vlan(domain, &fte->action.vlan[1]); + if (!tmp_action) { + err = -ENOMEM; + goto free_actions; + } + fs_dr_actions[fs_dr_num_actions++] = tmp_action; + actions[num_actions++] = tmp_action; + } + if (delay_encap_set) actions[num_actions++] = fte->action.pkt_reformat->action.dr_action; From fe8571b4d5ac0db19a78c43db95e53a7fe8a6ec6 Mon Sep 17 00:00:00 2001 From: Leon Romanovsky Date: Sun, 19 Jul 2020 11:04:30 +0300 Subject: [PATCH 201/448] net/mlx5: Delete extra dump stack that gives nothing [ Upstream commit 6c4e9bcfb48933d533ff975e152757991556294a ] The WARN_*() macros are intended to catch impossible situations from the SW point of view. They gave a little in case HW<->SW interface is out-of-sync. Such out-of-sync scenario can be due to SW errors that are not part of this flow or because some HW errors, where dump stack won't help either. This specific WARN_ON() is useless because mlx5_core code is prepared to handle such situations and will unfold everything correctly while providing enough information to the users to understand why FS is not working. WARNING: CPU: 0 PID: 3222 at drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 connect_fts_in_prio.isra.20+0x1dd/0x260 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 Kernel panic - not syncing: panic_on_warn set ... CPU: 0 PID: 3222 Comm: syz-executor861 Not tainted 5.5.0-rc6+ #2 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014 Call Trace: __dump_stack linux/lib/dump_stack.c:77 [inline] dump_stack+0x94/0xce linux/lib/dump_stack.c:118 panic+0x234/0x56f linux/kernel/panic.c:221 __warn+0x1cc/0x1e1 linux/kernel/panic.c:582 report_bug+0x200/0x310 linux/lib/bug.c:195 fixup_bug.part.11+0x32/0x80 linux/arch/x86/kernel/traps.c:174 fixup_bug linux/arch/x86/kernel/traps.c:273 [inline] do_error_trap+0xd3/0x100 linux/arch/x86/kernel/traps.c:267 do_invalid_op+0x31/0x40 linux/arch/x86/kernel/traps.c:286 invalid_op+0x1e/0x30 linux/arch/x86/entry/entry_64.S:1027 RIP: 0010:connect_fts_in_prio.isra.20+0x1dd/0x260 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 Code: 00 00 48 c7 c2 60 8c 31 84 48 c7 c6 00 81 31 84 48 8b 38 e8 3c a8 cb ff 41 83 fd 01 8b 04 24 0f 8e 29 ff ff ff e8 83 7b bc fe <0f> 0b 8b 04 24 e9 1a ff ff ff 89 04 24 e8 c1 20 e0 fe 8b 04 24 eb RSP: 0018:ffffc90004bb7858 EFLAGS: 00010293 RAX: ffff88805de98e80 RBX: 0000000000000c96 RCX: ffffffff827a853d RDX: 0000000000000000 RSI: 0000000000000000 RDI: fffff52000976efa RBP: 0000000000000007 R08: ffffed100da060e3 R09: ffffed100da060e3 R10: 0000000000000001 R11: ffffed100da060e2 R12: dffffc0000000000 R13: 0000000000000002 R14: ffff8880683a1a10 R15: ffffed100d07bc1c connect_prev_fts linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:844 [inline] connect_flow_table linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:975 [inline] __mlx5_create_flow_table+0x8f8/0x1710 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1064 mlx5_create_flow_table linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1094 [inline] mlx5_create_auto_grouped_flow_table+0xe1/0x210 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1136 _get_prio linux/drivers/infiniband/hw/mlx5/main.c:3286 [inline] get_flow_table+0x2ea/0x760 linux/drivers/infiniband/hw/mlx5/main.c:3376 mlx5_ib_create_flow+0x331/0x11c0 linux/drivers/infiniband/hw/mlx5/main.c:3896 ib_uverbs_ex_create_flow+0x13e8/0x1b40 linux/drivers/infiniband/core/uverbs_cmd.c:3311 ib_uverbs_write+0xaa5/0xdf0 linux/drivers/infiniband/core/uverbs_main.c:769 __vfs_write+0x7c/0x100 linux/fs/read_write.c:494 vfs_write+0x168/0x4a0 linux/fs/read_write.c:558 ksys_write+0xc8/0x200 linux/fs/read_write.c:611 do_syscall_64+0x9c/0x390 linux/arch/x86/entry/common.c:294 entry_SYSCALL_64_after_hwframe+0x44/0xa9 RIP: 0033:0x45a059 Code: 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 bc ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fcc17564c98 EFLAGS: 00000246 ORIG_RAX: 0000000000000001 RAX: ffffffffffffffda RBX: 00007fcc17564ca0 RCX: 000000000045a059 RDX: 0000000000000030 RSI: 00000000200003c0 RDI: 0000000000000005 RBP: 0000000000000007 R08: 0000000000000002 R09: 0000000000003131 R10: 0000000000000000 R11: 0000000000000246 R12: 00000000006e636c R13: 0000000000000000 R14: 00000000006e6360 R15: 00007ffdcbdaf6a0 Dumping ftrace buffer: (ftrace buffer empty) Kernel Offset: disabled Rebooting in 1 seconds.. Fixes: f90edfd279f3 ("net/mlx5_core: Connect flow tables") Reviewed-by: Maor Gottlieb Reviewed-by: Mark Bloch Signed-off-by: Leon Romanovsky Signed-off-by: Sasha Levin --- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c index 86e6bbb57482..b66e5b6eecd9 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c @@ -809,18 +809,15 @@ static int connect_fts_in_prio(struct mlx5_core_dev *dev, { struct mlx5_flow_root_namespace *root = find_root(&prio->node); struct mlx5_flow_table *iter; - int i = 0; int err; fs_for_each_ft(iter, prio) { - i++; err = root->cmds->modify_flow_table(root, iter, ft); if (err) { - mlx5_core_warn(dev, "Failed to modify flow table %d\n", - iter->id); + mlx5_core_err(dev, + "Failed to modify flow table id %d, type %d, err %d\n", + iter->id, iter->type, err); /* The driver is out of sync with the FW */ - if (i > 1) - WARN_ON(true); return err; } } From eb4afeaf861f7e592f03fb7323807b1dde35a6eb Mon Sep 17 00:00:00 2001 From: Tianjia Zhang Date: Sun, 2 Aug 2020 19:15:37 +0800 Subject: [PATCH 202/448] net: ethernet: aquantia: Fix wrong return value [ Upstream commit 0470a48880f8bc42ce26962b79c7b802c5a695ec ] In function hw_atl_a0_hw_multicast_list_set(), when an invalid request is encountered, a negative error code should be returned. Fixes: bab6de8fd180b ("net: ethernet: aquantia: Atlantic A0 and B0 specific functions") Cc: David VomLehn Signed-off-by: Tianjia Zhang Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c index 359a4d387185..9a0db70c1143 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c @@ -776,7 +776,7 @@ static int hw_atl_a0_hw_multicast_list_set(struct aq_hw_s *self, int err = 0; if (count > (HW_ATL_A0_MAC_MAX - HW_ATL_A0_MAC_MIN)) { - err = EBADRQC; + err = -EBADRQC; goto err_exit; } for (self->aq_nic_cfg->mc_list_count = 0U; From dc66a35ffee6517f588c6f942d6a0e06c0b32444 Mon Sep 17 00:00:00 2001 From: Tianjia Zhang Date: Sun, 2 Aug 2020 19:15:44 +0800 Subject: [PATCH 203/448] liquidio: Fix wrong return value in cn23xx_get_pf_num() [ Upstream commit aa027850a292ea65524b8fab83eb91a124ad362c ] On an error exit path, a negative error code should be returned instead of a positive return value. Fixes: 0c45d7fe12c7e ("liquidio: fix use of pf in pass-through mode in a virtual machine") Cc: Rick Farrington Signed-off-by: Tianjia Zhang Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c index 43d11c38b38a..4cddd628d41b 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c @@ -1167,7 +1167,7 @@ static int cn23xx_get_pf_num(struct octeon_device *oct) oct->pf_num = ((fdl_bit >> CN23XX_PCIE_SRIOV_FDL_BIT_POS) & CN23XX_PCIE_SRIOV_FDL_MASK); } else { - ret = EINVAL; + ret = -EINVAL; /* Under some virtual environments, extended PCI regs are * inaccessible, in which case the above read will have failed. From 8c68da19fd022df4c48c08a0cf7dc5d36ade793b Mon Sep 17 00:00:00 2001 From: Christophe JAILLET Date: Sun, 2 Aug 2020 15:53:33 +0200 Subject: [PATCH 204/448] net: spider_net: Fix the size used in a 'dma_free_coherent()' call [ Upstream commit 36f28f7687a9ce665479cce5d64ce7afaa9e77ae ] Update the size used in 'dma_free_coherent()' in order to match the one used in the corresponding 'dma_alloc_coherent()', in 'spider_net_init_chain()'. Fixes: d4ed8f8d1fb7 ("Spidernet DMA coalescing") Signed-off-by: Christophe JAILLET Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/toshiba/spider_net.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c index 538e70810d3d..a99c7c95de5c 100644 --- a/drivers/net/ethernet/toshiba/spider_net.c +++ b/drivers/net/ethernet/toshiba/spider_net.c @@ -283,8 +283,8 @@ spider_net_free_chain(struct spider_net_card *card, descr = descr->next; } while (descr != chain->ring); - dma_free_coherent(&card->pdev->dev, chain->num_desc, - chain->hwring, chain->dma_addr); + dma_free_coherent(&card->pdev->dev, chain->num_desc * sizeof(struct spider_net_hw_descr), + chain->hwring, chain->dma_addr); } /** From e9b3249a3df692cce579c533b40147def384ca7a Mon Sep 17 00:00:00 2001 From: Florinel Iordache Date: Mon, 3 Aug 2020 10:07:30 +0300 Subject: [PATCH 205/448] fsl/fman: use 32-bit unsigned integer [ Upstream commit 99f47abd9f7bf6e365820d355dc98f6955a562df ] Potentially overflowing expression (ts_freq << 16 and intgr << 16) declared as type u32 (32-bit unsigned) is evaluated using 32-bit arithmetic and then used in a context that expects an expression of type u64 (64-bit unsigned) which ultimately is used as 16-bit unsigned by typecasting to u16. Fixed by using an unsigned 32-bit integer since the value is truncated anyway in the end. Fixes: 414fd46e7762 ("fsl/fman: Add FMan support") Signed-off-by: Florinel Iordache Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/fman/fman.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c index 4c2fa13a7dd7..c8e434c8ab98 100644 --- a/drivers/net/ethernet/freescale/fman/fman.c +++ b/drivers/net/ethernet/freescale/fman/fman.c @@ -1396,8 +1396,7 @@ static void enable_time_stamp(struct fman *fman) { struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs; u16 fm_clk_freq = fman->state->fm_clk_freq; - u32 tmp, intgr, ts_freq; - u64 frac; + u32 tmp, intgr, ts_freq, frac; ts_freq = (u32)(1 << fman->state->count1_micro_bit); /* configure timestamp so that bit 8 will count 1 microsecond From a405fb3ffdab9c7ca04b448cfd268423fd052a4a Mon Sep 17 00:00:00 2001 From: Florinel Iordache Date: Mon, 3 Aug 2020 10:07:31 +0300 Subject: [PATCH 206/448] fsl/fman: fix dereference null return value [ Upstream commit 0572054617f32670abab4b4e89a876954d54b704 ] Check before using returned value to avoid dereferencing null pointer. Fixes: 18a6c85fcc78 ("fsl/fman: Add FMan Port Support") Signed-off-by: Florinel Iordache Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/fman/fman_port.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/fman/fman_port.c b/drivers/net/ethernet/freescale/fman/fman_port.c index ee82ee1384eb..47f6fee1f396 100644 --- a/drivers/net/ethernet/freescale/fman/fman_port.c +++ b/drivers/net/ethernet/freescale/fman/fman_port.c @@ -1756,6 +1756,7 @@ static int fman_port_probe(struct platform_device *of_dev) struct fman_port *port; struct fman *fman; struct device_node *fm_node, *port_node; + struct platform_device *fm_pdev; struct resource res; struct resource *dev_res; u32 val; @@ -1780,8 +1781,14 @@ static int fman_port_probe(struct platform_device *of_dev) goto return_err; } - fman = dev_get_drvdata(&of_find_device_by_node(fm_node)->dev); + fm_pdev = of_find_device_by_node(fm_node); of_node_put(fm_node); + if (!fm_pdev) { + err = -EINVAL; + goto return_err; + } + + fman = dev_get_drvdata(&fm_pdev->dev); if (!fman) { err = -EINVAL; goto return_err; From 158ccb4f03b5d5381b56711faf31a03cf82c624e Mon Sep 17 00:00:00 2001 From: Florinel Iordache Date: Mon, 3 Aug 2020 10:07:32 +0300 Subject: [PATCH 207/448] fsl/fman: fix unreachable code [ Upstream commit cc79fd8f557767de90ff199d3b6fb911df43160a ] The parameter 'priority' is incorrectly forced to zero which ultimately induces logically dead code in the subsequent lines. Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") Signed-off-by: Florinel Iordache Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/fman/fman_memac.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c index e1901874c19f..08f8b36779ea 100644 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c @@ -856,7 +856,6 @@ int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority, tmp = ioread32be(®s->command_config); tmp &= ~CMD_CFG_PFC_MODE; - priority = 0; iowrite32be(tmp, ®s->command_config); From 2997cea07f9e3085d3bcfe2352b7d51442973aed Mon Sep 17 00:00:00 2001 From: Florinel Iordache Date: Mon, 3 Aug 2020 10:07:33 +0300 Subject: [PATCH 208/448] fsl/fman: check dereferencing null pointer [ Upstream commit cc5d229a122106733a85c279d89d7703f21e4d4f ] Add a safe check to avoid dereferencing null pointer Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") Signed-off-by: Florinel Iordache Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/fman/fman_dtsec.c | 4 ++-- drivers/net/ethernet/freescale/fman/fman_memac.c | 2 +- drivers/net/ethernet/freescale/fman/fman_tgec.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c index 1ca543ac8f2c..d2de9ea80c43 100644 --- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c +++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c @@ -1205,7 +1205,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr) list_for_each(pos, &dtsec->multicast_addr_hash->lsts[bucket]) { hash_entry = ETH_HASH_ENTRY_OBJ(pos); - if (hash_entry->addr == addr) { + if (hash_entry && hash_entry->addr == addr) { list_del_init(&hash_entry->node); kfree(hash_entry); break; @@ -1218,7 +1218,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr) list_for_each(pos, &dtsec->unicast_addr_hash->lsts[bucket]) { hash_entry = ETH_HASH_ENTRY_OBJ(pos); - if (hash_entry->addr == addr) { + if (hash_entry && hash_entry->addr == addr) { list_del_init(&hash_entry->node); kfree(hash_entry); break; diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c index 08f8b36779ea..9088b4f4b4b8 100644 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c @@ -985,7 +985,7 @@ int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) { hash_entry = ETH_HASH_ENTRY_OBJ(pos); - if (hash_entry->addr == addr) { + if (hash_entry && hash_entry->addr == addr) { list_del_init(&hash_entry->node); kfree(hash_entry); break; diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c index f75b9c11b2d2..ac5a281e0ec3 100644 --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c @@ -630,7 +630,7 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { hash_entry = ETH_HASH_ENTRY_OBJ(pos); - if (hash_entry->addr == addr) { + if (hash_entry && hash_entry->addr == addr) { list_del_init(&hash_entry->node); kfree(hash_entry); break; From 3084ecb023578ed999aba7316f5630bf85a1d14b Mon Sep 17 00:00:00 2001 From: Florinel Iordache Date: Mon, 3 Aug 2020 10:07:34 +0300 Subject: [PATCH 209/448] fsl/fman: fix eth hash table allocation [ Upstream commit 3207f715c34317d08e798e11a10ce816feb53c0f ] Fix memory allocation for ethernet address hash table. The code was wrongly allocating an array for eth hash table which is incorrect because this is the main structure for eth hash table (struct eth_hash_t) that contains inside a number of elements. Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") Signed-off-by: Florinel Iordache Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/fman/fman_mac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/fman/fman_mac.h b/drivers/net/ethernet/freescale/fman/fman_mac.h index dd6d0526f6c1..19f327efdaff 100644 --- a/drivers/net/ethernet/freescale/fman/fman_mac.h +++ b/drivers/net/ethernet/freescale/fman/fman_mac.h @@ -252,7 +252,7 @@ static inline struct eth_hash_t *alloc_hash_table(u16 size) struct eth_hash_t *hash; /* Allocate address hash table */ - hash = kmalloc_array(size, sizeof(struct eth_hash_t *), GFP_KERNEL); + hash = kmalloc(sizeof(*hash), GFP_KERNEL); if (!hash) return NULL; From 41e8b5afde8e391f00107fdf66f754d1322364ff Mon Sep 17 00:00:00 2001 From: Dean Nelson Date: Wed, 5 Aug 2020 13:18:48 -0500 Subject: [PATCH 210/448] net: thunderx: initialize VF's mailbox mutex before first usage [ Upstream commit c1055b76ad00aed0e8b79417080f212d736246b6 ] A VF's mailbox mutex is not getting initialized by nicvf_probe() until after it is first used. And such usage is resulting in... [ 28.270927] ------------[ cut here ]------------ [ 28.270934] DEBUG_LOCKS_WARN_ON(lock->magic != lock) [ 28.270980] WARNING: CPU: 9 PID: 675 at kernel/locking/mutex.c:938 __mutex_lock+0xdac/0x12f0 [ 28.270985] Modules linked in: ast(+) nicvf(+) i2c_algo_bit drm_vram_helper drm_ttm_helper ttm nicpf(+) drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm ixgbe(+) sg thunder_bgx mdio i2c_thunderx mdio_thunder thunder_xcv mdio_cavium dm_mirror dm_region_hash dm_log dm_mod [ 28.271064] CPU: 9 PID: 675 Comm: systemd-udevd Not tainted 4.18.0+ #1 [ 28.271070] Hardware name: GIGABYTE R120-T34-00/MT30-GS2-00, BIOS F02 08/06/2019 [ 28.271078] pstate: 60000005 (nZCv daif -PAN -UAO) [ 28.271086] pc : __mutex_lock+0xdac/0x12f0 [ 28.271092] lr : __mutex_lock+0xdac/0x12f0 [ 28.271097] sp : ffff800d42146fb0 [ 28.271103] x29: ffff800d42146fb0 x28: 0000000000000000 [ 28.271113] x27: ffff800d24361180 x26: dfff200000000000 [ 28.271122] x25: 0000000000000000 x24: 0000000000000002 [ 28.271132] x23: ffff20001597cc80 x22: ffff2000139e9848 [ 28.271141] x21: 0000000000000000 x20: 1ffff001a8428e0c [ 28.271151] x19: ffff200015d5d000 x18: 1ffff001ae0f2184 [ 28.271160] x17: 0000000000000000 x16: 0000000000000000 [ 28.271170] x15: ffff800d70790c38 x14: ffff20001597c000 [ 28.271179] x13: ffff20001597cc80 x12: ffff040002b2f779 [ 28.271189] x11: 1fffe40002b2f778 x10: ffff040002b2f778 [ 28.271199] x9 : 0000000000000000 x8 : 00000000f1f1f1f1 [ 28.271208] x7 : 00000000f2f2f2f2 x6 : 0000000000000000 [ 28.271217] x5 : 1ffff001ae0f2186 x4 : 1fffe400027eb03c [ 28.271227] x3 : dfff200000000000 x2 : ffff1001a8428dbe [ 28.271237] x1 : c87fdfac7ea11d00 x0 : 0000000000000000 [ 28.271246] Call trace: [ 28.271254] __mutex_lock+0xdac/0x12f0 [ 28.271261] mutex_lock_nested+0x3c/0x50 [ 28.271297] nicvf_send_msg_to_pf+0x40/0x3a0 [nicvf] [ 28.271316] nicvf_register_misc_interrupt+0x20c/0x328 [nicvf] [ 28.271334] nicvf_probe+0x508/0xda0 [nicvf] [ 28.271344] local_pci_probe+0xc4/0x180 [ 28.271352] pci_device_probe+0x3ec/0x528 [ 28.271363] driver_probe_device+0x21c/0xb98 [ 28.271371] device_driver_attach+0xe8/0x120 [ 28.271379] __driver_attach+0xe0/0x2a0 [ 28.271386] bus_for_each_dev+0x118/0x190 [ 28.271394] driver_attach+0x48/0x60 [ 28.271401] bus_add_driver+0x328/0x558 [ 28.271409] driver_register+0x148/0x398 [ 28.271416] __pci_register_driver+0x14c/0x1b0 [ 28.271437] nicvf_init_module+0x54/0x10000 [nicvf] [ 28.271447] do_one_initcall+0x18c/0xc18 [ 28.271457] do_init_module+0x18c/0x618 [ 28.271464] load_module+0x2bc0/0x4088 [ 28.271472] __se_sys_finit_module+0x110/0x188 [ 28.271479] __arm64_sys_finit_module+0x70/0xa0 [ 28.271490] el0_svc_handler+0x15c/0x380 [ 28.271496] el0_svc+0x8/0xc [ 28.271502] irq event stamp: 52649 [ 28.271513] hardirqs last enabled at (52649): [] _raw_spin_unlock_irqrestore+0xc0/0xd8 [ 28.271522] hardirqs last disabled at (52648): [] _raw_spin_lock_irqsave+0x3c/0xf0 [ 28.271530] softirqs last enabled at (52330): [] __do_softirq+0xacc/0x117c [ 28.271540] softirqs last disabled at (52313): [] irq_exit+0x3cc/0x500 [ 28.271545] ---[ end trace a9b90324c8a0d4ee ]--- This problem is resolved by moving the call to mutex_init() up earlier in nicvf_probe(). Fixes: 609ea65c65a0 ("net: thunderx: add mutex to protect mailbox from concurrent calls for same VF") Signed-off-by: Dean Nelson Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/cavium/thunder/nicvf_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c index f414f5651dbd..5c45c0c6dd23 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c @@ -2185,6 +2185,9 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) nic->max_queues *= 2; nic->ptp_clock = ptp_clock; + /* Initialize mutex that serializes usage of VF's mailbox */ + mutex_init(&nic->rx_mode_mtx); + /* MAP VF's configuration registers */ nic->reg_base = pcim_iomap(pdev, PCI_CFG_REG_BAR_NUM, 0); if (!nic->reg_base) { @@ -2261,7 +2264,6 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) INIT_WORK(&nic->rx_mode_work.work, nicvf_set_rx_mode_task); spin_lock_init(&nic->rx_mode_wq_lock); - mutex_init(&nic->rx_mode_mtx); err = register_netdev(netdev); if (err) { From ba8a7219334646651b470a7509c09ffab1d4707e Mon Sep 17 00:00:00 2001 From: Wang Hai Date: Mon, 15 Jun 2020 11:25:33 +0800 Subject: [PATCH 211/448] dlm: Fix kobject memleak [ Upstream commit 0ffddafc3a3970ef7013696e7f36b3d378bc4c16 ] Currently the error return path from kobject_init_and_add() is not followed by a call to kobject_put() - which means we are leaking the kobject. Set do_unreg = 1 before kobject_init_and_add() to ensure that kobject_put() can be called in its error patch. Fixes: 901195ed7f4b ("Kobject: change GFS2 to use kobject_init_and_add") Reported-by: Hulk Robot Signed-off-by: Wang Hai Signed-off-by: David Teigland Signed-off-by: Sasha Levin --- fs/dlm/lockspace.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c index afb8340918b8..c689359ca532 100644 --- a/fs/dlm/lockspace.c +++ b/fs/dlm/lockspace.c @@ -632,6 +632,9 @@ static int new_lockspace(const char *name, const char *cluster, wait_event(ls->ls_recover_lock_wait, test_bit(LSFL_RECOVER_LOCK, &ls->ls_flags)); + /* let kobject handle freeing of ls if there's an error */ + do_unreg = 1; + ls->ls_kobj.kset = dlm_kset; error = kobject_init_and_add(&ls->ls_kobj, &dlm_ktype, NULL, "%s", ls->ls_name); @@ -639,9 +642,6 @@ static int new_lockspace(const char *name, const char *cluster, goto out_recoverd; kobject_uevent(&ls->ls_kobj, KOBJ_ADD); - /* let kobject handle freeing of ls if there's an error */ - do_unreg = 1; - /* This uevent triggers dlm_controld in userspace to add us to the group of nodes that are members of this lockspace (managed by the cluster infrastructure.) Once it's done that, it tells us who the From 50abf1b9ad1072fc96f6371bc8e19cecd6420b87 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Thu, 6 Aug 2020 23:18:09 -0700 Subject: [PATCH 212/448] ocfs2: fix unbalanced locking [ Upstream commit 57c720d4144a9c2b88105c3e8f7b0e97e4b5cc93 ] Based on what fails, function can return with nfs_sync_rwlock either locked or unlocked. That can not be right. Always return with lock unlocked on error. Fixes: 4cd9973f9ff6 ("ocfs2: avoid inode removal while nfsd is accessing it") Signed-off-by: Pavel Machek (CIP) Signed-off-by: Andrew Morton Reviewed-by: Joseph Qi Reviewed-by: Andrew Morton Cc: Mark Fasheh Cc: Joel Becker Cc: Junxiao Bi Cc: Changwei Ge Cc: Gang He Cc: Jun Piao Link: http://lkml.kernel.org/r/20200724124443.GA28164@duo.ucw.cz Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/ocfs2/dlmglue.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index e2c34c704185..50a863fc1779 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c @@ -2871,9 +2871,15 @@ int ocfs2_nfs_sync_lock(struct ocfs2_super *osb, int ex) status = ocfs2_cluster_lock(osb, lockres, ex ? LKM_EXMODE : LKM_PRMODE, 0, 0); - if (status < 0) + if (status < 0) { mlog(ML_ERROR, "lock on nfs sync lock failed %d\n", status); + if (ex) + up_write(&osb->nfs_sync_rwlock); + else + up_read(&osb->nfs_sync_rwlock); + } + return status; } From fa6bd08869c5c2c8af315cb1c19b9d791810af0e Mon Sep 17 00:00:00 2001 From: Drew Fustini Date: Mon, 8 Jun 2020 14:51:43 +0200 Subject: [PATCH 213/448] pinctrl-single: fix pcs_parse_pinconf() return value [ Upstream commit f46fe79ff1b65692a65266a5bec6dbe2bf7fc70f ] This patch causes pcs_parse_pinconf() to return -ENOTSUPP when no pinctrl_map is added. The current behavior is to return 0 when !PCS_HAS_PINCONF or !nconfs. Thus pcs_parse_one_pinctrl_entry() incorrectly assumes that a map was added and sets num_maps = 2. Analysis: ========= The function pcs_parse_one_pinctrl_entry() calls pcs_parse_pinconf() if PCS_HAS_PINCONF is enabled. The function pcs_parse_pinconf() returns 0 to indicate there was no error and num_maps is then set to 2: 980 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, 981 struct device_node *np, 982 struct pinctrl_map **map, 983 unsigned *num_maps, 984 const char **pgnames) 985 { 1053 (*map)->type = PIN_MAP_TYPE_MUX_GROUP; 1054 (*map)->data.mux.group = np->name; 1055 (*map)->data.mux.function = np->name; 1056 1057 if (PCS_HAS_PINCONF && function) { 1058 res = pcs_parse_pinconf(pcs, np, function, map); 1059 if (res) 1060 goto free_pingroups; 1061 *num_maps = 2; 1062 } else { 1063 *num_maps = 1; 1064 } However, pcs_parse_pinconf() will also return 0 if !PCS_HAS_PINCONF or !nconfs. I believe these conditions should indicate that no map was added by returning -ENOTSUPP. Otherwise pcs_parse_one_pinctrl_entry() will set num_maps = 2 even though no maps were successfully added, as it does not reach "m++" on line 940: 895 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, 896 struct pcs_function *func, 897 struct pinctrl_map **map) 898 899 { 900 struct pinctrl_map *m = *map; 917 /* If pinconf isn't supported, don't parse properties in below. */ 918 if (!PCS_HAS_PINCONF) 919 return 0; 920 921 /* cacluate how much properties are supported in current node */ 922 for (i = 0; i < ARRAY_SIZE(prop2); i++) { 923 if (of_find_property(np, prop2[i].name, NULL)) 924 nconfs++; 925 } 926 for (i = 0; i < ARRAY_SIZE(prop4); i++) { 927 if (of_find_property(np, prop4[i].name, NULL)) 928 nconfs++; 929 } 930 if (!nconfs) 919 return 0; 932 933 func->conf = devm_kcalloc(pcs->dev, 934 nconfs, sizeof(struct pcs_conf_vals), 935 GFP_KERNEL); 936 if (!func->conf) 937 return -ENOMEM; 938 func->nconfs = nconfs; 939 conf = &(func->conf[0]); 940 m++; This situtation will cause a boot failure [0] on the BeagleBone Black (AM3358) when am33xx_pinmux node in arch/arm/boot/dts/am33xx-l4.dtsi has compatible = "pinconf-single" instead of "pinctrl-single". The patch fixes this issue by returning -ENOSUPP when !PCS_HAS_PINCONF or !nconfs, so that pcs_parse_one_pinctrl_entry() will know that no map was added. Logic is also added to pcs_parse_one_pinctrl_entry() to distinguish between -ENOSUPP and other errors. In the case of -ENOSUPP, num_maps is set to 1 as it is valid for pinconf to be enabled and a given pin group to not any pinconf properties. [0] https://lore.kernel.org/linux-omap/20200529175544.GA3766151@x1/ Fixes: 9dddb4df90d1 ("pinctrl: single: support generic pinconf") Signed-off-by: Drew Fustini Acked-by: Tony Lindgren Link: https://lore.kernel.org/r/20200608125143.GA2789203@x1 Signed-off-by: Linus Walleij Signed-off-by: Sasha Levin --- drivers/pinctrl/pinctrl-single.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 1e0614daee9b..a9d511982780 100644 --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -916,7 +916,7 @@ static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, /* If pinconf isn't supported, don't parse properties in below. */ if (!PCS_HAS_PINCONF) - return 0; + return -ENOTSUPP; /* cacluate how much properties are supported in current node */ for (i = 0; i < ARRAY_SIZE(prop2); i++) { @@ -928,7 +928,7 @@ static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, nconfs++; } if (!nconfs) - return 0; + return -ENOTSUPP; func->conf = devm_kcalloc(pcs->dev, nconfs, sizeof(struct pcs_conf_vals), @@ -1056,9 +1056,12 @@ static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, if (PCS_HAS_PINCONF && function) { res = pcs_parse_pinconf(pcs, np, function, map); - if (res) + if (res == 0) + *num_maps = 2; + else if (res == -ENOTSUPP) + *num_maps = 1; + else goto free_pingroups; - *num_maps = 2; } else { *num_maps = 1; } From 789be9705ed1f8a5e045891825bee0ead71a0dfc Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 11 Jun 2020 12:44:56 -0400 Subject: [PATCH 214/448] svcrdma: Fix page leak in svc_rdma_recv_read_chunk() [ Upstream commit e814eecbe3bbeaa8b004d25a4b8974d232b765a9 ] Commit 07d0ff3b0cd2 ("svcrdma: Clean up Read chunk path") moved the page saver logic so that it gets executed event when an error occurs. In that case, the I/O is never posted, and those pages are then leaked. Errors in this path, however, are quite rare. Fixes: 07d0ff3b0cd2 ("svcrdma: Clean up Read chunk path") Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- net/sunrpc/xprtrdma/svc_rdma_rw.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/net/sunrpc/xprtrdma/svc_rdma_rw.c b/net/sunrpc/xprtrdma/svc_rdma_rw.c index 066af6b2eb01..0bb3f0dca80d 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_rw.c +++ b/net/sunrpc/xprtrdma/svc_rdma_rw.c @@ -677,7 +677,6 @@ static int svc_rdma_build_read_chunk(struct svc_rqst *rqstp, struct svc_rdma_read_info *info, __be32 *p) { - unsigned int i; int ret; ret = -EINVAL; @@ -700,12 +699,6 @@ static int svc_rdma_build_read_chunk(struct svc_rqst *rqstp, info->ri_chunklen += rs_length; } - /* Pages under I/O have been copied to head->rc_pages. - * Prevent their premature release by svc_xprt_release() . - */ - for (i = 0; i < info->ri_readctxt->rc_page_count; i++) - rqstp->rq_pages[i] = NULL; - return ret; } @@ -800,6 +793,26 @@ out: return ret; } +/* Pages under I/O have been copied to head->rc_pages. Ensure they + * are not released by svc_xprt_release() until the I/O is complete. + * + * This has to be done after all Read WRs are constructed to properly + * handle a page that is part of I/O on behalf of two different RDMA + * segments. + * + * Do this only if I/O has been posted. Otherwise, we do indeed want + * svc_xprt_release() to clean things up properly. + */ +static void svc_rdma_save_io_pages(struct svc_rqst *rqstp, + const unsigned int start, + const unsigned int num_pages) +{ + unsigned int i; + + for (i = start; i < num_pages + start; i++) + rqstp->rq_pages[i] = NULL; +} + /** * svc_rdma_recv_read_chunk - Pull a Read chunk from the client * @rdma: controlling RDMA transport @@ -853,6 +866,7 @@ int svc_rdma_recv_read_chunk(struct svcxprt_rdma *rdma, struct svc_rqst *rqstp, ret = svc_rdma_post_chunk_ctxt(&info->ri_cc); if (ret < 0) goto out_err; + svc_rdma_save_io_pages(rqstp, 0, head->rc_page_count); return 0; out_err: From 18d1bb4973644bb14d1363af07665f28d468c5ec Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 24 Jul 2020 17:08:57 -0400 Subject: [PATCH 215/448] SUNRPC: Fix ("SUNRPC: Add "@len" parameter to gss_unwrap()") [ Upstream commit 986a4b63d3bc5f2c0eb4083b05aff2bf883b7b2f ] Braino when converting "buf->len -=" to "buf->len = len -". The result is under-estimation of the ralign and rslack values. On krb5p mounts, this has caused READDIR to fail with EIO, and KASAN splats when decoding READLINK replies. As a result of fixing this oversight, the gss_unwrap method now returns a buf->len that can be shorter than priv_len for small RPC messages. The additional adjustment done in unwrap_priv_data() can underflow buf->len. This causes the nfsd_request_too_large check to fail during some NFSv3 operations. Reported-by: Marian Rainer-Harbach Reported-by: Pierre Sauter BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1886277 Fixes: 31c9590ae468 ("SUNRPC: Add "@len" parameter to gss_unwrap()") Reviewed-by: J. Bruce Fields Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- net/sunrpc/auth_gss/gss_krb5_wrap.c | 2 +- net/sunrpc/auth_gss/svcauth_gss.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/net/sunrpc/auth_gss/gss_krb5_wrap.c b/net/sunrpc/auth_gss/gss_krb5_wrap.c index 683755d95075..78ad41656996 100644 --- a/net/sunrpc/auth_gss/gss_krb5_wrap.c +++ b/net/sunrpc/auth_gss/gss_krb5_wrap.c @@ -584,7 +584,7 @@ gss_unwrap_kerberos_v2(struct krb5_ctx *kctx, int offset, int len, buf->head[0].iov_len); memmove(ptr, ptr + GSS_KRB5_TOK_HDR_LEN + headskip, movelen); buf->head[0].iov_len -= GSS_KRB5_TOK_HDR_LEN + headskip; - buf->len = len - GSS_KRB5_TOK_HDR_LEN + headskip; + buf->len = len - (GSS_KRB5_TOK_HDR_LEN + headskip); /* Trim off the trailing "extra count" and checksum blob */ xdr_buf_trim(buf, ec + GSS_KRB5_TOK_HDR_LEN + tailskip); diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index fd91274e834d..3645cd241d3e 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -949,7 +949,6 @@ unwrap_priv_data(struct svc_rqst *rqstp, struct xdr_buf *buf, u32 seq, struct gs maj_stat = gss_unwrap(ctx, 0, priv_len, buf); pad = priv_len - buf->len; - buf->len -= pad; /* The upper layers assume the buffer is aligned on 4-byte boundaries. * In the krb5p case, at least, the data ends up offset, so we need to * move it around. */ From c44efee6e432823688d5282462100b745f6c2696 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Fri, 14 Aug 2020 11:16:17 -0700 Subject: [PATCH 216/448] x86/fsgsbase/64: Fix NULL deref in 86_fsgsbase_read_task [ Upstream commit 8ab49526b53d3172d1d8dd03a75c7d1f5bd21239 ] syzbot found its way in 86_fsgsbase_read_task() and triggered this oops: KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] CPU: 0 PID: 6866 Comm: syz-executor262 Not tainted 5.8.0-syzkaller #0 RIP: 0010:x86_fsgsbase_read_task+0x16d/0x310 arch/x86/kernel/process_64.c:393 Call Trace: putreg32+0x3ab/0x530 arch/x86/kernel/ptrace.c:876 genregs32_set arch/x86/kernel/ptrace.c:1026 [inline] genregs32_set+0xa4/0x100 arch/x86/kernel/ptrace.c:1006 copy_regset_from_user include/linux/regset.h:326 [inline] ia32_arch_ptrace arch/x86/kernel/ptrace.c:1061 [inline] compat_arch_ptrace+0x36c/0xd90 arch/x86/kernel/ptrace.c:1198 __do_compat_sys_ptrace kernel/ptrace.c:1420 [inline] __se_compat_sys_ptrace kernel/ptrace.c:1389 [inline] __ia32_compat_sys_ptrace+0x220/0x2f0 kernel/ptrace.c:1389 do_syscall_32_irqs_on arch/x86/entry/common.c:84 [inline] __do_fast_syscall_32+0x57/0x80 arch/x86/entry/common.c:126 do_fast_syscall_32+0x2f/0x70 arch/x86/entry/common.c:149 entry_SYSENTER_compat_after_hwframe+0x4d/0x5c This can happen if ptrace() or sigreturn() pokes an LDT selector into FS or GS for a task with no LDT and something tries to read the base before a return to usermode notices the bad selector and fixes it. The fix is to make sure ldt pointer is not NULL. Fixes: 07e1d88adaae ("x86/fsgsbase/64: Fix ptrace() to read the FS/GS base accurately") Co-developed-by: Jann Horn Signed-off-by: Eric Dumazet Reported-by: syzbot Acked-by: Andy Lutomirski Cc: Chang S. Bae Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Dave Hansen Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Markus T Metzger Cc: Peter Zijlstra Cc: Ravi Shankar Cc: Rik van Riel Cc: Thomas Gleixner Cc: Ingo Molnar Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- arch/x86/kernel/process_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index af64519b2695..da3cc3a10d63 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -316,7 +316,7 @@ static unsigned long x86_fsgsbase_read_task(struct task_struct *task, */ mutex_lock(&task->mm->context.lock); ldt = task->mm->context.ldt; - if (unlikely(idx >= ldt->nr_entries)) + if (unlikely(!ldt || idx >= ldt->nr_entries)) base = 0; else base = get_desc_base(ldt->entries + idx); From 5ef739b7a5be3188c829a3561232bd136efc9921 Mon Sep 17 00:00:00 2001 From: Jian Cai Date: Mon, 22 Jun 2020 16:24:33 -0700 Subject: [PATCH 217/448] crypto: aesni - add compatibility with IAS [ Upstream commit 44069737ac9625a0f02f0f7f5ab96aae4cd819bc ] Clang's integrated assembler complains "invalid reassignment of non-absolute variable 'var_ddq_add'" while assembling arch/x86/crypto/aes_ctrby8_avx-x86_64.S. It was because var_ddq_add was reassigned with non-absolute values several times, which IAS did not support. We can avoid the reassignment by replacing the uses of var_ddq_add with its definitions accordingly to have compatilibility with IAS. Link: https://github.com/ClangBuiltLinux/linux/issues/1008 Reported-by: Sedat Dilek Reported-by: Fangrui Song Tested-by: Sedat Dilek # build+boot Linux v5.7.5; clang v11.0.0-git Signed-off-by: Jian Cai Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S index 5f6a5af9c489..77043a82da51 100644 --- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S +++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S @@ -127,10 +127,6 @@ ddq_add_8: /* generate a unique variable for ddq_add_x */ -.macro setddq n - var_ddq_add = ddq_add_\n -.endm - /* generate a unique variable for xmm register */ .macro setxdata n var_xdata = %xmm\n @@ -140,9 +136,7 @@ ddq_add_8: .macro club name, id .altmacro - .if \name == DDQ_DATA - setddq %\id - .elseif \name == XDATA + .if \name == XDATA setxdata %\id .endif .noaltmacro @@ -165,9 +159,8 @@ ddq_add_8: .set i, 1 .rept (by - 1) - club DDQ_DATA, i club XDATA, i - vpaddq var_ddq_add(%rip), xcounter, var_xdata + vpaddq (ddq_add_1 + 16 * (i - 1))(%rip), xcounter, var_xdata vptest ddq_low_msk(%rip), var_xdata jnz 1f vpaddq ddq_high_add_1(%rip), var_xdata, var_xdata @@ -180,8 +173,7 @@ ddq_add_8: vmovdqa 1*16(p_keys), xkeyA vpxor xkey0, xdata0, xdata0 - club DDQ_DATA, by - vpaddq var_ddq_add(%rip), xcounter, xcounter + vpaddq (ddq_add_1 + 16 * (by - 1))(%rip), xcounter, xcounter vptest ddq_low_msk(%rip), xcounter jnz 1f vpaddq ddq_high_add_1(%rip), xcounter, xcounter From de236de3df5754fe333367a47ee99ca6e71f0bf2 Mon Sep 17 00:00:00 2001 From: John Ogness Date: Thu, 13 Aug 2020 21:45:25 +0206 Subject: [PATCH 218/448] af_packet: TPACKET_V3: fix fill status rwlock imbalance [ Upstream commit 88fd1cb80daa20af063bce81e1fad14e945a8dc4 ] After @blk_fill_in_prog_lock is acquired there is an early out vnet situation that can occur. In that case, the rwlock needs to be released. Also, since @blk_fill_in_prog_lock is only acquired when @tp_version is exactly TPACKET_V3, only release it on that exact condition as well. And finally, add sparse annotation so that it is clearer that prb_fill_curr_block() and prb_clear_blk_fill_status() are acquiring and releasing @blk_fill_in_prog_lock, respectively. sparse is still unable to understand the balance, but the warnings are now on a higher level that make more sense. Fixes: 632ca50f2cbd ("af_packet: TPACKET_V3: replace busy-wait loop") Signed-off-by: John Ogness Reported-by: kernel test robot Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/packet/af_packet.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 1d63ab3a878a..7735340c892e 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -941,6 +941,7 @@ static int prb_queue_frozen(struct tpacket_kbdq_core *pkc) } static void prb_clear_blk_fill_status(struct packet_ring_buffer *rb) + __releases(&pkc->blk_fill_in_prog_lock) { struct tpacket_kbdq_core *pkc = GET_PBDQC_FROM_RB(rb); atomic_dec(&pkc->blk_fill_in_prog); @@ -988,6 +989,7 @@ static void prb_fill_curr_block(char *curr, struct tpacket_kbdq_core *pkc, struct tpacket_block_desc *pbd, unsigned int len) + __acquires(&pkc->blk_fill_in_prog_lock) { struct tpacket3_hdr *ppd; @@ -2285,8 +2287,11 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, if (do_vnet && virtio_net_hdr_from_skb(skb, h.raw + macoff - sizeof(struct virtio_net_hdr), - vio_le(), true, 0)) + vio_le(), true, 0)) { + if (po->tp_version == TPACKET_V3) + prb_clear_blk_fill_status(&po->rx_ring); goto drop_n_account; + } if (po->tp_version <= TPACKET_V2) { packet_increment_rx_head(po, &po->rx_ring); @@ -2392,7 +2397,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, __clear_bit(slot_id, po->rx_ring.rx_owner_map); spin_unlock(&sk->sk_receive_queue.lock); sk->sk_data_ready(sk); - } else { + } else if (po->tp_version == TPACKET_V3) { prb_clear_blk_fill_status(&po->rx_ring); } From f6c5d9f3361af1e28cd1337e8b94c8e0adee05dc Mon Sep 17 00:00:00 2001 From: Xie He Date: Wed, 5 Aug 2020 18:50:40 -0700 Subject: [PATCH 219/448] drivers/net/wan/lapbether: Added needed_headroom and a skb->len check [ Upstream commit c7ca03c216acb14466a713fedf1b9f2c24994ef2 ] 1. Added a skb->len check This driver expects upper layers to include a pseudo header of 1 byte when passing down a skb for transmission. This driver will read this 1-byte header. This patch added a skb->len check before reading the header to make sure the header exists. 2. Changed to use needed_headroom instead of hard_header_len to request necessary headroom to be allocated In net/packet/af_packet.c, the function packet_snd first reserves a headroom of length (dev->hard_header_len + dev->needed_headroom). Then if the socket is a SOCK_DGRAM socket, it calls dev_hard_header, which calls dev->header_ops->create, to create the link layer header. If the socket is a SOCK_RAW socket, it "un-reserves" a headroom of length (dev->hard_header_len), and assumes the user to provide the appropriate link layer header. So according to the logic of af_packet.c, dev->hard_header_len should be the length of the header that would be created by dev->header_ops->create. However, this driver doesn't provide dev->header_ops, so logically dev->hard_header_len should be 0. So we should use dev->needed_headroom instead of dev->hard_header_len to request necessary headroom to be allocated. This change fixes kernel panic when this driver is used with AF_PACKET SOCK_RAW sockets. Call stack when panic: [ 168.399197] skbuff: skb_under_panic: text:ffffffff819d95fb len:20 put:14 head:ffff8882704c0a00 data:ffff8882704c09fd tail:0x11 end:0xc0 dev:veth0 ... [ 168.399255] Call Trace: [ 168.399259] skb_push.cold+0x14/0x24 [ 168.399262] eth_header+0x2b/0xc0 [ 168.399267] lapbeth_data_transmit+0x9a/0xb0 [lapbether] [ 168.399275] lapb_data_transmit+0x22/0x2c [lapb] [ 168.399277] lapb_transmit_buffer+0x71/0xb0 [lapb] [ 168.399279] lapb_kick+0xe3/0x1c0 [lapb] [ 168.399281] lapb_data_request+0x76/0xc0 [lapb] [ 168.399283] lapbeth_xmit+0x56/0x90 [lapbether] [ 168.399286] dev_hard_start_xmit+0x91/0x1f0 [ 168.399289] ? irq_init_percpu_irqstack+0xc0/0x100 [ 168.399291] __dev_queue_xmit+0x721/0x8e0 [ 168.399295] ? packet_parse_headers.isra.0+0xd2/0x110 [ 168.399297] dev_queue_xmit+0x10/0x20 [ 168.399298] packet_sendmsg+0xbf0/0x19b0 ...... Cc: Willem de Bruijn Cc: Martin Schiller Cc: Brian Norris Signed-off-by: Xie He Acked-by: Willem de Bruijn Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/wan/lapbether.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c index 134e4dd916c1..996eb9c55b39 100644 --- a/drivers/net/wan/lapbether.c +++ b/drivers/net/wan/lapbether.c @@ -157,6 +157,12 @@ static netdev_tx_t lapbeth_xmit(struct sk_buff *skb, if (!netif_running(dev)) goto drop; + /* There should be a pseudo header of 1 byte added by upper layers. + * Check to make sure it is there before reading it. + */ + if (skb->len < 1) + goto drop; + switch (skb->data[0]) { case X25_IFACE_DATA: break; @@ -305,6 +311,7 @@ static void lapbeth_setup(struct net_device *dev) dev->netdev_ops = &lapbeth_netdev_ops; dev->needs_free_netdev = true; dev->type = ARPHRD_X25; + dev->hard_header_len = 0; dev->mtu = 1000; dev->addr_len = 0; } @@ -331,7 +338,8 @@ static int lapbeth_new_device(struct net_device *dev) * then this driver prepends a length field of 2 bytes, * then the underlying Ethernet device prepends its own header. */ - ndev->hard_header_len = -1 + 3 + 2 + dev->hard_header_len; + ndev->needed_headroom = -1 + 3 + 2 + dev->hard_header_len + + dev->needed_headroom; lapbeth = netdev_priv(ndev); lapbeth->axdev = ndev; From 02618095ab45aa6797d6ffb8396a131ada7f8a86 Mon Sep 17 00:00:00 2001 From: Miaohe Lin Date: Mon, 10 Aug 2020 08:16:58 -0400 Subject: [PATCH 220/448] net: Fix potential memory leak in proto_register() [ Upstream commit 0f5907af39137f8183ed536aaa00f322d7365130 ] If we failed to assign proto idx, we free the twsk_slab_name but forget to free the twsk_slab. Add a helper function tw_prot_cleanup() to free these together and also use this helper function in proto_unregister(). Fixes: b45ce32135d1 ("sock: fix potential memory leak in proto_register()") Signed-off-by: Miaohe Lin Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/core/sock.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 33a232974374..991ab80234ce 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3337,6 +3337,16 @@ static void sock_inuse_add(struct net *net, int val) } #endif +static void tw_prot_cleanup(struct timewait_sock_ops *twsk_prot) +{ + if (!twsk_prot) + return; + kfree(twsk_prot->twsk_slab_name); + twsk_prot->twsk_slab_name = NULL; + kmem_cache_destroy(twsk_prot->twsk_slab); + twsk_prot->twsk_slab = NULL; +} + static void req_prot_cleanup(struct request_sock_ops *rsk_prot) { if (!rsk_prot) @@ -3407,7 +3417,7 @@ int proto_register(struct proto *prot, int alloc_slab) prot->slab_flags, NULL); if (prot->twsk_prot->twsk_slab == NULL) - goto out_free_timewait_sock_slab_name; + goto out_free_timewait_sock_slab; } } @@ -3415,15 +3425,15 @@ int proto_register(struct proto *prot, int alloc_slab) ret = assign_proto_idx(prot); if (ret) { mutex_unlock(&proto_list_mutex); - goto out_free_timewait_sock_slab_name; + goto out_free_timewait_sock_slab; } list_add(&prot->node, &proto_list); mutex_unlock(&proto_list_mutex); return ret; -out_free_timewait_sock_slab_name: +out_free_timewait_sock_slab: if (alloc_slab && prot->twsk_prot) - kfree(prot->twsk_prot->twsk_slab_name); + tw_prot_cleanup(prot->twsk_prot); out_free_request_sock_slab: if (alloc_slab) { req_prot_cleanup(prot->rsk_prot); @@ -3447,12 +3457,7 @@ void proto_unregister(struct proto *prot) prot->slab = NULL; req_prot_cleanup(prot->rsk_prot); - - if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) { - kmem_cache_destroy(prot->twsk_prot->twsk_slab); - kfree(prot->twsk_prot->twsk_slab_name); - prot->twsk_prot->twsk_slab = NULL; - } + tw_prot_cleanup(prot->twsk_prot); } EXPORT_SYMBOL(proto_unregister); From 0b305f259ca9b85c48f9cb3159d034b7328ed225 Mon Sep 17 00:00:00 2001 From: Qingyu Li Date: Mon, 10 Aug 2020 09:51:00 +0800 Subject: [PATCH 221/448] net/nfc/rawsock.c: add CAP_NET_RAW check. [ Upstream commit 26896f01467a28651f7a536143fe5ac8449d4041 ] When creating a raw AF_NFC socket, CAP_NET_RAW needs to be checked first. Signed-off-by: Qingyu Li Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/nfc/rawsock.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c index ba5ffd3badd3..b5c867fe3232 100644 --- a/net/nfc/rawsock.c +++ b/net/nfc/rawsock.c @@ -332,10 +332,13 @@ static int rawsock_create(struct net *net, struct socket *sock, if ((sock->type != SOCK_SEQPACKET) && (sock->type != SOCK_RAW)) return -ESOCKTNOSUPPORT; - if (sock->type == SOCK_RAW) + if (sock->type == SOCK_RAW) { + if (!capable(CAP_NET_RAW)) + return -EPERM; sock->ops = &rawsock_raw_ops; - else + } else { sock->ops = &rawsock_ops; + } sk = sk_alloc(net, PF_NFC, GFP_ATOMIC, nfc_proto->proto, kern); if (!sk) From 47f873ac267b9b0093979a0d6aa9ceb2ac84ef14 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Thu, 6 Aug 2020 17:37:53 +0200 Subject: [PATCH 222/448] net: phy: fix memory leak in device-create error path [ Upstream commit d02cbc46136105cf86f84ac355e16f04696f538d ] A recent commit introduced a late error path in phy_device_create() which fails to release the device name allocated by dev_set_name(). Fixes: 13d0ab6750b2 ("net: phy: check return code when requesting PHY driver module") Cc: Heiner Kallweit Signed-off-by: Johan Hovold Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/phy/phy_device.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index dba52a5c378a..110924d62744 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -615,7 +615,9 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id, if (c45_ids) dev->c45_ids = *c45_ids; dev->irq = bus->irq[addr]; + dev_set_name(&mdiodev->dev, PHY_ID_FMT, bus->id, addr); + device_initialize(&mdiodev->dev); dev->state = PHY_DOWN; @@ -649,10 +651,8 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id, ret = phy_request_driver_module(dev, phy_id); } - if (!ret) { - device_initialize(&mdiodev->dev); - } else { - kfree(dev); + if (ret) { + put_device(&mdiodev->dev); dev = ERR_PTR(ret); } From 7bedf1d86298c98240add8fcd8eafd8f2d9f2d2f Mon Sep 17 00:00:00 2001 From: Miaohe Lin Date: Thu, 6 Aug 2020 19:53:16 +0800 Subject: [PATCH 223/448] net: Set fput_needed iff FDPUT_FPUT is set [ Upstream commit ce787a5a074a86f76f5d3fd804fa78e01bfb9e89 ] We should fput() file iff FDPUT_FPUT is set. So we should set fput_needed accordingly. Fixes: 00e188ef6a7e ("sockfd_lookup_light(): switch to fdget^W^Waway from fget_light") Signed-off-by: Miaohe Lin Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/socket.c b/net/socket.c index 432800b39ddb..d1a0264401b7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -485,7 +485,7 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) if (f.file) { sock = sock_from_file(f.file, err); if (likely(sock)) { - *fput_needed = f.flags; + *fput_needed = f.flags & FDPUT_FPUT; return sock; } fdput(f); From 49a5b473bc66d6f561d68a062c0708d4a0789400 Mon Sep 17 00:00:00 2001 From: Ira Weiny Date: Mon, 10 Aug 2020 17:02:58 -0700 Subject: [PATCH 224/448] net/tls: Fix kmap usage [ Upstream commit b06c19d9f827f6743122795570bfc0c72db482b0 ] When MSG_OOB is specified to tls_device_sendpage() the mapped page is never unmapped. Hold off mapping the page until after the flags are checked and the page is actually needed. Fixes: e8f69799810c ("net/tls: Add generic NIC offload infrastructure") Signed-off-by: Ira Weiny Reviewed-by: Jakub Kicinski Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/tls/tls_device.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c index 1adeb1c0473b..25fca390cdcf 100644 --- a/net/tls/tls_device.c +++ b/net/tls/tls_device.c @@ -549,7 +549,7 @@ int tls_device_sendpage(struct sock *sk, struct page *page, { struct tls_context *tls_ctx = tls_get_ctx(sk); struct iov_iter msg_iter; - char *kaddr = kmap(page); + char *kaddr; struct kvec iov; int rc; @@ -564,6 +564,7 @@ int tls_device_sendpage(struct sock *sk, struct page *page, goto out; } + kaddr = kmap(page); iov.iov_base = kaddr + offset; iov.iov_len = size; iov_iter_kvec(&msg_iter, WRITE, &iov, 1, size); From e07d0ccd7fdefa4c7ff16148c4fd213f95558581 Mon Sep 17 00:00:00 2001 From: Jason Baron Date: Mon, 10 Aug 2020 13:38:39 -0400 Subject: [PATCH 225/448] tcp: correct read of TFO keys on big endian systems [ Upstream commit f19008e676366c44e9241af57f331b6c6edf9552 ] When TFO keys are read back on big endian systems either via the global sysctl interface or via getsockopt() using TCP_FASTOPEN_KEY, the values don't match what was written. For example, on s390x: # echo "1-2-3-4" > /proc/sys/net/ipv4/tcp_fastopen_key # cat /proc/sys/net/ipv4/tcp_fastopen_key 02000000-01000000-04000000-03000000 Instead of: # cat /proc/sys/net/ipv4/tcp_fastopen_key 00000001-00000002-00000003-00000004 Fix this by converting to the correct endianness on read. This was reported by Colin Ian King when running the 'tcp_fastopen_backup_key' net selftest on s390x, which depends on the read value matching what was written. I've confirmed that the test now passes on big and little endian systems. Signed-off-by: Jason Baron Fixes: 438ac88009bc ("net: fastopen: robustness and endianness fixes for SipHash") Cc: Ard Biesheuvel Cc: Eric Dumazet Reported-and-tested-by: Colin Ian King Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- include/net/tcp.h | 2 ++ net/ipv4/sysctl_net_ipv4.c | 16 ++++------------ net/ipv4/tcp.c | 16 ++++------------ net/ipv4/tcp_fastopen.c | 23 +++++++++++++++++++++++ 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 7cf1b4972c66..377179283c46 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1650,6 +1650,8 @@ void tcp_fastopen_destroy_cipher(struct sock *sk); void tcp_fastopen_ctx_destroy(struct net *net); int tcp_fastopen_reset_cipher(struct net *net, struct sock *sk, void *primary_key, void *backup_key); +int tcp_fastopen_get_cipher(struct net *net, struct inet_connection_sock *icsk, + u64 *key); void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb); struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb, struct request_sock *req, diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 0902cb32bbad..c83a5d05aeaa 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -307,24 +307,16 @@ static int proc_tcp_fastopen_key(struct ctl_table *table, int write, struct ctl_table tbl = { .maxlen = ((TCP_FASTOPEN_KEY_LENGTH * 2 * TCP_FASTOPEN_KEY_MAX) + (TCP_FASTOPEN_KEY_MAX * 5)) }; - struct tcp_fastopen_context *ctx; - u32 user_key[TCP_FASTOPEN_KEY_MAX * 4]; - __le32 key[TCP_FASTOPEN_KEY_MAX * 4]; + u32 user_key[TCP_FASTOPEN_KEY_BUF_LENGTH / sizeof(u32)]; + __le32 key[TCP_FASTOPEN_KEY_BUF_LENGTH / sizeof(__le32)]; char *backup_data; - int ret, i = 0, off = 0, n_keys = 0; + int ret, i = 0, off = 0, n_keys; tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL); if (!tbl.data) return -ENOMEM; - rcu_read_lock(); - ctx = rcu_dereference(net->ipv4.tcp_fastopen_ctx); - if (ctx) { - n_keys = tcp_fastopen_context_len(ctx); - memcpy(&key[0], &ctx->key[0], TCP_FASTOPEN_KEY_LENGTH * n_keys); - } - rcu_read_unlock(); - + n_keys = tcp_fastopen_get_cipher(net, NULL, (u64 *)key); if (!n_keys) { memset(&key[0], 0, TCP_FASTOPEN_KEY_LENGTH); n_keys = 1; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 840901154210..01ddfb4156e4 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3527,22 +3527,14 @@ static int do_tcp_getsockopt(struct sock *sk, int level, return 0; case TCP_FASTOPEN_KEY: { - __u8 key[TCP_FASTOPEN_KEY_BUF_LENGTH]; - struct tcp_fastopen_context *ctx; - unsigned int key_len = 0; + u64 key[TCP_FASTOPEN_KEY_BUF_LENGTH / sizeof(u64)]; + unsigned int key_len; if (get_user(len, optlen)) return -EFAULT; - rcu_read_lock(); - ctx = rcu_dereference(icsk->icsk_accept_queue.fastopenq.ctx); - if (ctx) { - key_len = tcp_fastopen_context_len(ctx) * - TCP_FASTOPEN_KEY_LENGTH; - memcpy(&key[0], &ctx->key[0], key_len); - } - rcu_read_unlock(); - + key_len = tcp_fastopen_get_cipher(net, icsk, key) * + TCP_FASTOPEN_KEY_LENGTH; len = min_t(unsigned int, len, key_len); if (put_user(len, optlen)) return -EFAULT; diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c index a915ade0c818..a9971e41f31b 100644 --- a/net/ipv4/tcp_fastopen.c +++ b/net/ipv4/tcp_fastopen.c @@ -108,6 +108,29 @@ out: return err; } +int tcp_fastopen_get_cipher(struct net *net, struct inet_connection_sock *icsk, + u64 *key) +{ + struct tcp_fastopen_context *ctx; + int n_keys = 0, i; + + rcu_read_lock(); + if (icsk) + ctx = rcu_dereference(icsk->icsk_accept_queue.fastopenq.ctx); + else + ctx = rcu_dereference(net->ipv4.tcp_fastopen_ctx); + if (ctx) { + n_keys = tcp_fastopen_context_len(ctx); + for (i = 0; i < n_keys; i++) { + put_unaligned_le64(ctx->key[i].key[0], key + (i * 2)); + put_unaligned_le64(ctx->key[i].key[1], key + (i * 2) + 1); + } + } + rcu_read_unlock(); + + return n_keys; +} + static bool __tcp_fastopen_cookie_gen_cipher(struct request_sock *req, struct sk_buff *syn, const siphash_key_t *key, From 8a337428a5af1928b6e92de9340ca9f24ff0c55d Mon Sep 17 00:00:00 2001 From: Ronak Doshi Date: Mon, 10 Aug 2020 09:55:55 -0700 Subject: [PATCH 226/448] vmxnet3: use correct tcp hdr length when packet is encapsulated [ Upstream commit 8a7f280f29a80f6e0798f5d6e07c5dd8726620fe ] Commit dacce2be3312 ("vmxnet3: add geneve and vxlan tunnel offload support") added support for encapsulation offload. However, while calculating tcp hdr length, it does not take into account if the packet is encapsulated or not. This patch fixes this issue by using correct reference for inner tcp header. Fixes: dacce2be3312 ("vmxnet3: add geneve and vxlan tunnel offload support") Signed-off-by: Ronak Doshi Acked-by: Guolin Yang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/vmxnet3/vmxnet3_drv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 216acf37ca7c..a06e6ab453f5 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -861,7 +861,8 @@ vmxnet3_parse_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq, switch (protocol) { case IPPROTO_TCP: - ctx->l4_hdr_size = tcp_hdrlen(skb); + ctx->l4_hdr_size = skb->encapsulation ? inner_tcp_hdrlen(skb) : + tcp_hdrlen(skb); break; case IPPROTO_UDP: ctx->l4_hdr_size = sizeof(struct udphdr); From dcedddbc7b201f387f106c3ec837559ac4bc863f Mon Sep 17 00:00:00 2001 From: Tim Froidcoeur Date: Tue, 11 Aug 2020 20:33:23 +0200 Subject: [PATCH 227/448] net: refactor bind_bucket fastreuse into helper [ Upstream commit 62ffc589abb176821662efc4525ee4ac0b9c3894 ] Refactor the fastreuse update code in inet_csk_get_port into a small helper function that can be called from other places. Acked-by: Matthieu Baerts Signed-off-by: Tim Froidcoeur Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- include/net/inet_connection_sock.h | 4 ++ net/ipv4/inet_connection_sock.c | 101 ++++++++++++++++------------- 2 files changed, 59 insertions(+), 46 deletions(-) diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h index 895546058a20..c71eb294da95 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h @@ -309,6 +309,10 @@ int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname, int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, char __user *optval, unsigned int optlen); +/* update the fast reuse flag when adding a socket */ +void inet_csk_update_fastreuse(struct inet_bind_bucket *tb, + struct sock *sk); + struct dst_entry *inet_csk_update_pmtu(struct sock *sk, u32 mtu); #define TCP_PINGPONG_THRESH 3 diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 5e486895d67c..9745c52f49ca 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -284,55 +284,12 @@ static inline int sk_reuseport_match(struct inet_bind_bucket *tb, ipv6_only_sock(sk), true, false); } -/* Obtain a reference to a local port for the given sock, - * if snum is zero it means select any available local port. - * We try to allocate an odd port (and leave even ports for connect()) - */ -int inet_csk_get_port(struct sock *sk, unsigned short snum) +void inet_csk_update_fastreuse(struct inet_bind_bucket *tb, + struct sock *sk) { - bool reuse = sk->sk_reuse && sk->sk_state != TCP_LISTEN; - struct inet_hashinfo *hinfo = sk->sk_prot->h.hashinfo; - int ret = 1, port = snum; - struct inet_bind_hashbucket *head; - struct net *net = sock_net(sk); - struct inet_bind_bucket *tb = NULL; kuid_t uid = sock_i_uid(sk); - int l3mdev; + bool reuse = sk->sk_reuse && sk->sk_state != TCP_LISTEN; - l3mdev = inet_sk_bound_l3mdev(sk); - - if (!port) { - head = inet_csk_find_open_port(sk, &tb, &port); - if (!head) - return ret; - if (!tb) - goto tb_not_found; - goto success; - } - head = &hinfo->bhash[inet_bhashfn(net, port, - hinfo->bhash_size)]; - spin_lock_bh(&head->lock); - inet_bind_bucket_for_each(tb, &head->chain) - if (net_eq(ib_net(tb), net) && tb->l3mdev == l3mdev && - tb->port == port) - goto tb_found; -tb_not_found: - tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep, - net, head, port, l3mdev); - if (!tb) - goto fail_unlock; -tb_found: - if (!hlist_empty(&tb->owners)) { - if (sk->sk_reuse == SK_FORCE_REUSE) - goto success; - - if ((tb->fastreuse > 0 && reuse) || - sk_reuseport_match(tb, sk)) - goto success; - if (inet_csk_bind_conflict(sk, tb, true, true)) - goto fail_unlock; - } -success: if (hlist_empty(&tb->owners)) { tb->fastreuse = reuse; if (sk->sk_reuseport) { @@ -376,6 +333,58 @@ success: tb->fastreuseport = 0; } } +} + +/* Obtain a reference to a local port for the given sock, + * if snum is zero it means select any available local port. + * We try to allocate an odd port (and leave even ports for connect()) + */ +int inet_csk_get_port(struct sock *sk, unsigned short snum) +{ + bool reuse = sk->sk_reuse && sk->sk_state != TCP_LISTEN; + struct inet_hashinfo *hinfo = sk->sk_prot->h.hashinfo; + int ret = 1, port = snum; + struct inet_bind_hashbucket *head; + struct net *net = sock_net(sk); + struct inet_bind_bucket *tb = NULL; + int l3mdev; + + l3mdev = inet_sk_bound_l3mdev(sk); + + if (!port) { + head = inet_csk_find_open_port(sk, &tb, &port); + if (!head) + return ret; + if (!tb) + goto tb_not_found; + goto success; + } + head = &hinfo->bhash[inet_bhashfn(net, port, + hinfo->bhash_size)]; + spin_lock_bh(&head->lock); + inet_bind_bucket_for_each(tb, &head->chain) + if (net_eq(ib_net(tb), net) && tb->l3mdev == l3mdev && + tb->port == port) + goto tb_found; +tb_not_found: + tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep, + net, head, port, l3mdev); + if (!tb) + goto fail_unlock; +tb_found: + if (!hlist_empty(&tb->owners)) { + if (sk->sk_reuse == SK_FORCE_REUSE) + goto success; + + if ((tb->fastreuse > 0 && reuse) || + sk_reuseport_match(tb, sk)) + goto success; + if (inet_csk_bind_conflict(sk, tb, true, true)) + goto fail_unlock; + } +success: + inet_csk_update_fastreuse(tb, sk); + if (!inet_csk(sk)->icsk_bind_hash) inet_bind_hash(sk, tb, port); WARN_ON(inet_csk(sk)->icsk_bind_hash != tb); From 378737e1eee2e05d1d90d35897b6cede2c9ef75b Mon Sep 17 00:00:00 2001 From: Tim Froidcoeur Date: Tue, 11 Aug 2020 20:33:24 +0200 Subject: [PATCH 228/448] net: initialize fastreuse on inet_inherit_port [ Upstream commit d76f3351cea2d927fdf70dd7c06898235035e84e ] In the case of TPROXY, bind_conflict optimizations for SO_REUSEADDR or SO_REUSEPORT are broken, possibly resulting in O(n) instead of O(1) bind behaviour or in the incorrect reuse of a bind. the kernel keeps track for each bind_bucket if all sockets in the bind_bucket support SO_REUSEADDR or SO_REUSEPORT in two fastreuse flags. These flags allow skipping the costly bind_conflict check when possible (meaning when all sockets have the proper SO_REUSE option). For every socket added to a bind_bucket, these flags need to be updated. As soon as a socket that does not support reuse is added, the flag is set to false and will never go back to true, unless the bind_bucket is deleted. Note that there is no mechanism to re-evaluate these flags when a socket is removed (this might make sense when removing a socket that would not allow reuse; this leaves room for a future patch). For this optimization to work, it is mandatory that these flags are properly initialized and updated. When a child socket is created from a listen socket in __inet_inherit_port, the TPROXY case could create a new bind bucket without properly initializing these flags, thus preventing the optimization to work. Alternatively, a socket not allowing reuse could be added to an existing bind bucket without updating the flags, causing bind_conflict to never be called as it should. Call inet_csk_update_fastreuse when __inet_inherit_port decides to create a new bind_bucket or use a different bind_bucket than the one of the listen socket. Fixes: 093d282321da ("tproxy: fix hash locking issue when using port redirection in __inet_inherit_port()") Acked-by: Matthieu Baerts Signed-off-by: Tim Froidcoeur Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/inet_hashtables.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 2bbaaf0c7176..006a34b18537 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -163,6 +163,7 @@ int __inet_inherit_port(const struct sock *sk, struct sock *child) return -ENOMEM; } } + inet_csk_update_fastreuse(tb, child); } inet_bind_hash(child, tb, port); spin_unlock(&head->lock); From 3a8d1ca7204e359b90fd325e583dfddea239fba3 Mon Sep 17 00:00:00 2001 From: Brant Merryman Date: Fri, 26 Jun 2020 04:24:20 +0000 Subject: [PATCH 229/448] USB: serial: cp210x: re-enable auto-RTS on open commit c7614ff9b73a1e6fb2b1b51396da132ed22fecdb upstream. CP210x hardware disables auto-RTS but leaves auto-CTS when in hardware flow control mode and UART on cp210x hardware is disabled. When re-opening the port, if auto-CTS is enabled on the cp210x, then auto-RTS must be re-enabled in the driver. Signed-off-by: Brant Merryman Co-developed-by: Phu Luu Signed-off-by: Phu Luu Link: https://lore.kernel.org/r/ECCF8E73-91F3-4080-BE17-1714BC8818FB@silabs.com [ johan: fix up tags and problem description ] Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control") Cc: stable # 2.6.12 Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/usb/serial/cp210x.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index f5143eedbc48..22c5ad23b1cd 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -915,6 +915,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, u32 baud; u16 bits; u32 ctl_hs; + u32 flow_repl; cp210x_read_u32_reg(port, CP210X_GET_BAUDRATE, &baud); @@ -1015,6 +1016,22 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake); if (ctl_hs & CP210X_SERIAL_CTS_HANDSHAKE) { dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__); + /* + * When the port is closed, the CP210x hardware disables + * auto-RTS and RTS is deasserted but it leaves auto-CTS when + * in hardware flow control mode. When re-opening the port, if + * auto-CTS is enabled on the cp210x, then auto-RTS must be + * re-enabled in the driver. + */ + flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace); + flow_repl &= ~CP210X_SERIAL_RTS_MASK; + flow_repl |= CP210X_SERIAL_RTS_SHIFT(CP210X_SERIAL_RTS_FLOW_CTL); + flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl); + cp210x_write_reg_block(port, + CP210X_SET_FLOW, + &flow_ctl, + sizeof(flow_ctl)); + cflag |= CRTSCTS; } else { dev_dbg(dev, "%s - flow control = NONE\n", __func__); From 1f0e0ad76eaea9a9daba28ae3e2e3bc398a260f9 Mon Sep 17 00:00:00 2001 From: Brant Merryman Date: Fri, 26 Jun 2020 04:22:58 +0000 Subject: [PATCH 230/448] USB: serial: cp210x: enable usb generic throttle/unthrottle commit 4387b3dbb079d482d3c2b43a703ceed4dd27ed28 upstream. Assign the .throttle and .unthrottle functions to be generic function in the driver structure to prevent data loss that can otherwise occur if the host does not enable USB throttling. Signed-off-by: Brant Merryman Co-developed-by: Phu Luu Signed-off-by: Phu Luu Link: https://lore.kernel.org/r/57401AF3-9961-461F-95E1-F8AFC2105F5E@silabs.com [ johan: fix up tags ] Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control") Cc: stable # 2.6.12 Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/usb/serial/cp210x.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 22c5ad23b1cd..a90801ef0055 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -272,6 +272,8 @@ static struct usb_serial_driver cp210x_device = { .break_ctl = cp210x_break_ctl, .set_termios = cp210x_set_termios, .tx_empty = cp210x_tx_empty, + .throttle = usb_serial_generic_throttle, + .unthrottle = usb_serial_generic_unthrottle, .tiocmget = cp210x_tiocmget, .tiocmset = cp210x_tiocmset, .attach = cp210x_attach, From 8555fd99c11148cbb5c13b3dbc52d4f7cc59ba33 Mon Sep 17 00:00:00 2001 From: Hui Wang Date: Mon, 10 Aug 2020 10:16:59 +0800 Subject: [PATCH 231/448] ALSA: hda - fix the micmute led status for Lenovo ThinkCentre AIO commit 386a6539992b82fe9ac4f9dc3f548956fd894d8c upstream. After installing the Ubuntu Linux, the micmute led status is not correct. Users expect that the led is on if the capture is disabled, but with the current kernel, the led is off with the capture disabled. We tried the old linux kernel like linux-4.15, there is no this issue. It looks like we introduced this issue when switching to the led_cdev. Cc: Signed-off-by: Hui Wang Link: https://lore.kernel.org/r/20200810021659.7429-1-hui.wang@canonical.com Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index ea25b8d0350d..88629906f314 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -4391,6 +4391,7 @@ static void alc233_fixup_lenovo_line2_mic_hotkey(struct hda_codec *codec, { struct alc_spec *spec = codec->spec; + spec->micmute_led_polarity = 1; alc_fixup_hp_gpio_led(codec, action, 0, 0x04); if (action == HDA_FIXUP_ACT_PRE_PROBE) { spec->init_amp = ALC_INIT_DEFAULT; From d5f647e3a72a3ace84cc892eb8e19990f22390a4 Mon Sep 17 00:00:00 2001 From: Mirko Dietrich Date: Thu, 6 Aug 2020 14:48:50 +0200 Subject: [PATCH 232/448] ALSA: usb-audio: Creative USB X-Fi Pro SB1095 volume knob support commit fec9008828cde0076aae595ac031bfcf49d335a4 upstream. Adds an entry for Creative USB X-Fi to the rc_config array in mixer_quirks.c to allow use of volume knob on the device. Adds support for newer X-Fi Pro card, known as "Model No. SB1095" with USB ID "041e:3263" Signed-off-by: Mirko Dietrich Cc: Link: https://lore.kernel.org/r/20200806124850.20334-1-buzz@l4m1.de Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/mixer_quirks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index d39bf5b648d1..49f0dc0e3e4d 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -184,6 +184,7 @@ static const struct rc_config { { USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */ { USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ { USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ + { USB_ID(0x041e, 0x3263), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ { USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */ }; From 1d2c4954e82b18aeea8d8568b6e7dccdc54338b9 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Mon, 10 Aug 2020 13:53:19 +0900 Subject: [PATCH 233/448] ALSA: usb-audio: fix overeager device match for MacroSilicon MS2109 commit 14a720dc1f5332f3bdf30a23a3bc549e81be974c upstream. Matching by device matches all interfaces, which breaks the video/HID portions of the device depending on module load order. Fixes: e337bf19f6af ("ALSA: usb-audio: add quirk for MacroSilicon MS2109") Cc: stable@vger.kernel.org Signed-off-by: Hector Martin Link: https://lore.kernel.org/r/20200810045319.128745-1-marcan@marcan.st Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/quirks-table.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 562179492a33..77612ed7487b 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3623,7 +3623,13 @@ ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */ * with. */ { - USB_DEVICE(0x534d, 0x2109), + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | + USB_DEVICE_ID_MATCH_INT_CLASS | + USB_DEVICE_ID_MATCH_INT_SUBCLASS, + .idVendor = 0x534d, + .idProduct = 0x2109, + .bInterfaceClass = USB_CLASS_AUDIO, + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { .vendor_name = "MacroSilicon", .product_name = "MS2109", From 10de419977bfbe9f99d1c8a3cef7cbf4660d7d84 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Mon, 10 Aug 2020 17:24:00 +0900 Subject: [PATCH 234/448] ALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109 commit 1b7ecc241a67ad6b584e071bd791a54e0cd5f097 upstream. Further investigation of the L-R swap problem on the MS2109 reveals that the problem isn't that the channels are swapped, but rather that they are swapped and also out of phase by one sample. In other words, the issue is actually that the very first frame that comes from the hardware is a half-frame containing only the right channel, and after that everything becomes offset. So introduce a new quirk field to drop the very first 2 bytes that come in after the format is configured and a capture stream starts. This puts the channels in phase and in the correct order. Cc: stable@vger.kernel.org Signed-off-by: Hector Martin Link: https://lore.kernel.org/r/20200810082400.225858-1-marcan@marcan.st Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/card.h | 1 + sound/usb/pcm.c | 6 ++++++ sound/usb/quirks.c | 3 +++ sound/usb/stream.c | 1 + 4 files changed, 11 insertions(+) diff --git a/sound/usb/card.h b/sound/usb/card.h index f39f23e3525d..d8ec5caf464d 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -133,6 +133,7 @@ struct snd_usb_substream { unsigned int tx_length_quirk:1; /* add length specifier to transfers */ unsigned int fmt_type; /* USB audio format type (1-3) */ unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */ + unsigned int stream_offset_adj; /* Bytes to drop from beginning of stream (for non-compliant devices) */ unsigned int running: 1; /* running status */ diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index d11d00efc574..7b41f9748978 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -1417,6 +1417,12 @@ static void retire_capture_urb(struct snd_usb_substream *subs, // continue; } bytes = urb->iso_frame_desc[i].actual_length; + if (subs->stream_offset_adj > 0) { + unsigned int adj = min(subs->stream_offset_adj, bytes); + cp += adj; + bytes -= adj; + subs->stream_offset_adj -= adj; + } frames = bytes / stride; if (!subs->txfr_quirk) bytes = frames * stride; diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index a8bb953cc468..a756f50d9f07 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1432,6 +1432,9 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ set_format_emu_quirk(subs, fmt); break; + case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */ + subs->stream_offset_adj = 2; + break; } } diff --git a/sound/usb/stream.c b/sound/usb/stream.c index 11785f9652ad..d01edd5da6cf 100644 --- a/sound/usb/stream.c +++ b/sound/usb/stream.c @@ -94,6 +94,7 @@ static void snd_usb_init_substream(struct snd_usb_stream *as, subs->tx_length_quirk = as->chip->tx_length_quirk; subs->speed = snd_usb_get_speed(subs->dev); subs->pkt_offset_adj = 0; + subs->stream_offset_adj = 0; snd_usb_set_pcm_ops(as->pcm, stream); From 06d8ba514949a3dc1dd5c644821206fde932f6d4 Mon Sep 17 00:00:00 2001 From: Zheng Bin Date: Mon, 15 Jun 2020 09:21:53 +0800 Subject: [PATCH 235/448] 9p: Fix memory leak in v9fs_mount commit cb0aae0e31c632c407a2cab4307be85a001d4d98 upstream. v9fs_mount v9fs_session_init v9fs_cache_session_get_cookie v9fs_random_cachetag -->alloc cachetag v9ses->fscache = fscache_acquire_cookie -->maybe NULL sb = sget -->fail, goto clunk clunk_fid: v9fs_session_close if (v9ses->fscache) -->NULL kfree(v9ses->cachetag) Thus memleak happens. Link: http://lkml.kernel.org/r/20200615012153.89538-1-zhengbin13@huawei.com Fixes: 60e78d2c993e ("9p: Add fscache support to 9p") Cc: # v2.6.32+ Signed-off-by: Zheng Bin Signed-off-by: Dominique Martinet Signed-off-by: Greg Kroah-Hartman --- fs/9p/v9fs.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 15a99f9c7253..39def020a074 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -500,10 +500,9 @@ void v9fs_session_close(struct v9fs_session_info *v9ses) } #ifdef CONFIG_9P_FSCACHE - if (v9ses->fscache) { + if (v9ses->fscache) v9fs_cache_session_put_cookie(v9ses); - kfree(v9ses->cachetag); - } + kfree(v9ses->cachetag); #endif kfree(v9ses->uname); kfree(v9ses->aname); From 86f95b631490b5530d5f4e3e3d1b43fe900574a7 Mon Sep 17 00:00:00 2001 From: Tuomas Tynkkynen Date: Sun, 21 Jun 2020 13:30:40 +0200 Subject: [PATCH 236/448] media: media-request: Fix crash if memory allocation fails commit e30cc79cc80fd919b697a15c5000d9f57487de8e upstream. Syzbot reports a NULL-ptr deref in the kref_put() call: BUG: KASAN: null-ptr-deref in media_request_put drivers/media/mc/mc-request.c:81 [inline] kref_put include/linux/kref.h:64 [inline] media_request_put drivers/media/mc/mc-request.c:81 [inline] media_request_close+0x4d/0x170 drivers/media/mc/mc-request.c:89 __fput+0x2ed/0x750 fs/file_table.c:281 task_work_run+0x147/0x1d0 kernel/task_work.c:123 tracehook_notify_resume include/linux/tracehook.h:188 [inline] exit_to_usermode_loop arch/x86/entry/common.c:165 [inline] prepare_exit_to_usermode+0x48e/0x600 arch/x86/entry/common.c:196 What led to this crash was an injected memory allocation failure in media_request_alloc(): FAULT_INJECTION: forcing a failure. name failslab, interval 1, probability 0, space 0, times 0 should_failslab+0x5/0x20 kmem_cache_alloc_trace+0x57/0x300 ? anon_inode_getfile+0xe5/0x170 media_request_alloc+0x339/0x440 media_device_request_alloc+0x94/0xc0 media_device_ioctl+0x1fb/0x330 ? do_vfs_ioctl+0x6ea/0x1a00 ? media_ioctl+0x101/0x120 ? __media_device_usb_init+0x430/0x430 ? media_poll+0x110/0x110 __se_sys_ioctl+0xf9/0x160 do_syscall_64+0xf3/0x1b0 When that allocation fails, filp->private_data is left uninitialized which media_request_close() does not expect and crashes. To avoid this, reorder media_request_alloc() such that allocating the struct file happens as the last step thus media_request_close() will no longer get called for a partially created media request. Reported-by: syzbot+6bed2d543cf7e48b822b@syzkaller.appspotmail.com Cc: stable@vger.kernel.org Signed-off-by: Tuomas Tynkkynen Fixes: 10905d70d788 ("media: media-request: implement media requests") Reviewed-by: Hans Verkuil Signed-off-by: Sakari Ailus Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Greg Kroah-Hartman --- drivers/media/mc/mc-request.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/media/mc/mc-request.c b/drivers/media/mc/mc-request.c index e3fca436c75b..c0782fd96c59 100644 --- a/drivers/media/mc/mc-request.c +++ b/drivers/media/mc/mc-request.c @@ -296,9 +296,18 @@ int media_request_alloc(struct media_device *mdev, int *alloc_fd) if (WARN_ON(!mdev->ops->req_alloc ^ !mdev->ops->req_free)) return -ENOMEM; + if (mdev->ops->req_alloc) + req = mdev->ops->req_alloc(mdev); + else + req = kzalloc(sizeof(*req), GFP_KERNEL); + if (!req) + return -ENOMEM; + fd = get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; + if (fd < 0) { + ret = fd; + goto err_free_req; + } filp = anon_inode_getfile("request", &request_fops, NULL, O_CLOEXEC); if (IS_ERR(filp)) { @@ -306,15 +315,6 @@ int media_request_alloc(struct media_device *mdev, int *alloc_fd) goto err_put_fd; } - if (mdev->ops->req_alloc) - req = mdev->ops->req_alloc(mdev); - else - req = kzalloc(sizeof(*req), GFP_KERNEL); - if (!req) { - ret = -ENOMEM; - goto err_fput; - } - filp->private_data = req; req->mdev = mdev; req->state = MEDIA_REQUEST_STATE_IDLE; @@ -336,12 +336,15 @@ int media_request_alloc(struct media_device *mdev, int *alloc_fd) return 0; -err_fput: - fput(filp); - err_put_fd: put_unused_fd(fd); +err_free_req: + if (mdev->ops->req_free) + mdev->ops->req_free(req); + else + kfree(req); + return ret; } From c6d2ddf1a30d524106265ad2c48b907cd7a083d4 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 28 Jul 2020 14:17:36 +1000 Subject: [PATCH 237/448] drm/ttm/nouveau: don't call tt destroy callback on alloc failure. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 5de5b6ecf97a021f29403aa272cb4e03318ef586 upstream. This is confusing, and from my reading of all the drivers only nouveau got this right. Just make the API act under driver control of it's own allocation failing, and don't call destroy, if the page table fails to create there is nothing to cleanup here. (I'm willing to believe I've missed something here, so please review deeply). Reviewed-by: Christian König Signed-off-by: Dave Airlie Link: https://patchwork.freedesktop.org/patch/msgid/20200728041736.20689-1-airlied@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/nouveau/nouveau_sgdma.c | 9 +++------ drivers/gpu/drm/ttm/ttm_tt.c | 3 --- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index feaac908efed..34403b810dba 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c @@ -96,12 +96,9 @@ nouveau_sgdma_create_ttm(struct ttm_buffer_object *bo, uint32_t page_flags) else nvbe->ttm.ttm.func = &nv50_sgdma_backend; - if (ttm_dma_tt_init(&nvbe->ttm, bo, page_flags)) - /* - * A failing ttm_dma_tt_init() will call ttm_tt_destroy() - * and thus our nouveau_sgdma_destroy() hook, so we don't need - * to free nvbe here. - */ + if (ttm_dma_tt_init(&nvbe->ttm, bo, page_flags)) { + kfree(nvbe); return NULL; + } return &nvbe->ttm.ttm; } diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index e0e9b4f69db6..c770ec7e9e8b 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c @@ -241,7 +241,6 @@ int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo, ttm_tt_init_fields(ttm, bo, page_flags); if (ttm_tt_alloc_page_directory(ttm)) { - ttm_tt_destroy(ttm); pr_err("Failed allocating page table\n"); return -ENOMEM; } @@ -265,7 +264,6 @@ int ttm_dma_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo, INIT_LIST_HEAD(&ttm_dma->pages_list); if (ttm_dma_tt_alloc_page_directory(ttm_dma)) { - ttm_tt_destroy(ttm); pr_err("Failed allocating page table\n"); return -ENOMEM; } @@ -287,7 +285,6 @@ int ttm_sg_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo, else ret = ttm_dma_tt_alloc_page_directory(ttm_dma); if (ret) { - ttm_tt_destroy(ttm); pr_err("Failed allocating page table\n"); return -ENOMEM; } From 3c512bd3dbbbd21e0ae87998cdc17b7c2969babe Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 5 Aug 2020 12:58:23 -0600 Subject: [PATCH 238/448] io_uring: set ctx sq/cq entry count earlier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit bd74048108c179cea0ff52979506164c80f29da7 upstream. If we hit an earlier error path in io_uring_create(), then we will have accounted memory, but not set ctx->{sq,cq}_entries yet. Then when the ring is torn down in error, we use those values to unaccount the memory. Ensure we set the ctx entries before we're able to hit a potential error path. Cc: stable@vger.kernel.org Reported-by: Tomáš Chaloupka Tested-by: Tomáš Chaloupka Reviewed-by: Stefano Garzarella Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- fs/io_uring.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 046042025025..dc3bb06efdd6 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3857,6 +3857,10 @@ static int io_allocate_scq_urings(struct io_ring_ctx *ctx, struct io_rings *rings; size_t size, sq_array_offset; + /* make sure these are sane, as we already accounted them */ + ctx->sq_entries = p->sq_entries; + ctx->cq_entries = p->cq_entries; + size = rings_size(p->sq_entries, p->cq_entries, &sq_array_offset); if (size == SIZE_MAX) return -EOVERFLOW; @@ -3873,8 +3877,6 @@ static int io_allocate_scq_urings(struct io_ring_ctx *ctx, rings->cq_ring_entries = p->cq_entries; ctx->sq_mask = rings->sq_ring_mask; ctx->cq_mask = rings->cq_ring_mask; - ctx->sq_entries = rings->sq_ring_entries; - ctx->cq_entries = rings->cq_ring_entries; size = array_size(sizeof(struct io_uring_sqe), p->sq_entries); if (size == SIZE_MAX) { From 046922d3248da68bdac9cc5572dc64a65069b9dd Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Tue, 4 Aug 2020 16:30:30 -0400 Subject: [PATCH 239/448] NFS: Don't move layouts to plh_return_segs list while in use commit ff041727e9e029845857cac41aae118ead5e261b upstream. If the layout segment is still in use for a read or a write, we should not move it to the layout plh_return_segs list. If we do, we can end up returning the layout while I/O is still in progress. Fixes: e0b7d420f72a ("pNFS: Don't discard layout segments that are marked for return") Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Trond Myklebust Signed-off-by: Greg Kroah-Hartman --- fs/nfs/pnfs.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 443639cbb0cf..d94f39aa3bf7 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2362,16 +2362,6 @@ out_forget: return ERR_PTR(-EAGAIN); } -static int -mark_lseg_invalid_or_return(struct pnfs_layout_segment *lseg, - struct list_head *tmp_list) -{ - if (!mark_lseg_invalid(lseg, tmp_list)) - return 0; - pnfs_cache_lseg_for_layoutreturn(lseg->pls_layout, lseg); - return 1; -} - /** * pnfs_mark_matching_lsegs_return - Free or return matching layout segments * @lo: pointer to layout header @@ -2408,7 +2398,7 @@ pnfs_mark_matching_lsegs_return(struct pnfs_layout_hdr *lo, lseg, lseg->pls_range.iomode, lseg->pls_range.offset, lseg->pls_range.length); - if (mark_lseg_invalid_or_return(lseg, tmp_list)) + if (mark_lseg_invalid(lseg, tmp_list)) continue; remaining++; set_bit(NFS_LSEG_LAYOUTRETURN, &lseg->pls_flags); From 6d1e56826ea8ec3ae122ba5c7c815056d5a37655 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Wed, 5 Aug 2020 09:03:56 -0400 Subject: [PATCH 240/448] NFS: Don't return layout segments that are in use commit d474f96104bd4377573526ebae2ee212205a6839 upstream. If the NFS_LAYOUT_RETURN_REQUESTED flag is set, we want to return the layout as soon as possible, meaning that the affected layout segments should be marked as invalid, and should no longer be in use for I/O. Fixes: f0b429819b5f ("pNFS: Ignore non-recalled layouts in pnfs_layout_need_return()") Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Trond Myklebust Signed-off-by: Greg Kroah-Hartman --- fs/nfs/pnfs.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index d94f39aa3bf7..9c2b07ce57b2 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -1198,31 +1198,27 @@ out: return status; } +static bool +pnfs_layout_segments_returnable(struct pnfs_layout_hdr *lo, + enum pnfs_iomode iomode, + u32 seq) +{ + struct pnfs_layout_range recall_range = { + .length = NFS4_MAX_UINT64, + .iomode = iomode, + }; + return pnfs_mark_matching_lsegs_return(lo, &lo->plh_return_segs, + &recall_range, seq) != -EBUSY; +} + /* Return true if layoutreturn is needed */ static bool pnfs_layout_need_return(struct pnfs_layout_hdr *lo) { - struct pnfs_layout_segment *s; - enum pnfs_iomode iomode; - u32 seq; - if (!test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags)) return false; - - seq = lo->plh_return_seq; - iomode = lo->plh_return_iomode; - - /* Defer layoutreturn until all recalled lsegs are done */ - list_for_each_entry(s, &lo->plh_segs, pls_list) { - if (seq && pnfs_seqid_is_newer(s->pls_seq, seq)) - continue; - if (iomode != IOMODE_ANY && s->pls_range.iomode != iomode) - continue; - if (test_bit(NFS_LSEG_LAYOUTRETURN, &s->pls_flags)) - return false; - } - - return true; + return pnfs_layout_segments_returnable(lo, lo->plh_return_iomode, + lo->plh_return_seq); } static void pnfs_layoutreturn_before_put_layout_hdr(struct pnfs_layout_hdr *lo) From 613a374f3fd684916972e916bab5fb8f212eb013 Mon Sep 17 00:00:00 2001 From: Viresh Kumar Date: Mon, 29 Jun 2020 13:54:58 +0530 Subject: [PATCH 241/448] cpufreq: Fix locking issues with governors commit 8cc46ae565c393f77417cb9530b1265eb50f5d2e upstream. The locking around governors handling isn't adequate currently. The list of governors should never be traversed without the locking in place. Also governor modules must not be removed while the code in them is still in use. Reported-by: Quentin Perret Signed-off-by: Viresh Kumar Cc: All applicable [ rjw: Changelog ] Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- drivers/cpufreq/cpufreq.c | 58 +++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index fa988bd1e606..194a6587a1de 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -616,6 +616,24 @@ static struct cpufreq_governor *find_governor(const char *str_governor) return NULL; } +static struct cpufreq_governor *get_governor(const char *str_governor) +{ + struct cpufreq_governor *t; + + mutex_lock(&cpufreq_governor_mutex); + t = find_governor(str_governor); + if (!t) + goto unlock; + + if (!try_module_get(t->owner)) + t = NULL; + +unlock: + mutex_unlock(&cpufreq_governor_mutex); + + return t; +} + static unsigned int cpufreq_parse_policy(char *str_governor) { if (!strncasecmp(str_governor, "performance", CPUFREQ_NAME_LEN)) @@ -635,28 +653,14 @@ static struct cpufreq_governor *cpufreq_parse_governor(char *str_governor) { struct cpufreq_governor *t; - mutex_lock(&cpufreq_governor_mutex); + t = get_governor(str_governor); + if (t) + return t; - t = find_governor(str_governor); - if (!t) { - int ret; + if (request_module("cpufreq_%s", str_governor)) + return NULL; - mutex_unlock(&cpufreq_governor_mutex); - - ret = request_module("cpufreq_%s", str_governor); - if (ret) - return NULL; - - mutex_lock(&cpufreq_governor_mutex); - - t = find_governor(str_governor); - } - if (t && !try_module_get(t->owner)) - t = NULL; - - mutex_unlock(&cpufreq_governor_mutex); - - return t; + return get_governor(str_governor); } /** @@ -810,12 +814,14 @@ static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy, goto out; } + mutex_lock(&cpufreq_governor_mutex); for_each_governor(t) { if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char)) - (CPUFREQ_NAME_LEN + 2))) - goto out; + break; i += scnprintf(&buf[i], CPUFREQ_NAME_PLEN, "%s ", t->name); } + mutex_unlock(&cpufreq_governor_mutex); out: i += sprintf(&buf[i], "\n"); return i; @@ -1053,15 +1059,17 @@ static int cpufreq_init_policy(struct cpufreq_policy *policy) struct cpufreq_governor *def_gov = cpufreq_default_governor(); struct cpufreq_governor *gov = NULL; unsigned int pol = CPUFREQ_POLICY_UNKNOWN; + int ret; if (has_target()) { /* Update policy governor to the one used before hotplug. */ - gov = find_governor(policy->last_governor); + gov = get_governor(policy->last_governor); if (gov) { pr_debug("Restoring governor %s for cpu %d\n", policy->governor->name, policy->cpu); } else if (def_gov) { gov = def_gov; + __module_get(gov->owner); } else { return -ENODATA; } @@ -1084,7 +1092,11 @@ static int cpufreq_init_policy(struct cpufreq_policy *policy) return -ENODATA; } - return cpufreq_set_policy(policy, gov, pol); + ret = cpufreq_set_policy(policy, gov, pol); + if (gov) + module_put(gov->owner); + + return ret; } static int cpufreq_add_policy_cpu(struct cpufreq_policy *policy, unsigned int cpu) From 7e270e86b1b3b84eba796b9f56b01589d29ac56b Mon Sep 17 00:00:00 2001 From: Ivan Kokshaysky Date: Sat, 20 Jun 2020 17:44:49 +0100 Subject: [PATCH 242/448] cpufreq: dt: fix oops on armada37xx commit 10470dec3decaf5ed3c596f85debd7c42777ae12 upstream. Commit 0c868627e617e43a295d8 (cpufreq: dt: Allow platform specific intermediate callbacks) added two function pointers to the struct cpufreq_dt_platform_data. However, armada37xx_cpufreq_driver_init() has this struct (pdata) located on the stack and uses only "suspend" and "resume" fields. So these newly added "get_intermediate" and "target_intermediate" pointers are uninitialized and contain arbitrary non-null values, causing all kinds of trouble. For instance, here is an oops on espressobin after an attempt to change the cpefreq governor: [ 29.174554] Unable to handle kernel execute from non-executable memory at virtual address ffff00003f87bdc0 ... [ 29.269373] pc : 0xffff00003f87bdc0 [ 29.272957] lr : __cpufreq_driver_target+0x138/0x580 ... Fixed by zeroing out pdata before use. Cc: # v5.7+ Signed-off-by: Ivan Kokshaysky Reviewed-by: Andrew Lunn Signed-off-by: Viresh Kumar Signed-off-by: Greg Kroah-Hartman --- drivers/cpufreq/armada-37xx-cpufreq.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c index aa0f06dec959..df1c941260d1 100644 --- a/drivers/cpufreq/armada-37xx-cpufreq.c +++ b/drivers/cpufreq/armada-37xx-cpufreq.c @@ -456,6 +456,7 @@ static int __init armada37xx_cpufreq_driver_init(void) /* Now that everything is setup, enable the DVFS at hardware level */ armada37xx_cpufreq_enable_dvfs(nb_pm_base); + memset(&pdata, 0, sizeof(pdata)); pdata.suspend = armada37xx_cpufreq_suspend; pdata.resume = armada37xx_cpufreq_resume; From e02c77edd9b015ab49d3ac882c9dd70103a8151b Mon Sep 17 00:00:00 2001 From: Romain Naour Date: Fri, 14 Aug 2020 17:31:57 -0700 Subject: [PATCH 243/448] include/asm-generic/vmlinux.lds.h: align ro_after_init commit 7f897acbe5d57995438c831670b7c400e9c0dc00 upstream. Since the patch [1], building the kernel using a toolchain built with binutils 2.33.1 prevents booting a sh4 system under Qemu. Apply the patch provided by Alan Modra [2] that fix alignment of rodata. [1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ebd2263ba9a9124d93bbc0ece63d7e0fae89b40e [2] https://www.sourceware.org/ml/binutils/2019-12/msg00112.html Signed-off-by: Romain Naour Signed-off-by: Andrew Morton Cc: Alan Modra Cc: Bin Meng Cc: Chen Zhou Cc: Geert Uytterhoeven Cc: John Paul Adrian Glaubitz Cc: Krzysztof Kozlowski Cc: Kuninori Morimoto Cc: Rich Felker Cc: Sam Ravnborg Cc: Yoshinori Sato Cc: Arnd Bergmann Cc: Link: https://marc.info/?l=linux-sh&m=158429470221261 Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- include/asm-generic/vmlinux.lds.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index d7616d08e863..f050039ca2c0 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -340,6 +340,7 @@ */ #ifndef RO_AFTER_INIT_DATA #define RO_AFTER_INIT_DATA \ + . = ALIGN(8); \ __start_ro_after_init = .; \ *(.data..ro_after_init) \ JUMP_TABLE_DATA \ From 7ebb8fd40256e4b661b5d3a38fbbf4c404205fc5 Mon Sep 17 00:00:00 2001 From: Christian Eggers Date: Tue, 28 Jul 2020 12:08:32 +0200 Subject: [PATCH 244/448] spi: spidev: Align buffers for DMA commit aa9e862d7d5bcecd4dca9f39e8b684b93dd84ee7 upstream. Simply copying all xfers from userspace into one bounce buffer causes alignment problems if the SPI controller uses DMA. Ensure that all transfer data blocks within the rx and tx bounce buffers are aligned for DMA (according to ARCH_KMALLOC_MINALIGN). Alignment may increase the usage of the bounce buffers. In some cases, the buffers may need to be increased using the "bufsiz" module parameter. Signed-off-by: Christian Eggers Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200728100832.24788-1-ceggers@arri.de Signed-off-by: Mark Brown Signed-off-by: Greg Kroah-Hartman --- drivers/spi/spidev.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index ac6bf1fbbfe6..be503a0e6ef7 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -223,6 +223,11 @@ static int spidev_message(struct spidev_data *spidev, for (n = n_xfers, k_tmp = k_xfers, u_tmp = u_xfers; n; n--, k_tmp++, u_tmp++) { + /* Ensure that also following allocations from rx_buf/tx_buf will meet + * DMA alignment requirements. + */ + unsigned int len_aligned = ALIGN(u_tmp->len, ARCH_KMALLOC_MINALIGN); + k_tmp->len = u_tmp->len; total += k_tmp->len; @@ -238,17 +243,17 @@ static int spidev_message(struct spidev_data *spidev, if (u_tmp->rx_buf) { /* this transfer needs space in RX bounce buffer */ - rx_total += k_tmp->len; + rx_total += len_aligned; if (rx_total > bufsiz) { status = -EMSGSIZE; goto done; } k_tmp->rx_buf = rx_buf; - rx_buf += k_tmp->len; + rx_buf += len_aligned; } if (u_tmp->tx_buf) { /* this transfer needs space in TX bounce buffer */ - tx_total += k_tmp->len; + tx_total += len_aligned; if (tx_total > bufsiz) { status = -EMSGSIZE; goto done; @@ -258,7 +263,7 @@ static int spidev_message(struct spidev_data *spidev, (uintptr_t) u_tmp->tx_buf, u_tmp->len)) goto done; - tx_buf += k_tmp->len; + tx_buf += len_aligned; } k_tmp->cs_change = !!u_tmp->cs_change; @@ -290,16 +295,16 @@ static int spidev_message(struct spidev_data *spidev, goto done; /* copy any rx data out of bounce buffer */ - rx_buf = spidev->rx_buffer; - for (n = n_xfers, u_tmp = u_xfers; n; n--, u_tmp++) { + for (n = n_xfers, k_tmp = k_xfers, u_tmp = u_xfers; + n; + n--, k_tmp++, u_tmp++) { if (u_tmp->rx_buf) { if (copy_to_user((u8 __user *) - (uintptr_t) u_tmp->rx_buf, rx_buf, + (uintptr_t) u_tmp->rx_buf, k_tmp->rx_buf, u_tmp->len)) { status = -EFAULT; goto done; } - rx_buf += u_tmp->len; } } status = total; From a8e9efb55323b638806b4db2560b7ea6807039e7 Mon Sep 17 00:00:00 2001 From: Sivaprakash Murugesan Date: Fri, 12 Jun 2020 13:28:15 +0530 Subject: [PATCH 245/448] mtd: rawnand: qcom: avoid write to unavailable register commit 443440cc4a901af462239d286cd10721aa1c7dfc upstream. SFLASHC_BURST_CFG is only available on older ipq NAND platforms, this register has been removed when the NAND controller got implemented in the qpic controller. Avoid writing this register on devices which are based on qpic NAND controller. Fixes: dce84760b09f ("mtd: nand: qcom: Support for IPQ8074 QPIC NAND controller") Cc: stable@vger.kernel.org Signed-off-by: Sivaprakash Murugesan Signed-off-by: Miquel Raynal Link: https://lore.kernel.org/linux-mtd/1591948696-16015-2-git-send-email-sivaprak@codeaurora.org Signed-off-by: Greg Kroah-Hartman --- drivers/mtd/nand/raw/qcom_nandc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/qcom_nandc.c b/drivers/mtd/nand/raw/qcom_nandc.c index 7bb9a7e8e1e7..c1c53b02b35f 100644 --- a/drivers/mtd/nand/raw/qcom_nandc.c +++ b/drivers/mtd/nand/raw/qcom_nandc.c @@ -459,11 +459,13 @@ struct qcom_nand_host { * among different NAND controllers. * @ecc_modes - ecc mode for NAND * @is_bam - whether NAND controller is using BAM + * @is_qpic - whether NAND CTRL is part of qpic IP * @dev_cmd_reg_start - NAND_DEV_CMD_* registers starting offset */ struct qcom_nandc_props { u32 ecc_modes; bool is_bam; + bool is_qpic; u32 dev_cmd_reg_start; }; @@ -2751,7 +2753,8 @@ static int qcom_nandc_setup(struct qcom_nand_controller *nandc) u32 nand_ctrl; /* kill onenand */ - nandc_write(nandc, SFLASHC_BURST_CFG, 0); + if (!nandc->props->is_qpic) + nandc_write(nandc, SFLASHC_BURST_CFG, 0); nandc_write(nandc, dev_cmd_reg_addr(nandc, NAND_DEV_CMD_VLD), NAND_DEV_CMD_VLD_VAL); @@ -3007,12 +3010,14 @@ static const struct qcom_nandc_props ipq806x_nandc_props = { static const struct qcom_nandc_props ipq4019_nandc_props = { .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), .is_bam = true, + .is_qpic = true, .dev_cmd_reg_start = 0x0, }; static const struct qcom_nandc_props ipq8074_nandc_props = { .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), .is_bam = true, + .is_qpic = true, .dev_cmd_reg_start = 0x7000, }; From 15f7b186916de385e4d8a73235ac4a7ade1ac6e5 Mon Sep 17 00:00:00 2001 From: Gao Xiang Date: Thu, 30 Jul 2020 01:58:01 +0800 Subject: [PATCH 246/448] erofs: fix extended inode could cross boundary commit 0dcd3c94e02438f4a571690e26f4ee997524102a upstream. Each ondisk inode should be aligned with inode slot boundary (32-byte alignment) because of nid calculation formula, so all compact inodes (32 byte) cannot across page boundary. However, extended inode is now 64-byte form, which can across page boundary in principle if the location is specified on purpose, although it's hard to be generated by mkfs due to the allocation policy and rarely used by Android use case now mainly for > 4GiB files. For now, only two fields `i_ctime_nsec` and `i_nlink' couldn't be read from disk properly and cause out-of-bound memory read with random value. Let's fix now. Fixes: 431339ba9042 ("staging: erofs: add inode operations") Cc: # 4.19+ Link: https://lore.kernel.org/r/20200729175801.GA23973@xiangao.remote.csb Reviewed-by: Chao Yu Signed-off-by: Gao Xiang Signed-off-by: Greg Kroah-Hartman --- fs/erofs/inode.c | 121 +++++++++++++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 42 deletions(-) diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c index 3350ab65d892..b36b414cd7a7 100644 --- a/fs/erofs/inode.c +++ b/fs/erofs/inode.c @@ -8,31 +8,80 @@ #include -/* no locking */ -static int erofs_read_inode(struct inode *inode, void *data) +/* + * if inode is successfully read, return its inode page (or sometimes + * the inode payload page if it's an extended inode) in order to fill + * inline data if possible. + */ +static struct page *erofs_read_inode(struct inode *inode, + unsigned int *ofs) { + struct super_block *sb = inode->i_sb; + struct erofs_sb_info *sbi = EROFS_SB(sb); struct erofs_inode *vi = EROFS_I(inode); - struct erofs_inode_compact *dic = data; - struct erofs_inode_extended *die; + const erofs_off_t inode_loc = iloc(sbi, vi->nid); - const unsigned int ifmt = le16_to_cpu(dic->i_format); - struct erofs_sb_info *sbi = EROFS_SB(inode->i_sb); - erofs_blk_t nblks = 0; + erofs_blk_t blkaddr, nblks = 0; + struct page *page; + struct erofs_inode_compact *dic; + struct erofs_inode_extended *die, *copied = NULL; + unsigned int ifmt; + int err; + + blkaddr = erofs_blknr(inode_loc); + *ofs = erofs_blkoff(inode_loc); + + erofs_dbg("%s, reading inode nid %llu at %u of blkaddr %u", + __func__, vi->nid, *ofs, blkaddr); + + page = erofs_get_meta_page(sb, blkaddr); + if (IS_ERR(page)) { + erofs_err(sb, "failed to get inode (nid: %llu) page, err %ld", + vi->nid, PTR_ERR(page)); + return page; + } + + dic = page_address(page) + *ofs; + ifmt = le16_to_cpu(dic->i_format); vi->datalayout = erofs_inode_datalayout(ifmt); - if (vi->datalayout >= EROFS_INODE_DATALAYOUT_MAX) { erofs_err(inode->i_sb, "unsupported datalayout %u of nid %llu", vi->datalayout, vi->nid); - DBG_BUGON(1); - return -EOPNOTSUPP; + err = -EOPNOTSUPP; + goto err_out; } switch (erofs_inode_version(ifmt)) { case EROFS_INODE_LAYOUT_EXTENDED: - die = data; - vi->inode_isize = sizeof(struct erofs_inode_extended); + /* check if the inode acrosses page boundary */ + if (*ofs + vi->inode_isize <= PAGE_SIZE) { + *ofs += vi->inode_isize; + die = (struct erofs_inode_extended *)dic; + } else { + const unsigned int gotten = PAGE_SIZE - *ofs; + + copied = kmalloc(vi->inode_isize, GFP_NOFS); + if (!copied) { + err = -ENOMEM; + goto err_out; + } + memcpy(copied, dic, gotten); + unlock_page(page); + put_page(page); + + page = erofs_get_meta_page(sb, blkaddr + 1); + if (IS_ERR(page)) { + erofs_err(sb, "failed to get inode payload page (nid: %llu), err %ld", + vi->nid, PTR_ERR(page)); + kfree(copied); + return page; + } + *ofs = vi->inode_isize - gotten; + memcpy((u8 *)copied + gotten, page_address(page), *ofs); + die = copied; + } vi->xattr_isize = erofs_xattr_ibody_size(die->i_xattr_icount); inode->i_mode = le16_to_cpu(die->i_mode); @@ -69,9 +118,12 @@ static int erofs_read_inode(struct inode *inode, void *data) /* total blocks for compressed files */ if (erofs_inode_is_data_compressed(vi->datalayout)) nblks = le32_to_cpu(die->i_u.compressed_blocks); + + kfree(copied); break; case EROFS_INODE_LAYOUT_COMPACT: vi->inode_isize = sizeof(struct erofs_inode_compact); + *ofs += vi->inode_isize; vi->xattr_isize = erofs_xattr_ibody_size(dic->i_xattr_icount); inode->i_mode = le16_to_cpu(dic->i_mode); @@ -111,8 +163,8 @@ static int erofs_read_inode(struct inode *inode, void *data) erofs_err(inode->i_sb, "unsupported on-disk inode version %u of nid %llu", erofs_inode_version(ifmt), vi->nid); - DBG_BUGON(1); - return -EOPNOTSUPP; + err = -EOPNOTSUPP; + goto err_out; } if (!nblks) @@ -120,13 +172,18 @@ static int erofs_read_inode(struct inode *inode, void *data) inode->i_blocks = roundup(inode->i_size, EROFS_BLKSIZ) >> 9; else inode->i_blocks = nblks << LOG_SECTORS_PER_BLOCK; - return 0; + return page; bogusimode: erofs_err(inode->i_sb, "bogus i_mode (%o) @ nid %llu", inode->i_mode, vi->nid); + err = -EFSCORRUPTED; +err_out: DBG_BUGON(1); - return -EFSCORRUPTED; + kfree(copied); + unlock_page(page); + put_page(page); + return ERR_PTR(err); } static int erofs_fill_symlink(struct inode *inode, void *data, @@ -146,7 +203,7 @@ static int erofs_fill_symlink(struct inode *inode, void *data, if (!lnk) return -ENOMEM; - m_pofs += vi->inode_isize + vi->xattr_isize; + m_pofs += vi->xattr_isize; /* inline symlink data shouldn't cross page boundary as well */ if (m_pofs + inode->i_size > PAGE_SIZE) { kfree(lnk); @@ -167,37 +224,17 @@ static int erofs_fill_symlink(struct inode *inode, void *data, static int erofs_fill_inode(struct inode *inode, int isdir) { - struct super_block *sb = inode->i_sb; struct erofs_inode *vi = EROFS_I(inode); struct page *page; - void *data; - int err; - erofs_blk_t blkaddr; unsigned int ofs; - erofs_off_t inode_loc; + int err = 0; trace_erofs_fill_inode(inode, isdir); - inode_loc = iloc(EROFS_SB(sb), vi->nid); - blkaddr = erofs_blknr(inode_loc); - ofs = erofs_blkoff(inode_loc); - erofs_dbg("%s, reading inode nid %llu at %u of blkaddr %u", - __func__, vi->nid, ofs, blkaddr); - - page = erofs_get_meta_page(sb, blkaddr); - - if (IS_ERR(page)) { - erofs_err(sb, "failed to get inode (nid: %llu) page, err %ld", - vi->nid, PTR_ERR(page)); + /* read inode base data from disk */ + page = erofs_read_inode(inode, &ofs); + if (IS_ERR(page)) return PTR_ERR(page); - } - - DBG_BUGON(!PageUptodate(page)); - data = page_address(page); - - err = erofs_read_inode(inode, data + ofs); - if (err) - goto out_unlock; /* setup the new inode */ switch (inode->i_mode & S_IFMT) { @@ -210,7 +247,7 @@ static int erofs_fill_inode(struct inode *inode, int isdir) inode->i_fop = &erofs_dir_fops; break; case S_IFLNK: - err = erofs_fill_symlink(inode, data, ofs); + err = erofs_fill_symlink(inode, page_address(page), ofs); if (err) goto out_unlock; inode_nohighmem(inode); From 7612ce180e30fa7f60731f12bf5d9d1664be60de Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Tue, 28 Jul 2020 18:52:58 +0200 Subject: [PATCH 247/448] Revert "parisc: Drop LDCW barrier in CAS code when running UP" commit 462fb756c7de1ffe5bc6099149136031c2d9c02a upstream. This reverts commit e6eb5fe9123f05dcbf339ae5c0b6d32fcc0685d5. We need to optimize it differently. A follow up patch will correct it. Signed-off-by: Helge Deller Cc: # v5.2+ Signed-off-by: Greg Kroah-Hartman --- arch/parisc/kernel/syscall.S | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 97ac707c6bff..e54d5e4d3489 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -641,8 +641,7 @@ cas_action: 2: stw %r24, 0(%r26) /* Free lock */ #ifdef CONFIG_SMP -98: LDCW 0(%sr2,%r20), %r1 /* Barrier */ -99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) + LDCW 0(%sr2,%r20), %r1 /* Barrier */ #endif stw %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG @@ -659,8 +658,7 @@ cas_action: /* Error occurred on load or store */ /* Free lock */ #ifdef CONFIG_SMP -98: LDCW 0(%sr2,%r20), %r1 /* Barrier */ -99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) + LDCW 0(%sr2,%r20), %r1 /* Barrier */ #endif stw %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG @@ -864,8 +862,7 @@ cas2_action: cas2_end: /* Free lock */ #ifdef CONFIG_SMP -98: LDCW 0(%sr2,%r20), %r1 /* Barrier */ -99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) + LDCW 0(%sr2,%r20), %r1 /* Barrier */ #endif stw %r20, 0(%sr2,%r20) /* Enable interrupts */ @@ -878,8 +875,7 @@ cas2_end: /* Error occurred on load or store */ /* Free lock */ #ifdef CONFIG_SMP -98: LDCW 0(%sr2,%r20), %r1 /* Barrier */ -99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) + LDCW 0(%sr2,%r20), %r1 /* Barrier */ #endif stw %r20, 0(%sr2,%r20) ssm PSW_SM_I, %r0 From 431d999bd098144265fd399f16c888d01a12bc73 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Tue, 28 Jul 2020 18:54:40 +0200 Subject: [PATCH 248/448] Revert "parisc: Use ldcw instruction for SMP spinlock release barrier" commit 6e9f06ee6c9566f3606d93182ac8f803a148504b upstream. This reverts commit 9e5c602186a692a7e848c0da17aed40f49d30519. No need to use the ldcw instruction as SMP spinlock release barrier. Revert it to gain back speed again. Signed-off-by: Helge Deller Cc: # v5.2+ Signed-off-by: Greg Kroah-Hartman --- arch/parisc/include/asm/spinlock.h | 4 --- arch/parisc/kernel/entry.S | 43 ++++++++++++++---------------- arch/parisc/kernel/syscall.S | 16 +++-------- 3 files changed, 24 insertions(+), 39 deletions(-) diff --git a/arch/parisc/include/asm/spinlock.h b/arch/parisc/include/asm/spinlock.h index 197d2247e4db..8a63515f03bf 100644 --- a/arch/parisc/include/asm/spinlock.h +++ b/arch/parisc/include/asm/spinlock.h @@ -37,11 +37,7 @@ static inline void arch_spin_unlock(arch_spinlock_t *x) volatile unsigned int *a; a = __ldcw_align(x); -#ifdef CONFIG_SMP - (void) __ldcw(a); -#else mb(); -#endif *a = 1; } diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index b96d74496977..5d48efcb2683 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -454,9 +454,8 @@ nop LDREG 0(\ptp),\pte bb,<,n \pte,_PAGE_PRESENT_BIT,3f - LDCW 0(\tmp),\tmp1 b \fault - stw \spc,0(\tmp) + stw,ma \spc,0(\tmp) 99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) #endif 2: LDREG 0(\ptp),\pte @@ -465,22 +464,20 @@ .endm /* Release pa_tlb_lock lock without reloading lock address. */ - .macro tlb_unlock0 spc,tmp,tmp1 + .macro tlb_unlock0 spc,tmp #ifdef CONFIG_SMP 98: or,COND(=) %r0,\spc,%r0 - LDCW 0(\tmp),\tmp1 - or,COND(=) %r0,\spc,%r0 - stw \spc,0(\tmp) + stw,ma \spc,0(\tmp) 99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) #endif .endm /* Release pa_tlb_lock lock. */ - .macro tlb_unlock1 spc,tmp,tmp1 + .macro tlb_unlock1 spc,tmp #ifdef CONFIG_SMP 98: load_pa_tlb_lock \tmp 99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) - tlb_unlock0 \spc,\tmp,\tmp1 + tlb_unlock0 \spc,\tmp #endif .endm @@ -1163,7 +1160,7 @@ dtlb_miss_20w: idtlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1189,7 +1186,7 @@ nadtlb_miss_20w: idtlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1223,7 +1220,7 @@ dtlb_miss_11: mtsp t1, %sr1 /* Restore sr1 */ - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1256,7 +1253,7 @@ nadtlb_miss_11: mtsp t1, %sr1 /* Restore sr1 */ - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1285,7 +1282,7 @@ dtlb_miss_20: idtlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1313,7 +1310,7 @@ nadtlb_miss_20: idtlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1420,7 +1417,7 @@ itlb_miss_20w: iitlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1444,7 +1441,7 @@ naitlb_miss_20w: iitlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1478,7 +1475,7 @@ itlb_miss_11: mtsp t1, %sr1 /* Restore sr1 */ - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1502,7 +1499,7 @@ naitlb_miss_11: mtsp t1, %sr1 /* Restore sr1 */ - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1532,7 +1529,7 @@ itlb_miss_20: iitlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1552,7 +1549,7 @@ naitlb_miss_20: iitlbt pte,prot - tlb_unlock1 spc,t0,t1 + tlb_unlock1 spc,t0 rfir nop @@ -1582,7 +1579,7 @@ dbit_trap_20w: idtlbt pte,prot - tlb_unlock0 spc,t0,t1 + tlb_unlock0 spc,t0 rfir nop #else @@ -1608,7 +1605,7 @@ dbit_trap_11: mtsp t1, %sr1 /* Restore sr1 */ - tlb_unlock0 spc,t0,t1 + tlb_unlock0 spc,t0 rfir nop @@ -1628,7 +1625,7 @@ dbit_trap_20: idtlbt pte,prot - tlb_unlock0 spc,t0,t1 + tlb_unlock0 spc,t0 rfir nop #endif diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index e54d5e4d3489..93cc36d98875 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -640,9 +640,7 @@ cas_action: sub,<> %r28, %r25, %r0 2: stw %r24, 0(%r26) /* Free lock */ -#ifdef CONFIG_SMP - LDCW 0(%sr2,%r20), %r1 /* Barrier */ -#endif + sync stw %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG /* Clear thread register indicator */ @@ -657,9 +655,7 @@ cas_action: 3: /* Error occurred on load or store */ /* Free lock */ -#ifdef CONFIG_SMP - LDCW 0(%sr2,%r20), %r1 /* Barrier */ -#endif + sync stw %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG stw %r0, 4(%sr2,%r20) @@ -861,9 +857,7 @@ cas2_action: cas2_end: /* Free lock */ -#ifdef CONFIG_SMP - LDCW 0(%sr2,%r20), %r1 /* Barrier */ -#endif + sync stw %r20, 0(%sr2,%r20) /* Enable interrupts */ ssm PSW_SM_I, %r0 @@ -874,9 +868,7 @@ cas2_end: 22: /* Error occurred on load or store */ /* Free lock */ -#ifdef CONFIG_SMP - LDCW 0(%sr2,%r20), %r1 /* Barrier */ -#endif + sync stw %r20, 0(%sr2,%r20) ssm PSW_SM_I, %r0 ldo 1(%r0),%r28 From 638e45c39f30ca6e76da6fc06097886c4b0ebf5c Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Tue, 28 Jul 2020 18:56:14 +0200 Subject: [PATCH 249/448] Revert "parisc: Revert "Release spinlocks using ordered store"" commit 157e9afcc4fa25068b0e8743bc254a9b56010e13 upstream. This reverts commit 86d4d068df573a8c2105554624796c086d6bec3d. Signed-off-by: Helge Deller Cc: # v5.0+ Signed-off-by: Greg Kroah-Hartman --- arch/parisc/include/asm/spinlock.h | 4 ++-- arch/parisc/kernel/syscall.S | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/arch/parisc/include/asm/spinlock.h b/arch/parisc/include/asm/spinlock.h index 8a63515f03bf..16aec9ba2580 100644 --- a/arch/parisc/include/asm/spinlock.h +++ b/arch/parisc/include/asm/spinlock.h @@ -37,8 +37,8 @@ static inline void arch_spin_unlock(arch_spinlock_t *x) volatile unsigned int *a; a = __ldcw_align(x); - mb(); - *a = 1; + /* Release with ordered store. */ + __asm__ __volatile__("stw,ma %0,0(%1)" : : "r"(1), "r"(a) : "memory"); } static inline int arch_spin_trylock(arch_spinlock_t *x) diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 93cc36d98875..a37814cb66c7 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -640,8 +640,7 @@ cas_action: sub,<> %r28, %r25, %r0 2: stw %r24, 0(%r26) /* Free lock */ - sync - stw %r20, 0(%sr2,%r20) + stw,ma %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG /* Clear thread register indicator */ stw %r0, 4(%sr2,%r20) @@ -655,8 +654,7 @@ cas_action: 3: /* Error occurred on load or store */ /* Free lock */ - sync - stw %r20, 0(%sr2,%r20) + stw,ma %r20, 0(%sr2,%r20) #if ENABLE_LWS_DEBUG stw %r0, 4(%sr2,%r20) #endif @@ -857,8 +855,7 @@ cas2_action: cas2_end: /* Free lock */ - sync - stw %r20, 0(%sr2,%r20) + stw,ma %r20, 0(%sr2,%r20) /* Enable interrupts */ ssm PSW_SM_I, %r0 /* Return to userspace, set no error */ @@ -868,8 +865,7 @@ cas2_end: 22: /* Error occurred on load or store */ /* Free lock */ - sync - stw %r20, 0(%sr2,%r20) + stw,ma %r20, 0(%sr2,%r20) ssm PSW_SM_I, %r0 ldo 1(%r0),%r28 b lws_exit From 8dfab46620017e96cb5907a5eecba76f45c50c17 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Tue, 28 Jul 2020 19:13:20 +0200 Subject: [PATCH 250/448] parisc: Do not use an ordered store in pa_tlb_lock() commit e72b23dec1da5e62a0090c5da1d926778284e230 upstream. No need to use an ordered store in pa_tlb_lock() and update the comment regarng usage of the sid register to unlocak a spinlock in tlb_unlock0(). Signed-off-by: John David Anglin Signed-off-by: Helge Deller Cc: # v5.0+ Signed-off-by: Greg Kroah-Hartman --- arch/parisc/kernel/entry.S | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 5d48efcb2683..873bf3434da9 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -455,7 +455,7 @@ LDREG 0(\ptp),\pte bb,<,n \pte,_PAGE_PRESENT_BIT,3f b \fault - stw,ma \spc,0(\tmp) + stw \spc,0(\tmp) 99: ALTERNATIVE(98b, 99b, ALT_COND_NO_SMP, INSN_NOP) #endif 2: LDREG 0(\ptp),\pte @@ -463,7 +463,12 @@ 3: .endm - /* Release pa_tlb_lock lock without reloading lock address. */ + /* Release pa_tlb_lock lock without reloading lock address. + Note that the values in the register spc are limited to + NR_SPACE_IDS (262144). Thus, the stw instruction always + stores a nonzero value even when register spc is 64 bits. + We use an ordered store to ensure all prior accesses are + performed prior to releasing the lock. */ .macro tlb_unlock0 spc,tmp #ifdef CONFIG_SMP 98: or,COND(=) %r0,\spc,%r0 From 0d3897a7f52731e3339040b876a4c409362166c9 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Thu, 30 Jul 2020 08:59:12 -0400 Subject: [PATCH 251/448] parisc: Implement __smp_store_release and __smp_load_acquire barriers commit e96ebd589debd9a6a793608c4ec7019c38785dea upstream. This patch implements the __smp_store_release and __smp_load_acquire barriers using ordered stores and loads. This avoids the sync instruction present in the generic implementation. Cc: # 4.14+ Signed-off-by: Dave Anglin Signed-off-by: Helge Deller Signed-off-by: Greg Kroah-Hartman --- arch/parisc/include/asm/barrier.h | 61 +++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/arch/parisc/include/asm/barrier.h b/arch/parisc/include/asm/barrier.h index dbaaca84f27f..640d46edf32e 100644 --- a/arch/parisc/include/asm/barrier.h +++ b/arch/parisc/include/asm/barrier.h @@ -26,6 +26,67 @@ #define __smp_rmb() mb() #define __smp_wmb() mb() +#define __smp_store_release(p, v) \ +do { \ + typeof(p) __p = (p); \ + union { typeof(*p) __val; char __c[1]; } __u = \ + { .__val = (__force typeof(*p)) (v) }; \ + compiletime_assert_atomic_type(*p); \ + switch (sizeof(*p)) { \ + case 1: \ + asm volatile("stb,ma %0,0(%1)" \ + : : "r"(*(__u8 *)__u.__c), "r"(__p) \ + : "memory"); \ + break; \ + case 2: \ + asm volatile("sth,ma %0,0(%1)" \ + : : "r"(*(__u16 *)__u.__c), "r"(__p) \ + : "memory"); \ + break; \ + case 4: \ + asm volatile("stw,ma %0,0(%1)" \ + : : "r"(*(__u32 *)__u.__c), "r"(__p) \ + : "memory"); \ + break; \ + case 8: \ + if (IS_ENABLED(CONFIG_64BIT)) \ + asm volatile("std,ma %0,0(%1)" \ + : : "r"(*(__u64 *)__u.__c), "r"(__p) \ + : "memory"); \ + break; \ + } \ +} while (0) + +#define __smp_load_acquire(p) \ +({ \ + union { typeof(*p) __val; char __c[1]; } __u; \ + typeof(p) __p = (p); \ + compiletime_assert_atomic_type(*p); \ + switch (sizeof(*p)) { \ + case 1: \ + asm volatile("ldb,ma 0(%1),%0" \ + : "=r"(*(__u8 *)__u.__c) : "r"(__p) \ + : "memory"); \ + break; \ + case 2: \ + asm volatile("ldh,ma 0(%1),%0" \ + : "=r"(*(__u16 *)__u.__c) : "r"(__p) \ + : "memory"); \ + break; \ + case 4: \ + asm volatile("ldw,ma 0(%1),%0" \ + : "=r"(*(__u32 *)__u.__c) : "r"(__p) \ + : "memory"); \ + break; \ + case 8: \ + if (IS_ENABLED(CONFIG_64BIT)) \ + asm volatile("ldd,ma 0(%1),%0" \ + : "=r"(*(__u64 *)__u.__c) : "r"(__p) \ + : "memory"); \ + break; \ + } \ + __u.__val; \ +}) #include #endif /* !__ASSEMBLY__ */ From cd17453fa96f936467d5118d8afab86fe83d3ede Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Tue, 11 Aug 2020 18:19:19 +0200 Subject: [PATCH 252/448] parisc: mask out enable and reserved bits from sba imask commit 5b24993c21cbf2de11aff077a48c5cb0505a0450 upstream. When using kexec the SBA IOMMU IBASE might still have the RE bit set. This triggers a WARN_ON when trying to write back the IBASE register later, and it also makes some mask calculations fail. Cc: Signed-off-by: Sven Schnelle Signed-off-by: Helge Deller Signed-off-by: Greg Kroah-Hartman --- drivers/parisc/sba_iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index de8e4e347249..e410033b6df0 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c @@ -1270,7 +1270,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num) ** (one that doesn't overlap memory or LMMIO space) in the ** IBASE and IMASK registers. */ - ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE); + ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE) & ~0x1fffffULL; iova_space_size = ~(READ_REG(ioc->ioc_hpa + IOC_IMASK) & 0xFFFFFFFFUL) + 1; if ((ioc->ibase < 0xfed00000UL) && ((ioc->ibase + iova_space_size) > 0xfee00000UL)) { From 35e1338bddcd7dfe056cc4e492b9e1e878203eb9 Mon Sep 17 00:00:00 2001 From: Nathan Huckleberry Date: Fri, 10 Jul 2020 20:23:37 +0100 Subject: [PATCH 253/448] ARM: 8992/1: Fix unwind_frame for clang-built kernels commit b4d5ec9b39f8b31d98f65bc5577b5d15d93795d7 upstream. Since clang does not push pc and sp in function prologues, the current implementation of unwind_frame does not work. By using the previous frame's lr/fp instead of saved pc/sp we get valid unwinds on clang-built kernels. The bounds check on next frame pointer must be changed as well since there are 8 less bytes between frames. This fixes /proc//stack. Link: https://github.com/ClangBuiltLinux/linux/issues/912 Reported-by: Miles Chen Tested-by: Miles Chen Cc: stable@vger.kernel.org Reviewed-by: Nick Desaulniers Signed-off-by: Nathan Huckleberry Signed-off-by: Russell King Signed-off-by: Greg Kroah-Hartman --- arch/arm/kernel/stacktrace.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 71778bb0475b..a082f6e4f0f4 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c @@ -22,6 +22,19 @@ * A simple function epilogue looks like this: * ldm sp, {fp, sp, pc} * + * When compiled with clang, pc and sp are not pushed. A simple function + * prologue looks like this when built with clang: + * + * stmdb {..., fp, lr} + * add fp, sp, #x + * sub sp, sp, #y + * + * A simple function epilogue looks like this when built with clang: + * + * sub sp, fp, #x + * ldm {..., fp, pc} + * + * * Note that with framepointer enabled, even the leaf functions have the same * prologue and epilogue, therefore we can ignore the LR value in this case. */ @@ -34,6 +47,16 @@ int notrace unwind_frame(struct stackframe *frame) low = frame->sp; high = ALIGN(low, THREAD_SIZE); +#ifdef CONFIG_CC_IS_CLANG + /* check current frame pointer is within bounds */ + if (fp < low + 4 || fp > high - 4) + return -EINVAL; + + frame->sp = frame->fp; + frame->fp = *(unsigned long *)(fp); + frame->pc = frame->lr; + frame->lr = *(unsigned long *)(fp + 4); +#else /* check current frame pointer is within bounds */ if (fp < low + 12 || fp > high - 4) return -EINVAL; @@ -42,6 +65,7 @@ int notrace unwind_frame(struct stackframe *frame) frame->fp = *(unsigned long *)(fp - 12); frame->sp = *(unsigned long *)(fp - 8); frame->pc = *(unsigned long *)(fp - 4); +#endif return 0; } From a3ec61c84d857ed170979839cfcbf85b3ca7af4f Mon Sep 17 00:00:00 2001 From: Jon Derrick Date: Tue, 21 Jul 2020 14:26:09 -0600 Subject: [PATCH 254/448] irqdomain/treewide: Free firmware node after domain removal commit ec0160891e387f4771f953b888b1fe951398e5d9 upstream. Commit 711419e504eb ("irqdomain: Add the missing assignment of domain->fwnode for named fwnode") unintentionally caused a dangling pointer page fault issue on firmware nodes that were freed after IRQ domain allocation. Commit e3beca48a45b fixed that dangling pointer issue by only freeing the firmware node after an IRQ domain allocation failure. That fix no longer frees the firmware node immediately, but leaves the firmware node allocated after the domain is removed. The firmware node must be kept around through irq_domain_remove, but should be freed it afterwards. Add the missing free operations after domain removal where where appropriate. Fixes: e3beca48a45b ("irqdomain/treewide: Keep firmware node unconditionally allocated") Signed-off-by: Jon Derrick Signed-off-by: Thomas Gleixner Reviewed-by: Andy Shevchenko Acked-by: Bjorn Helgaas # drivers/pci Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/1595363169-7157-1-git-send-email-jonathan.derrick@intel.com Signed-off-by: Greg Kroah-Hartman --- arch/mips/pci/pci-xtalk-bridge.c | 3 +++ arch/x86/kernel/apic/io_apic.c | 5 +++++ drivers/iommu/intel_irq_remapping.c | 8 ++++++++ drivers/pci/controller/vmd.c | 3 +++ 4 files changed, 19 insertions(+) diff --git a/arch/mips/pci/pci-xtalk-bridge.c b/arch/mips/pci/pci-xtalk-bridge.c index 6ce76b18186e..c4b1c6cf2660 100644 --- a/arch/mips/pci/pci-xtalk-bridge.c +++ b/arch/mips/pci/pci-xtalk-bridge.c @@ -539,6 +539,7 @@ err_free_resource: pci_free_resource_list(&host->windows); err_remove_domain: irq_domain_remove(domain); + irq_domain_free_fwnode(fn); return err; } @@ -546,8 +547,10 @@ static int bridge_remove(struct platform_device *pdev) { struct pci_bus *bus = platform_get_drvdata(pdev); struct bridge_controller *bc = BRIDGE_CONTROLLER(bus); + struct fwnode_handle *fn = bc->domain->fwnode; irq_domain_remove(bc->domain); + irq_domain_free_fwnode(fn); pci_lock_rescan_remove(); pci_stop_root_bus(bus); pci_remove_root_bus(bus); diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 16699101fd2f..ea6d9da9b094 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -2348,8 +2348,13 @@ static int mp_irqdomain_create(int ioapic) static void ioapic_destroy_irqdomain(int idx) { + struct ioapic_domain_cfg *cfg = &ioapics[idx].irqdomain_cfg; + struct fwnode_handle *fn = ioapics[idx].irqdomain->fwnode; + if (ioapics[idx].irqdomain) { irq_domain_remove(ioapics[idx].irqdomain); + if (!cfg->dev) + irq_domain_free_fwnode(fn); ioapics[idx].irqdomain = NULL; } } diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index 982d796b686b..6bfb283e6f28 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -628,13 +628,21 @@ out_free_table: static void intel_teardown_irq_remapping(struct intel_iommu *iommu) { + struct fwnode_handle *fn; + if (iommu && iommu->ir_table) { if (iommu->ir_msi_domain) { + fn = iommu->ir_msi_domain->fwnode; + irq_domain_remove(iommu->ir_msi_domain); + irq_domain_free_fwnode(fn); iommu->ir_msi_domain = NULL; } if (iommu->ir_domain) { + fn = iommu->ir_domain->fwnode; + irq_domain_remove(iommu->ir_domain); + irq_domain_free_fwnode(fn); iommu->ir_domain = NULL; } free_pages((unsigned long)iommu->ir_table->base, diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c index 7c24c0aedad4..9966dcf1d112 100644 --- a/drivers/pci/controller/vmd.c +++ b/drivers/pci/controller/vmd.c @@ -694,6 +694,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) if (!vmd->bus) { pci_free_resource_list(&resources); irq_domain_remove(vmd->irq_domain); + irq_domain_free_fwnode(fn); return -ENODEV; } @@ -808,6 +809,7 @@ static void vmd_cleanup_srcu(struct vmd_dev *vmd) static void vmd_remove(struct pci_dev *dev) { struct vmd_dev *vmd = pci_get_drvdata(dev); + struct fwnode_handle *fn = vmd->irq_domain->fwnode; sysfs_remove_link(&vmd->dev->dev.kobj, "domain"); pci_stop_root_bus(vmd->bus); @@ -816,6 +818,7 @@ static void vmd_remove(struct pci_dev *dev) vmd_teardown_dma_ops(vmd); vmd_detach_resources(vmd); irq_domain_remove(vmd->irq_domain); + irq_domain_free_fwnode(fn); } #ifdef CONFIG_PM_SLEEP From 169d55c486f895d05f190775a605d22ca6606a6d Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Mon, 10 Aug 2020 17:25:02 +0900 Subject: [PATCH 255/448] ALSA: usb-audio: add quirk for Pioneer DDJ-RB commit 6e8596172ee1cd46ec0bfd5adcf4ff86371478b6 upstream. This is just another Pioneer device with fixed endpoints. Input is dummy but used as feedback (it always returns silence). Cc: stable@vger.kernel.org Signed-off-by: Hector Martin Link: https://lore.kernel.org/r/20200810082502.225979-1-marcan@marcan.st Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/quirks-table.h | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 77612ed7487b..1573229d8cf4 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3570,6 +3570,62 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), } } }, +{ + /* + * PIONEER DJ DDJ-RB + * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed + * The feedback for the output is the dummy input. + */ + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_COMPOSITE, + .data = (const struct snd_usb_audio_quirk[]) { + { + .ifnum = 0, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = &(const struct audioformat) { + .formats = SNDRV_PCM_FMTBIT_S24_3LE, + .channels = 4, + .iface = 0, + .altsetting = 1, + .altset_idx = 1, + .endpoint = 0x01, + .ep_attr = USB_ENDPOINT_XFER_ISOC| + USB_ENDPOINT_SYNC_ASYNC, + .rates = SNDRV_PCM_RATE_44100, + .rate_min = 44100, + .rate_max = 44100, + .nr_rates = 1, + .rate_table = (unsigned int[]) { 44100 } + } + }, + { + .ifnum = 0, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = &(const struct audioformat) { + .formats = SNDRV_PCM_FMTBIT_S24_3LE, + .channels = 2, + .iface = 0, + .altsetting = 1, + .altset_idx = 1, + .endpoint = 0x82, + .ep_attr = USB_ENDPOINT_XFER_ISOC| + USB_ENDPOINT_SYNC_ASYNC| + USB_ENDPOINT_USAGE_IMPLICIT_FB, + .rates = SNDRV_PCM_RATE_44100, + .rate_min = 44100, + .rate_max = 44100, + .nr_rates = 1, + .rate_table = (unsigned int[]) { 44100 } + } + }, + { + .ifnum = -1 + } + } + } +}, #define ALC1220_VB_DESKTOP(vend, prod) { \ USB_DEVICE(vend, prod), \ From 1a2e558c8b3084a292f461fb9adca5bb78792ee5 Mon Sep 17 00:00:00 2001 From: Jarkko Sakkinen Date: Fri, 3 Jul 2020 01:55:59 +0300 Subject: [PATCH 256/448] tpm: Unify the mismatching TPM space buffer sizes commit 6c4e79d99e6f42b79040f1a33cd4018f5425030b upstream. The size of the buffers for storing context's and sessions can vary from arch to arch as PAGE_SIZE can be anything between 4 kB and 256 kB (the maximum for PPC64). Define a fixed buffer size set to 16 kB. This should be enough for most use with three handles (that is how many we allow at the moment). Parametrize the buffer size while doing this, so that it is easier to revisit this later on if required. Cc: stable@vger.kernel.org Reported-by: Stefan Berger Fixes: 745b361e989a ("tpm: infrastructure for TPM spaces") Reviewed-by: Jerry Snitselaar Tested-by: Stefan Berger Signed-off-by: Jarkko Sakkinen Signed-off-by: Greg Kroah-Hartman --- drivers/char/tpm/tpm-chip.c | 9 ++------- drivers/char/tpm/tpm.h | 5 ++++- drivers/char/tpm/tpm2-space.c | 26 ++++++++++++++++---------- drivers/char/tpm/tpmrm-dev.c | 2 +- include/linux/tpm.h | 1 + 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index 58073836b555..1838039b0333 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -386,13 +386,8 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev, chip->cdev.owner = THIS_MODULE; chip->cdevs.owner = THIS_MODULE; - chip->work_space.context_buf = kzalloc(PAGE_SIZE, GFP_KERNEL); - if (!chip->work_space.context_buf) { - rc = -ENOMEM; - goto out; - } - chip->work_space.session_buf = kzalloc(PAGE_SIZE, GFP_KERNEL); - if (!chip->work_space.session_buf) { + rc = tpm2_init_space(&chip->work_space, TPM2_SPACE_BUFFER_SIZE); + if (rc) { rc = -ENOMEM; goto out; } diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index 218cb496222a..37f010421a36 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -177,6 +177,9 @@ struct tpm_header { #define TPM_TAG_RQU_COMMAND 193 +/* TPM2 specific constants. */ +#define TPM2_SPACE_BUFFER_SIZE 16384 /* 16 kB */ + struct stclear_flags_t { __be16 tag; u8 deactivated; @@ -456,7 +459,7 @@ void tpm2_shutdown(struct tpm_chip *chip, u16 shutdown_type); unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); int tpm2_probe(struct tpm_chip *chip); int tpm2_find_cc(struct tpm_chip *chip, u32 cc); -int tpm2_init_space(struct tpm_space *space); +int tpm2_init_space(struct tpm_space *space, unsigned int buf_size); void tpm2_del_space(struct tpm_chip *chip, struct tpm_space *space); void tpm2_flush_space(struct tpm_chip *chip); int tpm2_prepare_space(struct tpm_chip *chip, struct tpm_space *space, u8 *cmd, diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c index 982d341d8837..784b8b3cb903 100644 --- a/drivers/char/tpm/tpm2-space.c +++ b/drivers/char/tpm/tpm2-space.c @@ -38,18 +38,21 @@ static void tpm2_flush_sessions(struct tpm_chip *chip, struct tpm_space *space) } } -int tpm2_init_space(struct tpm_space *space) +int tpm2_init_space(struct tpm_space *space, unsigned int buf_size) { - space->context_buf = kzalloc(PAGE_SIZE, GFP_KERNEL); + space->context_buf = kzalloc(buf_size, GFP_KERNEL); if (!space->context_buf) return -ENOMEM; - space->session_buf = kzalloc(PAGE_SIZE, GFP_KERNEL); + space->session_buf = kzalloc(buf_size, GFP_KERNEL); if (space->session_buf == NULL) { kfree(space->context_buf); + /* Prevent caller getting a dangling pointer. */ + space->context_buf = NULL; return -ENOMEM; } + space->buf_size = buf_size; return 0; } @@ -311,8 +314,10 @@ int tpm2_prepare_space(struct tpm_chip *chip, struct tpm_space *space, u8 *cmd, sizeof(space->context_tbl)); memcpy(&chip->work_space.session_tbl, &space->session_tbl, sizeof(space->session_tbl)); - memcpy(chip->work_space.context_buf, space->context_buf, PAGE_SIZE); - memcpy(chip->work_space.session_buf, space->session_buf, PAGE_SIZE); + memcpy(chip->work_space.context_buf, space->context_buf, + space->buf_size); + memcpy(chip->work_space.session_buf, space->session_buf, + space->buf_size); rc = tpm2_load_space(chip); if (rc) { @@ -492,7 +497,7 @@ static int tpm2_save_space(struct tpm_chip *chip) continue; rc = tpm2_save_context(chip, space->context_tbl[i], - space->context_buf, PAGE_SIZE, + space->context_buf, space->buf_size, &offset); if (rc == -ENOENT) { space->context_tbl[i] = 0; @@ -509,9 +514,8 @@ static int tpm2_save_space(struct tpm_chip *chip) continue; rc = tpm2_save_context(chip, space->session_tbl[i], - space->session_buf, PAGE_SIZE, + space->session_buf, space->buf_size, &offset); - if (rc == -ENOENT) { /* handle error saving session, just forget it */ space->session_tbl[i] = 0; @@ -557,8 +561,10 @@ int tpm2_commit_space(struct tpm_chip *chip, struct tpm_space *space, sizeof(space->context_tbl)); memcpy(&space->session_tbl, &chip->work_space.session_tbl, sizeof(space->session_tbl)); - memcpy(space->context_buf, chip->work_space.context_buf, PAGE_SIZE); - memcpy(space->session_buf, chip->work_space.session_buf, PAGE_SIZE); + memcpy(space->context_buf, chip->work_space.context_buf, + space->buf_size); + memcpy(space->session_buf, chip->work_space.session_buf, + space->buf_size); return 0; out: diff --git a/drivers/char/tpm/tpmrm-dev.c b/drivers/char/tpm/tpmrm-dev.c index 7a0a7051a06f..eef0fb06ea83 100644 --- a/drivers/char/tpm/tpmrm-dev.c +++ b/drivers/char/tpm/tpmrm-dev.c @@ -21,7 +21,7 @@ static int tpmrm_open(struct inode *inode, struct file *file) if (priv == NULL) return -ENOMEM; - rc = tpm2_init_space(&priv->space); + rc = tpm2_init_space(&priv->space, TPM2_SPACE_BUFFER_SIZE); if (rc) { kfree(priv); return -ENOMEM; diff --git a/include/linux/tpm.h b/include/linux/tpm.h index 53c0ea9ec9df..77fdc988c610 100644 --- a/include/linux/tpm.h +++ b/include/linux/tpm.h @@ -93,6 +93,7 @@ struct tpm_space { u8 *context_buf; u32 session_tbl[3]; u8 *session_buf; + u32 buf_size; }; struct tpm_bios_log { From 17f9ba7229c44356c8d036762a9765d0e37a0ac0 Mon Sep 17 00:00:00 2001 From: Matteo Croce Date: Mon, 6 Jul 2020 19:37:36 -0700 Subject: [PATCH 257/448] pstore: Fix linking when crypto API disabled commit fd49e03280e596e54edb93a91bc96170f8e97e4a upstream. When building a kernel with CONFIG_PSTORE=y and CONFIG_CRYPTO not set, a build error happens: ld: fs/pstore/platform.o: in function `pstore_dump': platform.c:(.text+0x3f9): undefined reference to `crypto_comp_compress' ld: fs/pstore/platform.o: in function `pstore_get_backend_records': platform.c:(.text+0x784): undefined reference to `crypto_comp_decompress' This because some pstore code uses crypto_comp_(de)compress regardless of the CONFIG_CRYPTO status. Fix it by wrapping the (de)compress usage by IS_ENABLED(CONFIG_PSTORE_COMPRESS) Signed-off-by: Matteo Croce Link: https://lore.kernel.org/lkml/20200706234045.9516-1-mcroce@linux.microsoft.com Fixes: cb3bee0369bc ("pstore: Use crypto compress API") Cc: stable@vger.kernel.org Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- fs/pstore/platform.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index cdf5b8ae2583..74a60bae2b23 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -275,6 +275,9 @@ static int pstore_compress(const void *in, void *out, { int ret; + if (!IS_ENABLED(CONFIG_PSTORE_COMPRESSION)) + return -EINVAL; + ret = crypto_comp_compress(tfm, in, inlen, out, &outlen); if (ret) { pr_err("crypto_comp_compress failed, ret = %d!\n", ret); @@ -661,7 +664,7 @@ static void decompress_record(struct pstore_record *record) int unzipped_len; char *unzipped, *workspace; - if (!record->compressed) + if (!IS_ENABLED(CONFIG_PSTORE_COMPRESSION) || !record->compressed) return; /* Only PSTORE_TYPE_DMESG support compression. */ From d9add5d7d94b3e96c44acbba8daa4bf61d01381d Mon Sep 17 00:00:00 2001 From: Mikulas Patocka Date: Wed, 17 Jun 2020 09:49:52 -0400 Subject: [PATCH 258/448] crypto: hisilicon - don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified commit 5ead051780404b5cb22147170acadd1994dc3236 upstream. There is this call chain: sec_alg_skcipher_encrypt -> sec_alg_skcipher_crypto -> sec_alg_alloc_and_calc_split_sizes -> kcalloc where we call sleeping allocator function even if CRYPTO_TFM_REQ_MAY_SLEEP was not specified. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org # v4.19+ Fixes: 915e4e8413da ("crypto: hisilicon - SEC security accelerator driver") Acked-by: Jonathan Cameron Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/hisilicon/sec/sec_algs.c | 34 +++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/hisilicon/sec/sec_algs.c b/drivers/crypto/hisilicon/sec/sec_algs.c index c27e7160d2df..4ad4ffd90cee 100644 --- a/drivers/crypto/hisilicon/sec/sec_algs.c +++ b/drivers/crypto/hisilicon/sec/sec_algs.c @@ -175,7 +175,8 @@ static int sec_alloc_and_fill_hw_sgl(struct sec_hw_sgl **sec_sgl, dma_addr_t *psec_sgl, struct scatterlist *sgl, int count, - struct sec_dev_info *info) + struct sec_dev_info *info, + gfp_t gfp) { struct sec_hw_sgl *sgl_current = NULL; struct sec_hw_sgl *sgl_next; @@ -190,7 +191,7 @@ static int sec_alloc_and_fill_hw_sgl(struct sec_hw_sgl **sec_sgl, sge_index = i % SEC_MAX_SGE_NUM; if (sge_index == 0) { sgl_next = dma_pool_zalloc(info->hw_sgl_pool, - GFP_KERNEL, &sgl_next_dma); + gfp, &sgl_next_dma); if (!sgl_next) { ret = -ENOMEM; goto err_free_hw_sgls; @@ -545,14 +546,14 @@ void sec_alg_callback(struct sec_bd_info *resp, void *shadow) } static int sec_alg_alloc_and_calc_split_sizes(int length, size_t **split_sizes, - int *steps) + int *steps, gfp_t gfp) { size_t *sizes; int i; /* Split into suitable sized blocks */ *steps = roundup(length, SEC_REQ_LIMIT) / SEC_REQ_LIMIT; - sizes = kcalloc(*steps, sizeof(*sizes), GFP_KERNEL); + sizes = kcalloc(*steps, sizeof(*sizes), gfp); if (!sizes) return -ENOMEM; @@ -568,7 +569,7 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes, int steps, struct scatterlist ***splits, int **splits_nents, int sgl_len_in, - struct device *dev) + struct device *dev, gfp_t gfp) { int ret, count; @@ -576,12 +577,12 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes, if (!count) return -EINVAL; - *splits = kcalloc(steps, sizeof(struct scatterlist *), GFP_KERNEL); + *splits = kcalloc(steps, sizeof(struct scatterlist *), gfp); if (!*splits) { ret = -ENOMEM; goto err_unmap_sg; } - *splits_nents = kcalloc(steps, sizeof(int), GFP_KERNEL); + *splits_nents = kcalloc(steps, sizeof(int), gfp); if (!*splits_nents) { ret = -ENOMEM; goto err_free_splits; @@ -589,7 +590,7 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes, /* output the scatter list before and after this */ ret = sg_split(sgl, count, 0, steps, split_sizes, - *splits, *splits_nents, GFP_KERNEL); + *splits, *splits_nents, gfp); if (ret) { ret = -ENOMEM; goto err_free_splits_nents; @@ -630,13 +631,13 @@ static struct sec_request_el int el_size, bool different_dest, struct scatterlist *sgl_in, int n_ents_in, struct scatterlist *sgl_out, int n_ents_out, - struct sec_dev_info *info) + struct sec_dev_info *info, gfp_t gfp) { struct sec_request_el *el; struct sec_bd_info *req; int ret; - el = kzalloc(sizeof(*el), GFP_KERNEL); + el = kzalloc(sizeof(*el), gfp); if (!el) return ERR_PTR(-ENOMEM); el->el_length = el_size; @@ -668,7 +669,7 @@ static struct sec_request_el el->sgl_in = sgl_in; ret = sec_alloc_and_fill_hw_sgl(&el->in, &el->dma_in, el->sgl_in, - n_ents_in, info); + n_ents_in, info, gfp); if (ret) goto err_free_el; @@ -679,7 +680,7 @@ static struct sec_request_el el->sgl_out = sgl_out; ret = sec_alloc_and_fill_hw_sgl(&el->out, &el->dma_out, el->sgl_out, - n_ents_out, info); + n_ents_out, info, gfp); if (ret) goto err_free_hw_sgl_in; @@ -720,6 +721,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq, int *splits_out_nents = NULL; struct sec_request_el *el, *temp; bool split = skreq->src != skreq->dst; + gfp_t gfp = skreq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC; mutex_init(&sec_req->lock); sec_req->req_base = &skreq->base; @@ -728,13 +730,13 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq, sec_req->len_in = sg_nents(skreq->src); ret = sec_alg_alloc_and_calc_split_sizes(skreq->cryptlen, &split_sizes, - &steps); + &steps, gfp); if (ret) return ret; sec_req->num_elements = steps; ret = sec_map_and_split_sg(skreq->src, split_sizes, steps, &splits_in, &splits_in_nents, sec_req->len_in, - info->dev); + info->dev, gfp); if (ret) goto err_free_split_sizes; @@ -742,7 +744,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq, sec_req->len_out = sg_nents(skreq->dst); ret = sec_map_and_split_sg(skreq->dst, split_sizes, steps, &splits_out, &splits_out_nents, - sec_req->len_out, info->dev); + sec_req->len_out, info->dev, gfp); if (ret) goto err_unmap_in_sg; } @@ -775,7 +777,7 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq, splits_in[i], splits_in_nents[i], split ? splits_out[i] : NULL, split ? splits_out_nents[i] : 0, - info); + info, gfp); if (IS_ERR(el)) { ret = PTR_ERR(el); goto err_free_elements; From 3c660aa47304365e2dc7eeb58199690e5e7964c1 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Mon, 13 Jul 2020 07:06:34 -0700 Subject: [PATCH 259/448] crypto: qat - fix double free in qat_uclo_create_batch_init_list commit c06c76602e03bde24ee69a2022a829127e504202 upstream. clang static analysis flags this error qat_uclo.c:297:3: warning: Attempt to free released memory [unix.Malloc] kfree(*init_tab_base); ^~~~~~~~~~~~~~~~~~~~~ When input *init_tab_base is null, the function allocates memory for the head of the list. When there is problem allocating other list elements the list is unwound and freed. Then a check is made if the list head was allocated and is also freed. Keeping track of the what may need to be freed is the variable 'tail_old'. The unwinding/freeing block is while (tail_old) { mem_init = tail_old->next; kfree(tail_old); tail_old = mem_init; } The problem is that the first element of tail_old is also what was allocated for the list head init_header = kzalloc(sizeof(*init_header), GFP_KERNEL); ... *init_tab_base = init_header; flag = 1; } tail_old = init_header; So *init_tab_base/init_header are freed twice. There is another problem. When the input *init_tab_base is non null the tail_old is calculated by traveling down the list to first non null entry. tail_old = init_header; while (tail_old->next) tail_old = tail_old->next; When the unwinding free happens, the last entry of the input list will be freed. So the freeing needs a general changed. If locally allocated the first element of tail_old is freed, else it is skipped. As a bit of cleanup, reset *init_tab_base if it came in as null. Fixes: b4b7e67c917f ("crypto: qat - Intel(R) QAT ucode part of fw loader") Cc: Signed-off-by: Tom Rix Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/qat/qat_common/qat_uclo.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/qat/qat_common/qat_uclo.c b/drivers/crypto/qat/qat_common/qat_uclo.c index 6bd8f6a2a24f..aeb03081415c 100644 --- a/drivers/crypto/qat/qat_common/qat_uclo.c +++ b/drivers/crypto/qat/qat_common/qat_uclo.c @@ -332,13 +332,18 @@ static int qat_uclo_create_batch_init_list(struct icp_qat_fw_loader_handle } return 0; out_err: + /* Do not free the list head unless we allocated it. */ + tail_old = tail_old->next; + if (flag) { + kfree(*init_tab_base); + *init_tab_base = NULL; + } + while (tail_old) { mem_init = tail_old->next; kfree(tail_old); tail_old = mem_init; } - if (flag) - kfree(*init_tab_base); return -ENOMEM; } From 28bd8f392f4a4c910ec3b64c3e77ec7eaf027d11 Mon Sep 17 00:00:00 2001 From: John Allen Date: Mon, 22 Jun 2020 15:24:02 -0500 Subject: [PATCH 260/448] crypto: ccp - Fix use of merged scatterlists commit 8a302808c60d441d9884cb00ea7f2b534f2e3ca5 upstream. Running the crypto manager self tests with CONFIG_CRYPTO_MANAGER_EXTRA_TESTS may result in several types of errors when using the ccp-crypto driver: alg: skcipher: cbc-des3-ccp encryption failed on test vector 0; expected_error=0, actual_error=-5 ... alg: skcipher: ctr-aes-ccp decryption overran dst buffer on test vector 0 ... alg: ahash: sha224-ccp test failed (wrong result) on test vector ... These errors are the result of improper processing of scatterlists mapped for DMA. Given a scatterlist in which entries are merged as part of mapping the scatterlist for DMA, the DMA length of a merged entry will reflect the combined length of the entries that were merged. The subsequent scatterlist entry will contain DMA information for the scatterlist entry after the last merged entry, but the non-DMA information will be that of the first merged entry. The ccp driver does not take this scatterlist merging into account. To address this, add a second scatterlist pointer to track the current position in the DMA mapped representation of the scatterlist. Both the DMA representation and the original representation of the scatterlist must be tracked as while most of the driver can use just the DMA representation, scatterlist_map_and_copy() must use the original representation and expects the scatterlist pointer to be accurate to the original representation. In order to properly walk the original scatterlist, the scatterlist must be walked until the combined lengths of the entries seen is equal to the DMA length of the current entry being processed in the DMA mapped representation. Fixes: 63b945091a070 ("crypto: ccp - CCP device driver and interface support") Signed-off-by: John Allen Cc: stable@vger.kernel.org Acked-by: Tom Lendacky Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/ccp/ccp-dev.h | 1 + drivers/crypto/ccp/ccp-ops.c | 37 +++++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h index 3f68262d9ab4..87a34d91fdf7 100644 --- a/drivers/crypto/ccp/ccp-dev.h +++ b/drivers/crypto/ccp/ccp-dev.h @@ -469,6 +469,7 @@ struct ccp_sg_workarea { unsigned int sg_used; struct scatterlist *dma_sg; + struct scatterlist *dma_sg_head; struct device *dma_dev; unsigned int dma_count; enum dma_data_direction dma_dir; diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c index 422193690fd4..64112c736810 100644 --- a/drivers/crypto/ccp/ccp-ops.c +++ b/drivers/crypto/ccp/ccp-ops.c @@ -63,7 +63,7 @@ static u32 ccp_gen_jobid(struct ccp_device *ccp) static void ccp_sg_free(struct ccp_sg_workarea *wa) { if (wa->dma_count) - dma_unmap_sg(wa->dma_dev, wa->dma_sg, wa->nents, wa->dma_dir); + dma_unmap_sg(wa->dma_dev, wa->dma_sg_head, wa->nents, wa->dma_dir); wa->dma_count = 0; } @@ -92,6 +92,7 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev, return 0; wa->dma_sg = sg; + wa->dma_sg_head = sg; wa->dma_dev = dev; wa->dma_dir = dma_dir; wa->dma_count = dma_map_sg(dev, sg, wa->nents, dma_dir); @@ -104,14 +105,28 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev, static void ccp_update_sg_workarea(struct ccp_sg_workarea *wa, unsigned int len) { unsigned int nbytes = min_t(u64, len, wa->bytes_left); + unsigned int sg_combined_len = 0; if (!wa->sg) return; wa->sg_used += nbytes; wa->bytes_left -= nbytes; - if (wa->sg_used == wa->sg->length) { - wa->sg = sg_next(wa->sg); + if (wa->sg_used == sg_dma_len(wa->dma_sg)) { + /* Advance to the next DMA scatterlist entry */ + wa->dma_sg = sg_next(wa->dma_sg); + + /* In the case that the DMA mapped scatterlist has entries + * that have been merged, the non-DMA mapped scatterlist + * must be advanced multiple times for each merged entry. + * This ensures that the current non-DMA mapped entry + * corresponds to the current DMA mapped entry. + */ + do { + sg_combined_len += wa->sg->length; + wa->sg = sg_next(wa->sg); + } while (wa->sg_used > sg_combined_len); + wa->sg_used = 0; } } @@ -299,7 +314,7 @@ static unsigned int ccp_queue_buf(struct ccp_data *data, unsigned int from) /* Update the structures and generate the count */ buf_count = 0; while (sg_wa->bytes_left && (buf_count < dm_wa->length)) { - nbytes = min(sg_wa->sg->length - sg_wa->sg_used, + nbytes = min(sg_dma_len(sg_wa->dma_sg) - sg_wa->sg_used, dm_wa->length - buf_count); nbytes = min_t(u64, sg_wa->bytes_left, nbytes); @@ -331,11 +346,11 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst, * and destination. The resulting len values will always be <= UINT_MAX * because the dma length is an unsigned int. */ - sg_src_len = sg_dma_len(src->sg_wa.sg) - src->sg_wa.sg_used; + sg_src_len = sg_dma_len(src->sg_wa.dma_sg) - src->sg_wa.sg_used; sg_src_len = min_t(u64, src->sg_wa.bytes_left, sg_src_len); if (dst) { - sg_dst_len = sg_dma_len(dst->sg_wa.sg) - dst->sg_wa.sg_used; + sg_dst_len = sg_dma_len(dst->sg_wa.dma_sg) - dst->sg_wa.sg_used; sg_dst_len = min_t(u64, src->sg_wa.bytes_left, sg_dst_len); op_len = min(sg_src_len, sg_dst_len); } else { @@ -365,7 +380,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst, /* Enough data in the sg element, but we need to * adjust for any previously copied data */ - op->src.u.dma.address = sg_dma_address(src->sg_wa.sg); + op->src.u.dma.address = sg_dma_address(src->sg_wa.dma_sg); op->src.u.dma.offset = src->sg_wa.sg_used; op->src.u.dma.length = op_len & ~(block_size - 1); @@ -386,7 +401,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst, /* Enough room in the sg element, but we need to * adjust for any previously used area */ - op->dst.u.dma.address = sg_dma_address(dst->sg_wa.sg); + op->dst.u.dma.address = sg_dma_address(dst->sg_wa.dma_sg); op->dst.u.dma.offset = dst->sg_wa.sg_used; op->dst.u.dma.length = op->src.u.dma.length; } @@ -2028,7 +2043,7 @@ ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) dst.sg_wa.sg_used = 0; for (i = 1; i <= src.sg_wa.dma_count; i++) { if (!dst.sg_wa.sg || - (dst.sg_wa.sg->length < src.sg_wa.sg->length)) { + (sg_dma_len(dst.sg_wa.sg) < sg_dma_len(src.sg_wa.sg))) { ret = -EINVAL; goto e_dst; } @@ -2054,8 +2069,8 @@ ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) goto e_dst; } - dst.sg_wa.sg_used += src.sg_wa.sg->length; - if (dst.sg_wa.sg_used == dst.sg_wa.sg->length) { + dst.sg_wa.sg_used += sg_dma_len(src.sg_wa.sg); + if (dst.sg_wa.sg_used == sg_dma_len(dst.sg_wa.sg)) { dst.sg_wa.sg = sg_next(dst.sg_wa.sg); dst.sg_wa.sg_used = 0; } From 3e95a74f4c27c02df11c983e94e1e227229b60ba Mon Sep 17 00:00:00 2001 From: Mikulas Patocka Date: Wed, 17 Jun 2020 09:48:56 -0400 Subject: [PATCH 261/448] crypto: cpt - don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified commit 9e27c99104707f083dccd3b4d79762859b5a0614 upstream. There is this call chain: cvm_encrypt -> cvm_enc_dec -> cptvf_do_request -> process_request -> kzalloc where we call sleeping allocator function even if CRYPTO_TFM_REQ_MAY_SLEEP was not specified. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org # v4.11+ Fixes: c694b233295b ("crypto: cavium - Add the Virtual Function driver for CPT") Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/cavium/cpt/cptvf_algs.c | 1 + drivers/crypto/cavium/cpt/cptvf_reqmanager.c | 12 ++++++------ drivers/crypto/cavium/cpt/request_manager.h | 2 ++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/crypto/cavium/cpt/cptvf_algs.c b/drivers/crypto/cavium/cpt/cptvf_algs.c index 596ce28b957d..2410b23aa609 100644 --- a/drivers/crypto/cavium/cpt/cptvf_algs.c +++ b/drivers/crypto/cavium/cpt/cptvf_algs.c @@ -200,6 +200,7 @@ static inline int cvm_enc_dec(struct ablkcipher_request *req, u32 enc) int status; memset(req_info, 0, sizeof(struct cpt_request_info)); + req_info->may_sleep = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) != 0; memset(fctx, 0, sizeof(struct fc_context)); create_input_list(req, enc, enc_iv_len); create_output_list(req, enc_iv_len); diff --git a/drivers/crypto/cavium/cpt/cptvf_reqmanager.c b/drivers/crypto/cavium/cpt/cptvf_reqmanager.c index 7a24019356b5..e343249c8d05 100644 --- a/drivers/crypto/cavium/cpt/cptvf_reqmanager.c +++ b/drivers/crypto/cavium/cpt/cptvf_reqmanager.c @@ -133,7 +133,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf, /* Setup gather (input) components */ g_sz_bytes = ((req->incnt + 3) / 4) * sizeof(struct sglist_component); - info->gather_components = kzalloc(g_sz_bytes, GFP_KERNEL); + info->gather_components = kzalloc(g_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (!info->gather_components) { ret = -ENOMEM; goto scatter_gather_clean; @@ -150,7 +150,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf, /* Setup scatter (output) components */ s_sz_bytes = ((req->outcnt + 3) / 4) * sizeof(struct sglist_component); - info->scatter_components = kzalloc(s_sz_bytes, GFP_KERNEL); + info->scatter_components = kzalloc(s_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (!info->scatter_components) { ret = -ENOMEM; goto scatter_gather_clean; @@ -167,7 +167,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf, /* Create and initialize DPTR */ info->dlen = g_sz_bytes + s_sz_bytes + SG_LIST_HDR_SIZE; - info->in_buffer = kzalloc(info->dlen, GFP_KERNEL); + info->in_buffer = kzalloc(info->dlen, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (!info->in_buffer) { ret = -ENOMEM; goto scatter_gather_clean; @@ -195,7 +195,7 @@ static inline int setup_sgio_list(struct cpt_vf *cptvf, } /* Create and initialize RPTR */ - info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, GFP_KERNEL); + info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (!info->out_buffer) { ret = -ENOMEM; goto scatter_gather_clean; @@ -421,7 +421,7 @@ int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req) struct cpt_vq_command vq_cmd; union cpt_inst_s cptinst; - info = kzalloc(sizeof(*info), GFP_KERNEL); + info = kzalloc(sizeof(*info), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (unlikely(!info)) { dev_err(&pdev->dev, "Unable to allocate memory for info_buffer\n"); return -ENOMEM; @@ -443,7 +443,7 @@ int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req) * Get buffer for union cpt_res_s response * structure and its physical address */ - info->completion_addr = kzalloc(sizeof(union cpt_res_s), GFP_KERNEL); + info->completion_addr = kzalloc(sizeof(union cpt_res_s), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC); if (unlikely(!info->completion_addr)) { dev_err(&pdev->dev, "Unable to allocate memory for completion_addr\n"); ret = -ENOMEM; diff --git a/drivers/crypto/cavium/cpt/request_manager.h b/drivers/crypto/cavium/cpt/request_manager.h index 3514b082eca7..1e8dd9ebcc17 100644 --- a/drivers/crypto/cavium/cpt/request_manager.h +++ b/drivers/crypto/cavium/cpt/request_manager.h @@ -62,6 +62,8 @@ struct cpt_request_info { union ctrl_info ctrl; /* User control information */ struct cptvf_request req; /* Request Information (Core specific) */ + bool may_sleep; + struct buf_ptr in[MAX_BUF_CNT]; struct buf_ptr out[MAX_BUF_CNT]; From 5be9072b8121b578b1429a35d5b158d55583e043 Mon Sep 17 00:00:00 2001 From: Jakub Kicinski Date: Mon, 10 Aug 2020 11:21:11 -0700 Subject: [PATCH 262/448] bitfield.h: don't compile-time validate _val in FIELD_FIT commit 444da3f52407d74c9aa12187ac6b01f76ee47d62 upstream. When ur_load_imm_any() is inlined into jeq_imm(), it's possible for the compiler to deduce a case where _val can only have the value of -1 at compile time. Specifically, /* struct bpf_insn: _s32 imm */ u64 imm = insn->imm; /* sign extend */ if (imm >> 32) { /* non-zero only if insn->imm is negative */ /* inlined from ur_load_imm_any */ u32 __imm = imm >> 32; /* therefore, always 0xffffffff */ if (__builtin_constant_p(__imm) && __imm > 255) compiletime_assert_XXX() This can result in tripping a BUILD_BUG_ON() in __BF_FIELD_CHECK() that checks that a given value is representable in one byte (interpreted as unsigned). FIELD_FIT() should return true or false at runtime for whether a value can fit for not. Don't break the build over a value that's too large for the mask. We'd prefer to keep the inlining and compiler optimizations though we know this case will always return false. Cc: stable@vger.kernel.org Fixes: 1697599ee301a ("bitfield.h: add FIELD_FIT() helper") Link: https://lore.kernel.org/kernel-hardening/CAK7LNASvb0UDJ0U5wkYYRzTAdnEs64HjXpEUL7d=V0CXiAXcNw@mail.gmail.com/ Reported-by: Masahiro Yamada Debugged-by: Sami Tolvanen Signed-off-by: Jakub Kicinski Signed-off-by: Nick Desaulniers Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- include/linux/bitfield.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h index 4bbb5f1c8b5b..4c0224ff0a14 100644 --- a/include/linux/bitfield.h +++ b/include/linux/bitfield.h @@ -64,7 +64,7 @@ */ #define FIELD_FIT(_mask, _val) \ ({ \ - __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_FIT: "); \ + __BF_FIELD_CHECK(_mask, 0ULL, 0ULL, "FIELD_FIT: "); \ !((((typeof(_mask))_val) << __bf_shf(_mask)) & ~(_mask)); \ }) From a5305f119907ddcd5100b81264af43b930700c66 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:24 -0700 Subject: [PATCH 263/448] fs/minix: check return value of sb_getblk() commit da27e0a0e5f655f0d58d4e153c3182bb2b290f64 upstream. Patch series "fs/minix: fix syzbot bugs and set s_maxbytes". This series fixes all syzbot bugs in the minix filesystem: KASAN: null-ptr-deref Write in get_block KASAN: use-after-free Write in get_block KASAN: use-after-free Read in get_block WARNING in inc_nlink KMSAN: uninit-value in get_block WARNING in drop_nlink It also fixes the minix filesystem to set s_maxbytes correctly, so that userspace sees the correct behavior when exceeding the max file size. This patch (of 6): sb_getblk() can fail, so check its return value. This fixes a NULL pointer dereference. Originally from Qiujun Huang. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: syzbot+4a88b2b9dc280f47baf4@syzkaller.appspotmail.com Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Qiujun Huang Cc: Alexander Viro Cc: Link: http://lkml.kernel.org/r/20200628060846.682158-1-ebiggers@kernel.org Link: http://lkml.kernel.org/r/20200628060846.682158-2-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/minix/itree_common.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/minix/itree_common.c b/fs/minix/itree_common.c index 043c3fdbc8e7..446148792f41 100644 --- a/fs/minix/itree_common.c +++ b/fs/minix/itree_common.c @@ -75,6 +75,7 @@ static int alloc_branch(struct inode *inode, int n = 0; int i; int parent = minix_new_block(inode); + int err = -ENOSPC; branch[0].key = cpu_to_block(parent); if (parent) for (n = 1; n < num; n++) { @@ -85,6 +86,11 @@ static int alloc_branch(struct inode *inode, break; branch[n].key = cpu_to_block(nr); bh = sb_getblk(inode->i_sb, parent); + if (!bh) { + minix_free_block(inode, nr); + err = -ENOMEM; + break; + } lock_buffer(bh); memset(bh->b_data, 0, bh->b_size); branch[n].bh = bh; @@ -103,7 +109,7 @@ static int alloc_branch(struct inode *inode, bforget(branch[i].bh); for (i = 0; i < n; i++) minix_free_block(inode, block_to_cpu(branch[i].key)); - return -ENOSPC; + return err; } static inline int splice_branch(struct inode *inode, From 8c7e720a165baeaff3853d1cfe017f596381ae1d Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:27 -0700 Subject: [PATCH 264/448] fs/minix: don't allow getting deleted inodes commit facb03dddec04e4aac1bb2139accdceb04deb1f3 upstream. If an inode has no links, we need to mark it bad rather than allowing it to be accessed. This avoids WARNINGs in inc_nlink() and drop_nlink() when doing directory operations on a fuzzed filesystem. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: syzbot+a9ac3de1b5de5fb10efc@syzkaller.appspotmail.com Reported-by: syzbot+df958cf5688a96ad3287@syzkaller.appspotmail.com Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Alexander Viro Cc: Qiujun Huang Cc: Link: http://lkml.kernel.org/r/20200628060846.682158-3-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/minix/inode.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 7cb5fd38eb14..2bca95abe8f4 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -468,6 +468,13 @@ static struct inode *V1_minix_iget(struct inode *inode) iget_failed(inode); return ERR_PTR(-EIO); } + if (raw_inode->i_nlinks == 0) { + printk("MINIX-fs: deleted inode referenced: %lu\n", + inode->i_ino); + brelse(bh); + iget_failed(inode); + return ERR_PTR(-ESTALE); + } inode->i_mode = raw_inode->i_mode; i_uid_write(inode, raw_inode->i_uid); i_gid_write(inode, raw_inode->i_gid); @@ -501,6 +508,13 @@ static struct inode *V2_minix_iget(struct inode *inode) iget_failed(inode); return ERR_PTR(-EIO); } + if (raw_inode->i_nlinks == 0) { + printk("MINIX-fs: deleted inode referenced: %lu\n", + inode->i_ino); + brelse(bh); + iget_failed(inode); + return ERR_PTR(-ESTALE); + } inode->i_mode = raw_inode->i_mode; i_uid_write(inode, raw_inode->i_uid); i_gid_write(inode, raw_inode->i_gid); From db1f4c745a91c3988c57cefb125c7a01711de5e2 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:30 -0700 Subject: [PATCH 265/448] fs/minix: reject too-large maximum file size commit 270ef41094e9fa95273f288d7d785313ceab2ff3 upstream. If the minix filesystem tries to map a very large logical block number to its on-disk location, block_to_path() can return offsets that are too large, causing out-of-bounds memory accesses when accessing indirect index blocks. This should be prevented by the check against the maximum file size, but this doesn't work because the maximum file size is read directly from the on-disk superblock and isn't validated itself. Fix this by validating the maximum file size at mount time. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: syzbot+c7d9ec7a1a7272dd71b3@syzkaller.appspotmail.com Reported-by: syzbot+3b7b03a0c28948054fb5@syzkaller.appspotmail.com Reported-by: syzbot+6e056ee473568865f3e6@syzkaller.appspotmail.com Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Alexander Viro Cc: Qiujun Huang Cc: Link: http://lkml.kernel.org/r/20200628060846.682158-4-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/minix/inode.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 2bca95abe8f4..0dd929346f3f 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -150,6 +150,23 @@ static int minix_remount (struct super_block * sb, int * flags, char * data) return 0; } +static bool minix_check_superblock(struct minix_sb_info *sbi) +{ + if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0) + return false; + + /* + * s_max_size must not exceed the block mapping limitation. This check + * is only needed for V1 filesystems, since V2/V3 support an extra level + * of indirect blocks which places the limit well above U32_MAX. + */ + if (sbi->s_version == MINIX_V1 && + sbi->s_max_size > (7 + 512 + 512*512) * BLOCK_SIZE) + return false; + + return true; +} + static int minix_fill_super(struct super_block *s, void *data, int silent) { struct buffer_head *bh; @@ -228,11 +245,12 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) } else goto out_no_fs; + if (!minix_check_superblock(sbi)) + goto out_illegal_sb; + /* * Allocate the buffer map to keep the superblock small. */ - if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0) - goto out_illegal_sb; i = (sbi->s_imap_blocks + sbi->s_zmap_blocks) * sizeof(bh); map = kzalloc(i, GFP_KERNEL); if (!map) From ee4c180d93d0c33565c3edd32dbce7760084493b Mon Sep 17 00:00:00 2001 From: Roger Pau Monne Date: Mon, 27 Jul 2020 11:13:39 +0200 Subject: [PATCH 266/448] xen/balloon: fix accounting in alloc_xenballooned_pages error path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 1951fa33ec259abdf3497bfee7b63e7ddbb1a394 upstream. target_unpopulated is incremented with nr_pages at the start of the function, but the call to free_xenballooned_pages will only subtract pgno number of pages, and thus the rest need to be subtracted before returning or else accounting will be skewed. Signed-off-by: Roger Pau Monné Reviewed-by: Juergen Gross Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200727091342.52325-2-roger.pau@citrix.com Signed-off-by: Juergen Gross Signed-off-by: Greg Kroah-Hartman --- drivers/xen/balloon.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index bed90d612e48..d792fa972d96 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c @@ -632,6 +632,12 @@ int alloc_xenballooned_pages(int nr_pages, struct page **pages) out_undo: mutex_unlock(&balloon_mutex); free_xenballooned_pages(pgno, pages); + /* + * NB: free_xenballooned_pages will only subtract pgno pages, but since + * target_unpopulated is incremented with nr_pages at the start we need + * to remove the remaining ones also, or accounting will be screwed. + */ + balloon_stats.target_unpopulated -= nr_pages - pgno; return ret; } EXPORT_SYMBOL(alloc_xenballooned_pages); From 8e41ac0bfdfdd7b3dab56562077487bb397c1f02 Mon Sep 17 00:00:00 2001 From: Roger Pau Monne Date: Mon, 27 Jul 2020 11:13:40 +0200 Subject: [PATCH 267/448] xen/balloon: make the balloon wait interruptible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 88a479ff6ef8af7f07e11593d58befc644244ff7 upstream. So it can be killed, or else processes can get hung indefinitely waiting for balloon pages. Signed-off-by: Roger Pau Monné Reviewed-by: Juergen Gross Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200727091342.52325-3-roger.pau@citrix.com Signed-off-by: Juergen Gross Signed-off-by: Greg Kroah-Hartman --- drivers/xen/balloon.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index d792fa972d96..ebb05517b6aa 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c @@ -570,11 +570,13 @@ static int add_ballooned_pages(int nr_pages) if (xen_hotplug_unpopulated) { st = reserve_additional_memory(); if (st != BP_ECANCELED) { + int rc; + mutex_unlock(&balloon_mutex); - wait_event(balloon_wq, + rc = wait_event_interruptible(balloon_wq, !list_empty(&ballooned_pages)); mutex_lock(&balloon_mutex); - return 0; + return rc ? -ENOMEM : 0; } } From dccc66daeba50786fe2fcac1aa3540ac397b55b5 Mon Sep 17 00:00:00 2001 From: Oleksandr Andrushchenko Date: Thu, 13 Aug 2020 09:21:09 +0300 Subject: [PATCH 268/448] xen/gntdev: Fix dmabuf import with non-zero sgt offset commit 5fa4e6f1c2d8c9a4e47e1931b42893172d388f2b upstream. It is possible that the scatter-gather table during dmabuf import has non-zero offset of the data, but user-space doesn't expect that. Fix this by failing the import, so user-space doesn't access wrong data. Fixes: bf8dc55b1358 ("xen/gntdev: Implement dma-buf import functionality") Signed-off-by: Oleksandr Andrushchenko Acked-by: Juergen Gross Cc: Link: https://lore.kernel.org/r/20200813062113.11030-2-andr2000@gmail.com Signed-off-by: Juergen Gross Signed-off-by: Greg Kroah-Hartman --- drivers/xen/gntdev-dmabuf.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/xen/gntdev-dmabuf.c b/drivers/xen/gntdev-dmabuf.c index 2c4f324f8626..da799929087d 100644 --- a/drivers/xen/gntdev-dmabuf.c +++ b/drivers/xen/gntdev-dmabuf.c @@ -641,6 +641,14 @@ dmabuf_imp_to_refs(struct gntdev_dmabuf_priv *priv, struct device *dev, goto fail_detach; } + /* Check that we have zero offset. */ + if (sgt->sgl->offset) { + ret = ERR_PTR(-EINVAL); + pr_debug("DMA buffer has %d bytes offset, user-space expects 0\n", + sgt->sgl->offset); + goto fail_unmap; + } + /* Check number of pages that imported buffer has. */ if (attach->dmabuf->size != gntdev_dmabuf->nr_pages << PAGE_SHIFT) { ret = ERR_PTR(-EINVAL); From 756a70b6dcc3b804782f30856408777f91766e10 Mon Sep 17 00:00:00 2001 From: Stefan Haberland Date: Tue, 14 Jul 2020 22:03:26 +0200 Subject: [PATCH 269/448] s390/dasd: fix inability to use DASD with DIAG driver commit 9f4aa52387c68049403b59939df5c0dd8e3872cc upstream. During initialization of the DASD DIAG driver a request is issued that has a bio structure that resides on the stack. With virtually mapped kernel stacks this bio address might be in virtual storage which is unsuitable for usage with the diag250 call. In this case the device can not be set online using the DIAG discipline and fails with -EOPNOTSUP. In the system journal the following error message is presented: dasd: X.X.XXXX Setting the DASD online with discipline DIAG failed with rc=-95 Fix by allocating the bio structure instead of having it on the stack. Fixes: ce3dc447493f ("s390: add support for virtually mapped kernel stacks") Signed-off-by: Stefan Haberland Reviewed-by: Peter Oberparleiter Cc: stable@vger.kernel.org #4.20 Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- drivers/s390/block/dasd_diag.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 8d4971645cf1..f7ae03fd36cb 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c @@ -319,7 +319,7 @@ dasd_diag_check_device(struct dasd_device *device) struct dasd_diag_characteristics *rdc_data; struct vtoc_cms_label *label; struct dasd_block *block; - struct dasd_diag_bio bio; + struct dasd_diag_bio *bio; unsigned int sb, bsize; blocknum_t end_block; int rc; @@ -395,29 +395,36 @@ dasd_diag_check_device(struct dasd_device *device) rc = -ENOMEM; goto out; } + bio = kzalloc(sizeof(*bio), GFP_KERNEL); + if (bio == NULL) { + DBF_DEV_EVENT(DBF_WARNING, device, "%s", + "No memory to allocate initialization bio"); + rc = -ENOMEM; + goto out_label; + } rc = 0; end_block = 0; /* try all sizes - needed for ECKD devices */ for (bsize = 512; bsize <= PAGE_SIZE; bsize <<= 1) { mdsk_init_io(device, bsize, 0, &end_block); - memset(&bio, 0, sizeof (struct dasd_diag_bio)); - bio.type = MDSK_READ_REQ; - bio.block_number = private->pt_block + 1; - bio.buffer = label; + memset(bio, 0, sizeof(*bio)); + bio->type = MDSK_READ_REQ; + bio->block_number = private->pt_block + 1; + bio->buffer = label; memset(&private->iob, 0, sizeof (struct dasd_diag_rw_io)); private->iob.dev_nr = rdc_data->dev_nr; private->iob.key = 0; private->iob.flags = 0; /* do synchronous io */ private->iob.block_count = 1; private->iob.interrupt_params = 0; - private->iob.bio_list = &bio; + private->iob.bio_list = bio; private->iob.flaga = DASD_DIAG_FLAGA_DEFAULT; rc = dia250(&private->iob, RW_BIO); if (rc == 3) { pr_warn("%s: A 64-bit DIAG call failed\n", dev_name(&device->cdev->dev)); rc = -EOPNOTSUPP; - goto out_label; + goto out_bio; } mdsk_term_io(device); if (rc == 0) @@ -427,7 +434,7 @@ dasd_diag_check_device(struct dasd_device *device) pr_warn("%s: Accessing the DASD failed because of an incorrect format (rc=%d)\n", dev_name(&device->cdev->dev), rc); rc = -EIO; - goto out_label; + goto out_bio; } /* check for label block */ if (memcmp(label->label_id, DASD_DIAG_CMS1, @@ -457,6 +464,8 @@ dasd_diag_check_device(struct dasd_device *device) (rc == 4) ? ", read-only device" : ""); rc = 0; } +out_bio: + kfree(bio); out_label: free_page((long) label); out: From 4db28111b2a30c8c4cdecceafd267283fdbb8aae Mon Sep 17 00:00:00 2001 From: Gerald Schaefer Date: Wed, 29 Jul 2020 22:22:34 +0200 Subject: [PATCH 270/448] s390/gmap: improve THP splitting commit ba925fa35057a062ac98c3e8138b013ce4ce351c upstream. During s390_enable_sie(), we need to take care of splitting all qemu user process THP mappings. This is currently done with follow_page(FOLL_SPLIT), by simply iterating over all vma ranges, with PAGE_SIZE increment. This logic is sub-optimal and can result in a lot of unnecessary overhead, especially when using qemu and ASAN with large shadow map. Ilya reported significant system slow-down with one CPU busy for a long time and overall unresponsiveness. Fix this by using walk_page_vma() and directly calling split_huge_pmd() only for present pmds, which greatly reduces overhead. Cc: # v5.4+ Reported-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Acked-by: Christian Borntraeger Signed-off-by: Gerald Schaefer Signed-off-by: Heiko Carstens Signed-off-by: Greg Kroah-Hartman --- arch/s390/mm/gmap.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c index 364e3a89c096..4fa7a562c6fc 100644 --- a/arch/s390/mm/gmap.c +++ b/arch/s390/mm/gmap.c @@ -2485,23 +2485,36 @@ void gmap_sync_dirty_log_pmd(struct gmap *gmap, unsigned long bitmap[4], } EXPORT_SYMBOL_GPL(gmap_sync_dirty_log_pmd); +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +static int thp_split_walk_pmd_entry(pmd_t *pmd, unsigned long addr, + unsigned long end, struct mm_walk *walk) +{ + struct vm_area_struct *vma = walk->vma; + + split_huge_pmd(vma, pmd, addr); + return 0; +} + +static const struct mm_walk_ops thp_split_walk_ops = { + .pmd_entry = thp_split_walk_pmd_entry, +}; + static inline void thp_split_mm(struct mm_struct *mm) { -#ifdef CONFIG_TRANSPARENT_HUGEPAGE struct vm_area_struct *vma; - unsigned long addr; for (vma = mm->mmap; vma != NULL; vma = vma->vm_next) { - for (addr = vma->vm_start; - addr < vma->vm_end; - addr += PAGE_SIZE) - follow_page(vma, addr, FOLL_SPLIT); vma->vm_flags &= ~VM_HUGEPAGE; vma->vm_flags |= VM_NOHUGEPAGE; + walk_page_vma(vma, &thp_split_walk_ops, NULL); } mm->def_flags |= VM_NOHUGEPAGE; -#endif } +#else +static inline void thp_split_mm(struct mm_struct *mm) +{ +} +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ /* * Remove all empty zero pages from the mapping for lazy refaulting From 5de0b5247cba3012cdb6bae3c5a647ab012390fe Mon Sep 17 00:00:00 2001 From: Guoyu Huang Date: Wed, 5 Aug 2020 03:53:50 -0700 Subject: [PATCH 271/448] io_uring: Fix NULL pointer dereference in loop_rw_iter() commit 2dd2111d0d383df104b144e0d1f6b5a00cb7cd88 upstream. loop_rw_iter() does not check whether the file has a read or write function. This can lead to NULL pointer dereference when the user passes in a file descriptor that does not have read or write function. The crash log looks like this: [ 99.834071] BUG: kernel NULL pointer dereference, address: 0000000000000000 [ 99.835364] #PF: supervisor instruction fetch in kernel mode [ 99.836522] #PF: error_code(0x0010) - not-present page [ 99.837771] PGD 8000000079d62067 P4D 8000000079d62067 PUD 79d8c067 PMD 0 [ 99.839649] Oops: 0010 [#2] SMP PTI [ 99.840591] CPU: 1 PID: 333 Comm: io_wqe_worker-0 Tainted: G D 5.8.0 #2 [ 99.842622] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1 04/01/2014 [ 99.845140] RIP: 0010:0x0 [ 99.845840] Code: Bad RIP value. [ 99.846672] RSP: 0018:ffffa1c7c01ebc08 EFLAGS: 00010202 [ 99.848018] RAX: 0000000000000000 RBX: ffff92363bd67300 RCX: ffff92363d461208 [ 99.849854] RDX: 0000000000000010 RSI: 00007ffdbf696bb0 RDI: ffff92363bd67300 [ 99.851743] RBP: ffffa1c7c01ebc40 R08: 0000000000000000 R09: 0000000000000000 [ 99.853394] R10: ffffffff9ec692a0 R11: 0000000000000000 R12: 0000000000000010 [ 99.855148] R13: 0000000000000000 R14: ffff92363d461208 R15: ffffa1c7c01ebc68 [ 99.856914] FS: 0000000000000000(0000) GS:ffff92363dd00000(0000) knlGS:0000000000000000 [ 99.858651] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 99.860032] CR2: ffffffffffffffd6 CR3: 000000007ac66000 CR4: 00000000000006e0 [ 99.861979] Call Trace: [ 99.862617] loop_rw_iter.part.0+0xad/0x110 [ 99.863838] io_write+0x2ae/0x380 [ 99.864644] ? kvm_sched_clock_read+0x11/0x20 [ 99.865595] ? sched_clock+0x9/0x10 [ 99.866453] ? sched_clock_cpu+0x11/0xb0 [ 99.867326] ? newidle_balance+0x1d4/0x3c0 [ 99.868283] io_issue_sqe+0xd8f/0x1340 [ 99.869216] ? __switch_to+0x7f/0x450 [ 99.870280] ? __switch_to_asm+0x42/0x70 [ 99.871254] ? __switch_to_asm+0x36/0x70 [ 99.872133] ? lock_timer_base+0x72/0xa0 [ 99.873155] ? switch_mm_irqs_off+0x1bf/0x420 [ 99.874152] io_wq_submit_work+0x64/0x180 [ 99.875192] ? kthread_use_mm+0x71/0x100 [ 99.876132] io_worker_handle_work+0x267/0x440 [ 99.877233] io_wqe_worker+0x297/0x350 [ 99.878145] kthread+0x112/0x150 [ 99.878849] ? __io_worker_unuse+0x100/0x100 [ 99.879935] ? kthread_park+0x90/0x90 [ 99.880874] ret_from_fork+0x22/0x30 [ 99.881679] Modules linked in: [ 99.882493] CR2: 0000000000000000 [ 99.883324] ---[ end trace 4453745f4673190b ]--- [ 99.884289] RIP: 0010:0x0 [ 99.884837] Code: Bad RIP value. [ 99.885492] RSP: 0018:ffffa1c7c01ebc08 EFLAGS: 00010202 [ 99.886851] RAX: 0000000000000000 RBX: ffff92363acd7f00 RCX: ffff92363d461608 [ 99.888561] RDX: 0000000000000010 RSI: 00007ffe040d9e10 RDI: ffff92363acd7f00 [ 99.890203] RBP: ffffa1c7c01ebc40 R08: 0000000000000000 R09: 0000000000000000 [ 99.891907] R10: ffffffff9ec692a0 R11: 0000000000000000 R12: 0000000000000010 [ 99.894106] R13: 0000000000000000 R14: ffff92363d461608 R15: ffffa1c7c01ebc68 [ 99.896079] FS: 0000000000000000(0000) GS:ffff92363dd00000(0000) knlGS:0000000000000000 [ 99.898017] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 99.899197] CR2: ffffffffffffffd6 CR3: 000000007ac66000 CR4: 00000000000006e0 Fixes: 32960613b7c3 ("io_uring: correctly handle non ->{read,write}_iter() file_operations") Cc: stable@vger.kernel.org Signed-off-by: Guoyu Huang Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- fs/io_uring.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index dc3bb06efdd6..fada14ee1cdc 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1433,8 +1433,10 @@ static int io_read(struct io_kiocb *req, const struct sqe_submit *s, if (file->f_op->read_iter) ret2 = call_read_iter(file, kiocb, &iter); - else + else if (req->file->f_op->read) ret2 = loop_rw_iter(READ, file, kiocb, &iter); + else + ret2 = -EINVAL; /* * In case of a short read, punt to async. This can happen @@ -1524,8 +1526,10 @@ static int io_write(struct io_kiocb *req, const struct sqe_submit *s, if (file->f_op->write_iter) ret2 = call_write_iter(file, kiocb, &iter); - else + else if (req->file->f_op->write) ret2 = loop_rw_iter(WRITE, file, kiocb, &iter); + else + ret2 = -EINVAL; if (!force_nonblock) current->signal->rlim[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY; From f61e1c3638dddaa1a1f3bb59d2bc288d9f0f1b5b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 19 Aug 2020 08:16:29 +0200 Subject: [PATCH 272/448] Linux 5.4.59 Tested-by: Shuah Khan Signed-off-by: Greg Kroah-Hartman --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 29948bc4a0d2..cc72b8472f24 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 58 +SUBLEVEL = 59 EXTRAVERSION = NAME = Kleptomaniac Octopus From cc1489511096e0ebdb17d16f1e7299bf68734a8e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 19 Aug 2020 11:02:55 +0200 Subject: [PATCH 273/448] Revert "ALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109" This reverts commit 10de419977bfbe9f99d1c8a3cef7cbf4660d7d84 which is commit 1b7ecc241a67ad6b584e071bd791a54e0cd5f097 upstream. It breaks the abi for the android11-5.4 branch, and isn't needed in android devices, so just revert it. Signed-off-by: Greg Kroah-Hartman Change-Id: I081472f3c3663edaa0c1275fe5e1303833bd533c --- sound/usb/card.h | 1 - sound/usb/pcm.c | 6 ------ sound/usb/quirks.c | 3 --- sound/usb/stream.c | 1 - 4 files changed, 11 deletions(-) diff --git a/sound/usb/card.h b/sound/usb/card.h index e52f6191f7b0..e1fa9d1ed148 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -140,7 +140,6 @@ struct snd_usb_substream { unsigned int tx_length_quirk:1; /* add length specifier to transfers */ unsigned int fmt_type; /* USB audio format type (1-3) */ unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */ - unsigned int stream_offset_adj; /* Bytes to drop from beginning of stream (for non-compliant devices) */ unsigned int running: 1; /* running status */ diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 38f4735c4ee0..c485b3b8c968 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -1585,12 +1585,6 @@ static void retire_capture_urb(struct snd_usb_substream *subs, // continue; } bytes = urb->iso_frame_desc[i].actual_length; - if (subs->stream_offset_adj > 0) { - unsigned int adj = min(subs->stream_offset_adj, bytes); - cp += adj; - bytes -= adj; - subs->stream_offset_adj -= adj; - } frames = bytes / stride; if (!subs->txfr_quirk) bytes = frames * stride; diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index a756f50d9f07..a8bb953cc468 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1432,9 +1432,6 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ set_format_emu_quirk(subs, fmt); break; - case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */ - subs->stream_offset_adj = 2; - break; } } diff --git a/sound/usb/stream.c b/sound/usb/stream.c index db5e99d8061d..f40961c7c673 100644 --- a/sound/usb/stream.c +++ b/sound/usb/stream.c @@ -98,7 +98,6 @@ static void snd_usb_init_substream(struct snd_usb_stream *as, subs->tx_length_quirk = as->chip->tx_length_quirk; subs->speed = snd_usb_get_speed(subs->dev); subs->pkt_offset_adj = 0; - subs->stream_offset_adj = 0; snd_usb_set_pcm_ops(as->pcm, stream); From d88b2969cfa78608ad4563e5f4fa84497cc0ffa6 Mon Sep 17 00:00:00 2001 From: Bae Soukjin Date: Wed, 19 Aug 2020 08:30:51 +0900 Subject: [PATCH 274/448] ANDROID: vendor_hooks: Add vendor hook to the net android_vh_ptype_head: To add a debugging chain to ptype list android_vh_kfree_skb To sniff the dropped packet at kernel network Bug: 163716381 Signed-off-by: Bae Soukjin Change-Id: Ide80bf0a129da31a1824d4a33026ac42be327361 --- drivers/android/vendor_hooks.c | 3 +++ include/trace/hooks/net.h | 27 +++++++++++++++++++++++++++ net/core/dev.c | 7 +++++++ net/core/skbuff.c | 2 ++ net/ipv4/tcp_input.c | 2 ++ 5 files changed, 41 insertions(+) create mode 100644 include/trace/hooks/net.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index a62235c8e058..a901c1ea2434 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -9,6 +9,7 @@ #define CREATE_TRACE_POINTS #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -21,4 +22,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h new file mode 100644 index 000000000000..fee1e84fa61a --- /dev/null +++ b/include/trace/hooks/net.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM net +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_NET_VH_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_NET_VH_H +#include +#include + +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct packet_type; +struct list_head; +struct sk_buff; +DECLARE_HOOK(android_vh_ptype_head, + TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt), + TP_ARGS(pt, vendor_pt)); +DECLARE_HOOK(android_vh_kfree_skb, + TP_PROTO(struct sk_buff *skb), TP_ARGS(skb)); +#else +#define trace_android_vh_ptype_head(pt, vendor_pt) +#define trace_android_vh_kfree_skb(skb) +#endif +#endif /* _TRACE_HOOK_NET_VH_H */ +/* This part must be outside protection */ +#include diff --git a/net/core/dev.c b/net/core/dev.c index 25858f1f67cf..724ae5d84fe3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -143,6 +143,7 @@ #include #include #include +#include #include "net-sysfs.h" @@ -302,6 +303,12 @@ EXPORT_PER_CPU_SYMBOL(softnet_data); static inline struct list_head *ptype_head(const struct packet_type *pt) { + struct list_head vendor_pt = { .next = NULL, }; + + trace_android_vh_ptype_head(pt, &vendor_pt); + if (vendor_pt.next) + return vendor_pt.next; + if (pt->type == htons(ETH_P_ALL)) return pt->dev ? &pt->dev->ptype_all : &ptype_all; else diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 973a71f4bc89..126be82a84f7 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -75,6 +75,7 @@ #include #include #include +#include #include "datagram.h" @@ -693,6 +694,7 @@ void kfree_skb(struct sk_buff *skb) if (!skb_unref(skb)) return; + trace_android_vh_kfree_skb(skb); trace_kfree_skb(skb, __builtin_return_address(0)); __kfree_skb(skb); } diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index ab5358281000..ea036bd2244c 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -79,6 +79,7 @@ #include #include #include +#include int sysctl_tcp_max_orphans __read_mostly = NR_FILE; @@ -4481,6 +4482,7 @@ static bool tcp_ooo_try_coalesce(struct sock *sk, static void tcp_drop(struct sock *sk, struct sk_buff *skb) { + trace_android_vh_kfree_skb(skb); sk_drops_add(sk, skb); __kfree_skb(skb); } From f58c4d2771e1749a01b2d335acbc798af52b34f9 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Wed, 19 Aug 2020 08:53:00 -0700 Subject: [PATCH 275/448] ANDROID: kbuild: don't preprocess module-lto.lds __cfi_check needs to be aligned to 4k, not necessarily PAGE_SIZE. Furthermore, using arch-specific includes currently breaks `make scripts`. Bug: 165591024 Change-Id: Id80fce84d4c111374718d8d84e7c06812a5d4e4b Signed-off-by: Sami Tolvanen --- Makefile | 2 +- scripts/Makefile | 2 -- scripts/{module-lto.lds.S => module-lto.lds} | 6 ++---- 3 files changed, 3 insertions(+), 7 deletions(-) rename scripts/{module-lto.lds.S => module-lto.lds} (86%) diff --git a/Makefile b/Makefile index 2e38697e511c..54103345823e 100644 --- a/Makefile +++ b/Makefile @@ -873,7 +873,7 @@ LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5 KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG) KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG) -KBUILD_LDS_MODULE += scripts/module-lto.lds +KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds endif ifdef CONFIG_LTO diff --git a/scripts/Makefile b/scripts/Makefile index 543603e3a789..3e86b300f5a1 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -31,8 +31,6 @@ always := $(hostprogs-y) $(hostprogs-m) # The following hostprogs-y programs are only build on demand hostprogs-y += unifdef -extra-$(CONFIG_LTO_CLANG) += module-lto.lds - subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-$(CONFIG_SECURITY_SELINUX) += selinux diff --git a/scripts/module-lto.lds.S b/scripts/module-lto.lds similarity index 86% rename from scripts/module-lto.lds.S rename to scripts/module-lto.lds index a89f0c57b36f..38cd6cf87ef1 100644 --- a/scripts/module-lto.lds.S +++ b/scripts/module-lto.lds @@ -1,6 +1,4 @@ /* SPDX-License-Identifier: GPL-2.0 */ -#include - /* * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and * -ffunction-sections, which increases the size of the final module. @@ -32,9 +30,9 @@ SECTIONS { /* * With CFI_CLANG, ensure __cfi_check is at the beginning of the - * .text section, and that the section is aligned to page size. + * .text section, and that the section is aligned to 4k. */ - .text : ALIGN(PAGE_SIZE) { + .text : ALIGN(4096) { *(.text.__cfi_check) *(.text .text.[0-9a-zA-Z_]* .text..L.cfi*) } From 42ff9205b9bc2573bb02eb00ba8846a2a8403b3a Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:47 -0700 Subject: [PATCH 276/448] FROMGIT: scsi: ufs: Add checks before setting clk-gating states Clock gating can be turned on/off selectively which means the associated state information is only correct if the feature is enabled. This change makes sure that we only look at state of clk-gating if it is enabled. Link: https://lore.kernel.org/r/1596975355-39813-2-git-send-email-cang@codeaurora.org Reviewed-by: Avri Altman Reviewed-by: Hongwu Su Reviewed-by: Stanley Chu Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 2dec9475a4028ba0a4ede51452f89dead2c008e1 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: Ie1f582658d27935891236cad3fb23c018240a15b Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index b6459297f55c..23e3ca1536d7 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1897,6 +1897,8 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) if (!ufshcd_is_clkgating_allowed(hba)) return; + hba->clk_gating.state = CLKS_ON; + hba->clk_gating.delay_ms = 150; INIT_DELAYED_WORK(&hba->clk_gating.gate_work, ufshcd_gate_work); INIT_WORK(&hba->clk_gating.ungate_work, ufshcd_ungate_work); @@ -2589,7 +2591,8 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) clear_bit_unlock(tag, &hba->lrb_in_use); goto out; } - WARN_ON(hba->clk_gating.state != CLKS_ON); + WARN_ON(ufshcd_is_clkgating_allowed(hba) && + (hba->clk_gating.state != CLKS_ON)); lrbp = &hba->lrb[tag]; @@ -8521,8 +8524,11 @@ disable_clks: /* If link is active, device ref_clk can't be switched off */ __ufshcd_setup_clocks(hba, false, true); - hba->clk_gating.state = CLKS_OFF; - trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); + if (ufshcd_is_clkgating_allowed(hba)) { + hba->clk_gating.state = CLKS_OFF; + trace_ufshcd_clk_gating(dev_name(hba->dev), + hba->clk_gating.state); + } /* Put the host controller in low power mode if possible */ ufshcd_hba_vreg_set_lpm(hba); @@ -8672,6 +8678,11 @@ disable_irq_and_vops_clks: if (hba->clk_scaling.is_allowed) ufshcd_suspend_clkscaling(hba); ufshcd_setup_clocks(hba, false); + if (ufshcd_is_clkgating_allowed(hba)) { + hba->clk_gating.state = CLKS_OFF; + trace_ufshcd_clk_gating(dev_name(hba->dev), + hba->clk_gating.state); + } out: hba->pm_op_in_progress = 0; if (ret) From 96de04c7eb241b02dfbf1a9f1b7c06612b8351cf Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:48 -0700 Subject: [PATCH 277/448] FROMGIT: scsi: ufs: ufs-qcom: Fix race conditions caused by ufs_qcom_testbus_config() If ufs_qcom_dump_dbg_regs() calls ufs_qcom_testbus_config() from ufshcd_suspend/resume and/or clk gate/ungate context, pm_runtime_get_sync() and ufshcd_hold() will cause a race condition. Fix this by removing the unnecessary calls of pm_runtime_get_sync() and ufshcd_hold(). Link: https://lore.kernel.org/r/1596975355-39813-3-git-send-email-cang@codeaurora.org Reviewed-by: Hongwu Su Reviewed-by: Avri Altman Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 89dd87acd40a44de8ff3358138aedf8f73f4efc6 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I9d7316220df2631493ed385b5243e182458b1376 Signed-off-by: Can Guo --- drivers/scsi/ufs/ufs-qcom.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c index de75743abc78..42c024b74ca4 100644 --- a/drivers/scsi/ufs/ufs-qcom.c +++ b/drivers/scsi/ufs/ufs-qcom.c @@ -1622,9 +1622,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host) */ } mask <<= offset; - - pm_runtime_get_sync(host->hba->dev); - ufshcd_hold(host->hba, false); ufshcd_rmwl(host->hba, TEST_BUS_SEL, (u32)host->testbus.select_major << 19, REG_UFS_CFG1); @@ -1637,8 +1634,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host) * committed before returning. */ mb(); - ufshcd_release(host->hba); - pm_runtime_put_sync(host->hba->dev); return 0; } From 5174cff3417d70f073c4c727e7915ba0f584ceb2 Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:49 -0700 Subject: [PATCH 278/448] FROMGIT: scsi: ufs-qcom: Remove testbus dump in ufs_qcom_dump_dbg_regs Dumping testbus registers outputs a lot of information and can cause stability issues. Remove the dump code. Link: https://lore.kernel.org/r/1596975355-39813-4-git-send-email-cang@codeaurora.org Reviewed-by: Hongwu Su Reviewed-by: Avri Altman Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 423cc66b5152a309e99a3693d856157a5e4a8d39 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I8f7eee4381d15e686d716ab08d24e615df2d08b8 Signed-off-by: Can Guo --- drivers/scsi/ufs/ufs-qcom.c | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c index 42c024b74ca4..4cd5c0289ba0 100644 --- a/drivers/scsi/ufs/ufs-qcom.c +++ b/drivers/scsi/ufs/ufs-qcom.c @@ -1638,44 +1638,12 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host) return 0; } -static void ufs_qcom_testbus_read(struct ufs_hba *hba) -{ - ufshcd_dump_regs(hba, UFS_TEST_BUS, 4, "UFS_TEST_BUS "); -} - -static void ufs_qcom_print_unipro_testbus(struct ufs_hba *hba) -{ - struct ufs_qcom_host *host = ufshcd_get_variant(hba); - u32 *testbus = NULL; - int i, nminor = 256, testbus_len = nminor * sizeof(u32); - - testbus = kmalloc(testbus_len, GFP_KERNEL); - if (!testbus) - return; - - host->testbus.select_major = TSTBUS_UNIPRO; - for (i = 0; i < nminor; i++) { - host->testbus.select_minor = i; - ufs_qcom_testbus_config(host); - testbus[i] = ufshcd_readl(hba, UFS_TEST_BUS); - } - print_hex_dump(KERN_ERR, "UNIPRO_TEST_BUS ", DUMP_PREFIX_OFFSET, - 16, 4, testbus, testbus_len, false); - kfree(testbus); -} - static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba) { ufshcd_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16 * 4, "HCI Vendor Specific Registers "); - /* sleep a bit intermittently as we are dumping too much data */ ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper); - udelay(1000); - ufs_qcom_testbus_read(hba); - udelay(1000); - ufs_qcom_print_unipro_testbus(hba); - udelay(1000); } /** From e6a9744bfe87fa6088f33672a3298049d154b58f Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:50 -0700 Subject: [PATCH 279/448] BACKPORT: FROMGIT: scsi: ufs: Add some debug information to ufshcd_print_host_state() Information about the last interrupt status and timestamp is helpful when debugging system stability issues (IRQ starvation, for instance). Add this information to ufshcd_print_host_state() output. In addition, UFS device information such as model name and firmware version also comes in handy during debugging. This is printed as well. Link: https://lore.kernel.org/r/1596975355-39813-5-git-send-email-cang@codeaurora.org Reviewed-by: Avri Altman Reviewed-by: Hongwu Su Reviewed-by: Asutosh Das Reviewed-by: Stanley Chu Reviewed-by: Bean Huo Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 3f8af6044713fab0aeb884e1be6bcc2cb276725e https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I6b8ec998a0563252786f1baf2e6bc962659118a8 [can: Resolved minor conflict in ufshcd.c] Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 31 ++++++++++++++++++------------- drivers/scsi/ufs/ufshcd.h | 5 +++++ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 23e3ca1536d7..61a7bcd00840 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -444,15 +444,6 @@ static void ufshcd_print_err_hist(struct ufs_hba *hba, static void ufshcd_print_host_regs(struct ufs_hba *hba) { ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: "); - dev_err(hba->dev, "hba->ufs_version = 0x%x, hba->capabilities = 0x%x\n", - hba->ufs_version, hba->capabilities); - dev_err(hba->dev, - "hba->outstanding_reqs = 0x%x, hba->outstanding_tasks = 0x%x\n", - (u32)hba->outstanding_reqs, (u32)hba->outstanding_tasks); - dev_err(hba->dev, - "last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt = %d\n", - ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp), - hba->ufs_stats.hibern8_exit_cnt); ufshcd_print_err_hist(hba, &hba->ufs_stats.pa_err, "pa_err"); ufshcd_print_err_hist(hba, &hba->ufs_stats.dl_err, "dl_err"); @@ -471,8 +462,6 @@ static void ufshcd_print_host_regs(struct ufs_hba *hba) ufshcd_print_err_hist(hba, &hba->ufs_stats.host_reset, "host_reset"); ufshcd_print_err_hist(hba, &hba->ufs_stats.task_abort, "task_abort"); - ufshcd_print_clk_freqs(hba); - ufshcd_vops_dbg_register_dump(hba); ufshcd_crypto_debug(hba); @@ -537,6 +526,8 @@ static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap) static void ufshcd_print_host_state(struct ufs_hba *hba) { + struct scsi_device *sdev_ufs = hba->sdev_ufs_device; + dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state); dev_err(hba->dev, "lrb in use=0x%lx, outstanding reqs=0x%lx tasks=0x%lx\n", hba->lrb_in_use, hba->outstanding_reqs, hba->outstanding_tasks); @@ -549,12 +540,24 @@ static void ufshcd_print_host_state(struct ufs_hba *hba) dev_err(hba->dev, "Auto BKOPS=%d, Host self-block=%d\n", hba->auto_bkops_enabled, hba->host->host_self_blocked); dev_err(hba->dev, "Clk gate=%d\n", hba->clk_gating.state); + dev_err(hba->dev, + "last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt=%d\n", + ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp), + hba->ufs_stats.hibern8_exit_cnt); + dev_err(hba->dev, "last intr at %lld us, last intr status=0x%x\n", + ktime_to_us(hba->ufs_stats.last_intr_ts), + hba->ufs_stats.last_intr_status); dev_err(hba->dev, "error handling flags=0x%x, req. abort count=%d\n", hba->eh_flags, hba->req_abort_count); - dev_err(hba->dev, "Host capabilities=0x%x, caps=0x%x\n", - hba->capabilities, hba->caps); + dev_err(hba->dev, "hba->ufs_version=0x%x, Host capabilities=0x%x, caps=0x%x\n", + hba->ufs_version, hba->capabilities, hba->caps); dev_err(hba->dev, "quirks=0x%x, dev. quirks=0x%x\n", hba->quirks, hba->dev_quirks); + if (sdev_ufs) + dev_err(hba->dev, "UFS dev info: %.8s %.16s rev %.4s\n", + sdev_ufs->vendor, sdev_ufs->model, sdev_ufs->rev); + + ufshcd_print_clk_freqs(hba); } /** @@ -6126,6 +6129,8 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba) spin_lock(hba->host->host_lock); intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS); + hba->ufs_stats.last_intr_status = intr_status; + hba->ufs_stats.last_intr_ts = ktime_get(); /* * There could be max of hba->nutrs reqs in flight and in worst case diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 210c4d16a63b..9ca9c542675a 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -488,6 +488,8 @@ struct ufs_err_reg_hist { /** * struct ufs_stats - keeps usage/err statistics + * @last_intr_status: record the last interrupt status. + * @last_intr_ts: record the last interrupt timestamp. * @hibern8_exit_cnt: Counter to keep track of number of exits, * reset this after link-startup. * @last_hibern8_exit_tstamp: Set time after the hibern8 exit. @@ -507,6 +509,9 @@ struct ufs_err_reg_hist { * @tsk_abort: tracks task abort events */ struct ufs_stats { + u32 last_intr_status; + ktime_t last_intr_ts; + u32 hibern8_exit_cnt; ktime_t last_hibern8_exit_tstamp; From 2e0034f5e272492ac1fe33d780b1023fa31a0d66 Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:51 -0700 Subject: [PATCH 280/448] BACKPORT: FROMGIT: scsi: ufs: Fix concurrency of error handler and other error recovery paths Error recovery can be invoked from multiple code paths, including hibern8 enter/exit (from ufshcd_link_recovery), ufshcd_eh_host_reset_handler() and eh_work scheduled from IRQ context. Ultimately, these paths are all trying to invoke ufshcd_reset_and_restore() in either a synchronous or asynchronous manner. This causes problems: - If link recovery happens during ungate work, ufshcd_hold() would be called recursively. Although commit 53c12d0ef6fc ("scsi: ufs: fix error recovery after the hibern8 exit failure") fixed a deadlock due to recursive calls of ufshcd_hold() by adding a check of eh_in_progress into ufshcd_hold, this check allows eh_work to run in parallel while link recovery is running. - Similar concurrency can also happen when error recovery is invoked from ufshcd_eh_host_reset_handler and ufshcd_link_recovery. - Concurrency can even happen between eh_works. eh_work, currently queued on system_wq, is allowed to have multiple instances running in parallel, but we don't have proper protection for that. If any of above concurrency scenarios happen, error recovery would fail and lead ufs device and host into bad states. To fix the concurrency problem, this change queues eh_work on a single threaded workqueue and removes link recovery calls from the hibern8 enter/exit path. In addition, make use of eh_work in eh_host_reset_handler instead of calling ufshcd_reset_and_restore. This unifies the UFS error recovery mechanism. According to the UFSHCI JEDEC spec, hibern8 enter/exit error occurs when the link is broken. This essentially applies to any power mode change operations (since they all use PACP_PWR cmds in UniPro layer). So, if a power mode change operation (including AH8 enter/exit) fails, mark link state as UIC_LINK_BROKEN_STATE and schedule the eh_work. In this case, error handler needs to do a full reset and restore to recover the link back to active. Before the link state is recovered to active, ufshcd_uic_pwr_ctrl simply returns -ENOLINK to avoid more errors. Link: https://lore.kernel.org/r/1596975355-39813-6-git-send-email-cang@codeaurora.org Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 4db7a23605973ac4a2cb24e759bebaaa82054f21 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I9718d7752016682607fc6735402fad7c0059ed3a [can: Resolved minor conflict in ufshcd.c] Signed-off-by: Can Guo --- drivers/scsi/ufs/ufs-sysfs.c | 1 + drivers/scsi/ufs/ufshcd.c | 268 ++++++++++++++++++----------------- drivers/scsi/ufs/ufshcd.h | 9 ++ 3 files changed, 150 insertions(+), 128 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index a7cddc31f67d..443e9119743e 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -16,6 +16,7 @@ static const char *ufschd_uic_link_state_to_string( case UIC_LINK_OFF_STATE: return "OFF"; case UIC_LINK_ACTIVE_STATE: return "ACTIVE"; case UIC_LINK_HIBERN8_STATE: return "HIBERN8"; + case UIC_LINK_BROKEN_STATE: return "BROKEN"; default: return "UNKNOWN"; } } diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 61a7bcd00840..67829bb6bbd7 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -261,6 +261,7 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up); static irqreturn_t ufshcd_intr(int irq, void *__hba); static int ufshcd_change_power_mode(struct ufs_hba *hba, struct ufs_pa_layer_attr *pwr_mode); +static void ufshcd_schedule_eh_work(struct ufs_hba *hba); static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba); static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba); static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); @@ -1629,11 +1630,6 @@ int ufshcd_hold(struct ufs_hba *hba, bool async) spin_lock_irqsave(hba->host->host_lock, flags); hba->clk_gating.active_reqs++; - if (ufshcd_eh_in_progress(hba)) { - spin_unlock_irqrestore(hba->host->host_lock, flags); - return 0; - } - start: switch (hba->clk_gating.state) { case CLKS_ON: @@ -1711,6 +1707,7 @@ static void ufshcd_gate_work(struct work_struct *work) struct ufs_hba *hba = container_of(work, struct ufs_hba, clk_gating.gate_work.work); unsigned long flags; + int ret; spin_lock_irqsave(hba->host->host_lock, flags); /* @@ -1737,8 +1734,11 @@ static void ufshcd_gate_work(struct work_struct *work) /* put the link into hibern8 mode before turning off clocks */ if (ufshcd_can_hibern8_during_gating(hba)) { - if (ufshcd_uic_hibern8_enter(hba)) { + ret = ufshcd_uic_hibern8_enter(hba); + if (ret) { hba->clk_gating.state = CLKS_ON; + dev_err(hba->dev, "%s: hibern8 enter failed %d\n", + __func__, ret); trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); goto out; @@ -1783,11 +1783,10 @@ static void __ufshcd_release(struct ufs_hba *hba) hba->clk_gating.active_reqs--; - if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended - || hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL - || hba->lrb_in_use || hba->outstanding_tasks - || hba->active_uic_cmd || hba->uic_async_done - || ufshcd_eh_in_progress(hba)) + if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended || + hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL || + hba->lrb_in_use || hba->outstanding_tasks || + hba->active_uic_cmd || hba->uic_async_done) return; hba->clk_gating.state = REQ_CLKS_OFF; @@ -3935,6 +3934,10 @@ static int ufshcd_uic_pwr_ctrl(struct ufs_hba *hba, struct uic_command *cmd) ufshcd_add_delay_before_dme_cmd(hba); spin_lock_irqsave(hba->host->host_lock, flags); + if (ufshcd_is_link_broken(hba)) { + ret = -ENOLINK; + goto out_unlock; + } hba->uic_async_done = &uic_async_done; if (ufshcd_readl(hba, REG_INTERRUPT_ENABLE) & UIC_COMMAND_COMPL) { ufshcd_disable_intr(hba, UIC_COMMAND_COMPL); @@ -3982,6 +3985,11 @@ out: hba->uic_async_done = NULL; if (reenable_intr) ufshcd_enable_intr(hba, UIC_COMMAND_COMPL); + if (ret) { + ufshcd_set_link_broken(hba); + ufshcd_schedule_eh_work(hba); + } +out_unlock: spin_unlock_irqrestore(hba->host->host_lock, flags); mutex_unlock(&hba->uic_cmd_mutex); @@ -4051,7 +4059,7 @@ int ufshcd_link_recovery(struct ufs_hba *hba) } EXPORT_SYMBOL_GPL(ufshcd_link_recovery); -static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba) +int ufshcd_uic_hibern8_enter(struct ufs_hba *hba) { int ret; struct uic_command uic_cmd = {0}; @@ -4064,44 +4072,15 @@ static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba) trace_ufshcd_profile_hibern8(dev_name(hba->dev), "enter", ktime_to_us(ktime_sub(ktime_get(), start)), ret); - if (ret) { - int err; - + if (ret) dev_err(hba->dev, "%s: hibern8 enter failed. ret = %d\n", __func__, ret); - - /* - * If link recovery fails then return error code returned from - * ufshcd_link_recovery(). - * If link recovery succeeds then return -EAGAIN to attempt - * hibern8 enter retry again. - */ - err = ufshcd_link_recovery(hba); - if (err) { - dev_err(hba->dev, "%s: link recovery failed", __func__); - ret = err; - } else { - ret = -EAGAIN; - } - } else + else ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_ENTER, POST_CHANGE); return ret; } - -int ufshcd_uic_hibern8_enter(struct ufs_hba *hba) -{ - int ret = 0, retries; - - for (retries = UIC_HIBERN8_ENTER_RETRIES; retries > 0; retries--) { - ret = __ufshcd_uic_hibern8_enter(hba); - if (!ret) - goto out; - } -out: - return ret; -} EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter); int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) @@ -4120,7 +4099,6 @@ int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) if (ret) { dev_err(hba->dev, "%s: hibern8 exit failed. ret = %d\n", __func__, ret); - ret = ufshcd_link_recovery(hba); } else { ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_EXIT, POST_CHANGE); @@ -5751,6 +5729,24 @@ out: return err_handling; } +/* host lock must be held before calling this func */ +static inline bool ufshcd_is_saved_err_fatal(struct ufs_hba *hba) +{ + return (hba->saved_uic_err & UFSHCD_UIC_DL_PA_INIT_ERROR) || + (hba->saved_err & (INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK)); +} + +/* host lock must be held before calling this func */ +static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba) +{ + /* handle fatal errors only when link is not in error state */ + if (hba->ufshcd_state != UFSHCD_STATE_ERROR) { + hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED; + if (queue_work(hba->eh_wq, &hba->eh_work)) + ufshcd_scsi_block_requests(hba); + } +} + /** * ufshcd_err_handler - handle UFS errors that require s/w attention * @work: pointer to work structure @@ -5767,15 +5763,23 @@ static void ufshcd_err_handler(struct work_struct *work) hba = container_of(work, struct ufs_hba, eh_work); + spin_lock_irqsave(hba->host->host_lock, flags); + if (hba->ufshcd_state == UFSHCD_STATE_ERROR || + (!(hba->saved_err || hba->saved_uic_err || hba->force_reset || + ufshcd_is_link_broken(hba)))) { + if (hba->ufshcd_state != UFSHCD_STATE_ERROR) + hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + spin_unlock_irqrestore(hba->host->host_lock, flags); + ufshcd_scsi_unblock_requests(hba); + return; + } + ufshcd_set_eh_in_progress(hba); + spin_unlock_irqrestore(hba->host->host_lock, flags); pm_runtime_get_sync(hba->dev); ufshcd_hold(hba, false); spin_lock_irqsave(hba->host->host_lock, flags); - if (hba->ufshcd_state == UFSHCD_STATE_RESET) - goto out; - hba->ufshcd_state = UFSHCD_STATE_RESET; - ufshcd_set_eh_in_progress(hba); /* Complete requests that have door-bell cleared by h/w */ ufshcd_complete_requests(hba); @@ -5787,15 +5791,15 @@ static void ufshcd_err_handler(struct work_struct *work) /* release the lock as ufshcd_quirk_dl_nac_errors() may sleep */ ret = ufshcd_quirk_dl_nac_errors(hba); spin_lock_irqsave(hba->host->host_lock, flags); - if (!ret) + if (!ret && !hba->force_reset && ufshcd_is_link_active(hba)) goto skip_err_handling; } - if ((hba->saved_err & INT_FATAL_ERRORS) || - (hba->saved_err & UFSHCD_UIC_HIBERN8_MASK) || + + if (hba->force_reset || ufshcd_is_link_broken(hba) || + ufshcd_is_saved_err_fatal(hba) || ((hba->saved_err & UIC_ERROR) && - (hba->saved_uic_err & (UFSHCD_UIC_DL_PA_INIT_ERROR | - UFSHCD_UIC_DL_NAC_RECEIVED_ERROR | - UFSHCD_UIC_DL_TCx_REPLAY_ERROR)))) + (hba->saved_uic_err & (UFSHCD_UIC_DL_NAC_RECEIVED_ERROR | + UFSHCD_UIC_DL_TCx_REPLAY_ERROR)))) needs_reset = true; /* @@ -5849,34 +5853,25 @@ skip_pending_xfer_clear: __ufshcd_transfer_req_compl(hba, (1UL << (hba->nutrs - 1))); + hba->force_reset = false; spin_unlock_irqrestore(hba->host->host_lock, flags); err = ufshcd_reset_and_restore(hba); spin_lock_irqsave(hba->host->host_lock, flags); - if (err) { - dev_err(hba->dev, "%s: reset and restore failed\n", - __func__); - hba->ufshcd_state = UFSHCD_STATE_ERROR; - } - /* - * Inform scsi mid-layer that we did reset and allow to handle - * Unit Attention properly. - */ - scsi_report_bus_reset(hba->host, 0); - hba->saved_err = 0; - hba->saved_uic_err = 0; + if (err) + dev_err(hba->dev, "%s: reset and restore failed with err %d\n", + __func__, err); } skip_err_handling: if (!needs_reset) { - hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + if (hba->ufshcd_state == UFSHCD_STATE_RESET) + hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; if (hba->saved_err || hba->saved_uic_err) dev_err_ratelimited(hba->dev, "%s: exit: saved_err 0x%x saved_uic_err 0x%x", __func__, hba->saved_err, hba->saved_uic_err); } ufshcd_clear_eh_in_progress(hba); - -out: spin_unlock_irqrestore(hba->host->host_lock, flags); ufshcd_scsi_unblock_requests(hba); ufshcd_release(hba); @@ -6010,6 +6005,7 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba) hba->errors, ufshcd_get_upmcrs(hba)); ufshcd_update_reg_hist(&hba->ufs_stats.auto_hibern8_err, hba->errors); + ufshcd_set_link_broken(hba); queue_eh_work = true; } @@ -6021,30 +6017,22 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba) hba->saved_err |= hba->errors; hba->saved_uic_err |= hba->uic_error; - /* handle fatal errors only when link is functional */ - if (hba->ufshcd_state == UFSHCD_STATE_OPERATIONAL) { - /* block commands from scsi mid-layer */ - ufshcd_scsi_block_requests(hba); + /* dump controller state before resetting */ + if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) { + bool pr_prdt = !!(hba->saved_err & + SYSTEM_BUS_FATAL_ERROR); - hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED; - - /* dump controller state before resetting */ - if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) { - bool pr_prdt = !!(hba->saved_err & - SYSTEM_BUS_FATAL_ERROR); - - dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n", + dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n", __func__, hba->saved_err, hba->saved_uic_err); - ufshcd_print_host_regs(hba); - ufshcd_print_pwr_info(hba); - ufshcd_print_tmrs(hba, hba->outstanding_tasks); - ufshcd_print_trs(hba, hba->outstanding_reqs, - pr_prdt); - } - schedule_work(&hba->eh_work); + ufshcd_print_host_regs(hba); + ufshcd_print_pwr_info(hba); + ufshcd_print_tmrs(hba, hba->outstanding_tasks); + ufshcd_print_trs(hba, hba->outstanding_reqs, + pr_prdt); } + ufshcd_schedule_eh_work(hba); retval |= IRQ_HANDLED; } /* @@ -6753,8 +6741,6 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba) /* Establish the link again and restore the device */ err = ufshcd_probe_hba(hba, false); - if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)) - err = -EIO; out: if (err) dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err); @@ -6773,9 +6759,23 @@ out: */ static int ufshcd_reset_and_restore(struct ufs_hba *hba) { + u32 saved_err; + u32 saved_uic_err; int err = 0; + unsigned long flags; int retries = MAX_HOST_RESET_RETRIES; + /* + * This is a fresh start, cache and clear saved error first, + * in case new error generated during reset and restore. + */ + spin_lock_irqsave(hba->host->host_lock, flags); + saved_err = hba->saved_err; + saved_uic_err = hba->saved_uic_err; + hba->saved_err = 0; + hba->saved_uic_err = 0; + spin_unlock_irqrestore(hba->host->host_lock, flags); + do { /* Reset the attached device */ ufshcd_vops_device_reset(hba); @@ -6783,6 +6783,18 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba) err = ufshcd_host_reset_and_restore(hba); } while (err && --retries); + spin_lock_irqsave(hba->host->host_lock, flags); + /* + * Inform scsi mid-layer that we did reset and allow to handle + * Unit Attention properly. + */ + scsi_report_bus_reset(hba->host, 0); + if (err) { + hba->saved_err |= saved_err; + hba->saved_uic_err |= saved_uic_err; + } + spin_unlock_irqrestore(hba->host->host_lock, flags); + return err; } @@ -6794,48 +6806,25 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba) */ static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd) { - int err; + int err = SUCCESS; unsigned long flags; struct ufs_hba *hba; hba = shost_priv(cmd->device->host); - ufshcd_hold(hba, false); - /* - * Check if there is any race with fatal error handling. - * If so, wait for it to complete. Even though fatal error - * handling does reset and restore in some cases, don't assume - * anything out of it. We are just avoiding race here. - */ - do { - spin_lock_irqsave(hba->host->host_lock, flags); - if (!(work_pending(&hba->eh_work) || - hba->ufshcd_state == UFSHCD_STATE_RESET || - hba->ufshcd_state == UFSHCD_STATE_EH_SCHEDULED)) - break; - spin_unlock_irqrestore(hba->host->host_lock, flags); - dev_dbg(hba->dev, "%s: reset in progress\n", __func__); - flush_work(&hba->eh_work); - } while (1); - - hba->ufshcd_state = UFSHCD_STATE_RESET; - ufshcd_set_eh_in_progress(hba); + spin_lock_irqsave(hba->host->host_lock, flags); + hba->force_reset = true; + ufshcd_schedule_eh_work(hba); + dev_err(hba->dev, "%s: reset in progress - 1\n", __func__); spin_unlock_irqrestore(hba->host->host_lock, flags); - err = ufshcd_reset_and_restore(hba); + flush_work(&hba->eh_work); spin_lock_irqsave(hba->host->host_lock, flags); - if (!err) { - err = SUCCESS; - hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; - } else { + if (hba->ufshcd_state == UFSHCD_STATE_ERROR) err = FAILED; - hba->ufshcd_state = UFSHCD_STATE_ERROR; - } - ufshcd_clear_eh_in_progress(hba); spin_unlock_irqrestore(hba->host->host_lock, flags); - ufshcd_release(hba); return err; } @@ -7559,6 +7548,7 @@ out: static int ufshcd_probe_hba(struct ufs_hba *hba, bool async) { int ret; + unsigned long flags; ktime_t start = ktime_get(); ret = ufshcd_link_startup(hba); @@ -7627,14 +7617,17 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool async) */ ufshcd_set_active_icc_lvl(hba); - /* set the state as operational after switching to desired gear */ - hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; - ufshcd_wb_config(hba); /* Enable Auto-Hibernate if configured */ ufshcd_auto_hibern8_enable(hba); out: + spin_lock_irqsave(hba->host->host_lock, flags); + if (ret) + hba->ufshcd_state = UFSHCD_STATE_ERROR; + else if (hba->ufshcd_state == UFSHCD_STATE_RESET) + hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + spin_unlock_irqrestore(hba->host->host_lock, flags); trace_ufshcd_init(dev_name(hba->dev), ret, ktime_to_us(ktime_sub(ktime_get(), start)), @@ -8277,10 +8270,13 @@ static int ufshcd_link_state_transition(struct ufs_hba *hba, if (req_link_state == UIC_LINK_HIBERN8_STATE) { ret = ufshcd_uic_hibern8_enter(hba); - if (!ret) + if (!ret) { ufshcd_set_link_hibern8(hba); - else + } else { + dev_err(hba->dev, "%s: hibern8 enter failed %d\n", + __func__, ret); goto out; + } } /* * If autobkops is enabled, link can't be turned off because @@ -8297,8 +8293,11 @@ static int ufshcd_link_state_transition(struct ufs_hba *hba, * unipro. But putting the link in hibern8 is much faster. */ ret = ufshcd_uic_hibern8_enter(hba); - if (ret) + if (ret) { + dev_err(hba->dev, "%s: hibern8 enter failed %d\n", + __func__, ret); goto out; + } /* * Change controller state to "reset state" which * should also put the link in off/reset state @@ -8614,10 +8613,13 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (ufshcd_is_link_hibern8(hba)) { ret = ufshcd_uic_hibern8_exit(hba); - if (!ret) + if (!ret) { ufshcd_set_link_active(hba); - else + } else { + dev_err(hba->dev, "%s: hibern8 exit failed %d\n", + __func__, ret); goto vendor_suspend; + } } else if (ufshcd_is_link_off(hba)) { /* * A full initialization of the host and the device is required @@ -8983,6 +8985,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) int err; struct Scsi_Host *host = hba->host; struct device *dev = hba->dev; + char eh_wq_name[sizeof("ufs_eh_wq_00")]; if (!mmio_base) { dev_err(hba->dev, @@ -9046,6 +9049,15 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) init_waitqueue_head(&hba->tm_tag_wq); /* Initialize work queues */ + snprintf(eh_wq_name, sizeof(eh_wq_name), "ufs_eh_wq_%d", + hba->host->host_no); + hba->eh_wq = create_singlethread_workqueue(eh_wq_name); + if (!hba->eh_wq) { + dev_err(hba->dev, "%s: failed to create eh workqueue\n", + __func__); + err = -ENOMEM; + goto out_disable; + } INIT_WORK(&hba->eh_work, ufshcd_err_handler); INIT_WORK(&hba->eeh_work, ufshcd_exception_event_handler); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 9ca9c542675a..c5c51c5aa4f2 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -119,6 +119,7 @@ enum uic_link_state { UIC_LINK_OFF_STATE = 0, /* Link powered down or disabled */ UIC_LINK_ACTIVE_STATE = 1, /* Link is in Fast/Slow/Sleep state */ UIC_LINK_HIBERN8_STATE = 2, /* Link is in Hibernate state */ + UIC_LINK_BROKEN_STATE = 3, /* Link is in broken state */ }; #define ufshcd_is_link_off(hba) ((hba)->uic_link_state == UIC_LINK_OFF_STATE) @@ -126,11 +127,15 @@ enum uic_link_state { UIC_LINK_ACTIVE_STATE) #define ufshcd_is_link_hibern8(hba) ((hba)->uic_link_state == \ UIC_LINK_HIBERN8_STATE) +#define ufshcd_is_link_broken(hba) ((hba)->uic_link_state == \ + UIC_LINK_BROKEN_STATE) #define ufshcd_set_link_off(hba) ((hba)->uic_link_state = UIC_LINK_OFF_STATE) #define ufshcd_set_link_active(hba) ((hba)->uic_link_state = \ UIC_LINK_ACTIVE_STATE) #define ufshcd_set_link_hibern8(hba) ((hba)->uic_link_state = \ UIC_LINK_HIBERN8_STATE) +#define ufshcd_set_link_broken(hba) ((hba)->uic_link_state = \ + UIC_LINK_BROKEN_STATE) #define ufshcd_set_ufs_dev_active(h) \ ((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE) @@ -577,12 +582,14 @@ struct ufs_hba_variant_params { * @intr_mask: Interrupt Mask Bits * @ee_ctrl_mask: Exception event control mask * @is_powered: flag to check if HBA is powered + * @eh_wq: Workqueue that eh_work works on * @eh_work: Worker to handle UFS errors that require s/w attention * @eeh_work: Worker to handle exception events * @errors: HBA errors * @uic_error: UFS interconnect layer error status * @saved_err: sticky error mask * @saved_uic_err: sticky UIC error mask + * @force_reset: flag to force eh_work perform a full reset * @silence_err_logs: flag to silence error logs * @dev_cmd: ufs device management command information * @last_dme_cmd_tstamp: time stamp of the last completed DME command @@ -750,6 +757,7 @@ struct ufs_hba { bool is_powered; /* Work Queues */ + struct workqueue_struct *eh_wq; struct work_struct eh_work; struct work_struct eeh_work; @@ -759,6 +767,7 @@ struct ufs_hba { u32 saved_err; u32 saved_uic_err; struct ufs_stats ufs_stats; + bool force_reset; bool silence_err_logs; /* Device management request data */ From 45ab6948c23eda7e8594d857e96f678695c24994 Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:52 -0700 Subject: [PATCH 281/448] BACKPORT: FROMGIT: scsi: ufs: Recover HBA runtime PM error in error handler The current error handler can not recover HBA runtime PM error if ufshcd_suspend/resume has failed due to UFS errors, e.g. hibern8 enter/exit error or SSU cmd error. When this happens, error handler may fail performing a full reset and restore because error handler always assumes that power, IRQs and clocks are ready after pm_runtime_get_sync returns, but actually they are not if ufshcd_resume fails[1]. If ufschd_suspend/resume fails due to UFS errors, runtime PM framework saves the error value to dev.power.runtime_error. After that, HBA dev runtime suspend/resume would not be invoked anymore unless runtime_error is cleared[2]. In case of ufshcd_suspend/resume fails due to UFS errors, for scenario [1], error handler cannot assume anything of pm_runtime_get_sync, meaning error handler should explicitly turn ON powers, IRQs and clocks again. To get the HBA runtime PM work as regard for scenario [2], error handler can clear the runtime_error by calling pm_runtime_set_active() if full reset and restore succeeds. And, more important, if pm_runtime_set_active() returns no error, which means runtime_error has been cleared, we also need to resume those scsi devices under HBA in case any of them has failed to be resumed due to HBA runtime resume failure. This is to unblock blk_queue_enter in case there are bios waiting inside it. Link: https://lore.kernel.org/r/1596975355-39813-7-git-send-email-cang@codeaurora.org Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit c72e79c0ad2bd7efb1cf84f630f59daf9ba8c510 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I66e05ea58aa9af7f009f20e0791cd9bf76237fcd [can: Resolved minor conflict in ufshcd.c] Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 107 ++++++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 9 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 67829bb6bbd7..973d718d0385 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -262,6 +262,10 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba); static int ufshcd_change_power_mode(struct ufs_hba *hba, struct ufs_pa_layer_attr *pwr_mode); static void ufshcd_schedule_eh_work(struct ufs_hba *hba); +static int ufshcd_setup_hba_vreg(struct ufs_hba *hba, bool on); +static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on); +static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba, + struct ufs_vreg *vreg); static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba); static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba); static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); @@ -5747,6 +5751,84 @@ static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba) } } +static void ufshcd_err_handling_prepare(struct ufs_hba *hba) +{ + pm_runtime_get_sync(hba->dev); + if (pm_runtime_suspended(hba->dev)) { + /* + * Don't assume anything of pm_runtime_get_sync(), if + * resume fails, irq and clocks can be OFF, and powers + * can be OFF or in LPM. + */ + ufshcd_setup_hba_vreg(hba, true); + ufshcd_enable_irq(hba); + ufshcd_setup_vreg(hba, true); + ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq); + ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq2); + ufshcd_hold(hba, false); + if (!ufshcd_is_clkgating_allowed(hba)) + ufshcd_setup_clocks(hba, true); + ufshcd_release(hba); + ufshcd_vops_resume(hba, UFS_RUNTIME_PM); + } else { + ufshcd_hold(hba, false); + if (hba->clk_scaling.is_allowed) { + cancel_work_sync(&hba->clk_scaling.suspend_work); + cancel_work_sync(&hba->clk_scaling.resume_work); + ufshcd_suspend_clkscaling(hba); + } + } +} + +static void ufshcd_err_handling_unprepare(struct ufs_hba *hba) +{ + ufshcd_release(hba); + if (hba->clk_scaling.is_allowed) + ufshcd_resume_clkscaling(hba); + pm_runtime_put(hba->dev); +} + +static inline bool ufshcd_err_handling_should_stop(struct ufs_hba *hba) +{ + return (hba->ufshcd_state == UFSHCD_STATE_ERROR || + (!(hba->saved_err || hba->saved_uic_err || hba->force_reset || + ufshcd_is_link_broken(hba)))); +} + +#ifdef CONFIG_PM +static void ufshcd_recover_pm_error(struct ufs_hba *hba) +{ + struct Scsi_Host *shost = hba->host; + struct scsi_device *sdev; + struct request_queue *q; + int ret; + + /* + * Set RPM status of hba device to RPM_ACTIVE, + * this also clears its runtime error. + */ + ret = pm_runtime_set_active(hba->dev); + /* + * If hba device had runtime error, we also need to resume those + * scsi devices under hba in case any of them has failed to be + * resumed due to hba runtime resume failure. This is to unblock + * blk_queue_enter in case there are bios waiting inside it. + */ + if (!ret) { + shost_for_each_device(sdev, shost) { + q = sdev->request_queue; + if (q->dev && (q->rpm_status == RPM_SUSPENDED || + q->rpm_status == RPM_SUSPENDING)) + pm_request_resume(q->dev); + } + } +} +#else +static inline void ufshcd_recover_pm_error(struct ufs_hba *hba) +{ +} +#endif + /** * ufshcd_err_handler - handle UFS errors that require s/w attention * @work: pointer to work structure @@ -5764,9 +5846,7 @@ static void ufshcd_err_handler(struct work_struct *work) hba = container_of(work, struct ufs_hba, eh_work); spin_lock_irqsave(hba->host->host_lock, flags); - if (hba->ufshcd_state == UFSHCD_STATE_ERROR || - (!(hba->saved_err || hba->saved_uic_err || hba->force_reset || - ufshcd_is_link_broken(hba)))) { + if (ufshcd_err_handling_should_stop(hba)) { if (hba->ufshcd_state != UFSHCD_STATE_ERROR) hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; spin_unlock_irqrestore(hba->host->host_lock, flags); @@ -5775,10 +5855,17 @@ static void ufshcd_err_handler(struct work_struct *work) } ufshcd_set_eh_in_progress(hba); spin_unlock_irqrestore(hba->host->host_lock, flags); - pm_runtime_get_sync(hba->dev); - ufshcd_hold(hba, false); - + ufshcd_err_handling_prepare(hba); spin_lock_irqsave(hba->host->host_lock, flags); + /* + * A full reset and restore might have happened after preparation + * is finished, double check whether we should stop. + */ + if (ufshcd_err_handling_should_stop(hba)) { + if (hba->ufshcd_state != UFSHCD_STATE_ERROR) + hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + goto out; + } hba->ufshcd_state = UFSHCD_STATE_RESET; /* Complete requests that have door-bell cleared by h/w */ @@ -5856,10 +5943,12 @@ skip_pending_xfer_clear: hba->force_reset = false; spin_unlock_irqrestore(hba->host->host_lock, flags); err = ufshcd_reset_and_restore(hba); - spin_lock_irqsave(hba->host->host_lock, flags); if (err) dev_err(hba->dev, "%s: reset and restore failed with err %d\n", __func__, err); + else + ufshcd_recover_pm_error(hba); + spin_lock_irqsave(hba->host->host_lock, flags); } skip_err_handling: @@ -5871,11 +5960,11 @@ skip_err_handling: __func__, hba->saved_err, hba->saved_uic_err); } +out: ufshcd_clear_eh_in_progress(hba); spin_unlock_irqrestore(hba->host->host_lock, flags); ufshcd_scsi_unblock_requests(hba); - ufshcd_release(hba); - pm_runtime_put_sync(hba->dev); + ufshcd_err_handling_unprepare(hba); } /** From ae1904cad9626350bfb00a6fc7e7c5c6fb4cedfd Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:53 -0700 Subject: [PATCH 282/448] FROMGIT: scsi: ufs: Move dumps in IRQ handler to error handler Performing dumps in the IRQ handler causes system stability issues. Move dumps to the error handler and only print basic host registers here. Link: https://lore.kernel.org/r/1596975355-39813-8-git-send-email-cang@codeaurora.org Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit c3be8d1ee1bff7c6f7e588d2a87f076148f40326 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I8ab59f56cb44d3b31c493c775377ffb579d57d85 Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 973d718d0385..b467dbc8deef 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5889,6 +5889,19 @@ static void ufshcd_err_handler(struct work_struct *work) UFSHCD_UIC_DL_TCx_REPLAY_ERROR)))) needs_reset = true; + if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR | + UFSHCD_UIC_HIBERN8_MASK)) { + bool pr_prdt = !!(hba->saved_err & SYSTEM_BUS_FATAL_ERROR); + + spin_unlock_irqrestore(hba->host->host_lock, flags); + ufshcd_print_host_state(hba); + ufshcd_print_pwr_info(hba); + ufshcd_print_host_regs(hba); + ufshcd_print_tmrs(hba, hba->outstanding_tasks); + ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt); + spin_lock_irqsave(hba->host->host_lock, flags); + } + /* * if host reset is required then skip clearing the pending * transfers forcefully because they will get cleared during @@ -6108,18 +6121,12 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba) /* dump controller state before resetting */ if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) { - bool pr_prdt = !!(hba->saved_err & - SYSTEM_BUS_FATAL_ERROR); - dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n", __func__, hba->saved_err, hba->saved_uic_err); - - ufshcd_print_host_regs(hba); + ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, + "host_regs: "); ufshcd_print_pwr_info(hba); - ufshcd_print_tmrs(hba, hba->outstanding_tasks); - ufshcd_print_trs(hba, hba->outstanding_reqs, - pr_prdt); } ufshcd_schedule_eh_work(hba); retval |= IRQ_HANDLED; From 76907b837ffe11312647b63887d4b487a45639cc Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:54 -0700 Subject: [PATCH 283/448] BACKPORT: FROMGIT: scsi: ufs: Fix a race condition between error handler and runtime PM ops The current IRQ handler blocks SCSI requests before scheduling eh_work, when error handler calls pm_runtime_get_sync, if ufshcd_suspend/resume sends a SCSI cmd, most likely the SSU cmd, since SCSI requests are blocked, pm_runtime_get_sync() will never return because ufshcd_suspend/resume is blocked by the SCSI cmd. - In queuecommand path, hba->ufshcd_state check and ufshcd_send_command should stay under the same spin lock. This is to make sure that no more commands leak into doorbell after hba->ufshcd_state is changed. - Don't block SCSI requests before error handler starts to run, let error handler block SCSI requests when it is ready to start error recovery. - Don't let SCSI layer keep requeuing the SCSI cmds sent from HBA runtime PM ops, let them pass or fail them. Let them pass if eh_work is scheduled due to non-fatal errors. Fail them if eh_work is scheduled due to fatal errors, otherwise the cmds may eventually time out since UFS is in bad state, which gets error handler blocked for too long. If we fail the SCSI cmds sent from HBA runtime PM ops, HBA runtime PM ops fails too, but it does not hurt since error handler can recover HBA runtime PM error. Link: https://lore.kernel.org/r/1596975355-39813-9-git-send-email-cang@codeaurora.org Reviewed-by: Bean Huo Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 5586dd8ea250ab0851caeab6f461a9dbf57c806f https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: I7a0e563e47c28f7cf61c88485e5907d6d1d9ab02 [can: Resolved minor conflicts in queuecommand and err_handler] Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 87 +++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 35 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index b467dbc8deef..a7736a5ece1b 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -156,7 +156,8 @@ enum { UFSHCD_STATE_RESET, UFSHCD_STATE_ERROR, UFSHCD_STATE_OPERATIONAL, - UFSHCD_STATE_EH_SCHEDULED, + UFSHCD_STATE_EH_SCHEDULED_FATAL, + UFSHCD_STATE_EH_SCHEDULED_NON_FATAL, }; /* UFSHCD error handling flags */ @@ -2549,34 +2550,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) if (!down_read_trylock(&hba->clk_scaling_lock)) return SCSI_MLQUEUE_HOST_BUSY; - spin_lock_irqsave(hba->host->host_lock, flags); - switch (hba->ufshcd_state) { - case UFSHCD_STATE_OPERATIONAL: - break; - case UFSHCD_STATE_EH_SCHEDULED: - case UFSHCD_STATE_RESET: - err = SCSI_MLQUEUE_HOST_BUSY; - goto out_unlock; - case UFSHCD_STATE_ERROR: - set_host_byte(cmd, DID_ERROR); - cmd->scsi_done(cmd); - goto out_unlock; - default: - dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n", - __func__, hba->ufshcd_state); - set_host_byte(cmd, DID_BAD_TARGET); - cmd->scsi_done(cmd); - goto out_unlock; - } - - /* if error handling is in progress, don't issue commands */ - if (ufshcd_eh_in_progress(hba)) { - set_host_byte(cmd, DID_ERROR); - cmd->scsi_done(cmd); - goto out_unlock; - } - spin_unlock_irqrestore(hba->host->host_lock, flags); - hba->req_abort_count = 0; /* acquire the tag to make sure device cmds don't use it */ @@ -2631,11 +2604,52 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) /* Make sure descriptors are ready before ringing the doorbell */ wmb(); - /* issue command to the controller */ spin_lock_irqsave(hba->host->host_lock, flags); + switch (hba->ufshcd_state) { + case UFSHCD_STATE_OPERATIONAL: + case UFSHCD_STATE_EH_SCHEDULED_NON_FATAL: + break; + case UFSHCD_STATE_EH_SCHEDULED_FATAL: + /* + * pm_runtime_get_sync() is used at error handling preparation + * stage. If a scsi cmd, e.g. the SSU cmd, is sent from hba's + * PM ops, it can never be finished if we let SCSI layer keep + * retrying it, which gets err handler stuck forever. Neither + * can we let the scsi cmd pass through, because UFS is in bad + * state, the scsi cmd may eventually time out, which will get + * err handler blocked for too long. So, just fail the scsi cmd + * sent from PM ops, err handler can recover PM error anyways. + */ + if (hba->pm_op_in_progress) { + hba->force_reset = true; + set_host_byte(cmd, DID_BAD_TARGET); + goto out_compl_cmd; + } + fallthrough; + case UFSHCD_STATE_RESET: + err = SCSI_MLQUEUE_HOST_BUSY; + goto out_compl_cmd; + case UFSHCD_STATE_ERROR: + set_host_byte(cmd, DID_ERROR); + goto out_compl_cmd; + default: + dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n", + __func__, hba->ufshcd_state); + set_host_byte(cmd, DID_BAD_TARGET); + goto out_compl_cmd; + } ufshcd_send_command(hba, tag); -out_unlock: spin_unlock_irqrestore(hba->host->host_lock, flags); + goto out; + +out_compl_cmd: + scsi_dma_unmap(lrbp->cmd); + lrbp->cmd = NULL; + clear_bit_unlock(tag, &hba->lrb_in_use); + spin_unlock_irqrestore(hba->host->host_lock, flags); + ufshcd_release(hba); + if (!err) + cmd->scsi_done(cmd); out: up_read(&hba->clk_scaling_lock); return err; @@ -5745,9 +5759,12 @@ static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba) { /* handle fatal errors only when link is not in error state */ if (hba->ufshcd_state != UFSHCD_STATE_ERROR) { - hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED; - if (queue_work(hba->eh_wq, &hba->eh_work)) - ufshcd_scsi_block_requests(hba); + if (hba->force_reset || ufshcd_is_link_broken(hba) || + ufshcd_is_saved_err_fatal(hba)) + hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_FATAL; + else + hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_NON_FATAL; + queue_work(hba->eh_wq, &hba->eh_work); } } @@ -5850,13 +5867,13 @@ static void ufshcd_err_handler(struct work_struct *work) if (hba->ufshcd_state != UFSHCD_STATE_ERROR) hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; spin_unlock_irqrestore(hba->host->host_lock, flags); - ufshcd_scsi_unblock_requests(hba); return; } ufshcd_set_eh_in_progress(hba); spin_unlock_irqrestore(hba->host->host_lock, flags); ufshcd_err_handling_prepare(hba); spin_lock_irqsave(hba->host->host_lock, flags); + ufshcd_scsi_block_requests(hba); /* * A full reset and restore might have happened after preparation * is finished, double check whether we should stop. From 0574a8466139f5832624799f3de9bd239e668c99 Mon Sep 17 00:00:00 2001 From: Can Guo Date: Sun, 9 Aug 2020 05:15:55 -0700 Subject: [PATCH 284/448] BACKPORT: FROMGIT: scsi: ufs: Properly release resources if a task is aborted successfully In current UFS task abort hook, namely ufshcd_abort(), if one task is aborted successfully, clk_gating.active_reqs held by this task is not decreased, which makes clk_gating.active_reqs stay above zero forever, thus clock gating would never happen. Instead of releasing resources of one task "manually", use the existing func __ufshcd_transfer_req_compl(). This change also eliminates a possible race of scsi_dma_unmap() from the real completion in IRQ handler path. Link: https://lore.kernel.org/r/1596975355-39813-10-git-send-email-cang@codeaurora.org Fixes: 5a0b0cb9bee7 ("ufs: Add support for clock gating") CC: Stanley Chu Reviewed-by: Stanley Chu Reviewed-by: Asutosh Das Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Bug: 165343119 (cherry picked from commit 35afe60929abd61567f48608e55f5987c6fd1aa0 https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.10/scsi-queue) Change-Id: Ief56863c07fc9b7983d48a4ab91916ffc0b07b14 [can: Resolved minor conflict in ufshcd_abort()] Signed-off-by: Can Guo --- drivers/scsi/ufs/ufshcd.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index a7736a5ece1b..80323c9952c7 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -6791,16 +6791,10 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) goto out; } - scsi_dma_unmap(cmd); - spin_lock_irqsave(host->host_lock, flags); - ufshcd_outstanding_req_clear(hba, tag); - hba->lrb[tag].cmd = NULL; + __ufshcd_transfer_req_compl(hba, (1UL << tag)); spin_unlock_irqrestore(host->host_lock, flags); - clear_bit_unlock(tag, &hba->lrb_in_use); - wake_up(&hba->dev_cmd.tag_wq); - out: if (!err) { err = SUCCESS; From 352d8ada45663809f1d04afe623af6e23efc48bc Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Wed, 19 Aug 2020 09:14:04 -0700 Subject: [PATCH 285/448] ANDROID: ABI: Update ABI after UFS error recovery patches Leaf changes summary: 21 artifacts changed (1 filtered out) Changed leaf types summary: 2 (1 filtered out) leaf types changed Removed/Changed/Added functions summary: 0 Removed, 19 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 19 functions with some sub-type change: [C] 'function int ufshcd_crypto_cap_find(ufs_hba*, blk_crypto_mode_num, unsigned int)' at ufshcd-crypto.c:40:1 has some sub-type changes: CRC value (modversions) changed from 0x66bb6e3c to 0xdf5be4ed [C] 'function void ufshcd_crypto_disable_spec(ufs_hba*)' at ufshcd-crypto.c:250:1 has some sub-type changes: CRC value (modversions) changed from 0x4d38f061 to 0x2c937f4d [C] 'function void ufshcd_crypto_enable_spec(ufs_hba*)' at ufshcd-crypto.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x2ec41648 to 0x3e4398d8 [C] 'function int ufshcd_dme_get_attr(ufs_hba*, unsigned int, unsigned int*, unsigned char)' at ufshcd.h:1004:1 has some sub-type changes: CRC value (modversions) changed from 0xc8a30bfe to 0x91b23c09 [C] 'function int ufshcd_dme_set_attr(ufs_hba*, unsigned int, unsigned char, unsigned int, unsigned char)' at ufshcd.h:1002:1 has some sub-type changes: CRC value (modversions) changed from 0x6e8f8104 to 0xe521b7d4 [C] 'function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)' at ufshcd.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0xf884730c to 0xafacb437 [C] 'function u32 ufshcd_get_local_unipro_ver(ufs_hba*)' at ufshcd.c:947:1 has some sub-type changes: CRC value (modversions) changed from 0xa4115536 to 0x5ba29f1 [C] 'function int ufshcd_hold(ufs_hba*, bool)' at ufshcd.c:1628:1 has some sub-type changes: CRC value (modversions) changed from 0xdd0150bd to 0x2c3b45af [C] 'function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)' at ufshcd-pltfrm.h:31:1 has some sub-type changes: CRC value (modversions) changed from 0x8b5a0527 to 0x6a553691 [C] 'function int ufshcd_query_attr(ufs_hba*, query_opcode, attr_idn, u8, u8, u32*)' at ufshcd.c:3011:1 has some sub-type changes: CRC value (modversions) changed from 0x7e1e7dca to 0xdb7ff407 [C] 'function int ufshcd_query_descriptor_retry(ufs_hba*, query_opcode, desc_idn, u8, u8, u8*, int*)' at ufshcd.c:3180:1 has some sub-type changes: CRC value (modversions) changed from 0x38291d4f to 0xd93e04d3 [C] 'function int ufshcd_query_flag(ufs_hba*, query_opcode, flag_idn, u8, bool*)' at ufshcd.c:2941:1 has some sub-type changes: CRC value (modversions) changed from 0x8fbcc248 to 0xbfcc001a [C] 'function void ufshcd_release(ufs_hba*)' at ufshcd.c:1804:1 has some sub-type changes: CRC value (modversions) changed from 0xa73a71b3 to 0x8d3a4fd [C] 'function void ufshcd_remove(ufs_hba*)' at ufshcd.h:947:1 has some sub-type changes: CRC value (modversions) changed from 0xf320631d to 0x2c8e8662 [C] 'function int ufshcd_shutdown(ufs_hba*)' at ufshcd.h:1001:1 has some sub-type changes: CRC value (modversions) changed from 0x1da80ce1 to 0x75c9a638 [C] 'function int ufshcd_system_resume(ufs_hba*)' at ufshcd.h:1000:1 has some sub-type changes: CRC value (modversions) changed from 0xe1cdb47c to 0xc0522ea [C] 'function int ufshcd_system_suspend(ufs_hba*)' at ufshcd.h:999:1 has some sub-type changes: CRC value (modversions) changed from 0x3a6991b9 to 0xde7f1ce5 [C] 'function int ufshcd_uic_hibern8_enter(ufs_hba*)' at ufshcd.c:4080:1 has some sub-type changes: CRC value (modversions) changed from 0x81575439 to 0xbc0c783f [C] 'function int ufshcd_uic_hibern8_exit(ufs_hba*)' at ufshcd.c:4104:1 has some sub-type changes: CRC value (modversions) changed from 0x69bd2d57 to 0x6e341295 'struct ufs_hba at ufshcd.h:599:1' changed: type size changed from 32000 to 32192 (in bits) 2 data member insertions: 'workqueue_struct* ufs_hba::eh_wq', at offset 3264 (in bits) at ufshcd.h:760:1 'bool ufs_hba::force_reset', at offset 15296 (in bits) at ufshcd.h:770:1 there are data member changes: 'work_struct ufs_hba::eh_work' offset changed from 3264 to 3328 (in bits) (by +64 bits) 'work_struct ufs_hba::eeh_work' offset changed from 3648 to 3712 (in bits) (by +64 bits) 'u32 ufs_hba::errors' offset changed from 4032 to 4096 (in bits) (by +64 bits) 'u32 ufs_hba::uic_error' offset changed from 4064 to 4128 (in bits) (by +64 bits) 'u32 ufs_hba::saved_err' offset changed from 4096 to 4160 (in bits) (by +64 bits) 'u32 ufs_hba::saved_uic_err' offset changed from 4128 to 4192 (in bits) (by +64 bits) type 'struct ufs_stats' of 'ufs_hba::ufs_stats' changed: type size changed from 10944 to 11072 (in bits) 2 data member insertions: 'u32 ufs_stats::last_intr_status', at offset 0 (in bits) at ufshcd.h:517:1 'ktime_t ufs_stats::last_intr_ts', at offset 64 (in bits) at ufshcd.h:518:1 there are data member changes: 'u32 ufs_stats::hibern8_exit_cnt' offset changed from 0 to 128 (in bits) (by +128 bits) 'ktime_t ufs_stats::last_hibern8_exit_tstamp' offset changed from 64 to 192 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::pa_err' offset changed from 128 to 256 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::dl_err' offset changed from 960 to 1088 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::nl_err' offset changed from 1792 to 1920 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::tl_err' offset changed from 2624 to 2752 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::dme_err' offset changed from 3456 to 3584 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::auto_hibern8_err' offset changed from 4288 to 4416 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::fatal_err' offset changed from 5120 to 5248 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::link_startup_err' offset changed from 5952 to 6080 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::resume_err' offset changed from 6784 to 6912 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::suspend_err' offset changed from 7616 to 7744 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::dev_reset' offset changed from 8448 to 8576 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::host_reset' offset changed from 9280 to 9408 (in bits) (by +128 bits) 'ufs_err_reg_hist ufs_stats::task_abort' offset changed from 10112 to 10240 (in bits) (by +128 bits) 19 impacted interfaces and offset changed from 4160 to 4224 (in bits) (by +64 bits) 'bool ufs_hba::silence_err_logs' offset changed from 15104 to 15304 (in bits) (by +200 bits) 'ufs_dev_cmd ufs_hba::dev_cmd' offset changed from 15168 to 15360 (in bits) (by +192 bits) 'ktime_t ufs_hba::last_dme_cmd_tstamp' offset changed from 16192 to 16384 (in bits) (by +192 bits) 'ufs_dev_info ufs_hba::dev_info' offset changed from 16256 to 16448 (in bits) (by +192 bits) 'bool ufs_hba::auto_bkops_enabled' offset changed from 16576 to 16768 (in bits) (by +192 bits) 'ufs_vreg_info ufs_hba::vreg_info' offset changed from 16640 to 16832 (in bits) (by +192 bits) 'list_head ufs_hba::clk_list_head' offset changed from 16896 to 17088 (in bits) (by +192 bits) 'bool ufs_hba::wlun_dev_clr_ua' offset changed from 17024 to 17216 (in bits) (by +192 bits) 'int ufs_hba::req_abort_count' offset changed from 17056 to 17248 (in bits) (by +192 bits) 'u32 ufs_hba::lanes_per_direction' offset changed from 17088 to 17280 (in bits) (by +192 bits) 'ufs_pa_layer_attr ufs_hba::pwr_info' offset changed from 17120 to 17312 (in bits) (by +192 bits) 'ufs_pwr_mode_info ufs_hba::max_pwr_info' offset changed from 17344 to 17536 (in bits) (by +192 bits) 'ufs_clk_gating ufs_hba::clk_gating' offset changed from 17600 to 17792 (in bits) (by +192 bits) 'u32 ufs_hba::caps' offset changed from 19904 to 20096 (in bits) (by +192 bits) 'devfreq* ufs_hba::devfreq' offset changed from 19968 to 20160 (in bits) (by +192 bits) 'ufs_clk_scaling ufs_hba::clk_scaling' offset changed from 20032 to 20224 (in bits) (by +192 bits) 'bool ufs_hba::is_sys_suspended' offset changed from 21696 to 21888 (in bits) (by +192 bits) 'bkops_status ufs_hba::urgent_bkops_lvl' offset changed from 21728 to 21920 (in bits) (by +192 bits) 'bool ufs_hba::is_urgent_bkops_lvl_checked' offset changed from 21760 to 21952 (in bits) (by +192 bits) 'rw_semaphore ufs_hba::clk_scaling_lock' offset changed from 21824 to 22016 (in bits) (by +192 bits) 'ufs_desc_size ufs_hba::desc_size' offset changed from 22144 to 22336 (in bits) (by +192 bits) 'atomic_t ufs_hba::scsi_block_reqs_cnt' offset changed from 22368 to 22560 (in bits) (by +192 bits) 'device ufs_hba::bsg_dev' offset changed from 22400 to 22592 (in bits) (by +192 bits) 'request_queue* ufs_hba::bsg_queue' offset changed from 29760 to 29952 (in bits) (by +192 bits) 'ufs_crypto_capabilities ufs_hba::crypto_capabilities' offset changed from 29824 to 30016 (in bits) (by +192 bits) 'ufs_crypto_cap_entry* ufs_hba::crypto_cap_array' offset changed from 29888 to 30080 (in bits) (by +192 bits) 'u32 ufs_hba::crypto_cfg_register' offset changed from 29952 to 30144 (in bits) (by +192 bits) 'keyslot_manager* ufs_hba::ksm' offset changed from 30016 to 30208 (in bits) (by +192 bits) 'void* ufs_hba::crypto_DO_NOT_USE[8]' offset changed from 30080 to 30272 (in bits) (by +192 bits) 'bool ufs_hba::wb_buf_flush_enabled' offset changed from 30592 to 30784 (in bits) (by +192 bits) 'bool ufs_hba::wb_enabled' offset changed from 30600 to 30792 (in bits) (by +192 bits) 'delayed_work ufs_hba::rpm_dev_flush_recheck_work' offset changed from 30656 to 30848 (in bits) (by +192 bits) 'u64 ufs_hba::android_kabi_reserved1' offset changed from 31744 to 31936 (in bits) (by +192 bits) 'u64 ufs_hba::android_kabi_reserved2' offset changed from 31808 to 32000 (in bits) (by +192 bits) 'u64 ufs_hba::android_kabi_reserved3' offset changed from 31872 to 32064 (in bits) (by +192 bits) 'u64 ufs_hba::android_kabi_reserved4' offset changed from 31936 to 32128 (in bits) (by +192 bits) 19 impacted interfaces 'struct ufs_stats at ufshcd.h:509:1' changed: details were reported earlier Bug: 165343119 Signed-off-by: Todd Kjos Change-Id: Ib28519365126f83131793b8738d62e06b3f16ad5 --- android/abi_gki_aarch64.xml | 2156 ++++++++++++++++------------------- 1 file changed, 987 insertions(+), 1169 deletions(-) diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index 8983072c9bb5..bacba8717576 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -3669,32 +3669,32 @@ - - - - - - - + + + + + + + - - + + - - - - - - - - - - + + + + + + + + + + @@ -4897,12 +4897,6 @@ - - - - - - @@ -4911,6 +4905,12 @@ + + + + + + @@ -15135,6 +15135,15 @@ + + + + + + + + + @@ -15809,7 +15818,6 @@ - @@ -15944,7 +15952,7 @@ - + @@ -16313,7 +16321,7 @@ - + @@ -16415,7 +16423,7 @@ - + @@ -16897,10 +16905,10 @@ - + - + @@ -17276,7 +17284,7 @@ - + @@ -17641,7 +17649,7 @@ - + @@ -22730,10 +22738,10 @@ - + - + @@ -23111,7 +23119,7 @@ - + @@ -24097,7 +24105,7 @@ - + @@ -24716,7 +24724,7 @@ - + @@ -27411,30 +27419,30 @@ - - + + - - + + - - - - + + + + - - - + + + - - + + - + @@ -36161,7 +36169,7 @@ - + @@ -36683,14 +36691,6 @@ - - - - - - - - @@ -36780,7 +36780,7 @@ - + @@ -36794,7 +36794,7 @@ - + @@ -37150,13 +37150,13 @@ - + - + @@ -38211,14 +38211,14 @@ - - - - + + + + - - + + @@ -38639,7 +38639,6 @@ - @@ -39242,7 +39241,7 @@ - + @@ -39334,7 +39333,7 @@ - + @@ -39933,17 +39932,17 @@ - + - + - + @@ -41633,7 +41632,7 @@ - + @@ -41645,7 +41644,7 @@ - + @@ -41774,7 +41773,7 @@ - + @@ -42152,7 +42151,7 @@ - + @@ -42242,7 +42241,7 @@ - + @@ -42254,7 +42253,7 @@ - + @@ -42317,7 +42316,7 @@ - + @@ -44627,7 +44626,7 @@ - + @@ -44738,7 +44737,7 @@ - + @@ -44773,7 +44772,7 @@ - + @@ -44828,7 +44827,7 @@ - + @@ -45077,7 +45076,7 @@ - + @@ -45135,7 +45134,7 @@ - + @@ -45153,7 +45152,7 @@ - + @@ -46620,10 +46619,10 @@ - + - + @@ -46731,7 +46730,7 @@ - + @@ -46747,7 +46746,7 @@ - + @@ -46755,13 +46754,13 @@ - + - + @@ -49545,7 +49544,7 @@ - + @@ -49557,7 +49556,7 @@ - + @@ -50213,7 +50212,7 @@ - + @@ -50221,7 +50220,7 @@ - + @@ -50519,7 +50518,7 @@ - + @@ -50906,7 +50905,7 @@ - + @@ -51169,7 +51168,7 @@ - + @@ -51178,7 +51177,7 @@ - + @@ -51202,13 +51201,13 @@ - + - + @@ -51222,7 +51221,7 @@ - + @@ -51376,7 +51375,6 @@ - @@ -51485,7 +51483,7 @@ - + @@ -51719,6 +51717,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -51947,7 +51970,7 @@ - + @@ -51980,13 +52003,13 @@ - + - + @@ -51994,6 +52017,17 @@ + + + + + + + + + + + @@ -52163,6 +52197,14 @@ + + + + + + + + @@ -52190,17 +52232,6 @@ - - - - - - - - - - - @@ -52748,7 +52779,7 @@ - + @@ -52757,7 +52788,7 @@ - + @@ -54213,14 +54244,6 @@ - - - - - - - - @@ -54248,7 +54271,7 @@ - + @@ -55523,17 +55546,6 @@ - - - - - - - - - - - @@ -57038,7 +57050,7 @@ - + @@ -61838,7 +61850,7 @@ - + @@ -62127,7 +62139,7 @@ - + @@ -62579,28 +62591,28 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -65514,7 +65526,7 @@ - + @@ -65526,7 +65538,7 @@ - + @@ -65989,16 +66001,16 @@ - - + + - - + + - - + + @@ -67031,13 +67043,13 @@ - + - + @@ -68408,7 +68420,7 @@ - + @@ -68441,7 +68453,7 @@ - + @@ -68539,359 +68551,365 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + @@ -69996,8 +70014,9 @@ + - + @@ -70007,72 +70026,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70080,10 +70099,10 @@ - + - + @@ -70175,18 +70194,18 @@ - + - + - + - + - + @@ -70237,57 +70256,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70327,79 +70346,85 @@ - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + @@ -70407,15 +70432,15 @@ - + - + - + - + @@ -70509,70 +70534,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70664,50 +70689,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70718,27 +70743,27 @@ - + - + - + - + - + - + - + - + @@ -70769,7 +70794,7 @@ - + @@ -70912,7 +70937,7 @@ - + @@ -71215,26 +71240,26 @@ - + - + - + - + - + @@ -71351,52 +71376,52 @@ - - + + - - - + + + - - + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - + + - - + + @@ -72464,6 +72489,13 @@ + + + + + + + @@ -72472,13 +72504,14 @@ - - - - - - - + + + + + + + + @@ -72627,14 +72660,14 @@ - + - + - + @@ -72644,7 +72677,7 @@ - + @@ -72673,7 +72706,7 @@ - + @@ -72682,7 +72715,7 @@ - + @@ -72691,12 +72724,12 @@ - + - + @@ -73036,7 +73069,7 @@ - + @@ -73046,20 +73079,20 @@ - + - + - + @@ -73075,72 +73108,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73153,7 +73186,7 @@ - + @@ -73169,7 +73202,7 @@ - + @@ -73213,7 +73246,7 @@ - + @@ -76786,7 +76819,7 @@ - + @@ -77581,23 +77614,6 @@ - - - - - - - - - - - - - - - - - @@ -78741,6 +78757,17 @@ + + + + + + + + + + + @@ -78860,17 +78887,6 @@ - - - - - - - - - - - @@ -81300,7 +81316,7 @@ - + @@ -84480,7 +84496,7 @@ - + @@ -85121,7 +85137,7 @@ - + @@ -85317,7 +85333,7 @@ - + @@ -85532,10 +85548,10 @@ - + - + @@ -85779,7 +85795,7 @@ - + @@ -85792,7 +85808,7 @@ - + @@ -85808,7 +85824,7 @@ - + @@ -85826,13 +85842,13 @@ - + - + @@ -85886,7 +85902,7 @@ - + @@ -85894,7 +85910,7 @@ - + @@ -86450,6 +86466,14 @@ + + + + + + + + @@ -87015,7 +87039,7 @@ - + @@ -87335,17 +87359,6 @@ - - - - - - - - - - - @@ -88150,7 +88163,7 @@ - + @@ -88177,7 +88190,7 @@ - + @@ -88186,7 +88199,7 @@ - + @@ -89208,11 +89221,11 @@ - + - + @@ -89221,7 +89234,7 @@ - + @@ -89245,7 +89258,7 @@ - + @@ -89281,7 +89294,7 @@ - + @@ -89695,39 +89708,39 @@ - - - - + + + + - - - - - + + + + + - - - - + + + + - - - + + + - + - - + + @@ -89946,7 +89959,7 @@ - + @@ -89954,7 +89967,7 @@ - + @@ -91043,7 +91056,7 @@ - + @@ -91061,7 +91074,7 @@ - + @@ -92244,7 +92257,7 @@ - + @@ -92268,7 +92281,7 @@ - + @@ -92720,7 +92733,7 @@ - + @@ -92784,7 +92797,7 @@ - + @@ -94436,10 +94449,10 @@ - + - + @@ -100090,7 +100103,7 @@ - + @@ -100298,7 +100311,7 @@ - + @@ -101936,16 +101949,16 @@ - - - + + + - - - - + + + + @@ -102474,6 +102487,7 @@ + @@ -102623,7 +102637,7 @@ - + @@ -102634,7 +102648,7 @@ - + @@ -102712,7 +102726,7 @@ - + @@ -102968,7 +102982,7 @@ - + @@ -103178,7 +103192,7 @@ - + @@ -103196,10 +103210,10 @@ - + - + @@ -103218,7 +103232,7 @@ - + @@ -103248,7 +103262,7 @@ - + @@ -103506,7 +103520,7 @@ - + @@ -103630,14 +103644,6 @@ - - - - - - - - @@ -103793,6 +103799,17 @@ + + + + + + + + + + + @@ -103805,171 +103822,171 @@ - - + + - - - + + + - - - + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - - + + + - - + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - + + - - - + + + - - + + - - - - + + + + @@ -104043,7 +104060,7 @@ - + @@ -104172,110 +104189,110 @@ - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - + + @@ -104283,6 +104300,14 @@ + + + + + + + + @@ -104695,7 +104720,7 @@ - + @@ -105923,10 +105948,10 @@ - + - + @@ -105999,7 +106024,7 @@ - + @@ -106056,17 +106081,6 @@ - - - - - - - - - - - @@ -106170,7 +106184,7 @@ - + @@ -106185,26 +106199,18 @@ - + - + - - - - - - - - @@ -106224,14 +106230,6 @@ - - - - - - - - @@ -106265,7 +106263,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -106963,7 +106996,7 @@ - + @@ -106977,7 +107010,7 @@ - + @@ -106985,7 +107018,7 @@ - + @@ -107018,7 +107051,7 @@ - + @@ -108765,7 +108798,7 @@ - + @@ -108773,7 +108806,7 @@ - + @@ -108797,7 +108830,7 @@ - + @@ -108873,7 +108906,7 @@ - + @@ -109864,32 +109897,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -109916,62 +109923,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -110068,10 +110019,10 @@ - + - + @@ -110093,10 +110044,10 @@ - + - + @@ -110249,8 +110200,6 @@ - - @@ -110272,7 +110221,6 @@ - @@ -110435,17 +110383,6 @@ - - - - - - - - - - - @@ -110772,7 +110709,7 @@ - + @@ -110885,7 +110822,7 @@ - + @@ -111081,6 +111018,17 @@ + + + + + + + + + + + @@ -111102,17 +111050,6 @@ - - - - - - - - - - - @@ -111125,7 +111062,7 @@ - + @@ -111547,126 +111484,15 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -113264,9 +113090,9 @@ - + - + @@ -113275,7 +113101,7 @@ - + @@ -113283,10 +113109,10 @@ - + - + @@ -113294,7 +113120,7 @@ - + @@ -113313,10 +113139,10 @@ - + - + @@ -116413,15 +116239,15 @@ - + - + - + - + @@ -116429,7 +116255,7 @@ - + @@ -116437,7 +116263,7 @@ - + @@ -116445,7 +116271,7 @@ - + @@ -116453,7 +116279,7 @@ - + @@ -116464,7 +116290,7 @@ - + @@ -116472,7 +116298,7 @@ - + @@ -116483,7 +116309,7 @@ - + @@ -116494,7 +116320,7 @@ - + @@ -116502,14 +116328,6 @@ - - - - - - - - @@ -117332,10 +117150,10 @@ - + - + @@ -117376,12 +117194,12 @@ - + - + @@ -117463,10 +117281,10 @@ - + - + @@ -118194,7 +118012,7 @@ - + @@ -118219,13 +118037,13 @@ - + - + @@ -118349,7 +118167,7 @@ - + @@ -118409,13 +118227,13 @@ - + - + @@ -118450,7 +118268,7 @@ - + @@ -119154,7 +118972,7 @@ - + @@ -119166,10 +118984,10 @@ - + - + @@ -119186,7 +119004,7 @@ - + @@ -119197,7 +119015,7 @@ - + @@ -119214,7 +119032,7 @@ - + @@ -119231,7 +119049,7 @@ - + @@ -119240,24 +119058,24 @@ - + - + - + - + - + - + @@ -119265,7 +119083,7 @@ - + @@ -119273,7 +119091,7 @@ - + @@ -119281,7 +119099,7 @@ - + @@ -121109,7 +120927,7 @@ - + @@ -121314,10 +121132,10 @@ - + - + @@ -121336,10 +121154,10 @@ - + - + @@ -122187,7 +122005,7 @@ - + @@ -124113,6 +123931,6 @@ From f2c591c75529eed943c0f25ebb1e9b3009d8cd61 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 19 Aug 2020 16:46:04 +0200 Subject: [PATCH 286/448] ANDROID: GKI: enable CONFIG_USB_ROLE_SWITCH It's already enabled in arm64 gki_defconfig by virtue of other dependancies dragging it in, but enable it in x86 gki_defconfig to provide good code coverage. Bug: 163379072 Signed-off-by: Greg Kroah-Hartman Change-Id: I26707e49046888e9d4b607e4b6d7766610cedfa1 --- arch/x86/configs/gki_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 296be48739f3..78ff6ca35375 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -361,6 +361,7 @@ CONFIG_USB_CONFIGFS_F_ACC=y CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y CONFIG_USB_CONFIGFS_F_MIDI=y CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_ROLE_SWITCH=y CONFIG_MMC=y # CONFIG_PWRSEQ_EMMC is not set # CONFIG_PWRSEQ_SIMPLE is not set From 026b8142b486e7c8f071cf5f96b94efe8f842285 Mon Sep 17 00:00:00 2001 From: Liang Chen Date: Fri, 6 Mar 2020 15:01:33 +0800 Subject: [PATCH 287/448] BACKPORT: kthread: Do not preempt current task if it is going to call schedule() when we create a kthread with ktrhead_create_on_cpu(),the child thread entry is ktread.c:ktrhead() which will be preempted by the parent after call complete(done) while schedule() is not called yet,then the parent will call wait_task_inactive(child) but the child is still on the runqueue, so the parent will schedule_hrtimeout() for 1 jiffy,it will waste a lot of time,especially on startup. parent child ktrhead_create_on_cpu() wait_fo_completion(&done) -----> ktread.c:ktrhead() |----- complete(done);--wakeup and preempted by parent kthread_bind() <------------| |-> schedule();--dequeue here wait_task_inactive(child) | schedule_hrtimeout(1 jiffy) -| So we hope the child just wakeup parent but not preempted by parent, and the child is going to call schedule() soon,then the parent will not call schedule_hrtimeout(1 jiffy) as the child is already dequeue. The same issue for ktrhead_park()&&kthread_parkme(). This patch can save 120ms on rk312x startup with CONFIG_HZ=300. Signed-off-by: Liang Chen Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Steven Rostedt (VMware) Signed-off-by: Chanho Park Link: https://lkml.kernel.org/r/20200306070133.18335-2-cl@rock-chips.com Bug: 163398263 (cherry picked from commit 26c7295be0c5e6da3fa45970e9748be983175b1b) Change-Id: I4d3dd1af2c640a2f3d57af528532da23e00db194 --- kernel/kthread.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/kernel/kthread.c b/kernel/kthread.c index b262f47046ca..bfbfa481be3a 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -199,8 +199,15 @@ static void __kthread_parkme(struct kthread *self) if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags)) break; + /* + * Thread is going to call schedule(), do not preempt it, + * or the caller of kthread_park() may spend more time in + * wait_task_inactive(). + */ + preempt_disable(); complete(&self->parked); - schedule(); + schedule_preempt_disabled(); + preempt_enable(); } __set_current_state(TASK_RUNNING); } @@ -245,8 +252,14 @@ static int kthread(void *_create) /* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state(TASK_UNINTERRUPTIBLE); create->result = current; + /* + * Thread is going to call schedule(), do not preempt it, + * or the creator may spend more time in wait_task_inactive(). + */ + preempt_disable(); complete(done); - schedule(); + schedule_preempt_disabled(); + preempt_enable(); ret = -EINTR; if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) { From 93e073732696c4aa81f531dfe84f7d6da44d8f0d Mon Sep 17 00:00:00 2001 From: Yun Hsiang Date: Wed, 20 May 2020 10:31:35 +0800 Subject: [PATCH 288/448] ANDROID: sched: add restrict vendor hook to modify task placement policy in EAS For modifying task placement policy, we add the hook on the top of select_task_rq_fair(). It allows us to modify wakeup/fork/exec balance paths. Bug: 165660734 Signed-off-by: Yun Hsiang Change-Id: I80ff870453472e183ab2aae7381bff91e49ae296 (cherry picked from commit a1fc1fba460be48dff2484b438888ede557930d4) --- drivers/android/vendor_hooks.c | 3 ++- include/trace/hooks/sched.h | 23 +++++++++++++++++++++++ kernel/sched/fair.c | 7 +++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 include/trace/hooks/sched.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index a901c1ea2434..e2cd9e60f650 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -8,6 +8,7 @@ #define CREATE_TRACE_POINTS #include +#include #include #include @@ -15,6 +16,7 @@ * Export tracepoints that act as a bare tracehook (ie: have no trace event * associated with them) to allow external modules to probe them. */ +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start); @@ -24,4 +26,3 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb); - diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h new file mode 100644 index 000000000000..e4ef56686a76 --- /dev/null +++ b/include/trace/hooks/sched.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM sched +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_SCHED_H +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct task_struct; +DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair, + TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu), + TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1); +#else +#define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu) +#endif +#endif /* _TRACE_HOOK_SCHED_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index e2b8ff7961a4..75b27b33678e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -23,6 +23,7 @@ #include "sched.h" #include +#include /* * Targeted preemption latency for CPU-bound tasks: @@ -6571,6 +6572,12 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f int new_cpu = prev_cpu; int want_affine = 0; int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING); + int target_cpu = -1; + + trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, + wake_flags, &target_cpu); + if (target_cpu >= 0) + return target_cpu; if (sd_flag & SD_BALANCE_WAKE) { record_wakee(p); From 55adb91acc98674c5ebdb65f1493512e22850ad8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 20 Aug 2020 12:13:01 +0200 Subject: [PATCH 289/448] ANDROID: GKI: enable some USB_NET_ config options Vendors rely on USB networking devices for tethering, so enable: CONFIG_USB_NET_AX8817X CONFIG_USB_NET_AX88179_178A CONFIG_USB_NET_CDCETHER as that provides a wide range of support for these types of devices. Bug: 164154178 Signed-off-by: Greg Kroah-Hartman Change-Id: I9f5d1d49ca819797dc951cc44691254747c09c06 --- arch/arm64/configs/gki_defconfig | 4 ---- arch/x86/configs/gki_defconfig | 4 ---- 2 files changed, 8 deletions(-) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index f34a00de5655..8ca3998ee66a 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -266,7 +266,6 @@ CONFIG_DUMMY=y CONFIG_TUN=y CONFIG_VETH=y # CONFIG_ETHERNET is not set -CONFIG_PHYLIB=y CONFIG_PPP=y CONFIG_PPP_BSDCOMP=y CONFIG_PPP_DEFLATE=y @@ -275,9 +274,6 @@ CONFIG_PPTP=y CONFIG_PPPOL2TP=y CONFIG_USB_RTL8152=y CONFIG_USB_USBNET=y -# CONFIG_USB_NET_AX8817X is not set -# CONFIG_USB_NET_AX88179_178A is not set -# CONFIG_USB_NET_CDCETHER is not set # CONFIG_USB_NET_CDC_NCM is not set # CONFIG_USB_NET_NET1080 is not set # CONFIG_USB_NET_CDC_SUBSET is not set diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 78ff6ca35375..edca2f2a24e5 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -239,7 +239,6 @@ CONFIG_DUMMY=y CONFIG_TUN=y CONFIG_VETH=y # CONFIG_ETHERNET is not set -CONFIG_PHYLIB=y CONFIG_PPP=y CONFIG_PPP_BSDCOMP=y CONFIG_PPP_DEFLATE=y @@ -248,9 +247,6 @@ CONFIG_PPTP=y CONFIG_PPPOL2TP=y CONFIG_USB_RTL8152=y CONFIG_USB_USBNET=y -# CONFIG_USB_NET_AX8817X is not set -# CONFIG_USB_NET_AX88179_178A is not set -# CONFIG_USB_NET_CDCETHER is not set # CONFIG_USB_NET_CDC_NCM is not set # CONFIG_USB_NET_NET1080 is not set # CONFIG_USB_NET_CDC_SUBSET is not set From 54413c4243569b59aa5c11332d4916eab95762b9 Mon Sep 17 00:00:00 2001 From: SEO HOYOUNG Date: Thu, 13 Aug 2020 18:41:56 +0900 Subject: [PATCH 290/448] ANDROID: scsi: ufs: export ufshcd_wb_ctrl func At mainline can not disable after enable write booster. Continued enablement of the write booster affects ufs life expectancy. And there is also a problem with power efficiency. So modified ufshcd_wb_ctrl for dynamic enable at other driver. Bug: 163991865 Change-Id: Iad0734d29229841bf583f7befbf35a769d3c2478 Signed-off-by: SEO HOYOUNG --- drivers/scsi/ufs/ufshcd.c | 5 +++-- drivers/scsi/ufs/ufshcd.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 80323c9952c7..ea2454ef4543 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -269,7 +269,7 @@ static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba, struct ufs_vreg *vreg); static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba); static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba); -static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); +int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set); static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable); @@ -5442,7 +5442,7 @@ out: __func__, err); } -static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) +int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) { int ret; u8 index; @@ -5473,6 +5473,7 @@ static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) return ret; } +EXPORT_SYMBOL_GPL(ufshcd_wb_ctrl); static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set) { diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index c5c51c5aa4f2..4e55c71dbc18 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -1099,6 +1099,7 @@ int ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id, u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba); int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd); +int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, struct utp_upiu_req *req_upiu, From a417e45928242ceba43de22fbb653f2c0f8bf216 Mon Sep 17 00:00:00 2001 From: Kiwoong Kim Date: Thu, 18 Jun 2020 15:35:55 +0900 Subject: [PATCH 291/448] FROMLIST: ufs: introduce a callback to get info of command completion Some SoC specific might need command history for various reasons, such as stacking command contexts in system memory to check for debugging in the future or scaling some DVFS knobs to boost IO throughput. What you would do with the information could be variant per SoC vendor. Bug: 163100341 Link: https://lore.kernel.org/linux-scsi/159530290480.22526.15318134249960762889.b4-ty@oracle.com/T/#t Change-Id: I39a30ff742d3a2eebb66decb651e4cf5b990c1eb Signed-off-by: Kiwoong Kim Acked-by: Stanley Chu Reviewed-by: Avri Altman --- drivers/scsi/ufs/ufshcd.c | 1 + drivers/scsi/ufs/ufshcd.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index ea2454ef4543..3f07b57f6eb0 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5103,6 +5103,7 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba, for_each_set_bit(index, &completed_reqs, hba->nutrs) { lrbp = &hba->lrb[index]; cmd = lrbp->cmd; + ufshcd_vops_compl_xfer_req(hba, index, (cmd) ? true : false); if (cmd) { ufshcd_add_command_trace(hba, index, "complete"); result = ufshcd_transfer_rsp_status(hba, lrbp); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 4e55c71dbc18..c2fe5e1302a4 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -352,6 +352,7 @@ struct ufs_hba_variant_ops { struct ufs_pa_layer_attr *, struct ufs_pa_layer_attr *); void (*setup_xfer_req)(struct ufs_hba *, int, bool); + void (*compl_xfer_req)(struct ufs_hba *hba, int tag, bool is_scsi); void (*setup_task_mgmt)(struct ufs_hba *, int, u8); void (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme, enum ufs_notify_change_status); @@ -1198,6 +1199,13 @@ static inline void ufshcd_vops_setup_xfer_req(struct ufs_hba *hba, int tag, return hba->vops->setup_xfer_req(hba, tag, is_scsi_cmd); } +static inline void ufshcd_vops_compl_xfer_req(struct ufs_hba *hba, + int tag, bool is_scsi) +{ + if (hba->vops && hba->vops->compl_xfer_req) + hba->vops->compl_xfer_req(hba, tag, is_scsi); +} + static inline void ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba, int tag, u8 tm_function) { From 06f8eab9f40b3c3c22b23c879b5b09e5b60533ac Mon Sep 17 00:00:00 2001 From: JianMin Liu Date: Tue, 21 Jul 2020 12:13:35 +0800 Subject: [PATCH 292/448] ANDROID: binder: Add vendor hook to the binder - To apply vendor's performance tune for blocked binder transaction, add the hook on the begin/end of transaction. - ANDROID_VENDOR_DATA added to binder_transaction. Bug: 161400830 Signed-off-by: JianMin Liu Change-Id: If60870623ce2669200238172737dd8455ac34b02 --- drivers/android/binder.c | 8 ++++++++ drivers/android/vendor_hooks.c | 4 ++++ include/trace/hooks/binder.h | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 include/trace/hooks/binder.h diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 6d5b7d41e7c1..20508110192b 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -65,6 +65,7 @@ #include #include #include +#include #include #include @@ -75,6 +76,7 @@ #include "binder_alloc.h" #include "binder_internal.h" #include "binder_trace.h" +#include static HLIST_HEAD(binder_deferred_list); static DEFINE_MUTEX(binder_deferred_lock); @@ -620,6 +622,7 @@ struct binder_transaction { * during thread teardown */ spinlock_t lock; + ANDROID_VENDOR_DATA(1); }; /** @@ -1207,6 +1210,7 @@ static void binder_transaction_priority(struct task_struct *task, } binder_set_priority(task, desired_prio); + trace_android_vh_binder_set_priority(t, task); } static struct binder_node *binder_get_node_ilocked(struct binder_proc *proc, @@ -3230,6 +3234,7 @@ static void binder_transaction(struct binder_proc *proc, INIT_LIST_HEAD(&t->fd_fixups); binder_stats_created(BINDER_STAT_TRANSACTION); spin_lock_init(&t->lock); + trace_android_vh_binder_transaction_init(t); tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL); if (tcomplete == NULL) { @@ -3605,6 +3610,7 @@ static void binder_transaction(struct binder_proc *proc, binder_enqueue_thread_work_ilocked(target_thread, &t->work); binder_inner_proc_unlock(target_proc); wake_up_interruptible_sync(&target_thread->wait); + trace_android_vh_binder_restore_priority(in_reply_to, current); binder_restore_priority(current, in_reply_to->saved_priority); binder_free_transaction(in_reply_to); } else if (!(t->flags & TF_ONE_WAY)) { @@ -3716,6 +3722,7 @@ err_invalid_target_handle: BUG_ON(thread->return_error.cmd != BR_OK); if (in_reply_to) { + trace_android_vh_binder_restore_priority(in_reply_to, current); binder_restore_priority(current, in_reply_to->saved_priority); thread->return_error.cmd = BR_TRANSACTION_COMPLETE; binder_enqueue_thread_work(thread, &thread->return_error.work); @@ -4390,6 +4397,7 @@ retry: wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2); } + trace_android_vh_binder_restore_priority(NULL, current); binder_restore_priority(current, proc->default_priority); } diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index e2cd9e60f650..87eccccab050 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -11,6 +11,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -26,3 +27,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority); diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h new file mode 100644 index 000000000000..48ef1ebb65ba --- /dev/null +++ b/include/trace/hooks/binder.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM binder +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_BINDER_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_BINDER_H +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct binder_transaction; +struct task_struct; +DECLARE_HOOK(android_vh_binder_transaction_init, + TP_PROTO(struct binder_transaction *t), + TP_ARGS(t)); +DECLARE_HOOK(android_vh_binder_set_priority, + TP_PROTO(struct binder_transaction *t, struct task_struct *task), + TP_ARGS(t, task)); +DECLARE_HOOK(android_vh_binder_restore_priority, + TP_PROTO(struct binder_transaction *t, struct task_struct *task), + TP_ARGS(t, task)); +#else +#define trace_android_vh_binder_transaction_init(t) +#define trace_android_vh_binder_set_priority(t, task) +#define trace_android_vh_binder_restore_priority(t, task) +#endif +#endif /* _TRACE_HOOK_BINDER_H */ +/* This part must be outside protection */ +#include From cfde7b838c96085dc2cd94c544210e49888d5701 Mon Sep 17 00:00:00 2001 From: JianMin Liu Date: Tue, 21 Jul 2020 13:36:22 +0800 Subject: [PATCH 293/448] ANDROID: rwsem: Add vendor hook to the rw-semaphore - Add the hook to apply vendor's performance tune for owner of rwsem. - Add the hook for the waiter list of rwsem to allow vendor perform waiting queue enhancement - ANDROID_VENDOR_DATA added to rw_semaphore Bug: 161400830 Signed-off-by: JianMin Liu Change-Id: I007a5e26f3db2adaeaf4e5ccea414ce7abfa83b8 --- drivers/android/vendor_hooks.c | 5 +++++ include/linux/rwsem.h | 2 ++ include/trace/hooks/rwsem.h | 38 ++++++++++++++++++++++++++++++++++ kernel/locking/rwsem.c | 20 ++++++++++++++++-- 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 include/trace/hooks/rwsem.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 87eccccab050..cfbac73e4823 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -12,6 +12,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -30,3 +31,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 00d6054687dd..cf27ef69c9f0 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -19,6 +19,7 @@ #ifdef CONFIG_RWSEM_SPIN_ON_OWNER #include #endif +#include /* * For an uncontended rwsem, count and owner are the only fields a task @@ -51,6 +52,7 @@ struct rw_semaphore { #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lockdep_map dep_map; #endif + ANDROID_VENDOR_DATA(1); }; /* diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h new file mode 100644 index 000000000000..7c7a1f786369 --- /dev/null +++ b/include/trace/hooks/rwsem.h @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM rwsem +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_RWSEM_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_RWSEM_H +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct rw_semaphore; +struct rwsem_waiter; +DECLARE_HOOK(android_vh_rwsem_init, + TP_PROTO(struct rw_semaphore *sem), + TP_ARGS(sem)); +DECLARE_HOOK(android_vh_rwsem_wake, + TP_PROTO(struct rw_semaphore *sem), + TP_ARGS(sem)); +DECLARE_HOOK(android_vh_rwsem_write_finished, + TP_PROTO(struct rw_semaphore *sem), + TP_ARGS(sem)); +DECLARE_HOOK(android_vh_alter_rwsem_list_add, + TP_PROTO(struct rwsem_waiter *waiter, + struct rw_semaphore *sem, + bool *already_on_list), + TP_ARGS(waiter, sem, already_on_list)); +#else +#define trace_android_vh_rwsem_init(sem) +#define trace_android_vh_rwsem_wake(sem) +#define trace_android_vh_rwsem_write_finished(sem) +#define trace_android_vh_alter_rwsem_list_add(waiter, sem, already_on_list) +#endif +#endif /* _TRACE_HOOK_RWSEM_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c index fe9cf499b1d7..302870ff5cfe 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -32,6 +32,7 @@ #include "lock_events.h" #include +#include /* * The least significant 3 bits of the owner value has the following @@ -343,6 +344,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name, #ifdef CONFIG_RWSEM_SPIN_ON_OWNER osq_lock_init(&sem->osq); #endif + trace_android_vh_rwsem_init(sem); } EXPORT_SYMBOL(__init_rwsem); @@ -1000,6 +1002,7 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state) struct rwsem_waiter waiter; DEFINE_WAKE_Q(wake_q); bool wake = false; + bool already_on_list = false; /* * Save the current read-owner of rwsem, if available, and the @@ -1061,7 +1064,11 @@ queue: } adjustment += RWSEM_FLAG_WAITERS; } - list_add_tail(&waiter.list, &sem->wait_list); + trace_android_vh_alter_rwsem_list_add( + &waiter, + sem, &already_on_list); + if (!already_on_list) + list_add_tail(&waiter.list, &sem->wait_list); /* we're now waiting on the lock, but no longer actively locking */ if (adjustment) @@ -1083,6 +1090,7 @@ queue: (adjustment & RWSEM_FLAG_WAITERS))) rwsem_mark_wake(sem, RWSEM_WAKE_ANY, &wake_q); + trace_android_vh_rwsem_wake(sem); raw_spin_unlock_irq(&sem->wait_lock); wake_up_q(&wake_q); @@ -1149,6 +1157,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) struct rwsem_waiter waiter; struct rw_semaphore *ret = sem; DEFINE_WAKE_Q(wake_q); + bool already_on_list = false; /* do optimistic spinning and steal lock if possible */ if (rwsem_can_spin_on_owner(sem, RWSEM_WR_NONSPINNABLE) && @@ -1177,7 +1186,11 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) /* account for this before adding a new element to the list */ wstate = list_empty(&sem->wait_list) ? WRITER_FIRST : WRITER_NOT_FIRST; - list_add_tail(&waiter.list, &sem->wait_list); + trace_android_vh_alter_rwsem_list_add( + &waiter, + sem, &already_on_list); + if (!already_on_list) + list_add_tail(&waiter.list, &sem->wait_list); /* we're now waiting on the lock */ if (wstate == WRITER_NOT_FIRST) { @@ -1213,6 +1226,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) } wait: + trace_android_vh_rwsem_wake(sem); /* wait until we successfully acquire the lock */ trace_android_vh_rwsem_write_wait_start(sem); set_current_state(state); @@ -1592,6 +1606,7 @@ EXPORT_SYMBOL(up_read); void up_write(struct rw_semaphore *sem) { rwsem_release(&sem->dep_map, 1, _RET_IP_); + trace_android_vh_rwsem_write_finished(sem); __up_write(sem); } EXPORT_SYMBOL(up_write); @@ -1602,6 +1617,7 @@ EXPORT_SYMBOL(up_write); void downgrade_write(struct rw_semaphore *sem) { lock_downgrade(&sem->dep_map, _RET_IP_); + trace_android_vh_rwsem_write_finished(sem); __downgrade_write(sem); } EXPORT_SYMBOL(downgrade_write); From 3b773b24e67678aae79072c2d5b7783e7d5dc6a1 Mon Sep 17 00:00:00 2001 From: JianMin Liu Date: Mon, 10 Aug 2020 23:15:09 +0800 Subject: [PATCH 294/448] ANDROID: sched: add vendor hooks to handle scheduling priority Add hooks to collect scheduling information and apply vendor's tuning when task's scheduling priority is changed Bug: 163431711 Signed-off-by: JianMin Liu Change-Id: Ic85835852690d0060666107d9108560f5023496b --- drivers/android/vendor_hooks.c | 5 +++++ include/trace/hooks/sched.h | 25 +++++++++++++++++++++++++ kernel/sched/core.c | 9 +++++++++ 3 files changed, 39 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index cfbac73e4823..c0a6bcbdb2b0 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -19,6 +19,11 @@ * associated with them) to allow external modules to probe them. */ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index e4ef56686a76..372572a66d20 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -15,8 +15,33 @@ struct task_struct; DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair, TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu), TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_prepare_prio_fork, + TP_PROTO(struct task_struct *p), + TP_ARGS(p), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_finish_prio_fork, + TP_PROTO(struct task_struct *p), + TP_ARGS(p), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_prepare_setprio, + TP_PROTO(struct task_struct *p, struct task_struct *pi_task), + TP_ARGS(p, pi_task), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice, + TP_PROTO(struct task_struct *p, long *nice), + TP_ARGS(p, nice), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler, + TP_PROTO(struct task_struct *p), + TP_ARGS(p), 1); #else #define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu) +#define trace_android_rvh_prepare_prio_fork(p) +#define trace_android_rvh_finish_prio_fork(p) +#define trace_android_rvh_rtmutex_prepare_setprio(p, pi_task) +#define trace_android_rvh_set_user_nice(p, nice) +#define trace_android_rvh_setscheduler(p) #endif #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 51e0568fb08e..bb83e9a46af8 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -27,6 +27,9 @@ #undef CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include + /* * Export tracepoints that act as a bare tracehook (ie: have no trace event * associated with them) to allow external modules to probe them. @@ -2863,6 +2866,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) * Make sure we do not leak PI boosting priority to the child. */ p->prio = current->normal_prio; + trace_android_rvh_prepare_prio_fork(p); uclamp_fork(p); @@ -2895,6 +2899,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) p->sched_class = &fair_sched_class; init_entity_runnable_average(&p->se); + trace_android_rvh_finish_prio_fork(p); /* * The child is not yet in the pid-hash so no cgroup attach races, @@ -4392,6 +4397,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) struct rq_flags rf; struct rq *rq; + trace_android_rvh_rtmutex_prepare_setprio(p, pi_task); /* XXX used to be waiter->prio, not waiter->task->prio */ prio = __rt_effective_prio(pi_task, p->normal_prio); @@ -4523,6 +4529,7 @@ void set_user_nice(struct task_struct *p, long nice) */ rq = task_rq_lock(p, &rf); update_rq_clock(rq); + trace_android_rvh_set_user_nice(p, &nice); /* * The RT priorities are set via sched_setscheduler(), but we still @@ -4746,6 +4753,8 @@ static void __setscheduler(struct rq *rq, struct task_struct *p, p->sched_class = &rt_sched_class; else p->sched_class = &fair_sched_class; + + trace_android_rvh_setscheduler(p); } /* From 2f0f512eb023246618dff7b1e65a55496d320774 Mon Sep 17 00:00:00 2001 From: JianMin Liu Date: Tue, 11 Aug 2020 15:24:06 +0800 Subject: [PATCH 295/448] ANDROID: futex: Add vendor hook for wait queue Add the hook for the waiter list of futex to allow vendor perform wait queue enhancement Bug: 163431711 Signed-off-by: JianMin Liu Change-Id: I68218b89c35b23aa5529099bb0bbbd031bdeafef --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/futex.h | 26 ++++++++++++++++++++++++++ kernel/futex.c | 6 +++++- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 include/trace/hooks/futex.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c0a6bcbdb2b0..9b8c599152e8 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -13,6 +13,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -40,3 +41,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add); diff --git a/include/trace/hooks/futex.h b/include/trace/hooks/futex.h new file mode 100644 index 000000000000..cbf6abb66a57 --- /dev/null +++ b/include/trace/hooks/futex.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM futex +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_FUTEX_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_FUTEX_H +#include +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +DECLARE_HOOK(android_vh_alter_futex_plist_add, + TP_PROTO(struct plist_node *node, + struct plist_head *head, + bool *already_on_hb), + TP_ARGS(node, head, already_on_hb)); +#else +#define trace_android_vh_alter_futex_plist_add(node, head, already_on_hb) +#endif +#endif /* _TRACE_HOOK_FUTEX_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/futex.c b/kernel/futex.c index 5660c02b01b0..d3867d6f5c41 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -60,6 +60,7 @@ #include #include "locking/rtmutex_common.h" +#include /* * READ this before attempting to hack on futexes! @@ -2346,6 +2347,7 @@ queue_unlock(struct futex_hash_bucket *hb) static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb) { int prio; + bool already_on_hb = false; /* * The priority used to register this element is @@ -2358,7 +2360,9 @@ static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb) prio = min(current->normal_prio, MAX_RT_PRIO); plist_node_init(&q->list, prio); - plist_add(&q->list, &hb->chain); + trace_android_vh_alter_futex_plist_add(&q->list, &hb->chain, &already_on_hb); + if (!already_on_hb) + plist_add(&q->list, &hb->chain); q->task = current; } From 25451dc193e016d88ede470ee474106daa481e95 Mon Sep 17 00:00:00 2001 From: Wooyeon Kim Date: Thu, 9 Jul 2020 14:43:13 +0900 Subject: [PATCH 296/448] ANDROID: vendor_hooks: FPSIMD save/restore by using vendor_hooks - To use fpsimd in kernel task, vendor_hook call is needed to save/restore fpsimd at scheduling time. - ANDROID_VENDOR_DATA added to thread_struct. - Vendor_hooks is called when thread is switching for save/restore fpsimd states. (trace_android_vh_is_fpsimd_save(prev, next)) Bug: 149632552 Bug: 165161482 Signed-off-by: Wooyeon Kim Change-Id: I853e1b6a9a51e24f770423bbc39fdd84265d78fc --- arch/arm64/include/asm/processor.h | 3 +++ arch/arm64/kernel/process.c | 3 +++ drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/fpsimd.h | 26 ++++++++++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 include/trace/hooks/fpsimd.h diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index 53e1f132a759..dd70db7f7d07 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -138,6 +139,8 @@ struct thread_struct { struct user_fpsimd_state fpsimd_state; } uw; + ANDROID_VENDOR_DATA(1); + unsigned int fpsimd_cpu; void *sve_state; /* SVE registers, if any */ unsigned int sve_vl; /* SVE vector length */ diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index cc1d8b1025b1..08637a8d911f 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -520,6 +521,8 @@ __notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev, */ dsb(ish); + trace_android_vh_is_fpsimd_save(prev, next); + /* the actual thread switch */ last = cpu_switch_to(prev, next); diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9b8c599152e8..0ef12110a8e7 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -14,6 +14,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -42,3 +43,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_is_fpsimd_save); diff --git a/include/trace/hooks/fpsimd.h b/include/trace/hooks/fpsimd.h new file mode 100644 index 000000000000..73ad2c0009c3 --- /dev/null +++ b/include/trace/hooks/fpsimd.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fpsimd + +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_FPSIMD_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_FPSIMD_H + +#include +#include + +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct task_struct; + +DECLARE_HOOK(android_vh_is_fpsimd_save, + TP_PROTO(struct task_struct *prev, struct task_struct *next), + TP_ARGS(prev, next)) +#else + +#define trace_android_vh_is_fpsimd_save(prev, next) +#endif + +#endif /* _TRACE_HOOK_FPSIMD_H */ +/* This part must be outside protection */ +#include From 7aa42521f7632a4075134248c9b2918d1dc5809a Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Thu, 20 Aug 2020 13:23:01 -0700 Subject: [PATCH 297/448] ANDROID: ABI: FPSIMD save/restore using vendor_hooks Leaf changes summary: 3195 artifacts changed (11 filtered out) Changed leaf types summary: 3 leaf types changed Removed/Changed/Added functions summary: 0 Removed, 3146 Changed (11 filtered out), 0 Added function Removed/Changed/Added variables summary: 0 Removed, 46 Changed, 0 Added variable 3146 functions with some sub-type change: [C] 'function void* PDE_DATA(const inode*)' at proc_fs.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0xa4a24bcc to 0xe81d9abd [C] 'function int ___pskb_trim(sk_buff*, unsigned int)' at skbuff.c:1927:1 has some sub-type changes: CRC value (modversions) changed from 0xf9aa5096 to 0x759ae83f [C] 'function gendisk* __alloc_disk_node(int, int)' at genhd.c:1464:1 has some sub-type changes: CRC value (modversions) changed from 0x7793feec to 0x2d5b52d7 [C] 'function page* __alloc_pages_nodemask(gfp_t, unsigned int, int, nodemask_t*)' at page_alloc.c:4800:1 has some sub-type changes: CRC value (modversions) changed from 0xced3c19d to 0x1940af7f [C] 'function sk_buff* __alloc_skb(unsigned int, gfp_t, int, int)' at skbuff.c:182:1 has some sub-type changes: CRC value (modversions) changed from 0xfcf5b3d3 to 0x71b268bb [C] 'function void __blk_mq_end_request(request*, blk_status_t)' at blk-mq.c:540:1 has some sub-type changes: CRC value (modversions) changed from 0x8b146d0d to 0x5488eb64 [C] 'function int __blkdev_issue_discard(block_device*, sector_t, sector_t, gfp_t, int, bio**)' at blk-lib.c:25:1 has some sub-type changes: CRC value (modversions) changed from 0xf527caaf to 0x4a2410e9 [C] 'function int __blkdev_issue_zeroout(block_device*, sector_t, sector_t, gfp_t, bio**, unsigned int)' at blk-lib.c:324:1 has some sub-type changes: CRC value (modversions) changed from 0xe340eb44 to 0xd6a4ea85 [C] 'function ssize_t __blockdev_direct_IO(kiocb*, inode*, block_device*, iov_iter*, get_block_t*, dio_iodone_t*, dio_submit_t*, int)' at direct-io.c:1407:1 has some sub-type changes: CRC value (modversions) changed from 0x45f1d1ef to 0xf771a682 [C] 'function buffer_head* __bread_gfp(block_device*, sector_t, unsigned int, gfp_t)' at buffer.c:1365:1 has some sub-type changes: CRC value (modversions) changed from 0x81e55516 to 0xa49233fc [C] 'function void __breadahead(block_device*, sector_t, unsigned int)' at buffer.c:1331:1 has some sub-type changes: CRC value (modversions) changed from 0xab59ed30 to 0x32cb9264 [C] 'function int __break_lease(inode*, unsigned int, unsigned int)' at locks.c:1603:1 has some sub-type changes: CRC value (modversions) changed from 0xd16b975 to 0xdc861395 [C] 'function void __brelse(buffer_head*)' at buffer.c:1140:1 has some sub-type changes: CRC value (modversions) changed from 0x26a0e414 to 0xfddabbb2 [C] 'function sk_buff* __cfg80211_alloc_event_skb(wiphy*, wireless_dev*, nl80211_commands, nl80211_attrs, unsigned int, int, int, gfp_t)' at nl80211.c:9903:1 has some sub-type changes: CRC value (modversions) changed from 0x11164ddd to 0xf35cc793 [C] 'function sk_buff* __cfg80211_alloc_reply_skb(wiphy*, nl80211_commands, nl80211_attrs, int)' at nl80211.c:13402:1 has some sub-type changes: CRC value (modversions) changed from 0x8ca337f9 to 0x6905fce6 [C] 'function void __cfg80211_send_event_skb(sk_buff*, gfp_t)' at nl80211.c:9936:1 has some sub-type changes: CRC value (modversions) changed from 0xe75ef328 to 0x6205b957 [C] 'function class* __class_create(module*, const char*, lock_class_key*)' at class.c:225:1 has some sub-type changes: CRC value (modversions) changed from 0x75e0b412 to 0x552a7b7f [C] 'function int __class_register(class*, lock_class_key*)' at class.c:152:1 has some sub-type changes: CRC value (modversions) changed from 0x3b179070 to 0x54b89789 [C] 'function int __clk_determine_rate(clk_hw*, clk_rate_request*)' at clk.c:1434:1 has some sub-type changes: CRC value (modversions) changed from 0x7e034cdc to 0x56e94a87 [C] 'function clk_hw* __clk_get_hw(clk*)' at clk.c:278:1 has some sub-type changes: CRC value (modversions) changed from 0xc629ca7a to 0x1131c84f [C] 'function int __clk_mux_determine_rate(clk_hw*, clk_rate_request*)' at clk.c:661:1 has some sub-type changes: CRC value (modversions) changed from 0xe963a51e to 0x14537bc0 [C] 'function int __clk_mux_determine_rate_closest(clk_hw*, clk_rate_request*)' at clk.c:668:1 has some sub-type changes: CRC value (modversions) changed from 0x22400527 to 0xe3655184 [C] 'function int __clocksource_register_scale(clocksource*, u32, u32)' at clocksource.c:925:1 has some sub-type changes: CRC value (modversions) changed from 0x292be5ee to 0x22437886 [C] 'function int __close_fd(files_struct*, unsigned int)' at file.c:621:1 has some sub-type changes: CRC value (modversions) changed from 0x15a1c2e0 to 0xc26ef580 [C] 'function int __compat_only_sysfs_link_entry_to_kobj(kobject*, kobject*, const char*)' at group.c:424:1 has some sub-type changes: CRC value (modversions) changed from 0x2258eedb to 0xe48b2164 [C] 'function int __cpufreq_driver_target(cpufreq_policy*, unsigned int, unsigned int)' at cpufreq.c:2142:1 has some sub-type changes: CRC value (modversions) changed from 0x4c207ea to 0x7fd1a502 [C] 'function net_device* __dev_get_by_index(net*, int)' at dev.c:735:1 has some sub-type changes: CRC value (modversions) changed from 0x728ddac0 to 0xbdf79956 [C] 'function net_device* __dev_get_by_name(net*, const char*)' at dev.c:660:1 has some sub-type changes: CRC value (modversions) changed from 0x39ba5067 to 0x644ad358 [C] 'function void __dev_kfree_skb_any(sk_buff*, skb_free_reason)' at dev.c:2739:1 has some sub-type changes: CRC value (modversions) changed from 0xbf04e06e to 0x94dd12e5 [C] 'function void __dev_kfree_skb_irq(sk_buff*, skb_free_reason)' at dev.c:2717:1 has some sub-type changes: CRC value (modversions) changed from 0x181d5d70 to 0x8701476 [C] 'function int __devm_iio_device_register(device*, iio_dev*, module*)' at industrialio-core.c:1742:1 has some sub-type changes: CRC value (modversions) changed from 0xc8ed4752 to 0x8debde9d [C] 'function int __devm_irq_alloc_descs(device*, int, unsigned int, unsigned int, int, module*, const irq_affinity_desc*)' at devres.c:178:1 has some sub-type changes: CRC value (modversions) changed from 0xdc5987c5 to 0xde681ae4 [C] 'function phy_provider* __devm_of_phy_provider_register(device*, device_node*, module*, phy* (device*, of_phandle_args*)*)' at phy-core.c:1041:1 has some sub-type changes: CRC value (modversions) changed from 0x59976542 to 0x9f52ee8c [C] 'function regmap* __devm_regmap_init(device*, const regmap_bus*, void*, const regmap_config*, lock_class_key*, const char*)' at regmap.c:1171:1 has some sub-type changes: CRC value (modversions) changed from 0xbd87aa9a to 0xdbd8ce82 [C] 'function regmap* __devm_regmap_init_i2c(i2c_client*, const regmap_config*, lock_class_key*, const char*)' at regmap-i2c.c:292:1 has some sub-type changes: CRC value (modversions) changed from 0xc90cdefe to 0x8618fc84 [C] 'function regmap* __devm_regmap_init_mmio_clk(device*, const char*, void*, const regmap_config*, lock_class_key*, const char*)' at regmap-mmio.c:339:1 has some sub-type changes: CRC value (modversions) changed from 0x324d7933 to 0x98b06985 [C] 'function void __devm_release_region(device*, resource*, resource_size_t, resource_size_t)' at resource.c:1476:1 has some sub-type changes: CRC value (modversions) changed from 0xe9c5fdd5 to 0x371866dd [C] 'function resource* __devm_request_region(device*, resource*, resource_size_t, resource_size_t, const char*)' at resource.c:1451:1 has some sub-type changes: CRC value (modversions) changed from 0xbc7cd68 to 0xb4a0b4cc [C] 'function reset_control* __devm_reset_control_get(device*, const char*, int, bool, bool, bool)' at core.c:778:1 has some sub-type changes: CRC value (modversions) changed from 0xf0aa40eb to 0x1567be29 [C] 'function dma_chan* __dma_request_channel(const dma_cap_mask_t*, dma_filter_fn, void*, device_node*)' at dmaengine.c:636:1 has some sub-type changes: CRC value (modversions) changed from 0x618c3e96 to 0x206d4ca5 [C] 'function void __drm_atomic_helper_connector_destroy_state(drm_connector_state*)' at drm_atomic_state_helper.c:457:1 has some sub-type changes: CRC value (modversions) changed from 0x7ecf25d0 to 0x366086ec [C] 'function void __drm_atomic_helper_connector_duplicate_state(drm_connector*, drm_connector_state*)' at drm_atomic_state_helper.c:409:1 has some sub-type changes: CRC value (modversions) changed from 0x30fc3fd5 to 0xfab4dc82 [C] 'function void __drm_atomic_helper_connector_reset(drm_connector*, drm_connector_state*)' at drm_atomic_state_helper.c:351:1 has some sub-type changes: CRC value (modversions) changed from 0x5fcf2d50 to 0x329c3c1d [C] 'function void __drm_atomic_helper_crtc_destroy_state(drm_crtc_state*)' at drm_atomic_state_helper.c:170:1 has some sub-type changes: CRC value (modversions) changed from 0x601875f7 to 0x4bc8c382 [C] 'function void __drm_atomic_helper_crtc_duplicate_state(drm_crtc*, drm_crtc_state*)' at drm_atomic_state_helper.c:110:1 has some sub-type changes: CRC value (modversions) changed from 0xb057c26f to 0x36c71c19 [C] 'function void __drm_atomic_helper_crtc_reset(drm_crtc*, drm_crtc_state*)' at drm_atomic_state_helper.c:73:1 has some sub-type changes: CRC value (modversions) changed from 0xb400aa3 to 0xbaf7e24d [C] 'function void __drm_atomic_helper_plane_destroy_state(drm_plane_state*)' at drm_atomic_state_helper.c:307:1 has some sub-type changes: CRC value (modversions) changed from 0xbae4d542 to 0x686bcfb6 [C] 'function void __drm_atomic_helper_plane_duplicate_state(drm_plane*, drm_plane_state*)' at drm_atomic_state_helper.c:262:1 has some sub-type changes: CRC value (modversions) changed from 0x68a7f454 to 0x8103ced0 [C] 'function void __drm_atomic_helper_private_obj_duplicate_state(drm_private_obj*, drm_private_state*)' at drm_atomic_state_helper.c:496:1 has some sub-type changes: CRC value (modversions) changed from 0x591aca1 to 0x43424e55 [C] 'function void __dynamic_dev_dbg(_ddebug*, const device*, const char*, ...)' at dynamic_debug.c:572:1 has some sub-type changes: CRC value (modversions) changed from 0xf5af3c6f to 0x3b09f616 [C] 'function int __ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)' at ethtool.c:544:1 has some sub-type changes: CRC value (modversions) changed from 0xed1d55d to 0x4850b6f5 [C] 'function buffer_head* __find_get_block(block_device*, sector_t, unsigned int)' at buffer.c:1291:1 has some sub-type changes: CRC value (modversions) changed from 0xcc05a44c to 0x77227fce [C] 'function void __free_pages(page*, unsigned int)' at page_alloc.c:4896:1 has some sub-type changes: CRC value (modversions) changed from 0x2544d942 to 0xfcbd8c34 [C] 'function int __genphy_config_aneg(phy_device*, bool)' at phy_device.c:1692:1 has some sub-type changes: CRC value (modversions) changed from 0x782d929d to 0x599886c2 [C] 'function char* __get_task_comm(char*, size_t, task_struct*)' at exec.c:1229:1 has some sub-type changes: CRC value (modversions) changed from 0x31e98ddc to 0x81393e3 [C] 'function buffer_head* __getblk_gfp(block_device*, sector_t, unsigned int, gfp_t)' at buffer.c:1316:1 has some sub-type changes: CRC value (modversions) changed from 0xebaffc81 to 0xab558081 [C] 'function void __hvc_resize(hvc_struct*, winsize)' at hvc_console.c:778:1 has some sub-type changes: CRC value (modversions) changed from 0xe7150b8b to 0xd03b4a32 [C] 'function int __hwspin_lock_timeout(hwspinlock*, unsigned int, int, unsigned long int*)' at hwspinlock_core.c:206:1 has some sub-type changes: CRC value (modversions) changed from 0x304f52c2 to 0xdb879b68 [C] 'function void __hwspin_unlock(hwspinlock*, int, unsigned long int*)' at hwspinlock_core.c:265:1 has some sub-type changes: CRC value (modversions) changed from 0x713375af to 0x1c10dc7b [C] 'function int __iio_device_register(iio_dev*, module*)' at industrialio-core.c:1643:1 has some sub-type changes: CRC value (modversions) changed from 0xf519efee to 0x56ed67a9 [C] 'function int __iio_trigger_register(iio_trigger*, module*)' at industrialio-trigger.c:66:1 has some sub-type changes: CRC value (modversions) changed from 0xbc28e8ea to 0x81cc4e98 [C] 'function void __insert_inode_hash(inode*, unsigned long int)' at inode.c:494:1 has some sub-type changes: CRC value (modversions) changed from 0x2f71a80e to 0x547253eb [C] 'function int __ion_device_add_heap(ion_heap*, module*)' at ion.c:314:1 has some sub-type changes: CRC value (modversions) changed from 0x15b5cee0 to 0x29da5248 [C] 'function void __ip_select_ident(net*, iphdr*, int)' at route.c:506:1 has some sub-type changes: CRC value (modversions) changed from 0x82c1028f to 0x8727376c [C] 'function irq_domain* __irq_domain_add(fwnode_handle*, int, irq_hw_number_t, int, const irq_domain_ops*, void*)' at irqdomain.c:130:1 has some sub-type changes: CRC value (modversions) changed from 0x838a2dd7 to 0x5b33289d [C] 'function void __irq_set_handler(unsigned int, irq_flow_handler_t, int, const char*)' at chip.c:1069:1 has some sub-type changes: CRC value (modversions) changed from 0x90539252 to 0xf05ecfc4 [C] 'function void __kthread_init_worker(kthread_worker*, const char*, lock_class_key*)' at kthread.c:619:1 has some sub-type changes: CRC value (modversions) changed from 0x41f25eac to 0x75b3e3b2 [C] 'function void __lock_buffer(buffer_head*)' at buffer.c:65:1 has some sub-type changes: CRC value (modversions) changed from 0x92d6a905 to 0xc9505ef [C] 'function void __lock_page(page*)' at filemap.c:1379:1 has some sub-type changes: CRC value (modversions) changed from 0xed932d6a to 0x7de422c1 [C] 'function void __mark_inode_dirty(inode*, int)' at fs-writeback.c:2245:1 has some sub-type changes: CRC value (modversions) changed from 0xfaac2bb5 to 0xe75a13a7 [C] 'function int __mdiobus_read(mii_bus*, int, u32)' at mdio_bus.c:549:1 has some sub-type changes: CRC value (modversions) changed from 0xc836c6ce to 0x2234de48 [C] 'function int __mdiobus_register(mii_bus*, module*)' at mdio_bus.c:369:1 has some sub-type changes: CRC value (modversions) changed from 0xb18b7ede to 0xd7e3023a [C] 'function int __mdiobus_write(mii_bus*, int, u32, u16)' at mdio_bus.c:574:1 has some sub-type changes: CRC value (modversions) changed from 0xbbffe1a3 to 0xc80390b [C] 'function int __mmc_claim_host(mmc_host*, mmc_ctx*, atomic_t*)' at core.c:796:1 has some sub-type changes: CRC value (modversions) changed from 0x37cc3cc0 to 0xf74a9e3f [C] 'function int __mmc_send_status(mmc_card*, u32*, unsigned int)' at mmc_ops.c:54:1 has some sub-type changes: CRC value (modversions) changed from 0xbafb5bbc to 0x4b41a89c [C] 'function void __mmdrop(mm_struct*)' at fork.c:690:1 has some sub-type changes: CRC value (modversions) changed from 0xf9b3d44c to 0xfc894994 [C] 'function void __module_get(module*)' at module.c:1113:1 has some sub-type changes: CRC value (modversions) changed from 0x5920131e to 0x581928f [C] 'function sk_buff* __napi_alloc_skb(napi_struct*, unsigned int, gfp_t)' at skbuff.c:497:1 has some sub-type changes: CRC value (modversions) changed from 0xba047fde to 0x83af58ee [C] 'function void __napi_schedule(napi_struct*)' at dev.c:5913:1 has some sub-type changes: CRC value (modversions) changed from 0xbdf8a8d7 to 0xf0a4d4f9 [C] 'function sk_buff* __netdev_alloc_skb(net_device*, unsigned int, gfp_t)' at skbuff.c:425:1 has some sub-type changes: CRC value (modversions) changed from 0xcadc86f7 to 0xf4257b94 [C] 'function int __netif_set_xps_queue(net_device*, const unsigned long int*, u16, bool)' at dev.c:2243:1 has some sub-type changes: CRC value (modversions) changed from 0x304f55e to 0x57759fe3 [C] 'function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*)' at af_netlink.c:2299:1 has some sub-type changes: CRC value (modversions) changed from 0xc81412c4 to 0xfc423f34 [C] 'function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*)' at af_netlink.c:2026:1 has some sub-type changes: CRC value (modversions) changed from 0x7f602a78 to 0xdd372531 [C] 'function nlmsghdr* __nlmsg_put(sk_buff*, u32, u32, int, int, int)' at af_netlink.c:2166:1 has some sub-type changes: CRC value (modversions) changed from 0x18779485 to 0xcd51b0f7 [C] 'function reset_control* __of_reset_control_get(device_node*, const char*, int, bool, bool, bool)' at core.c:600:1 has some sub-type changes: CRC value (modversions) changed from 0xb83611df to 0x94998dd5 [C] 'function int __pci_register_driver(pci_driver*, module*, const char*)' at pci-driver.c:1435:1 has some sub-type changes: CRC value (modversions) changed from 0x2ce6275c to 0x56b31bd0 [C] 'function int __platform_driver_probe(platform_driver*, int (platform_device*)*, module*)' at platform.c:775:1 has some sub-type changes: CRC value (modversions) changed from 0x94d9b742 to 0xd7e70c7 [C] 'function int __platform_driver_register(platform_driver*, module*)' at platform.c:732:1 has some sub-type changes: CRC value (modversions) changed from 0xae849d67 to 0x133dc87c [C] 'function int __platform_register_drivers(platform_driver* const*, unsigned int, module*)' at platform.c:897:1 has some sub-type changes: CRC value (modversions) changed from 0x1051e4c3 to 0x42f62dcf [C] 'function void __pm_relax(wakeup_source*)' at wakeup.c:699:1 has some sub-type changes: CRC value (modversions) changed from 0x72e5dade to 0xe53408c5 [C] 'function void __pm_runtime_disable(device*, bool)' at runtime.c:1330:1 has some sub-type changes: CRC value (modversions) changed from 0x637c196b to 0x667865c1 [C] 'function int __pm_runtime_idle(device*, int)' at runtime.c:1003:1 has some sub-type changes: CRC value (modversions) changed from 0x31887e64 to 0x807f3b [C] 'function int __pm_runtime_resume(device*, int)' at runtime.c:1066:1 has some sub-type changes: CRC value (modversions) changed from 0xefa88687 to 0x13c9c6ad [C] 'function int __pm_runtime_set_status(device*, unsigned int)' at runtime.c:1133:1 has some sub-type changes: CRC value (modversions) changed from 0xcce0aa74 to 0x45afad6e [C] 'function int __pm_runtime_suspend(device*, int)' at runtime.c:1035:1 has some sub-type changes: CRC value (modversions) changed from 0x25ce7fcf to 0x72cf3219 [C] 'function void __pm_runtime_use_autosuspend(device*, bool)' at runtime.c:1549:1 has some sub-type changes: CRC value (modversions) changed from 0x43e34927 to 0xe020c8f8 [C] 'function void __pm_stay_awake(wakeup_source*)' at wakeup.c:582:1 has some sub-type changes: CRC value (modversions) changed from 0xd37a167b to 0x4a87db3 [C] 'function sk_buff* __pskb_copy_fclone(sk_buff*, int, gfp_t, bool)' at skbuff.c:1550:1 has some sub-type changes: CRC value (modversions) changed from 0xca52504b to 0x230ede83 [C] 'function void* __pskb_pull_tail(sk_buff*, int)' at skbuff.c:2052:1 has some sub-type changes: CRC value (modversions) changed from 0x5c181054 to 0x2369787f [C] 'function void __put_net(net*)' at net_namespace.c:638:1 has some sub-type changes: CRC value (modversions) changed from 0x9b39bc90 to 0x6bae94cb [C] 'function void __put_page(page*)' at swap.c:100:1 has some sub-type changes: CRC value (modversions) changed from 0xa516e3a9 to 0x48e1e6bd [C] 'function void __put_task_struct(task_struct*)' at fork.c:739:1 has some sub-type changes: CRC value (modversions) changed from 0xfa0339b1 to 0x7df2b6f7 [C] 'function sock* __raw_v4_lookup(net*, sock*, unsigned short int, __be32, __be32, int, int)' at raw.c:120:1 has some sub-type changes: CRC value (modversions) changed from 0xbec6787d to 0xb9694701 [C] 'function sock* __raw_v6_lookup(net*, sock*, unsigned short int, const in6_addr*, const in6_addr*, int, int)' at raw.c:69:1 has some sub-type changes: CRC value (modversions) changed from 0xf517f43f to 0xd22d6dec [C] 'function void __register_binfmt(linux_binfmt*, int)' at exec.c:81:1 has some sub-type changes: CRC value (modversions) changed from 0x4ec28363 to 0x841279ab [C] 'function int __register_chrdev(unsigned int, unsigned int, unsigned int, const char*, const file_operations*)' at char_dev.c:268:1 has some sub-type changes: CRC value (modversions) changed from 0x132bb87b to 0x388f1983 [C] 'function int __register_rpmsg_driver(rpmsg_driver*, module*)' at rpmsg_core.c:604:1 has some sub-type changes: CRC value (modversions) changed from 0x89913790 to 0xcc719da7 [C] 'function regmap* __regmap_init(device*, const regmap_bus*, void*, const regmap_config*, lock_class_key*, const char*)' at regmap.c:674:1 has some sub-type changes: CRC value (modversions) changed from 0xc4a9ec7d to 0x816994bc [C] 'function void __remove_inode_hash(inode*)' at inode.c:512:1 has some sub-type changes: CRC value (modversions) changed from 0x1c85c2c0 to 0xd13985dc [C] 'function int __rtc_register_device(module*, rtc_device*)' at class.c:344:1 has some sub-type changes: CRC value (modversions) changed from 0x80031d2c to 0x59ddf80a [C] 'function scsi_device* __scsi_add_device(Scsi_Host*, uint, uint, u64, void*)' at scsi_scan.c:1460:1 has some sub-type changes: CRC value (modversions) changed from 0x83094eeb to 0x456f407b [C] 'function scsi_device* __scsi_device_lookup_by_target(scsi_target*, u64)' at scsi.c:655:1 has some sub-type changes: CRC value (modversions) changed from 0xebc8d8c7 to 0xda211d5b [C] 'function int __scsi_execute(scsi_device*, const unsigned char*, int, void*, unsigned int, unsigned char*, scsi_sense_hdr*, int, int, u64, req_flags_t, int*)' at scsi_lib.c:248:1 has some sub-type changes: CRC value (modversions) changed from 0x4028558 to 0x234d6be7 [C] 'function void __scsi_print_sense(const scsi_device*, const char*, const unsigned char*, int)' at scsi_logging.c:370:1 has some sub-type changes: CRC value (modversions) changed from 0x2f746e01 to 0x7f959158 [C] 'function int __sdhci_add_host(sdhci_host*)' at sdhci.c:4415:1 has some sub-type changes: CRC value (modversions) changed from 0x4eba812f to 0x642cdb7b [C] 'function void* __seq_open_private(file*, const seq_operations*, int)' at seq_file.c:624:1 has some sub-type changes: CRC value (modversions) changed from 0xef52b3db to 0x4b2072ee [C] 'function void __serio_register_port(serio*, module*)' at serio.c:695:1 has some sub-type changes: CRC value (modversions) changed from 0x473e1e46 to 0x2b462628 [C] 'function int __sg_alloc_table_from_pages(sg_table*, page**, unsigned int, unsigned int, unsigned long int, unsigned int, gfp_t)' at scatterlist.c:389:1 has some sub-type changes: CRC value (modversions) changed from 0xdc78939c to 0x6a9b930c [C] 'function int __sk_receive_skb(sock*, sk_buff*, const int, unsigned int, bool)' at sock.c:498:1 has some sub-type changes: CRC value (modversions) changed from 0xdc9f5940 to 0xce3719b5 [C] 'function bool __skb_flow_dissect(const net*, const sk_buff*, flow_dissector*, void*, void*, __be16, int, int, unsigned int)' at flow_dissector.c:893:1 has some sub-type changes: CRC value (modversions) changed from 0x35ebc38b to 0x3c25b872 [C] 'function void __skb_get_hash(sk_buff*)' at flow_dissector.c:1576:1 has some sub-type changes: CRC value (modversions) changed from 0xa93a555a to 0x2d70bbb4 [C] 'function sk_buff* __skb_gso_segment(sk_buff*, netdev_features_t, bool)' at dev.c:2997:1 has some sub-type changes: CRC value (modversions) changed from 0x897c1863 to 0xb9327a21 [C] 'function int __skb_pad(sk_buff*, int, bool)' at skbuff.c:1794:1 has some sub-type changes: CRC value (modversions) changed from 0xa5b4a7df to 0x56676d34 [C] 'function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*)' at socket.c:857:1 has some sub-type changes: CRC value (modversions) changed from 0xc630c2cd to 0x91f545b6 [C] 'function spi_controller* __spi_alloc_controller(device*, unsigned int, bool)' at spi.c:2214:1 has some sub-type changes: CRC value (modversions) changed from 0x315c7a40 to 0x4c8b57e2 [C] 'function int __spi_register_driver(module*, spi_driver*)' at spi.c:441:1 has some sub-type changes: CRC value (modversions) changed from 0xfe02e234 to 0x84c4b2b0 [C] 'function ssize_t __splice_from_pipe(pipe_inode_info*, splice_desc*, splice_actor*)' at splice.c:614:1 has some sub-type changes: CRC value (modversions) changed from 0xd11a504d to 0x7a8b9afd [C] 'function int __spmi_driver_register(spmi_driver*, module*)' at spmi.c:566:1 has some sub-type changes: CRC value (modversions) changed from 0xcc3fccd to 0xb9fb031d [C] 'function int __sync_dirty_buffer(buffer_head*, int)' at buffer.c:3169:1 has some sub-type changes: CRC value (modversions) changed from 0x16331761 to 0x10fe4e71 [C] 'function pid_t __task_pid_nr_ns(task_struct*, pid_type, pid_namespace*)' at pid.c:425:1 has some sub-type changes: CRC value (modversions) changed from 0x41da779c to 0xd0e0b3cb [C] 'function tty_driver* __tty_alloc_driver(unsigned int, module*, unsigned long int)' at tty_io.c:3205:1 has some sub-type changes: CRC value (modversions) changed from 0x9493c436 to 0x9dcf7738 [C] 'function int __tty_insert_flip_char(tty_port*, unsigned char, char)' at tty_buffer.c:379:1 has some sub-type changes: CRC value (modversions) changed from 0xca4aa36 to 0x5e66e1e0 [C] 'function int __uio_register_device(module*, device*, uio_info*)' at uio.c:916:1 has some sub-type changes: CRC value (modversions) changed from 0x79931509 to 0xe91121ad [C] 'function usb_hcd* __usb_create_hcd(const hc_driver*, device*, device*, const char*, usb_hcd*)' at hcd.c:2412:1 has some sub-type changes: CRC value (modversions) changed from 0x3f9497bd to 0x306ae017 [C] 'function int __v4l2_ctrl_modify_range(v4l2_ctrl*, s64, s64, u64, s64)' at v4l2-ctrls.c:4271:1 has some sub-type changes: CRC value (modversions) changed from 0x50ac7f5 to 0x6ab9c61e [C] 'function int __v4l2_ctrl_s_ctrl(v4l2_ctrl*, s32)' at v4l2-ctrls.c:4060:1 has some sub-type changes: CRC value (modversions) changed from 0x66c1be04 to 0x296da136 [C] 'function int __video_register_device(video_device*, vfl_devnode_type, int, int, module*)' at v4l2-dev.c:841:1 has some sub-type changes: CRC value (modversions) changed from 0x4e20c0d3 to 0xd83810aa [C] 'function void __wait_on_buffer(buffer_head*)' at buffer.c:118:1 has some sub-type changes: CRC value (modversions) changed from 0x1915fa75 to 0x3434fe43 [C] 'function void __xfrm_state_destroy(xfrm_state*, bool)' at xfrm_state.c:641:1 has some sub-type changes: CRC value (modversions) changed from 0x5fa037f7 to 0x5e29dda4 [C] 'function unsigned long int _copy_from_iter(void*, unsigned long int, iov_iter*)' at uio.h:127:1 has some sub-type changes: CRC value (modversions) changed from 0x5832f33f to 0x1e7a4ed7 [C] 'function bool _copy_from_iter_full(void*, unsigned long int, iov_iter*)' at uio.h:128:1 has some sub-type changes: CRC value (modversions) changed from 0x349dc3dd to 0xfac78816 [C] 'function unsigned long int _copy_to_iter(void*, unsigned long int, iov_iter*)' at uio.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x50ec6b9d to 0x97ce8edc [C] 'function void _dev_crit(const device*, const char*, ...)' at device.h:1756:1 has some sub-type changes: CRC value (modversions) changed from 0x7f704dc7 to 0x44ba70f6 [C] 'function void _dev_emerg(const device*, const char*, ...)' at core.c:4071:1 has some sub-type changes: CRC value (modversions) changed from 0x196221b2 to 0x9fbd6d44 [C] 'function void _dev_err(const device*, const char*, ...)' at device.h:1758:1 has some sub-type changes: CRC value (modversions) changed from 0xb51d5abf to 0xadfab3c1 [C] 'function void _dev_info(const device*, const char*, ...)' at device.h:1764:1 has some sub-type changes: CRC value (modversions) changed from 0xe9dcfce1 to 0x9c0880e6 [C] 'function void _dev_notice(const device*, const char*, ...)' at device.h:1762:1 has some sub-type changes: CRC value (modversions) changed from 0xb0fbacad to 0x8701c402 [C] 'function void _dev_warn(const device*, const char*, ...)' at device.h:1760:1 has some sub-type changes: CRC value (modversions) changed from 0xf14c810b to 0x2248097b [C] 'function int _snd_ctl_add_slave(snd_kcontrol*, snd_kcontrol*, unsigned int)' at vmaster.c:252:1 has some sub-type changes: CRC value (modversions) changed from 0x92897a91 to 0x2252a686 [C] 'function unsigned long int _snd_pcm_stream_lock_irqsave(snd_pcm_substream*)' at pcm_native.c:162:1 has some sub-type changes: CRC value (modversions) changed from 0xf215a4cf to 0x3b59700d [C] 'function void ack_all_badblocks(badblocks*)' at badblocks.c:433:1 has some sub-type changes: CRC value (modversions) changed from 0x19999580 to 0xad567679 [C] 'function void adjust_managed_page_count(page*, long int)' at page_alloc.c:7565:1 has some sub-type changes: CRC value (modversions) changed from 0x1d0fb1d to 0x5897b108 [C] 'function rtc_device* alarmtimer_get_rtcdev()' at alarmtimer.c:72:1 has some sub-type changes: CRC value (modversions) changed from 0xf3194015 to 0x773b75c7 [C] 'function net_device* alloc_etherdev_mqs(int, unsigned int, unsigned int)' at etherdevice.h:49:1 has some sub-type changes: CRC value (modversions) changed from 0x2f058de1 to 0x12363705 [C] 'function io_pgtable_ops* alloc_io_pgtable_ops(io_pgtable_fmt, io_pgtable_cfg*, void*)' at io-pgtable.c:29:1 has some sub-type changes: CRC value (modversions) changed from 0x153c3f3b to 0xd8ad7137 [C] 'function net_device* alloc_netdev_mqs(int, const char*, unsigned char, void (net_device*)*, unsigned int, unsigned int)' at netdevice.h:4137:1 has some sub-type changes: CRC value (modversions) changed from 0xffd27153 to 0x60b06f29 [C] 'function buffer_head* alloc_page_buffers(page*, unsigned long int, bool)' at buffer.c:815:1 has some sub-type changes: CRC value (modversions) changed from 0x577ca5e7 to 0xfdd7004f [C] 'function sk_buff* alloc_skb_with_frags(unsigned long int, unsigned long int, int, int*, unsigned int)' at skbuff.h:1058:1 has some sub-type changes: CRC value (modversions) changed from 0x9f2e3c1c to 0x19b8ff82 [C] 'function int amba_driver_register(amba_driver*)' at bus.h:107:1 has some sub-type changes: CRC value (modversions) changed from 0x991e20a8 to 0x362ff98c [C] 'function void amba_driver_unregister(amba_driver*)' at bus.h:108:1 has some sub-type changes: CRC value (modversions) changed from 0x6ead6ff3 to 0x59e06481 [C] 'function void amba_release_regions(amba_device*)' at bus.h:134:1 has some sub-type changes: CRC value (modversions) changed from 0xf47ed7ec to 0x799dc12b [C] 'function int amba_request_regions(amba_device*, const char*)' at bus.h:133:1 has some sub-type changes: CRC value (modversions) changed from 0xa9b89b05 to 0x6f28808 [C] 'function int anon_inode_getfd(const char*, const file_operations*, void*, int)' at anon_inodes.h:17:1 has some sub-type changes: CRC value (modversions) changed from 0x2c1d6d71 to 0x5043b82b [C] 'function file* anon_inode_getfile(const char*, const file_operations*, void*, int)' at anon_inodes.h:14:1 has some sub-type changes: CRC value (modversions) changed from 0x2a90242b to 0xd55cc72 [C] 'function bool arch_bpf_jit_check_func(const bpf_prog*)' at filter.h:568:1 has some sub-type changes: CRC value (modversions) changed from 0xd10b92b2 to 0xf2137649 [C] 'function void arch_setup_dma_ops(device*, u64, u64, const iommu_ops*, bool)' at dma-mapping.c:40:1 has some sub-type changes: CRC value (modversions) changed from 0x197c0061 to 0x25ab4877 [C] 'function backlight_device* backlight_device_get_by_type(backlight_type)' at backlight.c:417:1 has some sub-type changes: CRC value (modversions) changed from 0x6ce2caab to 0x1d0a021d [C] 'function backlight_device* backlight_device_register(const char*, device*, void*, const backlight_ops*, const backlight_properties*)' at backlight.c:351:1 has some sub-type changes: CRC value (modversions) changed from 0x4d3df0b to 0x10720d46 [C] 'function int backlight_device_set_brightness(backlight_device*, unsigned long int)' at backlight.c:180:1 has some sub-type changes: CRC value (modversions) changed from 0xe3063c7c to 0xe2c78325 [C] 'function void backlight_device_unregister(backlight_device*)' at backlight.c:441:1 has some sub-type changes: CRC value (modversions) changed from 0xb806303 to 0x601ea893 [C] 'function int badblocks_clear(badblocks*, long long unsigned int, int)' at badblocks.h:48:1 has some sub-type changes: CRC value (modversions) changed from 0xfd577d5a to 0x3c4586b6 [C] 'function void badblocks_exit(badblocks*)' at badblocks.c:593:1 has some sub-type changes: CRC value (modversions) changed from 0xd4beb65f to 0x8d57917a [C] 'function int badblocks_init(badblocks*, int)' at badblocks.c:575:1 has some sub-type changes: CRC value (modversions) changed from 0x327b01cc to 0x9e7f663b [C] 'function int badblocks_set(badblocks*, sector_t, int, int)' at badblocks.c:163:1 has some sub-type changes: CRC value (modversions) changed from 0x90fc0571 to 0x546832de [C] 'function long int badblocks_show(badblocks*, char*, int)' at badblocks.h:50:1 has some sub-type changes: CRC value (modversions) changed from 0x61a37267 to 0x3c07b4f8 [C] 'function long int badblocks_store(badblocks*, const char*, unsigned long int, int)' at badblocks.h:51:1 has some sub-type changes: CRC value (modversions) changed from 0x4d9faac1 to 0x6aa7409d [C] 'function int bd_link_disk_holder(block_device*, gendisk*)' at block_dev.c:1303:1 has some sub-type changes: CRC value (modversions) changed from 0xb50b7620 to 0x7dc62c87 [C] 'function void bd_unlink_disk_holder(block_device*, gendisk*)' at block_dev.c:1368:1 has some sub-type changes: CRC value (modversions) changed from 0x5779e88 to 0x99de91cf [C] 'function int bdev_read_only(block_device*)' at fs.h:3162:1 has some sub-type changes: CRC value (modversions) changed from 0x2de38b82 to 0xee3cbcf7 [C] 'function const char* bdevname(block_device*, char*)' at fs.h:2771:1 has some sub-type changes: CRC value (modversions) changed from 0xcdbc8039 to 0x5508329 [C] 'function int bio_add_page(bio*, page*, unsigned int, unsigned int)' at bio.h:441:1 has some sub-type changes: CRC value (modversions) changed from 0x4b40ed89 to 0x1175ca3 [C] 'function bio* bio_alloc_bioset(unsigned int, unsigned int, bio_set*)' at bio.h:396:1 has some sub-type changes: CRC value (modversions) changed from 0xeec6fc9c to 0x226302d7 [C] 'function void bio_associate_blkg(bio*)' at bio.h:519:1 has some sub-type changes: CRC value (modversions) changed from 0x2d4988a2 to 0xa57f3cb7 [C] 'function void bio_chain(bio*, bio*)' at bio.c:333:1 has some sub-type changes: CRC value (modversions) changed from 0x7f33a55c to 0x9ebbb9b7 [C] 'function void bio_clone_blkg_association(bio*, bio*)' at bio.c:2179:1 has some sub-type changes: CRC value (modversions) changed from 0xc5a94628 to 0xda3b51de [C] 'function bool bio_crypt_should_process(request*)' at bio-crypt-ctx.c:82:1 has some sub-type changes: CRC value (modversions) changed from 0xfcacdbad to 0x5fa10f59 [C] 'function void bio_endio(bio*)' at bio.h:416:1 has some sub-type changes: CRC value (modversions) changed from 0x11054f7 to 0x3af2e078 [C] 'function void bio_init(bio*, bio_vec*, unsigned short int)' at bio.h:435:1 has some sub-type changes: CRC value (modversions) changed from 0xea4f6b8e to 0x8540a9b6 [C] 'function void bio_put(bio*)' at bio.h:397:1 has some sub-type changes: CRC value (modversions) changed from 0xb0132acb to 0x88ca7bf6 [C] 'function void bioset_exit(bio_set*)' at bio.h:392:1 has some sub-type changes: CRC value (modversions) changed from 0x1c3d319d to 0x8aa56fdb [C] 'function int bioset_init(bio_set*, unsigned int, unsigned int, int)' at bio.h:391:1 has some sub-type changes: CRC value (modversions) changed from 0x7f54861a to 0x2abafc56 [C] 'function request_queue* blk_alloc_queue(unsigned int)' at blkdev.h:1149:1 has some sub-type changes: CRC value (modversions) changed from 0x66da1fd1 to 0x718d8d4 [C] 'function void blk_cleanup_queue(request_queue*)' at blkdev.h:1071:1 has some sub-type changes: CRC value (modversions) changed from 0x9f8da101 to 0x42d8ab32 [C] 'function void blk_execute_rq(request_queue*, gendisk*, request*, int)' at blk-exec.c:77:1 has some sub-type changes: CRC value (modversions) changed from 0x6a444f66 to 0x75920af8 [C] 'function void blk_execute_rq_nowait(request_queue*, gendisk*, request*, int, rq_end_io_fn*)' at blk-exec.c:48:1 has some sub-type changes: CRC value (modversions) changed from 0x8a8c3bf6 to 0x154bea9f [C] 'function void blk_freeze_queue_start(request_queue*)' at blk-mq.h:334:1 has some sub-type changes: CRC value (modversions) changed from 0x1139d922 to 0xb5fb0f93 [C] 'function bool blk_get_queue(request_queue*)' at blkdev.h:1148:1 has some sub-type changes: CRC value (modversions) changed from 0xfe9aa460 to 0x30ffc7ab [C] 'function request* blk_get_request(request_queue*, unsigned int, blk_mq_req_flags_t)' at blk-core.c:581:1 has some sub-type changes: CRC value (modversions) changed from 0x957dcd16 to 0x479eafe2 [C] 'function request* blk_mq_alloc_request(request_queue*, unsigned int, unsigned int)' at blk-mq.h:280:1 has some sub-type changes: CRC value (modversions) changed from 0x55b0b0f3 to 0x9cd4c99 [C] 'function request* blk_mq_alloc_request_hctx(request_queue*, unsigned int, blk_mq_req_flags_t, unsigned int)' at blk-mq.c:446:1 has some sub-type changes: CRC value (modversions) changed from 0x4ca3f39a to 0xd36805c3 [C] 'function int blk_mq_alloc_tag_set(blk_mq_tag_set*)' at blk-mq.c:3053:1 has some sub-type changes: CRC value (modversions) changed from 0xef836f8c to 0x7b81d6c6 [C] 'function bool blk_mq_complete_request(request*)' at blk-mq.c:657:1 has some sub-type changes: CRC value (modversions) changed from 0x4fc65a39 to 0xe0c885de [C] 'function void blk_mq_delay_kick_requeue_list(request_queue*, unsigned long int)' at blk-mq.c:809:1 has some sub-type changes: CRC value (modversions) changed from 0x64fdc089 to 0x69f5a1b4 [C] 'function void blk_mq_end_request(request*, unsigned char)' at blk-mq.h:308:1 has some sub-type changes: CRC value (modversions) changed from 0x4e6d0b77 to 0x262f52f0 [C] 'function void blk_mq_free_request(request*)' at blk-mq.h:264:1 has some sub-type changes: CRC value (modversions) changed from 0x15392347 to 0xc3a08666 [C] 'function void blk_mq_free_tag_set(blk_mq_tag_set*)' at blk-mq.c:3139:1 has some sub-type changes: CRC value (modversions) changed from 0x3b682e4f to 0x1580ee00 [C] 'function void blk_mq_freeze_queue(request_queue*)' at blk-mq.c:192:1 has some sub-type changes: CRC value (modversions) changed from 0xd892575 to 0xd6af3307 [C] 'function void blk_mq_freeze_queue_wait(request_queue*)' at blk-mq.c:160:1 has some sub-type changes: CRC value (modversions) changed from 0x596519f0 to 0x5c4065ce [C] 'function int blk_mq_freeze_queue_wait_timeout(request_queue*, unsigned long int)' at blk-mq.c:166:1 has some sub-type changes: CRC value (modversions) changed from 0xf2442479 to 0xcadfadc1 [C] 'function request_queue* blk_mq_init_queue(blk_mq_tag_set*)' at blk-mq.c:2704:1 has some sub-type changes: CRC value (modversions) changed from 0x14f63ba2 to 0xf961bd8 [C] 'function request_queue* blk_mq_init_sq_queue(blk_mq_tag_set*, const blk_mq_ops*, unsigned int, unsigned int)' at blk-mq.c:2728:1 has some sub-type changes: CRC value (modversions) changed from 0x7c3993e5 to 0x1677bf7f [C] 'function int blk_mq_pci_map_queues(blk_mq_queue_map*, pci_dev*, int)' at blk-mq-pci.c:26:1 has some sub-type changes: CRC value (modversions) changed from 0x9a668992 to 0x4294d5d4 [C] 'function void blk_mq_quiesce_queue(request_queue*)' at blk-mq.h:324:1 has some sub-type changes: CRC value (modversions) changed from 0xb7cb61e1 to 0x759b6bb9 [C] 'function int blk_mq_request_completed(request*)' at blk-mq.c:672:1 has some sub-type changes: CRC value (modversions) changed from 0xefb9de66 to 0x7639dd0f [C] 'function void blk_mq_requeue_request(request*, bool)' at blk-mq.c:729:1 has some sub-type changes: CRC value (modversions) changed from 0xc6cf4725 to 0xb4de931e [C] 'function unsigned int blk_mq_rq_cpu(request*)' at blk-mq.c:3556:1 has some sub-type changes: CRC value (modversions) changed from 0x46177a66 to 0x3b2ee190 [C] 'function void blk_mq_run_hw_queues(request_queue*, bool)' at blk-mq.c:1518:1 has some sub-type changes: CRC value (modversions) changed from 0xb3862c5f to 0x3d253a43 [C] 'function void blk_mq_start_request(request*)' at blk-mq.c:678:1 has some sub-type changes: CRC value (modversions) changed from 0xa7f3f1eb to 0xd4ee25d9 [C] 'function void blk_mq_start_stopped_hw_queues(request_queue*, bool)' at blk-mq.c:1616:1 has some sub-type changes: CRC value (modversions) changed from 0xf67c315d to 0x5e633d93 [C] 'function void blk_mq_stop_hw_queue(blk_mq_hw_ctx*)' at blk-mq.c:1561:1 has some sub-type changes: CRC value (modversions) changed from 0xff97bec0 to 0xb6e32cec [C] 'function request* blk_mq_tag_to_rq(blk_mq_tags*, unsigned int)' at blk-mq.c:817:1 has some sub-type changes: CRC value (modversions) changed from 0xccf9094c to 0xaba7556a [C] 'function void blk_mq_tagset_busy_iter(blk_mq_tag_set*, busy_tag_iter_fn*, void*)' at blk-mq-tag.c:346:1 has some sub-type changes: CRC value (modversions) changed from 0x4d2f9d26 to 0xbba74c62 [C] 'function void blk_mq_tagset_wait_completed_request(blk_mq_tag_set*)' at blk-mq-tag.c:375:1 has some sub-type changes: CRC value (modversions) changed from 0x9843b962 to 0x424f3e56 [C] 'function void blk_mq_unfreeze_queue(request_queue*)' at blk-mq.h:333:1 has some sub-type changes: CRC value (modversions) changed from 0xfe41002a to 0xf0b93dfe [C] 'function u32 blk_mq_unique_tag(request*)' at blk-mq-tag.c:556:1 has some sub-type changes: CRC value (modversions) changed from 0x5d391f16 to 0xd832eec8 [C] 'function void blk_mq_unquiesce_queue(request_queue*)' at blk-mq.h:325:1 has some sub-type changes: CRC value (modversions) changed from 0x4cece5a1 to 0xb1dc370f [C] 'function void blk_mq_update_nr_hw_queues(blk_mq_tag_set*, int)' at blk-mq.c:3336:1 has some sub-type changes: CRC value (modversions) changed from 0x613560e3 to 0xabbae510 [C] 'function int blk_mq_virtio_map_queues(blk_mq_queue_map*, virtio_device*, int)' at blk-mq-virtio.c:24:1 has some sub-type changes: CRC value (modversions) changed from 0x46530369 to 0xeeca1fdb [C] 'function void blk_pm_runtime_init(request_queue*, device*)' at blk-pm.c:31:1 has some sub-type changes: CRC value (modversions) changed from 0x408515ab to 0x726deafa [C] 'function int blk_poll(request_queue*, unsigned int, bool)' at blkdev.h:899:1 has some sub-type changes: CRC value (modversions) changed from 0x41f4a1b0 to 0x9f1bb295 [C] 'function void blk_put_queue(request_queue*)' at blk-core.c:309:1 has some sub-type changes: CRC value (modversions) changed from 0x10844983 to 0x6a3902e8 [C] 'function void blk_put_request(request*)' at blk-core.c:597:1 has some sub-type changes: CRC value (modversions) changed from 0xec7b77cc to 0x40c66eb1 [C] 'function void blk_queue_alignment_offset(request_queue*, unsigned int)' at blk-settings.c:376:1 has some sub-type changes: CRC value (modversions) changed from 0x72fcca44 to 0x5ebefeb5 [C] 'function void blk_queue_bounce_limit(request_queue*, u64)' at blk-settings.c:136:1 has some sub-type changes: CRC value (modversions) changed from 0x8cdb6d39 to 0x4a459eb9 [C] 'function bool blk_queue_can_use_dma_map_merging(request_queue*, device*)' at blk-settings.c:862:1 has some sub-type changes: CRC value (modversions) changed from 0x29efdf9d to 0x26bbf4a6 [C] 'function void blk_queue_chunk_sectors(request_queue*, unsigned int)' at blk-settings.c:215:1 has some sub-type changes: CRC value (modversions) changed from 0x4a7b8747 to 0x819ad942 [C] 'function void blk_queue_flag_clear(unsigned int, request_queue*)' at blkdev.h:628:1 has some sub-type changes: CRC value (modversions) changed from 0x2c4f3e82 to 0x87c426d [C] 'function void blk_queue_flag_set(unsigned int, request_queue*)' at blkdev.h:627:1 has some sub-type changes: CRC value (modversions) changed from 0xd4a2ad3d to 0x82811e80 [C] 'function bool blk_queue_flag_test_and_set(unsigned int, request_queue*)' at blk-core.c:104:1 has some sub-type changes: CRC value (modversions) changed from 0x3de4ff97 to 0xd26bd01e [C] 'function void blk_queue_io_min(request_queue*, unsigned int)' at blkdev.h:1091:1 has some sub-type changes: CRC value (modversions) changed from 0xee8a5e2a to 0x5d3a3bbd [C] 'function void blk_queue_io_opt(request_queue*, unsigned int)' at blkdev.h:1093:1 has some sub-type changes: CRC value (modversions) changed from 0xc6ccdc61 to 0x352ddd12 [C] 'function void blk_queue_logical_block_size(request_queue*, unsigned int)' at blkdev.h:1086:1 has some sub-type changes: CRC value (modversions) changed from 0x5622ec2 to 0x6b1bdf1b [C] 'function void blk_queue_make_request(request_queue*, unsigned int (request_queue*, bio*)*)' at blkdev.h:1072:1 has some sub-type changes: CRC value (modversions) changed from 0x63b332fb to 0x44f171b6 [C] 'function void blk_queue_max_discard_sectors(request_queue*, unsigned int)' at blkdev.h:1080:1 has some sub-type changes: CRC value (modversions) changed from 0xce76a5be to 0x3f81cba1 [C] 'function void blk_queue_max_discard_segments(request_queue*, unsigned short int)' at blk-settings.c:290:1 has some sub-type changes: CRC value (modversions) changed from 0x495b4304 to 0x935ebaf5 [C] 'function void blk_queue_max_hw_sectors(request_queue*, unsigned int)' at blkdev.h:1074:1 has some sub-type changes: CRC value (modversions) changed from 0xf994637 to 0x4816451d [C] 'function void blk_queue_max_segment_size(request_queue*, unsigned int)' at blk-settings.c:306:1 has some sub-type changes: CRC value (modversions) changed from 0x9f15e8af to 0xb57f82ba [C] 'function void blk_queue_max_segments(request_queue*, unsigned short int)' at blk-settings.c:269:1 has some sub-type changes: CRC value (modversions) changed from 0x84e8a2d4 to 0x2edd7597 [C] 'function void blk_queue_max_write_zeroes_sectors(request_queue*, unsigned int)' at blkdev.h:1084:1 has some sub-type changes: CRC value (modversions) changed from 0xe6a8134b to 0x83c3f3aa [C] 'function void blk_queue_physical_block_size(request_queue*, unsigned int)' at blkdev.h:1087:1 has some sub-type changes: CRC value (modversions) changed from 0x8c2f8a30 to 0x480e7f38 [C] 'function void blk_queue_rq_timeout(request_queue*, unsigned int)' at blk-settings.c:25:1 has some sub-type changes: CRC value (modversions) changed from 0x3a1ffb9f to 0xe8c68c47 [C] 'function void blk_queue_split(request_queue*, bio**)' at blk-merge.c:352:1 has some sub-type changes: CRC value (modversions) changed from 0xf5c1beab to 0xe148466c [C] 'function void blk_queue_update_dma_alignment(request_queue*, int)' at blkdev.h:1111:1 has some sub-type changes: CRC value (modversions) changed from 0x1a8c3c35 to 0xc2212729 [C] 'function void blk_queue_update_dma_pad(request_queue*, unsigned int)' at blk-settings.c:683:1 has some sub-type changes: CRC value (modversions) changed from 0xcc97e5e2 to 0x7ed6a99a [C] 'function void blk_queue_virt_boundary(request_queue*, unsigned long int)' at blk-settings.c:749:1 has some sub-type changes: CRC value (modversions) changed from 0xc0ab283d to 0xe0a2a21d [C] 'function void blk_queue_write_cache(request_queue*, bool, bool)' at blkdev.h:1113:1 has some sub-type changes: CRC value (modversions) changed from 0x3de96f1 to 0x7fdf0f24 [C] 'function void blk_register_region(dev_t, unsigned long int, module*, kobject* (typedef dev_t, int*, void*)*, int (typedef dev_t, void*)*, void*)' at genhd.c:564:1 has some sub-type changes: CRC value (modversions) changed from 0xa97b65a9 to 0x3f65565e [C] 'function int blk_rq_map_kern(request_queue*, request*, void*, unsigned int, gfp_t)' at blk-map.c:221:1 has some sub-type changes: CRC value (modversions) changed from 0xb0e6714a to 0x9dcdf1d5 [C] 'function int blk_rq_map_sg(request_queue*, request*, scatterlist*)' at blk-merge.c:507:1 has some sub-type changes: CRC value (modversions) changed from 0x13dbc8e5 to 0xbb2b7bea [C] 'function int blk_rq_map_user(request_queue*, request*, rq_map_data*, void*, unsigned long int, gfp_t)' at blk-map.c:161:1 has some sub-type changes: CRC value (modversions) changed from 0x9cfa4dba to 0x2e58431b [C] 'function int blk_rq_map_user_iov(request_queue*, request*, rq_map_data*, const iov_iter*, gfp_t)' at blk-map.c:120:1 has some sub-type changes: CRC value (modversions) changed from 0x78d8d927 to 0xe4a71818 [C] 'function int blk_rq_unmap_user(bio*)' at blk-map.c:185:1 has some sub-type changes: CRC value (modversions) changed from 0x50c488cd to 0x22c50b55 [C] 'function void blk_set_queue_dying(request_queue*)' at blk-core.c:315:1 has some sub-type changes: CRC value (modversions) changed from 0xa3849c6e to 0x42d410a2 [C] 'function void blk_sync_queue(request_queue*)' at blk-core.c:281:1 has some sub-type changes: CRC value (modversions) changed from 0xb1ff51c8 to 0x3e4f9de8 [C] 'function bool blk_update_request(request*, blk_status_t, unsigned int)' at blk-core.c:1436:1 has some sub-type changes: CRC value (modversions) changed from 0x21eaebf3 to 0x4ce3cf9a [C] 'function block_device* blkdev_get_by_dev(dev_t, fmode_t, void*)' at block_dev.c:1807:1 has some sub-type changes: CRC value (modversions) changed from 0xacab5349 to 0x26e4481e [C] 'function block_device* blkdev_get_by_path(const char*, unsigned int, void*)' at fs.h:2704:1 has some sub-type changes: CRC value (modversions) changed from 0xb42be6e8 to 0x8b49c489 [C] 'function int blkdev_issue_flush(block_device*, unsigned int, long long unsigned int*)' at blkdev.h:1213:1 has some sub-type changes: CRC value (modversions) changed from 0x68cbf338 to 0x3881797 [C] 'function void blkdev_put(block_device*, unsigned int)' at fs.h:2714:1 has some sub-type changes: CRC value (modversions) changed from 0x1d849767 to 0xaffe5a2a [C] 'function int block_is_partially_uptodate(page*, unsigned long int, unsigned long int)' at buffer.c:2183:1 has some sub-type changes: CRC value (modversions) changed from 0xb477131e to 0x894ca033 [C] 'function int block_write_full_page(page*, get_block_t*, writeback_control*)' at buffer.c:2931:1 has some sub-type changes: CRC value (modversions) changed from 0x4e170735 to 0xbf1b4e6f [C] 'function long long unsigned int bmap(inode*, long long unsigned int)' at fs.h:2946:1 has some sub-type changes: CRC value (modversions) changed from 0x4ba1f9a8 to 0x79bbab0f [C] 'function bpf_prog* bpf_prog_add(bpf_prog*, int)' at syscall.c:1462:1 has some sub-type changes: CRC value (modversions) changed from 0x8a5aeef3 to 0x5b0eed7b [C] 'function int bpf_prog_create(bpf_prog**, sock_fprog_kern*)' at filter.h:889:1 has some sub-type changes: CRC value (modversions) changed from 0xf8621871 to 0xd6a04e7a [C] 'function void bpf_prog_destroy(bpf_prog*)' at filter.h:892:1 has some sub-type changes: CRC value (modversions) changed from 0x59a4317b to 0x71e0bab8 [C] 'function void bpf_prog_put(bpf_prog*)' at bpf.h:643:1 has some sub-type changes: CRC value (modversions) changed from 0x8a38f231 to 0x8a5cf74 [C] 'function void bpf_prog_sub(bpf_prog*, int)' at syscall.c:1472:1 has some sub-type changes: CRC value (modversions) changed from 0x7c9d48aa to 0x3351fdb7 [C] 'function void bpf_trace_run1(bpf_prog*, long long unsigned int)' at trace_events.h:605:1 has some sub-type changes: CRC value (modversions) changed from 0x1f1daa4 to 0x9ef84894 [C] 'function void bpf_trace_run10(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1380:1 has some sub-type changes: CRC value (modversions) changed from 0x3a5dfe53 to 0xf9e9b14 [C] 'function void bpf_trace_run11(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1381:1 has some sub-type changes: CRC value (modversions) changed from 0x774fdaf4 to 0x395952cf [C] 'function void bpf_trace_run12(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1382:1 has some sub-type changes: CRC value (modversions) changed from 0xaa40db7c to 0xdc016e5a [C] 'function void bpf_trace_run2(bpf_prog*, long long unsigned int, long long unsigned int)' at trace_events.h:606:1 has some sub-type changes: CRC value (modversions) changed from 0x5c44c4a0 to 0x502577e1 [C] 'function void bpf_trace_run3(bpf_prog*, long long unsigned int, long long unsigned int, long long unsigned int)' at trace_events.h:607:1 has some sub-type changes: CRC value (modversions) changed from 0x27c85e89 to 0xab8368d0 [C] 'function void bpf_trace_run4(bpf_prog*, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)' at trace_events.h:609:1 has some sub-type changes: CRC value (modversions) changed from 0x5ca80968 to 0x904f813b [C] 'function void bpf_trace_run5(bpf_prog*, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)' at trace_events.h:611:1 has some sub-type changes: CRC value (modversions) changed from 0x456c08f1 to 0x4d2c3908 [C] 'function void bpf_trace_run6(bpf_prog*, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1376:1 has some sub-type changes: CRC value (modversions) changed from 0xe380230e to 0x83284d5c [C] 'function void bpf_trace_run7(bpf_prog*, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1377:1 has some sub-type changes: CRC value (modversions) changed from 0xef028853 to 0x261438e0 [C] 'function void bpf_trace_run8(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1378:1 has some sub-type changes: CRC value (modversions) changed from 0x6e3b3ad2 to 0x99577266 [C] 'function void bpf_trace_run9(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64)' at bpf_trace.c:1379:1 has some sub-type changes: CRC value (modversions) changed from 0xdea42ca6 to 0x4dfc56ce [C] 'function int bprm_change_interp(const char*, linux_binprm*)' at binfmts.h:140:1 has some sub-type changes: CRC value (modversions) changed from 0xf11abcf1 to 0x9145edc8 [C] 'function void bsg_job_done(bsg_job*, int, unsigned int)' at bsg-lib.c:181:1 has some sub-type changes: CRC value (modversions) changed from 0x319a4ff0 to 0xf9e7dcef [C] 'function void bsg_remove_queue(request_queue*)' at bsg-lib.c:321:1 has some sub-type changes: CRC value (modversions) changed from 0x209547c9 to 0xafde2d7 [C] 'function request_queue* bsg_setup_queue(device*, const char*, bsg_job_fn*, bsg_timeout_fn*, int)' at bsg-lib.c:362:1 has some sub-type changes: CRC value (modversions) changed from 0x5fb312cd to 0x92e40a5f [C] 'function void bt_procfs_cleanup(net*, const char*)' at af_bluetooth.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0x8afb3a89 to 0x8c41d479 [C] 'function int bt_procfs_init(net*, const char*, bt_sock_list*, int (seq_file*, void*)*)' at af_bluetooth.c:678:1 has some sub-type changes: CRC value (modversions) changed from 0x26bf92e1 to 0xacdc582f [C] 'function void bt_sock_link(bt_sock_list*, sock*)' at af_bluetooth.c:141:1 has some sub-type changes: CRC value (modversions) changed from 0x59971ac2 to 0x3d13734f [C] 'function int bt_sock_register(int, const net_proto_family*)' at af_bluetooth.c:80:1 has some sub-type changes: CRC value (modversions) changed from 0xbe7758b9 to 0x85290c1b [C] 'function void bt_sock_unlink(bt_sock_list*, sock*)' at af_bluetooth.c:149:1 has some sub-type changes: CRC value (modversions) changed from 0x9ac8856f to 0x95e4639a [C] 'function int buffer_migrate_page(address_space*, page*, page*, migrate_mode)' at migrate.c:826:1 has some sub-type changes: CRC value (modversions) changed from 0x61d34de3 to 0xf1163f6f [C] 'function sk_buff* build_skb(void*, unsigned int)' at skbuff.h:1041:1 has some sub-type changes: CRC value (modversions) changed from 0x78506978 to 0x7749d9ff [C] 'function device* bus_find_device(bus_type*, device*, void*, int (device*, void*)*)' at device.h:190:1 has some sub-type changes: CRC value (modversions) changed from 0xdd5e9372 to 0x6e88fa7a [C] 'function int bus_for_each_dev(bus_type*, device*, void*, int (device*, void*)*)' at device.h:188:1 has some sub-type changes: CRC value (modversions) changed from 0x627cc176 to 0x8ffa9232 [C] 'function int bus_register(bus_type*)' at device.h:163:1 has some sub-type changes: CRC value (modversions) changed from 0xeba97571 to 0xbe48e30d [C] 'function int bus_register_notifier(bus_type*, notifier_block*)' at bus.c:900:1 has some sub-type changes: CRC value (modversions) changed from 0x8c46cf9a to 0xec5ed39c [C] 'function int bus_set_iommu(bus_type*, const iommu_ops*)' at iommu.c:1558:1 has some sub-type changes: CRC value (modversions) changed from 0xb753114d to 0xfd17ebdd [C] 'function void bus_unregister(bus_type*)' at device.h:165:1 has some sub-type changes: CRC value (modversions) changed from 0x8fb7884 to 0x49dc4a3a [C] 'function int bus_unregister_notifier(bus_type*, notifier_block*)' at bus.c:906:1 has some sub-type changes: CRC value (modversions) changed from 0x6de4df5a to 0xe36dbe2a [C] 'function int call_netdevice_notifiers(unsigned long int, net_device*)' at dev.c:1694:1 has some sub-type changes: CRC value (modversions) changed from 0x6f439be8 to 0x97e8df7 [C] 'function int cdc_parse_cdc_header(usb_cdc_parsed_header*, usb_interface*, u8*, int)' at cdc.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0x257050c5 to 0xc94c956c [C] 'function int cdev_add(cdev*, unsigned int, unsigned int)' at cdev.h:29:1 has some sub-type changes: CRC value (modversions) changed from 0x421dbb19 to 0x8a010a71 [C] 'function cdev* cdev_alloc()' at char_dev.c:630:1 has some sub-type changes: CRC value (modversions) changed from 0xcf405e44 to 0xdbe604a9 [C] 'function void cdev_del(cdev*)' at cdev.h:35:1 has some sub-type changes: CRC value (modversions) changed from 0x47d40ce1 to 0xdd57c56e [C] 'function int cdev_device_add(cdev*, device*)' at cdev.h:32:1 has some sub-type changes: CRC value (modversions) changed from 0x2f5aa0be to 0xdd7786b8 [C] 'function void cdev_device_del(cdev*, device*)' at cdev.h:33:1 has some sub-type changes: CRC value (modversions) changed from 0x41a05e1f to 0xb02233eb [C] 'function void cdev_init(cdev*, const file_operations*)' at cdev.h:23:1 has some sub-type changes: CRC value (modversions) changed from 0xf0e699b1 to 0xefc4676f [C] 'function void cfg80211_assoc_timeout(net_device*, cfg80211_bss*)' at mlme.c:146:1 has some sub-type changes: CRC value (modversions) changed from 0xb5482f7 to 0xa9bd5f09 [C] 'function void cfg80211_auth_timeout(net_device*, const u8*)' at mlme.c:133:1 has some sub-type changes: CRC value (modversions) changed from 0xc6d07adc to 0xc5a596ce [C] 'function void cfg80211_ch_switch_notify(net_device*, cfg80211_chan_def*)' at nl80211.c:16620:1 has some sub-type changes: CRC value (modversions) changed from 0xf679c7da to 0x54cd5aa0 [C] 'function unsigned int cfg80211_classify8021d(sk_buff*, cfg80211_qos_map*)' at util.c:750:1 has some sub-type changes: CRC value (modversions) changed from 0x1a33de92 to 0x49530ee9 [C] 'function void cfg80211_connect_done(net_device*, cfg80211_connect_resp_params*, gfp_t)' at sme.c:788:1 has some sub-type changes: CRC value (modversions) changed from 0xadb613c7 to 0x934d5a03 [C] 'function void cfg80211_cqm_pktloss_notify(net_device*, const u8*, u32, gfp_t)' at nl80211.c:16427:1 has some sub-type changes: CRC value (modversions) changed from 0xfc24c907 to 0x76606e52 [C] 'function void cfg80211_cqm_rssi_notify(net_device*, nl80211_cqm_rssi_threshold_event, s32, gfp_t)' at nl80211.c:16356:1 has some sub-type changes: CRC value (modversions) changed from 0x98e178b0 to 0xc2365b59 [C] 'function void cfg80211_del_sta_sinfo(net_device*, const u8*, station_info*, gfp_t)' at nl80211.c:16013:1 has some sub-type changes: CRC value (modversions) changed from 0x23d73d8 to 0x27158d62 [C] 'function void cfg80211_disconnected(net_device*, u16, const u8*, size_t, bool, gfp_t)' at sme.c:1137:1 has some sub-type changes: CRC value (modversions) changed from 0xfe18db9c to 0x321f84a7 [C] 'function int cfg80211_external_auth_request(net_device*, cfg80211_external_auth_params*, gfp_t)' at nl80211.c:17243:1 has some sub-type changes: CRC value (modversions) changed from 0x381abea1 to 0xc69eb29e [C] 'function void cfg80211_ft_event(net_device*, cfg80211_ft_event_params*)' at nl80211.c:17131:1 has some sub-type changes: CRC value (modversions) changed from 0x85acc8df to 0xbbc37ba6 [C] 'function cfg80211_bss* cfg80211_get_bss(wiphy*, ieee80211_channel*, const u8*, const u8*, size_t, ieee80211_bss_type, ieee80211_privacy)' at scan.c:913:1 has some sub-type changes: CRC value (modversions) changed from 0x86d4225e to 0x9d721f60 [C] 'function void cfg80211_gtk_rekey_notify(net_device*, const u8*, const u8*, gfp_t)' at nl80211.c:16511:1 has some sub-type changes: CRC value (modversions) changed from 0x611bcdf to 0xfebeeb48 [C] 'function void cfg80211_ibss_joined(net_device*, const u8*, ieee80211_channel*, gfp_t)' at ibss.c:59:1 has some sub-type changes: CRC value (modversions) changed from 0x240c72b8 to 0xc3b245a [C] 'function cfg80211_bss* cfg80211_inform_bss_data(wiphy*, cfg80211_inform_bss*, cfg80211_bss_frame_type, const u8*, u64, u16, u16, const u8*, size_t, gfp_t)' at scan.c:1659:1 has some sub-type changes: CRC value (modversions) changed from 0xb9f32168 to 0x3e7497f0 [C] 'function cfg80211_bss* cfg80211_inform_bss_frame_data(wiphy*, cfg80211_inform_bss*, ieee80211_mgmt*, size_t, gfp_t)' at scan.c:1878:1 has some sub-type changes: CRC value (modversions) changed from 0x8dd9d6fe to 0x201cbd99 [C] 'function void cfg80211_mgmt_tx_status(wireless_dev*, u64, const u8*, size_t, bool, gfp_t)' at nl80211.c:16197:1 has some sub-type changes: CRC value (modversions) changed from 0x600d131d to 0xb4662cae [C] 'function void cfg80211_michael_mic_failure(net_device*, const u8*, nl80211_key_type, int, const u8*, gfp_t)' at mlme.c:193:1 has some sub-type changes: CRC value (modversions) changed from 0x1fab01ad to 0x610ab7ab [C] 'function void cfg80211_new_sta(net_device*, const u8*, station_info*, gfp_t)' at nl80211.c:15989:1 has some sub-type changes: CRC value (modversions) changed from 0xce173c12 to 0x9107f1a5 [C] 'function void cfg80211_pmksa_candidate_notify(net_device*, int, const u8*, bool, gfp_t)' at nl80211.c:16568:1 has some sub-type changes: CRC value (modversions) changed from 0xe29925c0 to 0x29d32dae [C] 'function void cfg80211_put_bss(wiphy*, cfg80211_bss*)' at cfg80211.h:6070:1 has some sub-type changes: CRC value (modversions) changed from 0x20010cb4 to 0xdbde803c [C] 'function void cfg80211_ready_on_channel(wireless_dev*, u64, ieee80211_channel*, unsigned int, gfp_t)' at nl80211.c:15949:1 has some sub-type changes: CRC value (modversions) changed from 0xe857b62f to 0xebfb1a4a [C] 'function void cfg80211_remain_on_channel_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)' at nl80211.c:15963:1 has some sub-type changes: CRC value (modversions) changed from 0x70d0fd98 to 0x2e53b510 [C] 'function void cfg80211_roamed(net_device*, cfg80211_roam_info*, gfp_t)' at sme.c:956:1 has some sub-type changes: CRC value (modversions) changed from 0x10ada355 to 0xe48093e1 [C] 'function void cfg80211_rx_assoc_resp(net_device*, cfg80211_bss*, const u8*, size_t, int, const u8*, size_t)' at mlme.c:23:1 has some sub-type changes: CRC value (modversions) changed from 0xd0c3905 to 0x124c2d7c [C] 'function bool cfg80211_rx_mgmt(wireless_dev*, int, int, const u8*, size_t, u32)' at mlme.c:699:1 has some sub-type changes: CRC value (modversions) changed from 0x7ed78f9c to 0x63d04645 [C] 'function void cfg80211_rx_mlme_mgmt(net_device*, const u8*, size_t)' at mlme.c:112:1 has some sub-type changes: CRC value (modversions) changed from 0x8571fa84 to 0x58e99c65 [C] 'function void cfg80211_rx_unprot_mlme_mgmt(net_device*, const u8*, size_t)' at nl80211.c:15486:1 has some sub-type changes: CRC value (modversions) changed from 0x18805fc2 to 0x117aecaf [C] 'function void cfg80211_scan_done(cfg80211_scan_request*, cfg80211_scan_info*)' at scan.c:525:1 has some sub-type changes: CRC value (modversions) changed from 0x8d721002 to 0x579d9434 [C] 'function void cfg80211_sched_scan_results(wiphy*, u64)' at scan.c:627:1 has some sub-type changes: CRC value (modversions) changed from 0x3f4d146a to 0x6ce5fc26 [C] 'function void cfg80211_sched_scan_stopped(wiphy*, u64)' at scan.c:657:1 has some sub-type changes: CRC value (modversions) changed from 0x8a51688 to 0x1e4ced0e [C] 'function void cfg80211_tdls_oper_request(net_device*, const u8*, nl80211_tdls_operation, u16, gfp_t)' at nl80211.c:17025:1 has some sub-type changes: CRC value (modversions) changed from 0xec4a1654 to 0xcf47af77 [C] 'function void cfg80211_tx_mlme_mgmt(net_device*, const u8*, size_t)' at mlme.c:174:1 has some sub-type changes: CRC value (modversions) changed from 0xc4cbac45 to 0x521efc9 [C] 'function void cfg80211_unlink_bss(wiphy*, cfg80211_bss*)' at scan.c:1960:1 has some sub-type changes: CRC value (modversions) changed from 0x1d971210 to 0x7d907a37 [C] 'function void cfg80211_unregister_wdev(wireless_dev*)' at core.c:1129:1 has some sub-type changes: CRC value (modversions) changed from 0xbd96e13d to 0x7040aa43 [C] 'function void cfg80211_update_owe_info_event(net_device*, cfg80211_update_owe_info*, gfp_t)' at nl80211.c:17284:1 has some sub-type changes: CRC value (modversions) changed from 0xcf5b1cb4 to 0x7a3a6773 [C] 'function int cfg80211_vendor_cmd_reply(sk_buff*)' at nl80211.c:13419:1 has some sub-type changes: CRC value (modversions) changed from 0x34354ca0 to 0x1fcf81ce [C] 'function int check_disk_change(block_device*)' at block_dev.c:1483:1 has some sub-type changes: CRC value (modversions) changed from 0x2664923d to 0xd23b9e5 [C] 'function int class_create_file_ns(class*, const class_attribute*, void*)' at device.h:757:1 has some sub-type changes: CRC value (modversions) changed from 0xf0864ead to 0xd16121bc [C] 'function void class_destroy(class*)' at device.h:806:1 has some sub-type changes: CRC value (modversions) changed from 0x9b78b64a to 0x69e3fa5c [C] 'function device* class_find_device(class*, device*, void*, int (device*, void*)*)' at device.h:668:1 has some sub-type changes: CRC value (modversions) changed from 0xeab20208 to 0x93f5caff [C] 'function void class_interface_unregister(class_interface*)' at device.h:801:1 has some sub-type changes: CRC value (modversions) changed from 0x65581854 to 0xca28c705 [C] 'function void class_remove_file_ns(class*, const class_attribute*, void*)' at device.h:760:1 has some sub-type changes: CRC value (modversions) changed from 0xcf9845a0 to 0xc63f1587 [C] 'function void class_unregister(class*)' at device.h:640:1 has some sub-type changes: CRC value (modversions) changed from 0x1e46ef3b to 0x919e9836 [C] 'function void clear_inode(inode*)' at fs.h:3138:1 has some sub-type changes: CRC value (modversions) changed from 0x2dcc9202 to 0x6c09085b [C] 'function int clk_bulk_get(device*, int, clk_bulk_data*)' at clk-bulk.c:114:1 has some sub-type changes: CRC value (modversions) changed from 0x77cfaed6 to 0x4ffed354 [C] 'function int clk_bulk_get_all(device*, clk_bulk_data**)' at clk.h:332:1 has some sub-type changes: CRC value (modversions) changed from 0xa6fdc0f to 0x3ee96296 [C] 'function clk* clk_get(device*, const char*)' at clk.h:290:1 has some sub-type changes: CRC value (modversions) changed from 0x34e74b5a to 0xb733e505 [C] 'function unsigned long int clk_hw_get_flags(const clk_hw*)' at clk.c:511:1 has some sub-type changes: CRC value (modversions) changed from 0x8317be07 to 0xf66ae014 [C] 'function unsigned int clk_hw_get_num_parents(const clk_hw*)' at clk.c:284:1 has some sub-type changes: CRC value (modversions) changed from 0x9869689e to 0x780918fd [C] 'function clk_hw* clk_hw_get_parent(const clk_hw*)' at clk.c:290:1 has some sub-type changes: CRC value (modversions) changed from 0x504b306c to 0x3312c9c4 [C] 'function clk_hw* clk_hw_get_parent_by_index(const clk_hw*, unsigned int)' at clk.c:460:1 has some sub-type changes: CRC value (modversions) changed from 0x688277fb to 0x4a0689af [C] 'function unsigned long int clk_hw_get_rate(const clk_hw*)' at clk.c:491:1 has some sub-type changes: CRC value (modversions) changed from 0xedd10941 to 0x80f7e2e3 [C] 'function bool clk_hw_is_enabled(const clk_hw*)' at clk.c:529:1 has some sub-type changes: CRC value (modversions) changed from 0xd69cd3d2 to 0x4db160fb [C] 'function bool clk_hw_is_prepared(const clk_hw*)' at clk.c:517:1 has some sub-type changes: CRC value (modversions) changed from 0x955a2ce8 to 0x8ddafa0a [C] 'function int clk_hw_register(device*, clk_hw*)' at clk.c:3877:1 has some sub-type changes: CRC value (modversions) changed from 0x4d110d4a to 0x171f8762 [C] 'function clk_hw* clk_hw_register_fixed_factor(device*, const char*, const char*, unsigned long int, unsigned int, unsigned int)' at clk-fixed-factor.c:109:1 has some sub-type changes: CRC value (modversions) changed from 0x705b4301 to 0x926b82e2 [C] 'function unsigned long int clk_hw_round_rate(clk_hw*, unsigned long int)' at clk.c:1445:1 has some sub-type changes: CRC value (modversions) changed from 0xd239d0a8 to 0x8bf343d9 [C] 'function void clk_hw_set_rate_range(clk_hw*, unsigned long int, unsigned long int)' at clk-provider.h:858:1 has some sub-type changes: CRC value (modversions) changed from 0x56049fa6 to 0x343f76f9 [C] 'function void clk_hw_unregister(clk_hw*)' at clk.c:4037:1 has some sub-type changes: CRC value (modversions) changed from 0xfa524959 to 0xe6f37b5 [C] 'function clk* clk_register(device*, clk_hw*)' at clk.c:3861:1 has some sub-type changes: CRC value (modversions) changed from 0xf42653dd to 0x2e054d1c [C] 'function clk* clk_register_fixed_factor(device*, const char*, const char*, unsigned long int, unsigned int, unsigned int)' at clk-fixed-factor.c:118:1 has some sub-type changes: CRC value (modversions) changed from 0xb9e2b9d7 to 0x4bf6a0ce [C] 'function clk* clk_register_fixed_rate(device*, const char*, const char*, unsigned long int, unsigned long int)' at clk-fixed-rate.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0xeea036e7 to 0xaeed6285 [C] 'function void clk_sync_state(device*)' at clk.c:1333:1 has some sub-type changes: CRC value (modversions) changed from 0x95436402 to 0xf472f5b [C] 'function void clockevents_config_and_register(clock_event_device*, u32, unsigned long int, unsigned long int)' at clockevents.c:505:1 has some sub-type changes: CRC value (modversions) changed from 0x4501cf30 to 0xbe736b41 [C] 'function page* cma_alloc(cma*, unsigned long int, unsigned int, bool)' at cma.h:35:1 has some sub-type changes: CRC value (modversions) changed from 0x569f7756 to 0x100b925f [C] 'function bool cma_release(cma*, const page*, unsigned int)' at cma.h:37:1 has some sub-type changes: CRC value (modversions) changed from 0xcb41bd4d to 0xb4c945d1 [C] 'function int component_add(device*, const component_ops*)' at component.c:742:1 has some sub-type changes: CRC value (modversions) changed from 0xd4cf1c02 to 0xf44f1c20 [C] 'function int component_bind_all(device*, void*)' at component.c:632:1 has some sub-type changes: CRC value (modversions) changed from 0x7c5a1c6c to 0x9d4aa05d [C] 'function void component_del(device*, const component_ops*)' at component.c:757:1 has some sub-type changes: CRC value (modversions) changed from 0xeca9bac0 to 0xc46470a1 [C] 'function int component_master_add_with_match(device*, const component_master_ops*, component_match*)' at component.h:90:1 has some sub-type changes: CRC value (modversions) changed from 0x85710ce9 to 0x5ecf083d [C] 'function void component_master_del(device*, const component_master_ops*)' at component.c:513:1 has some sub-type changes: CRC value (modversions) changed from 0x2e3810f1 to 0x6210d952 [C] 'function void component_match_add_release(device*, component_match**, void (device*, void*)*, int (device*, void*)*, void*)' at component.c:401:1 has some sub-type changes: CRC value (modversions) changed from 0xfe9bc5fa to 0x63e861cb [C] 'function void component_unbind_all(device*, void*)' at component.c:549:1 has some sub-type changes: CRC value (modversions) changed from 0x42144000 to 0x2e86ec55 [C] 'function int config_ep_by_speed(usb_gadget*, usb_function*, usb_ep*)' at composite.h:255:1 has some sub-type changes: CRC value (modversions) changed from 0xa842ab22 to 0x55c4d02 [C] 'function void config_group_init(config_group*)' at configfs.h:87:1 has some sub-type changes: CRC value (modversions) changed from 0x6c7422c3 to 0xbf209a53 [C] 'function void config_group_init_type_name(config_group*, const char*, const config_item_type*)' at configfs.h:88:1 has some sub-type changes: CRC value (modversions) changed from 0x2807ff19 to 0xd9b9b4a9 [C] 'function void config_item_put(config_item*)' at configfs.h:65:1 has some sub-type changes: CRC value (modversions) changed from 0x21dcf42d to 0xb2245c6b [C] 'function int configfs_register_subsystem(configfs_subsystem*)' at dir.c:1864:1 has some sub-type changes: CRC value (modversions) changed from 0xda2cfb18 to 0xa05503b1 [C] 'function void configfs_unregister_subsystem(configfs_subsystem*)' at dir.c:1920:1 has some sub-type changes: CRC value (modversions) changed from 0x36a5a45f to 0x3953e5ad [C] 'function void console_stop(console*)' at printk.c:2629:1 has some sub-type changes: CRC value (modversions) changed from 0x33ca97a to 0x3e669f2 [C] 'function void consume_skb(sk_buff*)' at skbuff.h:1029:1 has some sub-type changes: CRC value (modversions) changed from 0x8b50f5ee to 0x791d0b58 [C] 'function int cont_write_begin(file*, address_space*, loff_t, unsigned int, unsigned int, page**, void**, get_block_t*, loff_t*)' at buffer.c:2418:1 has some sub-type changes: CRC value (modversions) changed from 0xb6b0cb55 to 0xec833ff3 [C] 'function int copy_strings_kernel(int, const char* const*, linux_binprm*)' at binfmts.h:141:1 has some sub-type changes: CRC value (modversions) changed from 0x4480c176 to 0xc92c4658 [C] 'function cpufreq_policy* cpufreq_cpu_get(unsigned int)' at cpufreq.h:180:1 has some sub-type changes: CRC value (modversions) changed from 0xd1be73f6 to 0xba81307b [C] 'function cpufreq_policy* cpufreq_cpu_get_raw(unsigned int)' at cpufreq.h:179:1 has some sub-type changes: CRC value (modversions) changed from 0x53bbb66e to 0xbcea79fd [C] 'function void cpufreq_cpu_put(cpufreq_policy*)' at cpufreq.c:250:1 has some sub-type changes: CRC value (modversions) changed from 0xd7968c9a to 0x70c35be0 [C] 'function unsigned int cpufreq_driver_resolve_freq(cpufreq_policy*, unsigned int)' at cpufreq.h:569:1 has some sub-type changes: CRC value (modversions) changed from 0xaf07ee40 to 0x610f08b9 [C] 'function void cpufreq_freq_transition_begin(cpufreq_policy*, cpufreq_freqs*)' at cpufreq.c:412:1 has some sub-type changes: CRC value (modversions) changed from 0x65dd5e32 to 0x3e34bbcf [C] 'function void cpufreq_freq_transition_end(cpufreq_policy*, cpufreq_freqs*, int)' at cpufreq.c:446:1 has some sub-type changes: CRC value (modversions) changed from 0x9eb14631 to 0xe545e308 [C] 'function int cpufreq_generic_suspend(cpufreq_policy*)' at cpufreq.c:1797:1 has some sub-type changes: CRC value (modversions) changed from 0x571bdce9 to 0x7f4f9109 [C] 'function int cpufreq_get_policy(cpufreq_policy*, unsigned int)' at cpufreq.c:2371:1 has some sub-type changes: CRC value (modversions) changed from 0x6639c619 to 0x7c8e98da [C] 'function int cpufreq_register_driver(cpufreq_driver*)' at cpufreq.h:415:1 has some sub-type changes: CRC value (modversions) changed from 0x3dbec5a7 to 0x9ba15a8a [C] 'function int cpufreq_register_governor(cpufreq_governor*)' at cpufreq.h:572:1 has some sub-type changes: CRC value (modversions) changed from 0x20c49b23 to 0xce306c99 [C] 'function int cpufreq_table_index_unsorted(cpufreq_policy*, unsigned int, unsigned int)' at cpufreq.h:702:1 has some sub-type changes: CRC value (modversions) changed from 0xc8a69132 to 0x8354d6ff [C] 'function int cpufreq_unregister_driver(cpufreq_driver*)' at cpufreq.h:416:1 has some sub-type changes: CRC value (modversions) changed from 0xb9d0e128 to 0xd8edfd83 [C] 'function void cpufreq_unregister_governor(cpufreq_governor*)' at cpufreq.h:573:1 has some sub-type changes: CRC value (modversions) changed from 0xf218c3d0 to 0xcc9ebeb9 [C] 'function void create_empty_buffers(page*, unsigned long int, unsigned long int)' at buffer.c:1525:1 has some sub-type changes: CRC value (modversions) changed from 0x3a3c314f to 0xcca6575 [C] 'function int crypto_aead_encrypt(aead_request*)' at aead.h:320:1 has some sub-type changes: CRC value (modversions) changed from 0xbc50a6fd to 0x4e9205b7 [C] 'function int crypto_aead_setauthsize(crypto_aead*, unsigned int)' at aead.h:294:1 has some sub-type changes: CRC value (modversions) changed from 0x1e32cb13 to 0x2f5c8be2 [C] 'function int crypto_aead_setkey(crypto_aead*, const unsigned char*, unsigned int)' at aead.h:281:1 has some sub-type changes: CRC value (modversions) changed from 0xd36e7e49 to 0xa9a12c80 [C] 'function int crypto_ahash_digest(ahash_request*)' at hash.h:455:1 has some sub-type changes: CRC value (modversions) changed from 0x14255b7b to 0xcf68cbe1 [C] 'function int crypto_ahash_setkey(crypto_ahash*, const unsigned char*, unsigned int)' at hash.h:411:1 has some sub-type changes: CRC value (modversions) changed from 0xeb277659 to 0x7b3eab27 [C] 'function crypto_aead* crypto_alloc_aead(const char*, unsigned int, unsigned int)' at aead.h:172:1 has some sub-type changes: CRC value (modversions) changed from 0x6f1f14ba to 0xba81ab49 [C] 'function crypto_ahash* crypto_alloc_ahash(const char*, unsigned int, unsigned int)' at hash.h:252:1 has some sub-type changes: CRC value (modversions) changed from 0xc4838d55 to 0x7a6675fb [C] 'function crypto_tfm* crypto_alloc_base(const char*, unsigned int, unsigned int)' at crypto.h:825:1 has some sub-type changes: CRC value (modversions) changed from 0xb17e6966 to 0xac4d683a [C] 'function void* crypto_alloc_instance(const char*, crypto_alg*, unsigned int)' at algapi.h:185:1 has some sub-type changes: CRC value (modversions) changed from 0x8bf0dd3f to 0xffe2c397 [C] 'function crypto_shash* crypto_alloc_shash(const char*, unsigned int, unsigned int)' at hash.h:695:1 has some sub-type changes: CRC value (modversions) changed from 0xa4397f1e to 0x30329f0a [C] 'function crypto_skcipher* crypto_alloc_skcipher(const char*, unsigned int, unsigned int)' at skcipher.h:191:1 has some sub-type changes: CRC value (modversions) changed from 0xdbfc2f6e to 0xf78e206a [C] 'function crypto_alg* crypto_attr_alg2(rtattr*, const crypto_type*, unsigned int, unsigned int)' at algapi.h:172:1 has some sub-type changes: CRC value (modversions) changed from 0x476a4f75 to 0xc2d6b69c [C] 'function crypto_async_request* crypto_dequeue_request(crypto_queue*)' at algapi.h:191:1 has some sub-type changes: CRC value (modversions) changed from 0x1ec5f846 to 0x7042012e [C] 'function void crypto_destroy_tfm(void*, crypto_tfm*)' at crypto.h:826:1 has some sub-type changes: CRC value (modversions) changed from 0x9cd7d8eb to 0x7d859d02 [C] 'function crypto_engine* crypto_engine_alloc_init(device*, bool)' at crypto_engine.c:426:1 has some sub-type changes: CRC value (modversions) changed from 0xbf1ba465 to 0x805c4d59 [C] 'function int crypto_engine_exit(crypto_engine*)' at crypto_engine.c:473:1 has some sub-type changes: CRC value (modversions) changed from 0xb725db15 to 0x1e81bae6 [C] 'function int crypto_engine_start(crypto_engine*)' at crypto_engine.c:359:1 has some sub-type changes: CRC value (modversions) changed from 0xc1b78678 to 0x49abd95b [C] 'function int crypto_enqueue_request(crypto_queue*, crypto_async_request*)' at algapi.h:189:1 has some sub-type changes: CRC value (modversions) changed from 0xfa1c9a27 to 0x605f17c3 [C] 'function void crypto_finalize_ablkcipher_request(crypto_engine*, ablkcipher_request*, int)' at crypto_engine.c:290:1 has some sub-type changes: CRC value (modversions) changed from 0x5dbeab81 to 0x7eec46f [C] 'function int crypto_init_spawn(crypto_spawn*, crypto_alg*, crypto_instance*, unsigned int)' at algapi.h:150:1 has some sub-type changes: CRC value (modversions) changed from 0x102d8524 to 0xac12026c [C] 'function void crypto_mod_put(crypto_alg*)' at algapi.h:138:1 has some sub-type changes: CRC value (modversions) changed from 0xfdd9c34a to 0x65f917a1 [C] 'function int crypto_register_aead(aead_alg*)' at aead.c:403:1 has some sub-type changes: CRC value (modversions) changed from 0xb8ceb461 to 0xc51b6813 [C] 'function int crypto_register_ahash(ahash_alg*)' at ahash.c:588:1 has some sub-type changes: CRC value (modversions) changed from 0x19a2726f to 0x86c203cc [C] 'function int crypto_register_alg(crypto_alg*)' at crypto.h:702:1 has some sub-type changes: CRC value (modversions) changed from 0x1343c69e to 0x96b9e8d5 [C] 'function int crypto_register_rng(rng_alg*)' at rng.c:181:1 has some sub-type changes: CRC value (modversions) changed from 0x362eab82 to 0x5386384b [C] 'function int crypto_register_rngs(rng_alg*, int)' at rng.h:17:1 has some sub-type changes: CRC value (modversions) changed from 0x4677dd3b to 0xac50f667 [C] 'function int crypto_register_shash(shash_alg*)' at hash.h:101:1 has some sub-type changes: CRC value (modversions) changed from 0xa58c6fb9 to 0xeb8e29aa [C] 'function int crypto_register_shashes(shash_alg*, int)' at hash.h:103:1 has some sub-type changes: CRC value (modversions) changed from 0xa0073ec9 to 0xd56139b7 [C] 'function int crypto_register_skcipher(skcipher_alg*)' at skcipher.c:1047:1 has some sub-type changes: CRC value (modversions) changed from 0x7c7871ec to 0x4cbe25bb [C] 'function int crypto_register_skciphers(skcipher_alg*, int)' at skcipher.h:131:1 has some sub-type changes: CRC value (modversions) changed from 0xe0b5cee8 to 0xaa9104c5 [C] 'function int crypto_register_template(crypto_template*)' at algapi.h:140:1 has some sub-type changes: CRC value (modversions) changed from 0xacd6d152 to 0xbfe34edf [C] 'function int crypto_sha1_finup(shash_desc*, const u8*, unsigned int, u8*)' at sha1_generic.c:56:1 has some sub-type changes: CRC value (modversions) changed from 0xf5f999d9 to 0x1f375ddd [C] 'function int crypto_sha1_update(shash_desc*, const u8*, unsigned int)' at sha1_generic.c:43:1 has some sub-type changes: CRC value (modversions) changed from 0x1cfe5a48 to 0x9dbe6abd [C] 'function int crypto_shash_digest(shash_desc*, const unsigned char*, unsigned int, unsigned char*)' at hash.h:842:1 has some sub-type changes: CRC value (modversions) changed from 0xb0cccc90 to 0x9a8deeaa [C] 'function int crypto_shash_final(shash_desc*, unsigned char*)' at hash.h:935:1 has some sub-type changes: CRC value (modversions) changed from 0x5eb49ca6 to 0xabb3fcde [C] 'function int crypto_shash_setkey(crypto_shash*, const unsigned char*, unsigned int)' at hash.h:824:1 has some sub-type changes: CRC value (modversions) changed from 0x61ab8638 to 0x9413f26c [C] 'function int crypto_shash_update(shash_desc*, const unsigned char*, unsigned int)' at hash.h:918:1 has some sub-type changes: CRC value (modversions) changed from 0xb875c8e2 to 0x6e3286b9 [C] 'function int crypto_skcipher_decrypt(skcipher_request*)' at skcipher.h:465:1 has some sub-type changes: CRC value (modversions) changed from 0x7aeefd86 to 0xd98f4c57 [C] 'function int crypto_skcipher_encrypt(skcipher_request*)' at skcipher.h:452:1 has some sub-type changes: CRC value (modversions) changed from 0x39703836 to 0x329dc4ff [C] 'function crypto_tfm* crypto_spawn_tfm(crypto_spawn*, unsigned int, unsigned int)' at algapi.h:159:1 has some sub-type changes: CRC value (modversions) changed from 0x467bbe1c to 0xf0f43d18 [C] 'function int crypto_transfer_ablkcipher_request_to_engine(crypto_engine*, ablkcipher_request*)' at crypto_engine.c:223:1 has some sub-type changes: CRC value (modversions) changed from 0x753e900b to 0xb9ad2b2c [C] 'function void crypto_unregister_aead(aead_alg*)' at aead.c:416:1 has some sub-type changes: CRC value (modversions) changed from 0xf9621ee6 to 0x79c0592a [C] 'function int crypto_unregister_ahash(ahash_alg*)' at ahash.c:601:1 has some sub-type changes: CRC value (modversions) changed from 0xf9c57946 to 0x61bb80c1 [C] 'function int crypto_unregister_alg(crypto_alg*)' at crypto.h:703:1 has some sub-type changes: CRC value (modversions) changed from 0x2b68b407 to 0xf49acf64 [C] 'function void crypto_unregister_rng(rng_alg*)' at rng.c:196:1 has some sub-type changes: CRC value (modversions) changed from 0xa5c63e35 to 0x28082431 [C] 'function void crypto_unregister_rngs(rng_alg*, int)' at rng.h:18:1 has some sub-type changes: CRC value (modversions) changed from 0x595fe9b1 to 0x22b4928c [C] 'function int crypto_unregister_shash(shash_alg*)' at hash.h:102:1 has some sub-type changes: CRC value (modversions) changed from 0xd24a401b to 0xfdd375ab [C] 'function int crypto_unregister_shashes(shash_alg*, int)' at hash.h:104:1 has some sub-type changes: CRC value (modversions) changed from 0xfdd9563b to 0xa20ec3e1 [C] 'function void crypto_unregister_skcipher(skcipher_alg*)' at skcipher.c:1060:1 has some sub-type changes: CRC value (modversions) changed from 0x166b12f6 to 0xace31cf [C] 'function void crypto_unregister_skciphers(skcipher_alg*, int)' at skcipher.h:132:1 has some sub-type changes: CRC value (modversions) changed from 0xdea08aa9 to 0x6d5c575e [C] 'function void crypto_unregister_template(crypto_template*)' at algapi.h:142:1 has some sub-type changes: CRC value (modversions) changed from 0xfeec1438 to 0x317d59da [C] 'function timespec64 current_time(inode*)' at fs.h:1624:1 has some sub-type changes: CRC value (modversions) changed from 0xffea7fca to 0x92f76445 [C] 'function void d_add(dentry*, inode*)' at dcache.c:2674:1 has some sub-type changes: CRC value (modversions) changed from 0xa4d8ff0f to 0x165ff15b [C] 'function dentry* d_add_ci(dentry*, inode*, qstr*)' at dcache.c:2131:1 has some sub-type changes: CRC value (modversions) changed from 0x3033796 to 0x7b83376c [C] 'function dentry* d_alloc_name(dentry*, const char*)' at dcache.c:1823:1 has some sub-type changes: CRC value (modversions) changed from 0xb9e39546 to 0x348b8dd4 [C] 'function void d_delete(dentry*)' at dcache.h:241:1 has some sub-type changes: CRC value (modversions) changed from 0xd819029c to 0x288978c6 [C] 'function void d_drop(dentry*)' at dcache.h:240:1 has some sub-type changes: CRC value (modversions) changed from 0x51eef780 to 0x85d0895b [C] 'function dentry* d_find_alias(inode*)' at dcache.h:268:1 has some sub-type changes: CRC value (modversions) changed from 0x9b9106c7 to 0xce72339e [C] 'function void d_instantiate(dentry*, inode*)' at dcache.h:235:1 has some sub-type changes: CRC value (modversions) changed from 0x3c5a9748 to 0xa59c47e1 [C] 'function dentry* d_make_root(inode*)' at dcache.h:261:1 has some sub-type changes: CRC value (modversions) changed from 0xcb9ac7fe to 0x2d89b149 [C] 'function void d_move(dentry*, dentry*)' at dcache.h:282:1 has some sub-type changes: CRC value (modversions) changed from 0xdb098115 to 0xe52fb570 [C] 'function dentry* d_obtain_alias(inode*)' at dcache.c:2088:1 has some sub-type changes: CRC value (modversions) changed from 0x694c33ad to 0x54864470 [C] 'function int dapm_pinctrl_event(snd_soc_dapm_widget*, snd_kcontrol*, int)' at soc-dapm.c:1370:1 has some sub-type changes: CRC value (modversions) changed from 0x8d2797da to 0x2532a4dd [C] 'function int dapm_regulator_event(snd_soc_dapm_widget*, snd_kcontrol*, int)' at soc-dapm.c:1336:1 has some sub-type changes: CRC value (modversions) changed from 0xee089092 to 0x4fb12e40 [C] 'function __poll_t datagram_poll(file*, socket*, poll_table*)' at datagram.c:768:1 has some sub-type changes: CRC value (modversions) changed from 0x30d2d58b to 0x8a6183d7 [C] 'function void deactivate_locked_super(super_block*)' at fs.h:2351:1 has some sub-type changes: CRC value (modversions) changed from 0x7d42bb67 to 0x65756bca [C] 'function loff_t default_llseek(file*, loff_t, int)' at read_write.c:236:1 has some sub-type changes: CRC value (modversions) changed from 0xf1afec22 to 0x9b17482b [C] 'function void del_gendisk(gendisk*)' at genhd.h:452:1 has some sub-type changes: CRC value (modversions) changed from 0x32f130a2 to 0xfaa08dd7 [C] 'function file* dentry_open(const path*, int, const cred*)' at fs.h:2610:1 has some sub-type changes: CRC value (modversions) changed from 0x41b63afe to 0x6016b481 [C] 'function int dequeue_signal(task_struct*, sigset_t*, kernel_siginfo_t*)' at signal.c:628:1 has some sub-type changes: CRC value (modversions) changed from 0x5a8c4797 to 0xb3c443e7 [C] 'function int desc_to_gpio(const gpio_desc*)' at gpiolib.c:163:1 has some sub-type changes: CRC value (modversions) changed from 0x6c212ed5 to 0x1854761a [C] 'function void dev_add_pack(packet_type*)' at dev.c:332:1 has some sub-type changes: CRC value (modversions) changed from 0xa68d372 to 0x64aeb2ef [C] 'function int dev_alloc_name(net_device*, const char*)' at dev.c:1059:1 has some sub-type changes: CRC value (modversions) changed from 0xa910848e to 0x3803ee31 [C] 'function void dev_close(net_device*)' at dev.c:1455:1 has some sub-type changes: CRC value (modversions) changed from 0x6d89f3f9 to 0x54f11462 [C] 'function const char* dev_driver_string(const device*)' at device.h:1726:1 has some sub-type changes: CRC value (modversions) changed from 0xb62862cd to 0xb440e95b [C] 'function fwnode_handle* dev_fwnode(device*)' at property.h:34:1 has some sub-type changes: CRC value (modversions) changed from 0x58674da1 to 0x6b251798 [C] 'function net_device* dev_get_by_index(net*, int)' at netdevice.h:2701:1 has some sub-type changes: CRC value (modversions) changed from 0x944372ef to 0xf820e990 [C] 'function net_device* dev_get_by_index_rcu(net*, int)' at dev.c:759:1 has some sub-type changes: CRC value (modversions) changed from 0xab0858a3 to 0x63c6aa6f [C] 'function net_device* dev_get_by_name(net*, const char*)' at dev.c:710:1 has some sub-type changes: CRC value (modversions) changed from 0xe1def02f to 0xabc3b66d [C] 'function net_device* dev_get_by_name_rcu(net*, const char*)' at netdevice.h:2672:1 has some sub-type changes: CRC value (modversions) changed from 0x46e4dfde to 0x6a8b7a88 [C] 'function regmap* dev_get_regmap(device*, const char*)' at regmap.h:1007:1 has some sub-type changes: CRC value (modversions) changed from 0x2ff9a340 to 0x6b1de9c9 [C] 'function rtnl_link_stats64* dev_get_stats(net_device*, rtnl_link_stats64*)' at netdevice.h:4284:1 has some sub-type changes: CRC value (modversions) changed from 0xb6aea139 to 0x4fc0ef91 [C] 'function int dev_mc_sync_multiple(net_device*, net_device*)' at dev_addr_lists.c:884:1 has some sub-type changes: CRC value (modversions) changed from 0x538cecc3 to 0x65e6790e [C] 'function void dev_mc_unsync(net_device*, net_device*)' at dev_addr_lists.c:909:1 has some sub-type changes: CRC value (modversions) changed from 0xb0960133 to 0x1353b7e6 [C] 'function int dev_open(net_device*, netlink_ext_ack*)' at dev.c:1355:1 has some sub-type changes: CRC value (modversions) changed from 0x10d12b87 to 0xc5da3ac1 [C] 'function void dev_pm_clear_wake_irq(device*)' at pm_wakeirq.h:22:1 has some sub-type changes: CRC value (modversions) changed from 0x4d4b53a0 to 0xb311be82 [C] 'function int dev_pm_domain_attach(device*, bool)' at pm_domain.h:363:1 has some sub-type changes: CRC value (modversions) changed from 0x19c6b2e9 to 0x2503df7d [C] 'function device* dev_pm_domain_attach_by_name(device*, const char*)' at common.c:160:1 has some sub-type changes: CRC value (modversions) changed from 0xd3cc661b to 0x48ecc6b0 [C] 'function void dev_pm_domain_detach(device*, bool)' at pm_domain.h:368:1 has some sub-type changes: CRC value (modversions) changed from 0xb7cc30ea to 0xbc2aa1c2 [C] 'function int dev_pm_opp_add(device*, unsigned long int, unsigned long int)' at pm_opp.h:111:1 has some sub-type changes: CRC value (modversions) changed from 0x6d991cfa to 0x219e9ae9 [C] 'function int dev_pm_opp_disable(device*, unsigned long int)' at core.c:2138:1 has some sub-type changes: CRC value (modversions) changed from 0x81b1147d to 0x6f444622 [C] 'function dev_pm_opp* dev_pm_opp_find_freq_ceil(device*, unsigned long int*)' at pm_opp.h:107:1 has some sub-type changes: CRC value (modversions) changed from 0x9382fb3e to 0xccf1a970 [C] 'function dev_pm_opp* dev_pm_opp_find_freq_exact(device*, unsigned long int, bool)' at pm_opp.h:96:1 has some sub-type changes: CRC value (modversions) changed from 0xf849fada to 0x91a26b92 [C] 'function dev_pm_opp* dev_pm_opp_find_freq_floor(device*, unsigned long int*)' at pm_opp.h:102:1 has some sub-type changes: CRC value (modversions) changed from 0xd3c47d6b to 0x42ff62ae [C] 'function void dev_pm_opp_free_cpufreq_table(device*, cpufreq_frequency_table**)' at cpufreq.h:629:1 has some sub-type changes: CRC value (modversions) changed from 0xf8f6a36d to 0xd8542b63 [C] 'function unsigned long int dev_pm_opp_get_freq(dev_pm_opp*)' at core.c:119:1 has some sub-type changes: CRC value (modversions) changed from 0xf2c347d5 to 0xf3a323ef [C] 'function unsigned int dev_pm_opp_get_level(dev_pm_opp*)' at core.c:137:1 has some sub-type changes: CRC value (modversions) changed from 0x1f0a3ce0 to 0x68ca7d2a [C] 'function unsigned long int dev_pm_opp_get_max_transition_latency(device*)' at core.c:270:1 has some sub-type changes: CRC value (modversions) changed from 0xb6e92976 to 0x92c950d7 [C] 'function int dev_pm_opp_get_opp_count(device*)' at pm_opp.h:90:1 has some sub-type changes: CRC value (modversions) changed from 0x93190473 to 0x62ba4b6d [C] 'function opp_table* dev_pm_opp_get_opp_table(device*)' at core.c:1031:1 has some sub-type changes: CRC value (modversions) changed from 0x96aa230f to 0x61a807fd [C] 'function int dev_pm_opp_get_sharing_cpus(device*, cpumask*)' at cpu.c:205:1 has some sub-type changes: CRC value (modversions) changed from 0x39722956 to 0xad927580 [C] 'function unsigned long int dev_pm_opp_get_suspend_opp_freq(device*)' at core.c:284:1 has some sub-type changes: CRC value (modversions) changed from 0xbba9bf65 to 0x3963c4b0 [C] 'function unsigned long int dev_pm_opp_get_voltage(dev_pm_opp*)' at pm_opp.h:82:1 has some sub-type changes: CRC value (modversions) changed from 0xc754bd9b to 0x8ed3b1c3 [C] 'function int dev_pm_opp_init_cpufreq_table(device*, cpufreq_frequency_table**)' at cpufreq.h:627:1 has some sub-type changes: CRC value (modversions) changed from 0xb30ba2c to 0xc307aa38 [C] 'function int dev_pm_opp_of_add_table(device*)' at pm_opp.h:341:1 has some sub-type changes: CRC value (modversions) changed from 0xd168239a to 0x10a6b41a [C] 'function int dev_pm_opp_of_get_sharing_cpus(device*, cpumask*)' at of.c:925:1 has some sub-type changes: CRC value (modversions) changed from 0xbdb5c939 to 0xf11872e [C] 'function void dev_pm_opp_of_remove_table(device*)' at of.c:518:1 has some sub-type changes: CRC value (modversions) changed from 0xa9525dd4 to 0x664c73b1 [C] 'function void dev_pm_opp_put(dev_pm_opp*)' at pm_opp.h:109:1 has some sub-type changes: CRC value (modversions) changed from 0xe1ec5092 to 0x844419f4 [C] 'function void dev_pm_opp_put_opp_table(opp_table*)' at pm_opp.h:80:1 has some sub-type changes: CRC value (modversions) changed from 0x83fb2804 to 0xa0c027ed [C] 'function void dev_pm_opp_put_regulators(opp_table*)' at core.c:1659:1 has some sub-type changes: CRC value (modversions) changed from 0xc988105 to 0x312a52e4 [C] 'function int dev_pm_opp_register_notifier(device*, notifier_block*)' at core.c:2151:1 has some sub-type changes: CRC value (modversions) changed from 0x679bf9c7 to 0x99938937 [C] 'function void dev_pm_opp_remove(device*, unsigned long int)' at pm_opp.h:113:1 has some sub-type changes: CRC value (modversions) changed from 0x77b1172d to 0x3b217752 [C] 'function void dev_pm_opp_remove_all_dynamic(device*)' at pm_opp.h:114:1 has some sub-type changes: CRC value (modversions) changed from 0x810fc20a to 0xb2d75a23 [C] 'function int dev_pm_opp_set_rate(device*, unsigned long int)' at core.c:805:1 has some sub-type changes: CRC value (modversions) changed from 0xd095d97e to 0x416e3db8 [C] 'function opp_table* dev_pm_opp_set_regulators(device*, const char* const*, unsigned int)' at core.c:1589:1 has some sub-type changes: CRC value (modversions) changed from 0xfa29270 to 0x9b0a254b [C] 'function int dev_pm_opp_set_sharing_cpus(device*, const cpumask*)' at pm_opp.h:137:1 has some sub-type changes: CRC value (modversions) changed from 0x4d7c1019 to 0xacc46d39 [C] 'function opp_table* dev_pm_opp_set_supported_hw(device*, const u32*, unsigned int)' at core.c:1440:1 has some sub-type changes: CRC value (modversions) changed from 0x56d46b86 to 0xab1bbbfb [C] 'function int dev_pm_opp_unregister_notifier(device*, notifier_block*)' at core.c:2175:1 has some sub-type changes: CRC value (modversions) changed from 0x67f5c5a9 to 0xefeb855a [C] 'function int dev_pm_qos_add_request(device*, dev_pm_qos_request*, dev_pm_qos_req_type, s32)' at qos.c:388:1 has some sub-type changes: CRC value (modversions) changed from 0xcae0844b to 0x50338920 [C] 'function int dev_pm_qos_expose_latency_tolerance(device*)' at qos.c:951:1 has some sub-type changes: CRC value (modversions) changed from 0xa2c06bd1 to 0x6bf03e16 [C] 'function void dev_pm_qos_hide_latency_tolerance(device*)' at qos.c:970:1 has some sub-type changes: CRC value (modversions) changed from 0x5fec3375 to 0xa4a19cbb [C] 'function int dev_pm_qos_remove_request(dev_pm_qos_request*)' at qos.c:510:1 has some sub-type changes: CRC value (modversions) changed from 0xb7257022 to 0x8bbb1574 [C] 'function int dev_pm_qos_update_request(dev_pm_qos_request*, s32)' at qos.c:463:1 has some sub-type changes: CRC value (modversions) changed from 0x681740a8 to 0x92ba26b1 [C] 'function int dev_pm_qos_update_user_latency_tolerance(device*, int)' at pm_qos.h:188:1 has some sub-type changes: CRC value (modversions) changed from 0xc77020ce to 0x12cc6b50 [C] 'function int dev_pm_set_dedicated_wake_irq(device*, int)' at wakeirq.c:165:1 has some sub-type changes: CRC value (modversions) changed from 0xf96e75ed to 0x13fe7b61 [C] 'function int dev_pm_set_wake_irq(device*, int)' at pm_wakeirq.h:19:1 has some sub-type changes: CRC value (modversions) changed from 0xbe7bdc04 to 0x414dd8ba [C] 'function void dev_printk(const char*, const device*, const char*, ...)' at device.h:1749:1 has some sub-type changes: CRC value (modversions) changed from 0x881b3371 to 0xc6c7b56c [C] 'function int dev_queue_xmit(sk_buff*)' at dev.c:3809:1 has some sub-type changes: CRC value (modversions) changed from 0x707f5f54 to 0xcd3686a6 [C] 'function void dev_remove_pack(packet_type*)' at dev.c:387:1 has some sub-type changes: CRC value (modversions) changed from 0xf52afbc7 to 0xefb2ca87 [C] 'function int dev_set_mac_address(net_device*, sockaddr*, netlink_ext_ack*)' at netdevice.h:3728:1 has some sub-type changes: CRC value (modversions) changed from 0x2f287886 to 0x77706c66 [C] 'function int dev_set_mtu(net_device*, int)' at dev.c:8041:1 has some sub-type changes: CRC value (modversions) changed from 0xa7b32c4d to 0xd362a4d0 [C] 'function int dev_set_name(device*, const char*, ...)' at device.h:1415:1 has some sub-type changes: CRC value (modversions) changed from 0x66c1c68a to 0x12369b85 [C] 'function int dev_uc_sync_multiple(net_device*, net_device*)' at dev_addr_lists.c:663:1 has some sub-type changes: CRC value (modversions) changed from 0x471b0faa to 0x113fb000 [C] 'function void dev_uc_unsync(net_device*, net_device*)' at dev_addr_lists.c:688:1 has some sub-type changes: CRC value (modversions) changed from 0xb6a325df to 0x939f6085 [C] 'function devfreq* devfreq_add_device(device*, devfreq_dev_profile*, const char*, void*)' at devfreq.h:189:1 has some sub-type changes: CRC value (modversions) changed from 0x3cba742f to 0xe4e0632f [C] 'function int devfreq_add_governor(devfreq_governor*)' at governor.h:64:1 has some sub-type changes: CRC value (modversions) changed from 0xd7b04b3c to 0x8ce20f88 [C] 'function void devfreq_cooling_unregister(thermal_cooling_device*)' at devfreq_cooling.c:592:1 has some sub-type changes: CRC value (modversions) changed from 0xc2c2592 to 0x12d71e84 [C] 'function dev_pm_opp* devfreq_recommended_opp(device*, unsigned long int*, unsigned int)' at devfreq.h:217:1 has some sub-type changes: CRC value (modversions) changed from 0xf1c52bb8 to 0x15d6e8a4 [C] 'function int devfreq_register_opp_notifier(device*, devfreq*)' at devfreq.c:1535:1 has some sub-type changes: CRC value (modversions) changed from 0x902891c7 to 0x5f2c8049 [C] 'function int devfreq_remove_device(devfreq*)' at devfreq.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0x817205dc to 0x7f1f6137 [C] 'function int devfreq_remove_governor(devfreq_governor*)' at governor.h:65:1 has some sub-type changes: CRC value (modversions) changed from 0xe497df13 to 0x55825694 [C] 'function int devfreq_resume_device(devfreq*)' at devfreq.h:203:1 has some sub-type changes: CRC value (modversions) changed from 0x973c058e to 0x6d7b1e70 [C] 'function int devfreq_suspend_device(devfreq*)' at devfreq.h:202:1 has some sub-type changes: CRC value (modversions) changed from 0x9f414149 to 0x9e51d5c2 [C] 'function int devfreq_unregister_opp_notifier(device*, devfreq*)' at devfreq.c:1551:1 has some sub-type changes: CRC value (modversions) changed from 0xa80495e4 to 0x4eed4797 [C] 'function int devfreq_update_status(devfreq*, unsigned long int)' at governor.h:67:1 has some sub-type changes: CRC value (modversions) changed from 0xf6904ba9 to 0x797cd868 [C] 'function int device_add(device*)' at device.h:1577:1 has some sub-type changes: CRC value (modversions) changed from 0xa02cd101 to 0x9ae8064a [C] 'function void device_add_disk(device*, gendisk*, const attribute_group**)' at genhd.h:440:1 has some sub-type changes: CRC value (modversions) changed from 0x676fbe59 to 0x329fad35 [C] 'function int device_attach(device*)' at device.h:1638:1 has some sub-type changes: CRC value (modversions) changed from 0xb9f48120 to 0xb99bf110 [C] 'function int device_bind_driver(device*)' at dd.c:466:1 has some sub-type changes: CRC value (modversions) changed from 0x421162f5 to 0xa7fe063f [C] 'function void* device_connection_find_match(device*, const char*, void*, devcon_match_fn_t)' at devcon.c:99:1 has some sub-type changes: CRC value (modversions) changed from 0x55dd40fa to 0xe9ea1279 [C] 'function device* device_create(class*, device*, unsigned int, void*, const char*, ...)' at device.h:1653:1 has some sub-type changes: CRC value (modversions) changed from 0x26e05621 to 0x7683fc3e [C] 'function int device_create_bin_file(device*, const bin_attribute*)' at core.c:2308:1 has some sub-type changes: CRC value (modversions) changed from 0x8e5c0597 to 0xee3f0bef [C] 'function int device_create_file(device*, const device_attribute*)' at device.h:887:1 has some sub-type changes: CRC value (modversions) changed from 0xa6c3f823 to 0xa34d3b99 [C] 'function device* device_create_with_groups(class*, device*, unsigned int, void*, const attribute_group**, const char*, ...)' at device.h:1657:1 has some sub-type changes: CRC value (modversions) changed from 0x5923ea87 to 0x2477f2e3 [C] 'function void device_del(device*)' at device.h:1578:1 has some sub-type changes: CRC value (modversions) changed from 0xd4e1b5fe to 0x9f71d72e [C] 'function void device_destroy(class*, unsigned int)' at device.h:1661:1 has some sub-type changes: CRC value (modversions) changed from 0x6a6f0981 to 0xc1114137 [C] 'function device* device_find_child(device*, void*, int (device*, void*)*)' at device.h:1583:1 has some sub-type changes: CRC value (modversions) changed from 0xe0c3cb86 to 0x8fb4a663 [C] 'function int device_for_each_child(device*, void*, int (device*, void*)*)' at device.h:1579:1 has some sub-type changes: CRC value (modversions) changed from 0x49fe55ee to 0x388e1c02 [C] 'function unsigned int device_get_child_node_count(device*)' at property.h:116:1 has some sub-type changes: CRC value (modversions) changed from 0x7a04e564 to 0xb1434da2 [C] 'function dev_dma_attr device_get_dma_attr(device*)' at property.c:745:1 has some sub-type changes: CRC value (modversions) changed from 0xd026b4bc to 0xa4c2ef [C] 'function void* device_get_match_data(device*)' at property.c:1103:1 has some sub-type changes: CRC value (modversions) changed from 0x151e5c0d to 0x191448b1 [C] 'function fwnode_handle* device_get_named_child_node(device*, const char*)' at property.c:670:1 has some sub-type changes: CRC value (modversions) changed from 0xf779d919 to 0xdceab35f [C] 'function fwnode_handle* device_get_next_child_node(device*, fwnode_handle*)' at property.h:99:1 has some sub-type changes: CRC value (modversions) changed from 0x4e959909 to 0x117dc6a3 [C] 'function int device_init_wakeup(device*, bool)' at pm_wakeup.h:98:1 has some sub-type changes: CRC value (modversions) changed from 0xfc083a83 to 0x6bf42e8b [C] 'function void device_initialize(device*)' at device.h:1576:1 has some sub-type changes: CRC value (modversions) changed from 0x6819bc1c to 0xd51b41d0 [C] 'function device_link* device_link_add(device*, device*, unsigned int)' at device.h:1729:1 has some sub-type changes: CRC value (modversions) changed from 0xb8114135 to 0x61869cf6 [C] 'function void device_link_del(device_link*)' at core.c:806:1 has some sub-type changes: CRC value (modversions) changed from 0x1afe5127 to 0xcdb63c56 [C] 'function int device_match_fwnode(device*, void*)' at core.c:4162:1 has some sub-type changes: CRC value (modversions) changed from 0xfd239aee to 0x7acb4b22 [C] 'function int device_match_name(device*, void*)' at core.c:4150:1 has some sub-type changes: CRC value (modversions) changed from 0x3ddb610b to 0x58cc4dcb [C] 'function bool device_property_present(device*, const char*)' at property.h:36:1 has some sub-type changes: CRC value (modversions) changed from 0x88129d52 to 0x56f9cfac [C] 'function int device_property_read_string(device*, const char*, const char**)' at property.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0xe70478e5 to 0x4c607dc8 [C] 'function int device_property_read_string_array(device*, const char*, const char**, size_t)' at property.c:178:1 has some sub-type changes: CRC value (modversions) changed from 0x72710be5 to 0x7dcc1938 [C] 'function int device_property_read_u16_array(device*, const char*, u16*, size_t)' at property.c:103:1 has some sub-type changes: CRC value (modversions) changed from 0x5c55061e to 0x30e8ca5a [C] 'function int device_property_read_u32_array(device*, const char*, unsigned int*, unsigned long int)' at property.h:41:1 has some sub-type changes: CRC value (modversions) changed from 0x638732d7 to 0x79301482 [C] 'function int device_property_read_u8_array(device*, const char*, u8*, size_t)' at property.c:78:1 has some sub-type changes: CRC value (modversions) changed from 0x82e0ce to 0x5166a0c2 [C] 'function int device_register(device*)' at core.c:2962:1 has some sub-type changes: CRC value (modversions) changed from 0x53a0af31 to 0x3b85481d [C] 'function void device_release_driver(device*)' at device.h:1637:1 has some sub-type changes: CRC value (modversions) changed from 0x26d5397b to 0xd2535b27 [C] 'function void device_remove_bin_file(device*, const bin_attribute*)' at core.c:2323:1 has some sub-type changes: CRC value (modversions) changed from 0xe8381707 to 0x9ec2987 [C] 'function void device_remove_file(device*, const device_attribute*)' at device.h:889:1 has some sub-type changes: CRC value (modversions) changed from 0xcdf9be8f to 0xdf187704 [C] 'function bool device_remove_file_self(device*, const device_attribute*)' at device.h:891:1 has some sub-type changes: CRC value (modversions) changed from 0xbc91c25c to 0x91c16523 [C] 'function void device_remove_groups(device*, const attribute_group**)' at core.c:1992:1 has some sub-type changes: CRC value (modversions) changed from 0x708c2525 to 0xb04f7dfe [C] 'function int device_rename(device*, const char*)' at core.c:3724:1 has some sub-type changes: CRC value (modversions) changed from 0x77f90e02 to 0xead8afc7 [C] 'function void device_set_wakeup_capable(device*, bool)' at pm_wakeup.h:97:1 has some sub-type changes: CRC value (modversions) changed from 0xc29c5649 to 0x9144ea82 [C] 'function int device_set_wakeup_enable(device*, bool)' at pm_wakeup.h:99:1 has some sub-type changes: CRC value (modversions) changed from 0x31f01ff6 to 0xe52510cb [C] 'function ssize_t device_show_bool(device*, device_attribute*, char*)' at core.c:1726:1 has some sub-type changes: CRC value (modversions) changed from 0xef8310ea to 0x11355f6f [C] 'function ssize_t device_show_int(device*, device_attribute*, char*)' at core.c:1704:1 has some sub-type changes: CRC value (modversions) changed from 0xd2199d39 to 0xf8e612c3 [C] 'function ssize_t device_store_bool(device*, device_attribute*, const char*, size_t)' at core.c:1714:1 has some sub-type changes: CRC value (modversions) changed from 0x24d23285 to 0x6518e19c [C] 'function ssize_t device_store_int(device*, device_attribute*, const char*, size_t)' at core.c:1684:1 has some sub-type changes: CRC value (modversions) changed from 0xf68cce8a to 0xd0b57174 [C] 'function void device_unregister(device*)' at device.h:1575:1 has some sub-type changes: CRC value (modversions) changed from 0xdc77d985 to 0xd60050b8 [C] 'function int device_wakeup_disable(device*)' at pm_wakeup.h:96:1 has some sub-type changes: CRC value (modversions) changed from 0xa559f089 to 0xaf525ce1 [C] 'function int device_wakeup_enable(device*)' at pm_wakeup.h:95:1 has some sub-type changes: CRC value (modversions) changed from 0x61f7a15b to 0xc189b17a [C] 'function int devm_add_action(device*, void (void*)*, void*)' at device.h:987:1 has some sub-type changes: CRC value (modversions) changed from 0x383d07d7 to 0x190f6f5 [C] 'function backlight_device* devm_backlight_device_register(device*, const char*, device*, void*, const backlight_ops*, const backlight_properties*)' at backlight.h:181:1 has some sub-type changes: CRC value (modversions) changed from 0x6774ecd3 to 0x6fa667d2 [C] 'function int devm_clk_bulk_get(device*, int, clk_bulk_data*)' at clk.h:359:1 has some sub-type changes: CRC value (modversions) changed from 0x21c4987a to 0x40516669 [C] 'function int devm_clk_bulk_get_all(device*, clk_bulk_data**)' at clk-devres.c:95:1 has some sub-type changes: CRC value (modversions) changed from 0x22801cbf to 0xe3f36b9d [C] 'function int devm_clk_bulk_get_optional(device*, int, clk_bulk_data*)' at clk-devres.c:88:1 has some sub-type changes: CRC value (modversions) changed from 0xa83df088 to 0x3448c0f6 [C] 'function clk* devm_clk_get(device*, const char*)' at clk.h:419:1 has some sub-type changes: CRC value (modversions) changed from 0xd094e332 to 0x54e2203e [C] 'function clk* devm_clk_get_optional(device*, const char*)' at clk-devres.c:32:1 has some sub-type changes: CRC value (modversions) changed from 0x493ae4b2 to 0x293958c3 [C] 'function int devm_clk_hw_register(device*, clk_hw*)' at clk-provider.h:811:1 has some sub-type changes: CRC value (modversions) changed from 0x7b9d2b94 to 0xf0320aec [C] 'function void devm_clk_put(device*, clk*)' at clk-devres.c:129:1 has some sub-type changes: CRC value (modversions) changed from 0x8b37aadc to 0xc18eda03 [C] 'function clk* devm_clk_register(device*, clk_hw*)' at clk-provider.h:808:1 has some sub-type changes: CRC value (modversions) changed from 0xa2a3e8d1 to 0x476c2fc7 [C] 'function devfreq* devm_devfreq_add_device(device*, devfreq_dev_profile*, const char*, void*)' at devfreq.c:798:1 has some sub-type changes: CRC value (modversions) changed from 0x4c2dcfef to 0xa92944b8 [C] 'function int devm_devfreq_register_opp_notifier(device*, devfreq*)' at devfreq.c:1568:1 has some sub-type changes: CRC value (modversions) changed from 0x66861651 to 0xa900c927 [C] 'function void devm_devfreq_remove_device(device*, devfreq*)' at devfreq.c:872:1 has some sub-type changes: CRC value (modversions) changed from 0x973ef768 to 0x1ba16018 [C] 'function int devm_device_add_group(device*, const attribute_group*)' at core.c:2037:1 has some sub-type changes: CRC value (modversions) changed from 0xc2dd687c to 0xb66b7e45 [C] 'function void devm_device_remove_group(device*, const attribute_group*)' at core.c:2067:1 has some sub-type changes: CRC value (modversions) changed from 0x15d2da5e to 0x72df5e46 [C] 'function extcon_dev* devm_extcon_dev_allocate(device*, const unsigned int*)' at devres.c:65:1 has some sub-type changes: CRC value (modversions) changed from 0xf309574f to 0x84ef337c [C] 'function int devm_extcon_dev_register(device*, extcon_dev*)' at devres.c:118:1 has some sub-type changes: CRC value (modversions) changed from 0x4d5a2f3c to 0x5b55fbd9 [C] 'function void devm_extcon_dev_unregister(device*, extcon_dev*)' at devres.c:148:1 has some sub-type changes: CRC value (modversions) changed from 0x442b772e to 0x462f4c35 [C] 'function int devm_extcon_register_notifier(device*, extcon_dev*, unsigned int, notifier_block*)' at extcon.h:203:1 has some sub-type changes: CRC value (modversions) changed from 0xec02a091 to 0xe77b9a1 [C] 'function int devm_extcon_register_notifier_all(device*, extcon_dev*, notifier_block*)' at devres.c:228:1 has some sub-type changes: CRC value (modversions) changed from 0x4ad537ff to 0x716d4a0e [C] 'function void devm_free_irq(device*, unsigned int, void*)' at interrupt.h:202:1 has some sub-type changes: CRC value (modversions) changed from 0xb4649b02 to 0xa5d2f5b4 [C] 'function gpio_desc* devm_fwnode_get_index_gpiod_from_child(device*, const char*, int, fwnode_handle*, gpiod_flags, const char*)' at consumer.h:180:1 has some sub-type changes: CRC value (modversions) changed from 0xe077002e to 0x5d40c1a2 [C] 'function clk* devm_get_clk_from_child(device*, device_node*, const char*)' at clk-devres.c:139:1 has some sub-type changes: CRC value (modversions) changed from 0xb78d31af to 0xbd43760d [C] 'function void devm_gpio_free(device*, unsigned int)' at gpiolib-devres.c:489:1 has some sub-type changes: CRC value (modversions) changed from 0xe6ce62bb to 0xda6ab54 [C] 'function int devm_gpio_request(device*, unsigned int, const char*)' at gpiolib-devres.c:427:1 has some sub-type changes: CRC value (modversions) changed from 0x36050a46 to 0xc00bf60f [C] 'function int devm_gpio_request_one(device*, unsigned int, unsigned long int, const char*)' at gpio.h:96:1 has some sub-type changes: CRC value (modversions) changed from 0x139eaa82 to 0xa65c7b26 [C] 'function int devm_gpiochip_add_data(device*, gpio_chip*, void*)' at driver.h:501:1 has some sub-type changes: CRC value (modversions) changed from 0x96c54c69 to 0x895f801 [C] 'function gpio_desc* devm_gpiod_get(device*, const char*, gpiod_flags)' at gpiolib-devres.c:56:1 has some sub-type changes: CRC value (modversions) changed from 0xea27c7b2 to 0xc4c35235 [C] 'function gpio_desc* devm_gpiod_get_index(device*, const char*, unsigned int, gpiod_flags)' at gpiolib-devres.c:93:1 has some sub-type changes: CRC value (modversions) changed from 0x1340d47c to 0xb43711a6 [C] 'function gpio_desc* devm_gpiod_get_optional(device*, const char*, gpiod_flags)' at consumer.h:94:1 has some sub-type changes: CRC value (modversions) changed from 0xd380f6ef to 0x7c9dc7be [C] 'function void devm_gpiod_put(device*, gpio_desc*)' at gpiolib-devres.c:342:1 has some sub-type changes: CRC value (modversions) changed from 0x964bd7c4 to 0x1e7a2c5 [C] 'function hwspinlock* devm_hwspin_lock_request_specific(device*, unsigned int)' at hwspinlock_core.c:931:1 has some sub-type changes: CRC value (modversions) changed from 0xdee51853 to 0x3cff1742 [C] 'function iio_channel* devm_iio_channel_get(device*, const char*)' at inkern.c:375:1 has some sub-type changes: CRC value (modversions) changed from 0x8742a6a to 0x17a3d4e4 [C] 'function iio_dev* devm_iio_device_alloc(device*, int)' at industrialio-core.c:1507:1 has some sub-type changes: CRC value (modversions) changed from 0xac31e98b to 0x6dec5785 [C] 'function input_dev* devm_input_allocate_device(device*)' at input.h:352:1 has some sub-type changes: CRC value (modversions) changed from 0x388436c1 to 0x5023ef3 [C] 'function void* devm_ioremap(device*, long long unsigned int, long long unsigned int)' at io.h:65:1 has some sub-type changes: CRC value (modversions) changed from 0x7aea2a8f to 0xfbfa9850 [C] 'function void* devm_ioremap_nocache(device*, long long unsigned int, long long unsigned int)' at io.h:69:1 has some sub-type changes: CRC value (modversions) changed from 0xc4f25242 to 0x647ccaec [C] 'function void* devm_ioremap_resource(device*, const resource*)' at device.h:979:1 has some sub-type changes: CRC value (modversions) changed from 0xb333be65 to 0x2201fe22 [C] 'function void* devm_ioremap_wc(device*, resource_size_t, resource_size_t)' at devres.c:114:1 has some sub-type changes: CRC value (modversions) changed from 0xd1c93ed2 to 0xf61b9531 [C] 'function void devm_iounmap(device*, void*)' at devres.c:128:1 has some sub-type changes: CRC value (modversions) changed from 0x87e3b584 to 0xfe88db38 [C] 'function char* devm_kasprintf(device*, unsigned int, const char*, ...)' at device.h:948:1 has some sub-type changes: CRC value (modversions) changed from 0x23f9c850 to 0x67b48d85 [C] 'function void devm_kfree(device*, void*)' at device.h:968:1 has some sub-type changes: CRC value (modversions) changed from 0x9d623e43 to 0x6f3515af [C] 'function void* devm_kmalloc(device*, unsigned long int, unsigned int)' at device.h:943:1 has some sub-type changes: CRC value (modversions) changed from 0x986f76e6 to 0x3cb121f1 [C] 'function void* devm_kmemdup(device*, void*, unsigned long int, unsigned int)' at device.h:972:1 has some sub-type changes: CRC value (modversions) changed from 0x9fed9be9 to 0xda0a783c [C] 'function char* devm_kstrdup(device*, const char*, unsigned int)' at device.h:969:1 has some sub-type changes: CRC value (modversions) changed from 0xcb1cf832 to 0xfb6c3428 [C] 'function char* devm_kvasprintf(device*, gfp_t, const char*, va_list)' at devres.c:888:1 has some sub-type changes: CRC value (modversions) changed from 0x8f94680a to 0xccb8ce86 [C] 'function int devm_led_classdev_register_ext(device*, led_classdev*, led_init_data*)' at leds.h:184:1 has some sub-type changes: CRC value (modversions) changed from 0x94370af to 0xa554a333 [C] 'function int devm_mbox_controller_register(device*, mbox_controller*)' at mailbox_controller.h:134:1 has some sub-type changes: CRC value (modversions) changed from 0xbe3a639d to 0x8ca3d24f [C] 'function void* devm_memremap(device*, long long unsigned int, unsigned long int, unsigned long int)' at io.h:78:1 has some sub-type changes: CRC value (modversions) changed from 0x380989ea to 0x3fe378e2 [C] 'function int devm_mfd_add_devices(device*, int, const mfd_cell*, int, resource*, int, irq_domain*)' at core.h:130:1 has some sub-type changes: CRC value (modversions) changed from 0x8a2d7420 to 0x7a56df33 [C] 'function nvmem_cell* devm_nvmem_cell_get(device*, const char*)' at core.c:846:1 has some sub-type changes: CRC value (modversions) changed from 0x12c1ab28 to 0x33ed6132 [C] 'function nvmem_device* devm_nvmem_device_get(device*, const char*)' at core.c:676:1 has some sub-type changes: CRC value (modversions) changed from 0xdc89aaa7 to 0x2af75b34 [C] 'function nvmem_device* devm_nvmem_register(device*, const nvmem_config*)' at nvmem-provider.h:102:1 has some sub-type changes: CRC value (modversions) changed from 0x69c8027f to 0x49fef3a5 [C] 'function int devm_of_clk_add_hw_provider(device*, clk_hw* (of_phandle_args*, void*)*, void*)' at clk-provider.h:1052:1 has some sub-type changes: CRC value (modversions) changed from 0x4c37f419 to 0x4e9f448 [C] 'function void* devm_of_iomap(device*, device_node*, int, resource_size_t*)' at devres.c:206:1 has some sub-type changes: CRC value (modversions) changed from 0xc26899 to 0xe776f4a5 [C] 'function int devm_of_pci_get_host_bridge_resources(device*, unsigned char, unsigned char, list_head*, resource_size_t*)' at of.c:258:1 has some sub-type changes: CRC value (modversions) changed from 0x483083e6 to 0x46fb4f91 [C] 'function int devm_of_platform_populate(device*)' at of_platform.h:83:1 has some sub-type changes: CRC value (modversions) changed from 0x62a7a917 to 0xc7c08606 [C] 'function pwm_device* devm_of_pwm_get(device*, device_node*, const char*)' at core.c:1057:1 has some sub-type changes: CRC value (modversions) changed from 0xf98a9dc6 to 0xd5f427d2 [C] 'function pci_host_bridge* devm_pci_alloc_host_bridge(device*, size_t)' at probe.c:617:1 has some sub-type changes: CRC value (modversions) changed from 0xbd964b2c to 0x7ecad2c2 [C] 'function phy* devm_phy_create(device*, device_node*, const phy_ops*)' at phy-core.c:910:1 has some sub-type changes: CRC value (modversions) changed from 0x8552f055 to 0x59e07d6d [C] 'function phy* devm_phy_get(device*, const char*)' at phy-core.c:710:1 has some sub-type changes: CRC value (modversions) changed from 0xae41dc85 to 0xd02fec13 [C] 'function void devm_phy_put(device*, phy*)' at phy-core.c:597:1 has some sub-type changes: CRC value (modversions) changed from 0x70df5023 to 0x5028642 [C] 'function pinctrl* devm_pinctrl_get(device*)' at core.c:1338:1 has some sub-type changes: CRC value (modversions) changed from 0x8e1c260d to 0x3be5b963 [C] 'function void devm_pinctrl_put(pinctrl*)' at core.c:1373:1 has some sub-type changes: CRC value (modversions) changed from 0x10ea1b1e to 0x62df2010 [C] 'function pinctrl_dev* devm_pinctrl_register(device*, pinctrl_desc*, void*)' at pinctrl.h:165:1 has some sub-type changes: CRC value (modversions) changed from 0x52f206c1 to 0x4557ff1c [C] 'function void* devm_platform_ioremap_resource(platform_device*, unsigned int)' at platform_device.h:58:1 has some sub-type changes: CRC value (modversions) changed from 0xbcae71d to 0x6b8b0cf4 [C] 'function power_supply* devm_power_supply_get_by_phandle(device*, const char*)' at power_supply_core.c:541:1 has some sub-type changes: CRC value (modversions) changed from 0x1967e8d6 to 0xcec79a24 [C] 'function power_supply* devm_power_supply_register(device*, const power_supply_desc*, const power_supply_config*)' at power_supply.h:434:1 has some sub-type changes: CRC value (modversions) changed from 0xa72e477f to 0x4f26a9a [C] 'function pwm_device* devm_pwm_get(device*, const char*)' at core.c:1025:1 has some sub-type changes: CRC value (modversions) changed from 0x5d127b36 to 0xe007987a [C] 'function void devm_pwm_put(device*, pwm_device*)' at core.c:1135:1 has some sub-type changes: CRC value (modversions) changed from 0x443dc8da to 0x165424a [C] 'function int devm_regmap_add_irq_chip(device*, regmap*, int, int, int, const regmap_irq_chip*, regmap_irq_chip_data**)' at regmap-irq.c:893:1 has some sub-type changes: CRC value (modversions) changed from 0xa38e788 to 0x1fe2c189 [C] 'function void devm_regmap_del_irq_chip(device*, int, regmap_irq_chip_data*)' at regmap-irq.c:929:1 has some sub-type changes: CRC value (modversions) changed from 0x911b0024 to 0xf507b1d6 [C] 'function regmap_field* devm_regmap_field_alloc(device*, regmap*, reg_field)' at regmap.c:1219:1 has some sub-type changes: CRC value (modversions) changed from 0xb6580ea4 to 0x284ae229 [C] 'function int devm_regulator_bulk_get(device*, int, regulator_bulk_data*)' at consumer.h:230:1 has some sub-type changes: CRC value (modversions) changed from 0x5ab03a1d to 0x6e2439b4 [C] 'function regulator* devm_regulator_get(device*, const char*)' at consumer.h:180:1 has some sub-type changes: CRC value (modversions) changed from 0x71dcb1f6 to 0xc1cb0054 [C] 'function regulator* devm_regulator_get_exclusive(device*, const char*)' at devres.c:66:1 has some sub-type changes: CRC value (modversions) changed from 0x2702ba40 to 0x83bbc3e0 [C] 'function regulator* devm_regulator_get_optional(device*, const char*)' at devres.c:82:1 has some sub-type changes: CRC value (modversions) changed from 0x9f0eda33 to 0xf7b31755 [C] 'function void devm_regulator_put(regulator*)' at devres.c:107:1 has some sub-type changes: CRC value (modversions) changed from 0x2ba336ed to 0xf1755fdd [C] 'function regulator_dev* devm_regulator_register(device*, const regulator_desc*, const regulator_config*)' at driver.h:491:1 has some sub-type changes: CRC value (modversions) changed from 0x88a9b5a9 to 0xeda84549 [C] 'function int devm_regulator_register_notifier(regulator*, notifier_block*)' at devres.c:429:1 has some sub-type changes: CRC value (modversions) changed from 0xc1ef0a0b to 0x67b2f0da [C] 'function int devm_request_any_context_irq(device*, unsigned int, enum irqreturn (int, void*)*, unsigned long int, const char*, void*)' at interrupt.h:198:1 has some sub-type changes: CRC value (modversions) changed from 0x7f6203c to 0xb77df53 [C] 'function int devm_request_pci_bus_resources(device*, list_head*)' at bus.c:93:1 has some sub-type changes: CRC value (modversions) changed from 0xb481629 to 0x28d7533c [C] 'function int devm_request_threaded_irq(device*, unsigned int, enum irqreturn (int, void*)*, enum irqreturn (int, void*)*, unsigned long int, const char*, void*)' at interrupt.h:184:1 has some sub-type changes: CRC value (modversions) changed from 0xdd96329a to 0xc862a7ac [C] 'function reset_control* devm_reset_control_array_get(device*, bool, bool)' at reset.h:34:1 has some sub-type changes: CRC value (modversions) changed from 0x40ef466 to 0x14263943 [C] 'function int devm_reset_controller_register(device*, reset_controller_dev*)' at reset-controller.h:85:1 has some sub-type changes: CRC value (modversions) changed from 0xf1dc186e to 0xf369ae0b [C] 'function rtc_device* devm_rtc_allocate_device(device*)' at rtc.h:173:1 has some sub-type changes: CRC value (modversions) changed from 0xb7139501 to 0xfb098a29 [C] 'function rtc_device* devm_rtc_device_register(device*, const char*, const rtc_class_ops*, module*)' at class.c:401:1 has some sub-type changes: CRC value (modversions) changed from 0x405fa59a to 0xeecd4443 [C] 'function int devm_snd_dmaengine_pcm_register(device*, const snd_dmaengine_pcm_config*, unsigned int)' at soc-devres.c:100:1 has some sub-type changes: CRC value (modversions) changed from 0xe6146d35 to 0x2e9de1c6 [C] 'function int devm_snd_soc_register_card(device*, snd_soc_card*)' at soc-devres.c:63:1 has some sub-type changes: CRC value (modversions) changed from 0xedc35cde to 0x25929181 [C] 'function int devm_snd_soc_register_component(device*, const snd_soc_component_driver*, snd_soc_dai_driver*, int)' at soc.h:454:1 has some sub-type changes: CRC value (modversions) changed from 0x550bf59c to 0xa56d7ad [C] 'function int devm_spi_register_controller(device*, spi_controller*)' at spi.c:2540:1 has some sub-type changes: CRC value (modversions) changed from 0x462a9bf to 0x98b78f5 [C] 'function thermal_zone_device* devm_thermal_zone_of_sensor_register(device*, int, void*, const thermal_zone_of_device_ops*)' at thermal.h:383:1 has some sub-type changes: CRC value (modversions) changed from 0x7244f65e to 0x6bcb9607 [C] 'function void devm_thermal_zone_of_sensor_unregister(device*, thermal_zone_device*)' at of-thermal.c:654:1 has some sub-type changes: CRC value (modversions) changed from 0xae79b268 to 0xecb48329 [C] 'function usb_phy* devm_usb_get_phy(device*, usb_phy_type)' at phy.c:415:1 has some sub-type changes: CRC value (modversions) changed from 0x33c06b44 to 0x1faf6657 [C] 'function usb_phy* devm_usb_get_phy_by_phandle(device*, const char*, u8)' at phy.c:545:1 has some sub-type changes: CRC value (modversions) changed from 0xc911b5f7 to 0x26f8a5e1 [C] 'function int devm_watchdog_register_device(device*, watchdog_device*)' at watchdog_core.c:365:1 has some sub-type changes: CRC value (modversions) changed from 0x7084ebca to 0x7e5b0392 [C] 'function void devres_add(device*, void*)' at device.h:923:1 has some sub-type changes: CRC value (modversions) changed from 0x7ed3bdbd to 0x21ae09ff [C] 'function void* devres_alloc_node(void (device*, void*)*, unsigned long int, unsigned int, int)' at device.h:910:1 has some sub-type changes: CRC value (modversions) changed from 0x56c0dc18 to 0x655f5106 [C] 'function int devres_destroy(device*, void (device*, void*)*, int (device*, void*, void*)*, void*)' at device.h:930:1 has some sub-type changes: CRC value (modversions) changed from 0x4aea0da5 to 0x1506247a [C] 'function int devres_release(device*, void (device*, void*)*, int (device*, void*, void*)*, void*)' at device.h:932:1 has some sub-type changes: CRC value (modversions) changed from 0x26da8ca6 to 0x9872a8b5 [C] 'function dentry* dget_parent(dentry*)' at dcache.h:334:1 has some sub-type changes: CRC value (modversions) changed from 0x28513981 to 0x7db20cd8 [C] 'function void disk_part_iter_exit(disk_part_iter*)' at genhd.h:300:1 has some sub-type changes: CRC value (modversions) changed from 0x1e1e7d16 to 0xf9cc7ba8 [C] 'function void disk_part_iter_init(disk_part_iter*, gendisk*, unsigned int)' at genhd.h:297:1 has some sub-type changes: CRC value (modversions) changed from 0x885ad510 to 0x3ce0f9ac [C] 'function hd_struct* disk_part_iter_next(disk_part_iter*)' at genhd.h:299:1 has some sub-type changes: CRC value (modversions) changed from 0xe6835d8a to 0xf013554e [C] 'function void* dma_alloc_attrs(device*, unsigned long int, long long unsigned int*, unsigned int, unsigned long int)' at dma-mapping.h:451:1 has some sub-type changes: CRC value (modversions) changed from 0xabb6a0f4 to 0xd7f6f898 [C] 'function int dma_async_device_register(dma_device*)' at dmaengine.c:907:1 has some sub-type changes: CRC value (modversions) changed from 0x20743830 to 0xabf72f4e [C] 'function void dma_async_device_unregister(dma_device*)' at dmaengine.c:1111:1 has some sub-type changes: CRC value (modversions) changed from 0x7a6eef97 to 0x98807ce [C] 'function void dma_async_tx_descriptor_init(dma_async_tx_descriptor*, dma_chan*)' at dmaengine.c:1297:1 has some sub-type changes: CRC value (modversions) changed from 0x6eb20afb to 0x15385dfc [C] 'function dma_buf_attachment* dma_buf_attach(dma_buf*, device*)' at dma-buf.h:487:1 has some sub-type changes: CRC value (modversions) changed from 0xe6dbf61e to 0xc1a94055 [C] 'function int dma_buf_begin_cpu_access(dma_buf*, dma_data_direction)' at dma-buf.c:939:1 has some sub-type changes: CRC value (modversions) changed from 0xc5bda187 to 0xeb078252 [C] 'function int dma_buf_begin_cpu_access_partial(dma_buf*, dma_data_direction, unsigned int, unsigned int)' at dma-buf.c:961:1 has some sub-type changes: CRC value (modversions) changed from 0x2f18a32c to 0xc41e57b3 [C] 'function void dma_buf_detach(dma_buf*, dma_buf_attachment*)' at dma-buf.h:489:1 has some sub-type changes: CRC value (modversions) changed from 0x5023e2be to 0x8ccc86fd [C] 'function int dma_buf_end_cpu_access(dma_buf*, dma_data_direction)' at dma-buf.c:997:1 has some sub-type changes: CRC value (modversions) changed from 0xc4ed6e41 to 0x122104e5 [C] 'function int dma_buf_end_cpu_access_partial(dma_buf*, dma_data_direction, unsigned int, unsigned int)' at dma-buf.c:1011:1 has some sub-type changes: CRC value (modversions) changed from 0xa37c4522 to 0x9addd68f [C] 'function dma_buf* dma_buf_export(const dma_buf_export_info*)' at dma-buf.h:492:1 has some sub-type changes: CRC value (modversions) changed from 0x16b1f276 to 0x36010686 [C] 'function int dma_buf_fd(dma_buf*, int)' at dma-buf.h:494:1 has some sub-type changes: CRC value (modversions) changed from 0x771fc7dd to 0xbf84fefc [C] 'function dma_buf* dma_buf_get(int)' at dma-buf.h:495:1 has some sub-type changes: CRC value (modversions) changed from 0xa3639b49 to 0xad6fe9bc [C] 'function int dma_buf_get_flags(dma_buf*, unsigned long int*)' at dma-buf.c:1192:1 has some sub-type changes: CRC value (modversions) changed from 0xecad494a to 0xf33999d6 [C] 'function int dma_buf_get_uuid(dma_buf*, uuid_t*)' at dma-buf.c:1206:1 has some sub-type changes: CRC value (modversions) changed from 0xb372a60b to 0xc2ea3af8 [C] 'function void* dma_buf_kmap(dma_buf*, unsigned long int)' at dma-buf.c:1036:1 has some sub-type changes: CRC value (modversions) changed from 0xdb1d1713 to 0x2973076d [C] 'function void dma_buf_kunmap(dma_buf*, unsigned long int, void*)' at dma-buf.c:1054:1 has some sub-type changes: CRC value (modversions) changed from 0x8b02e513 to 0xe69ad47a [C] 'function sg_table* dma_buf_map_attachment(dma_buf_attachment*, dma_data_direction)' at dma-buf.h:498:1 has some sub-type changes: CRC value (modversions) changed from 0xc7edf116 to 0x7bec31ca [C] 'function int dma_buf_mmap(dma_buf*, vm_area_struct*, unsigned long int)' at dma-buf.c:1079:1 has some sub-type changes: CRC value (modversions) changed from 0xe8096e1c to 0xb22fd781 [C] 'function void dma_buf_put(dma_buf*)' at dma-buf.h:496:1 has some sub-type changes: CRC value (modversions) changed from 0x5c0da888 to 0x3fb82e55 [C] 'function void dma_buf_unmap_attachment(dma_buf_attachment*, sg_table*, dma_data_direction)' at dma-buf.h:500:1 has some sub-type changes: CRC value (modversions) changed from 0xc3cb16c to 0xff38ed09 [C] 'function void* dma_buf_vmap(dma_buf*)' at dma-buf.h:517:1 has some sub-type changes: CRC value (modversions) changed from 0x24591df to 0x2aa8eb59 [C] 'function void dma_buf_vunmap(dma_buf*, void*)' at dma-buf.h:518:1 has some sub-type changes: CRC value (modversions) changed from 0x4b0add3e to 0x8cb22d3c [C] 'function long long unsigned int dma_direct_map_page(device*, page*, unsigned long int, unsigned long int, dma_data_direction, unsigned long int)' at dma-mapping.h:209:1 has some sub-type changes: CRC value (modversions) changed from 0x833d0041 to 0x63e327fe [C] 'function dma_addr_t dma_direct_map_resource(device*, phys_addr_t, size_t, dma_data_direction, unsigned long int)' at direct.c:377:1 has some sub-type changes: CRC value (modversions) changed from 0x6812df68 to 0x9c216e21 [C] 'function int dma_direct_map_sg(device*, scatterlist*, int, dma_data_direction, unsigned long int)' at dma-mapping.h:212:1 has some sub-type changes: CRC value (modversions) changed from 0xba2bb6c3 to 0x3af0348b [C] 'function void dma_direct_sync_sg_for_cpu(device*, scatterlist*, int, dma_data_direction)' at direct.c:281:1 has some sub-type changes: CRC value (modversions) changed from 0xaf1c66fd to 0xa0b6916d [C] 'function void dma_direct_sync_sg_for_device(device*, scatterlist*, int, dma_data_direction)' at direct.c:242:1 has some sub-type changes: CRC value (modversions) changed from 0xf03af644 to 0xe9d3ce76 [C] 'function void dma_direct_sync_single_for_cpu(device*, long long unsigned int, unsigned long int, dma_data_direction)' at dma-mapping.h:241:1 has some sub-type changes: CRC value (modversions) changed from 0x64f88783 to 0x2fc91f4d [C] 'function void dma_direct_sync_single_for_device(device*, long long unsigned int, unsigned long int, dma_data_direction)' at dma-mapping.h:219:1 has some sub-type changes: CRC value (modversions) changed from 0xd0a80d86 to 0x749a9778 [C] 'function void dma_direct_unmap_page(device*, long long unsigned int, unsigned long int, dma_data_direction, unsigned long int)' at dma-mapping.h:237:1 has some sub-type changes: CRC value (modversions) changed from 0x6c993e0a to 0xabd1a61e [C] 'function void dma_direct_unmap_sg(device*, scatterlist*, int, dma_data_direction, unsigned long int)' at dma-mapping.h:239:1 has some sub-type changes: CRC value (modversions) changed from 0x441f9eb6 to 0x34934c57 [C] 'function void dma_free_attrs(device*, unsigned long int, void*, long long unsigned int, unsigned long int)' at dma-mapping.h:453:1 has some sub-type changes: CRC value (modversions) changed from 0x117135a8 to 0xb8eb320 [C] 'function unsigned long int dma_get_merge_boundary(device*)' at mapping.c:433:1 has some sub-type changes: CRC value (modversions) changed from 0x70d7c9f4 to 0x4e6cf3f6 [C] 'function int dma_get_sgtable_attrs(device*, sg_table*, void*, dma_addr_t, size_t, unsigned long int)' at mapping.c:151:1 has some sub-type changes: CRC value (modversions) changed from 0x7e8600b4 to 0xc8c72cb4 [C] 'function int dma_get_slave_caps(dma_chan*, dma_slave_caps*)' at dmaengine.h:1315:1 has some sub-type changes: CRC value (modversions) changed from 0xb5138252 to 0xba0e42f9 [C] 'function dma_chan* dma_get_slave_channel(dma_chan*)' at dmaengine.c:577:1 has some sub-type changes: CRC value (modversions) changed from 0xb889cd52 to 0x6052b65c [C] 'function size_t dma_max_mapping_size(device*)' at mapping.c:419:1 has some sub-type changes: CRC value (modversions) changed from 0x82738afa to 0xd3608563 [C] 'function int dma_mmap_attrs(device*, vm_area_struct*, void*, dma_addr_t, size_t, unsigned long int)' at mapping.c:263:1 has some sub-type changes: CRC value (modversions) changed from 0x28d427d5 to 0x88d877ec [C] 'function dma_pool* dma_pool_create(const char*, device*, size_t, size_t, size_t)' at dmapool.c:130:1 has some sub-type changes: CRC value (modversions) changed from 0x83f683cc to 0x887fc9fb [C] 'function void dma_release_channel(dma_chan*)' at dmaengine.h:1314:1 has some sub-type changes: CRC value (modversions) changed from 0xe2abcaba to 0x393eb9f [C] 'function dma_chan* dma_request_chan(device*, const char*)' at dmaengine.h:1311:1 has some sub-type changes: CRC value (modversions) changed from 0xf083f08b to 0xca1abe1c [C] 'function dma_chan* dma_request_slave_channel(device*, const char*)' at dmaengine.h:1309:1 has some sub-type changes: CRC value (modversions) changed from 0xc5f8da93 to 0x88aa329f [C] 'function void dma_resv_add_excl_fence(dma_resv*, dma_fence*)' at dma-resv.h:281:1 has some sub-type changes: CRC value (modversions) changed from 0x4420a8c0 to 0xa42c6fcc [C] 'function void dma_resv_add_shared_fence(dma_resv*, dma_fence*)' at dma-resv.h:279:1 has some sub-type changes: CRC value (modversions) changed from 0x337c14a2 to 0xcd741503 [C] 'function int dma_resv_copy_fences(dma_resv*, dma_resv*)' at dma-resv.h:288:1 has some sub-type changes: CRC value (modversions) changed from 0x81ec6028 to 0x4e9fd3e0 [C] 'function void dma_resv_fini(dma_resv*)' at dma-resv.h:277:1 has some sub-type changes: CRC value (modversions) changed from 0x30f2420b to 0xf1df7442 [C] 'function void dma_resv_init(dma_resv*)' at dma-resv.h:276:1 has some sub-type changes: CRC value (modversions) changed from 0xc4c5d79a to 0xcfb8b2d6 [C] 'function int dma_resv_reserve_shared(dma_resv*, unsigned int)' at dma-resv.h:278:1 has some sub-type changes: CRC value (modversions) changed from 0x7a579e10 to 0x80daa72 [C] 'function bool dma_resv_test_signaled_rcu(dma_resv*, bool)' at dma-resv.h:293:1 has some sub-type changes: CRC value (modversions) changed from 0x835283b5 to 0x30d874eb [C] 'function long int dma_resv_wait_timeout_rcu(dma_resv*, bool, bool, unsigned long int)' at dma-resv.h:290:1 has some sub-type changes: CRC value (modversions) changed from 0xe0b630c9 to 0x174a97ef [C] 'function int dma_set_coherent_mask(device*, long long unsigned int)' at dma-mapping.h:470:1 has some sub-type changes: CRC value (modversions) changed from 0xe4525c66 to 0x8518e039 [C] 'function int dma_set_mask(device*, long long unsigned int)' at dma-mapping.h:469:1 has some sub-type changes: CRC value (modversions) changed from 0x11475823 to 0x638258d [C] 'function void dmaengine_unmap_put(dmaengine_unmap_data*)' at dmaengine.c:1231:1 has some sub-type changes: CRC value (modversions) changed from 0x6b7fa23f to 0xd207803a [C] 'function void* dmam_alloc_attrs(device*, size_t, dma_addr_t*, gfp_t, unsigned long int)' at mapping.c:81:1 has some sub-type changes: CRC value (modversions) changed from 0x11db8e3b to 0xa01acbad [C] 'function void dmam_free_coherent(device*, size_t, void*, dma_addr_t)' at mapping.c:57:1 has some sub-type changes: CRC value (modversions) changed from 0x3d15ce5f to 0xfd5d7e99 [C] 'function dma_pool* dmam_pool_create(const char*, device*, size_t, size_t, size_t)' at dmapool.c:506:1 has some sub-type changes: CRC value (modversions) changed from 0x279731e4 to 0xe0fdf11e [C] 'function void do_SAK(tty_struct*)' at tty.h:504:1 has some sub-type changes: CRC value (modversions) changed from 0x23414b75 to 0x5321868 [C] 'function void done_path_create(path*, dentry*)' at namei.h:56:1 has some sub-type changes: CRC value (modversions) changed from 0x4cff212 to 0x7c623aea [C] 'function void dput(dentry*)' at dcache.h:381:1 has some sub-type changes: CRC value (modversions) changed from 0xf2d0fbde to 0x3cf98daf [C] 'function int driver_attach(device_driver*)' at dd.c:1110:1 has some sub-type changes: CRC value (modversions) changed from 0xdceee403 to 0x4962acf5 [C] 'function device_driver* driver_find(const char*, bus_type*)' at driver.c:213:1 has some sub-type changes: CRC value (modversions) changed from 0xdbb31dda to 0x92c76631 [C] 'function device* driver_find_device(device_driver*, device*, void*, int (device*, void*)*)' at driver.c:75:1 has some sub-type changes: CRC value (modversions) changed from 0x87bd2ca2 to 0xbf5bf34d [C] 'function int driver_register(device_driver*)' at device.h:423:1 has some sub-type changes: CRC value (modversions) changed from 0x17f7d2d5 to 0xe1fdb947 [C] 'function void driver_unregister(device_driver*)' at device.h:424:1 has some sub-type changes: CRC value (modversions) changed from 0x4ebddde1 to 0xe2148b65 [C] 'function int drm_add_edid_modes(drm_connector*, edid*)' at drm_edid.c:4868:1 has some sub-type changes: CRC value (modversions) changed from 0x2bd9e83c to 0xf45f626b [C] 'function int drm_add_modes_noedid(drm_connector*, int, int)' at drm_edid.h:489:1 has some sub-type changes: CRC value (modversions) changed from 0xbd3aee2e to 0x77374110 [C] 'function int drm_atomic_commit(drm_atomic_state*)' at drm_atomic.h:671:1 has some sub-type changes: CRC value (modversions) changed from 0x818ba2bd to 0xb853059 [C] 'function drm_connector_state* drm_atomic_get_connector_state(drm_atomic_state*, drm_connector*)' at drm_atomic.h:443:1 has some sub-type changes: CRC value (modversions) changed from 0xcc91379a to 0x751149c3 [C] 'function drm_crtc_state* drm_atomic_get_crtc_state(drm_atomic_state*, drm_crtc*)' at drm_atomic.h:437:1 has some sub-type changes: CRC value (modversions) changed from 0x1fc17a91 to 0x6926bac5 [C] 'function drm_plane_state* drm_atomic_get_plane_state(drm_atomic_state*, drm_plane*)' at drm_atomic.h:440:1 has some sub-type changes: CRC value (modversions) changed from 0x2e843356 to 0x6e7fce4f [C] 'function drm_private_state* drm_atomic_get_private_obj_state(drm_atomic_state*, drm_private_obj*)' at drm_atomic.h:453:1 has some sub-type changes: CRC value (modversions) changed from 0x74f1427a to 0x7da2051b [C] 'function void drm_atomic_helper_async_commit(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:1714:1 has some sub-type changes: CRC value (modversions) changed from 0xca57f0e8 to 0xec109af1 [C] 'function int drm_atomic_helper_check(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:936:1 has some sub-type changes: CRC value (modversions) changed from 0x2e0826e6 to 0x6c8c8423 [C] 'function int drm_atomic_helper_check_plane_state(drm_plane_state*, const drm_crtc_state*, int, int, bool, bool)' at drm_atomic_helper.h:43:1 has some sub-type changes: CRC value (modversions) changed from 0xcc05af14 to 0x2c090443 [C] 'function void drm_atomic_helper_cleanup_planes(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:2634:1 has some sub-type changes: CRC value (modversions) changed from 0x8539214e to 0x20dc4874 [C] 'function int drm_atomic_helper_commit(drm_device*, drm_atomic_state*, bool)' at drm_atomic_helper.c:1767:1 has some sub-type changes: CRC value (modversions) changed from 0x2465c070 to 0x4522b5da [C] 'function void drm_atomic_helper_commit_cleanup_done(drm_atomic_state*)' at drm_atomic_helper.c:2293:1 has some sub-type changes: CRC value (modversions) changed from 0xb90dd8c6 to 0x8fa2a104 [C] 'function int drm_atomic_helper_commit_duplicated_state(drm_atomic_state*, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:3230:1 has some sub-type changes: CRC value (modversions) changed from 0xa16d61c9 to 0xb3ade753 [C] 'function void drm_atomic_helper_commit_hw_done(drm_atomic_state*)' at drm_atomic_helper.c:2248:1 has some sub-type changes: CRC value (modversions) changed from 0xfef14ed2 to 0x4992f8ac [C] 'function void drm_atomic_helper_commit_modeset_disables(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:1246:1 has some sub-type changes: CRC value (modversions) changed from 0x1f1e2168 to 0x67f68b8b [C] 'function void drm_atomic_helper_commit_modeset_enables(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:1292:1 has some sub-type changes: CRC value (modversions) changed from 0xa52c1a18 to 0x1a5c3d9f [C] 'function void drm_atomic_helper_commit_planes(drm_device*, drm_atomic_state*, uint32_t)' at drm_atomic_helper.c:2428:1 has some sub-type changes: CRC value (modversions) changed from 0x5b881b78 to 0xa3015667 [C] 'function void drm_atomic_helper_commit_tail(drm_atomic_state*)' at drm_atomic_helper.c:1529:1 has some sub-type changes: CRC value (modversions) changed from 0x26e7e8c6 to 0x61a69a2f [C] 'function void drm_atomic_helper_commit_tail_rpm(drm_atomic_state*)' at drm_atomic_helper.c:1559:1 has some sub-type changes: CRC value (modversions) changed from 0x4d6092de to 0x6d0d518b [C] 'function void drm_atomic_helper_connector_destroy_state(drm_connector*, drm_connector_state*)' at drm_atomic_state_helper.c:480:1 has some sub-type changes: CRC value (modversions) changed from 0x8a0b2c04 to 0x59809aa4 [C] 'function drm_connector_state* drm_atomic_helper_connector_duplicate_state(drm_connector*)' at drm_atomic_state_helper.c:433:1 has some sub-type changes: CRC value (modversions) changed from 0x1054cdc7 to 0x3dcc0fb [C] 'function void drm_atomic_helper_connector_reset(drm_connector*)' at drm_atomic_state_helper.c:369:1 has some sub-type changes: CRC value (modversions) changed from 0x605a01d5 to 0x97472aa6 [C] 'function void drm_atomic_helper_crtc_destroy_state(drm_crtc*, drm_crtc_state*)' at drm_atomic_state_helper.c:206:1 has some sub-type changes: CRC value (modversions) changed from 0xa4e31a13 to 0x149ddd44 [C] 'function drm_crtc_state* drm_atomic_helper_crtc_duplicate_state(drm_crtc*)' at drm_atomic_state_helper.c:147:1 has some sub-type changes: CRC value (modversions) changed from 0xe110f8c4 to 0x867659fc [C] 'function void drm_atomic_helper_crtc_reset(drm_crtc*)' at drm_atomic_state_helper.c:90:1 has some sub-type changes: CRC value (modversions) changed from 0xf6ba5702 to 0x957e87f7 [C] 'function int drm_atomic_helper_dirtyfb(drm_framebuffer*, drm_file*, unsigned int, unsigned int, drm_clip_rect*, unsigned int)' at drm_damage_helper.c:160:1 has some sub-type changes: CRC value (modversions) changed from 0x6d9c3e96 to 0x71cb183a [C] 'function int drm_atomic_helper_disable_plane(drm_plane*, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:2885:1 has some sub-type changes: CRC value (modversions) changed from 0x61dad53e to 0xb81dadb4 [C] 'function drm_atomic_state* drm_atomic_helper_duplicate_state(drm_device*, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:3096:1 has some sub-type changes: CRC value (modversions) changed from 0x67e998dd to 0xc701796 [C] 'function int drm_atomic_helper_page_flip(drm_crtc*, drm_framebuffer*, drm_pending_vblank_event*, uint32_t, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:3350:1 has some sub-type changes: CRC value (modversions) changed from 0x18f6683a to 0x1a681896 [C] 'function void drm_atomic_helper_plane_destroy_state(drm_plane*, drm_plane_state*)' at drm_atomic_state_helper.c:330:1 has some sub-type changes: CRC value (modversions) changed from 0xde94824f to 0xd10f360b [C] 'function drm_plane_state* drm_atomic_helper_plane_duplicate_state(drm_plane*)' at drm_atomic_state_helper.c:284:1 has some sub-type changes: CRC value (modversions) changed from 0x7f26ea0e to 0x7cf3bc5c [C] 'function void drm_atomic_helper_plane_reset(drm_plane*)' at drm_atomic_state_helper.c:242:1 has some sub-type changes: CRC value (modversions) changed from 0x35322241 to 0xa7b2c60b [C] 'function int drm_atomic_helper_prepare_planes(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:2333:1 has some sub-type changes: CRC value (modversions) changed from 0xd523df93 to 0xebd01d3d [C] 'function int drm_atomic_helper_resume(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:3276:1 has some sub-type changes: CRC value (modversions) changed from 0x94eeb9f5 to 0xfed1cbfc [C] 'function int drm_atomic_helper_set_config(drm_mode_set*, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:2933:1 has some sub-type changes: CRC value (modversions) changed from 0x234c4458 to 0xd0937401 [C] 'function void drm_atomic_helper_shutdown(drm_device*)' at drm_atomic_helper.c:3056:1 has some sub-type changes: CRC value (modversions) changed from 0x54e09a2d to 0xe37b3210 [C] 'function drm_atomic_state* drm_atomic_helper_suspend(drm_device*)' at drm_atomic_helper.c:3184:1 has some sub-type changes: CRC value (modversions) changed from 0xd5055b44 to 0xebe3c6bb [C] 'function int drm_atomic_helper_swap_state(drm_atomic_state*, bool)' at drm_atomic_helper.c:2697:1 has some sub-type changes: CRC value (modversions) changed from 0xe1ff40d9 to 0x6560a6fd [C] 'function void drm_atomic_helper_update_legacy_modeset_state(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:1107:1 has some sub-type changes: CRC value (modversions) changed from 0x3c5d358a to 0x925ca783 [C] 'function int drm_atomic_helper_update_plane(drm_plane*, drm_crtc*, drm_framebuffer*, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, drm_modeset_acquire_ctx*)' at drm_atomic_helper.c:2828:1 has some sub-type changes: CRC value (modversions) changed from 0x3cc8cbed to 0xbd4996fa [C] 'function void drm_atomic_helper_wait_for_dependencies(drm_atomic_state*)' at drm_atomic_helper.c:2117:1 has some sub-type changes: CRC value (modversions) changed from 0x4c979fb7 to 0xf6a2267d [C] 'function int drm_atomic_helper_wait_for_fences(drm_device*, drm_atomic_state*, bool)' at drm_atomic_helper.c:1384:1 has some sub-type changes: CRC value (modversions) changed from 0x9621ae22 to 0x10bacda7 [C] 'function void drm_atomic_helper_wait_for_vblanks(drm_device*, drm_atomic_state*)' at drm_atomic_helper.c:1431:1 has some sub-type changes: CRC value (modversions) changed from 0x4b1ed39d to 0x2050e95b [C] 'function void drm_atomic_private_obj_fini(drm_private_obj*)' at drm_atomic.h:450:1 has some sub-type changes: CRC value (modversions) changed from 0xd2e0fd09 to 0x56a29b9 [C] 'function void drm_atomic_private_obj_init(drm_device*, drm_private_obj*, drm_private_state*, const drm_private_state_funcs*)' at drm_atomic.h:446:1 has some sub-type changes: CRC value (modversions) changed from 0xa3d6817d to 0x178bdcf8 [C] 'function int drm_atomic_set_crtc_for_connector(drm_connector_state*, drm_crtc*)' at drm_atomic_uapi.h:55:1 has some sub-type changes: CRC value (modversions) changed from 0x61577714 to 0xedc90ef8 [C] 'function void drm_atomic_set_fence_for_plane(drm_plane_state*, dma_fence*)' at drm_atomic_uapi.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0x8f30814 to 0xf25f3b1b [C] 'function int drm_atomic_set_mode_for_crtc(drm_crtc_state*, const drm_display_mode*)' at drm_atomic_uapi.h:42:1 has some sub-type changes: CRC value (modversions) changed from 0xa11d70c9 to 0x45d387d7 [C] 'function drm_atomic_state* drm_atomic_state_alloc(drm_device*)' at drm_atomic.h:401:1 has some sub-type changes: CRC value (modversions) changed from 0x1f7f74b7 to 0x66b2ab56 [C] 'function void drm_atomic_state_clear(drm_atomic_state*)' at drm_atomic.h:402:1 has some sub-type changes: CRC value (modversions) changed from 0xc7ba299 to 0x5f84fce2 [C] 'function void drm_atomic_state_default_clear(drm_atomic_state*)' at drm_atomic.c:147:1 has some sub-type changes: CRC value (modversions) changed from 0x9801effe to 0x7bcc6ea4 [C] 'function void drm_atomic_state_default_release(drm_atomic_state*)' at drm_atomic.c:63:1 has some sub-type changes: CRC value (modversions) changed from 0x9f1e01b1 to 0x3151c523 [C] 'function int drm_atomic_state_init(drm_device*, drm_atomic_state*)' at drm_atomic.c:82:1 has some sub-type changes: CRC value (modversions) changed from 0xf18b8a8e to 0x235395b3 [C] 'function void drm_bridge_add(drm_bridge*)' at drm_bridge.h:403:1 has some sub-type changes: CRC value (modversions) changed from 0x7a21f302 to 0xfa9b0eaf [C] 'function int drm_bridge_attach(drm_encoder*, drm_bridge*, drm_bridge*)' at drm_bridge.h:406:1 has some sub-type changes: CRC value (modversions) changed from 0xfc8a103a to 0x4857c74e [C] 'function void drm_bridge_disable(drm_bridge*)' at drm_bridge.c:250:1 has some sub-type changes: CRC value (modversions) changed from 0xa5158e12 to 0x398d6c87 [C] 'function void drm_bridge_enable(drm_bridge*)' at drm_bridge.c:343:1 has some sub-type changes: CRC value (modversions) changed from 0x45bcd9b2 to 0xac2ea048 [C] 'function void drm_bridge_mode_set(drm_bridge*, const drm_display_mode*, const drm_display_mode*)' at drm_bridge.h:416:1 has some sub-type changes: CRC value (modversions) changed from 0xf26a56aa to 0x39adc338 [C] 'function void drm_bridge_post_disable(drm_bridge*)' at drm_bridge.c:272:1 has some sub-type changes: CRC value (modversions) changed from 0x3f3ced3f to 0xf139914a [C] 'function void drm_bridge_pre_enable(drm_bridge*)' at drm_bridge.c:321:1 has some sub-type changes: CRC value (modversions) changed from 0xfe506d1f to 0x29e06976 [C] 'function void drm_bridge_remove(drm_bridge*)' at drm_bridge.h:404:1 has some sub-type changes: CRC value (modversions) changed from 0x8cae05f4 to 0x1184ed1 [C] 'function bool drm_calc_vbltimestamp_from_scanoutpos(drm_device*, unsigned int, int*, ktime_t*, bool)' at drm_vblank.c:596:1 has some sub-type changes: CRC value (modversions) changed from 0x3b155bbf to 0x49b7868b [C] 'function int drm_class_device_register(device*)' at drm_sysfs.c:427:1 has some sub-type changes: CRC value (modversions) changed from 0x4c04bdc4 to 0xbbe5a862 [C] 'function void drm_class_device_unregister(device*)' at drm_sysfs.c:445:1 has some sub-type changes: CRC value (modversions) changed from 0x730f1e26 to 0xb2880910 [C] 'function void drm_clflush_pages(page**, unsigned long int)' at drm_cache.c:81:1 has some sub-type changes: CRC value (modversions) changed from 0xce78727c to 0x58cd13d0 [C] 'function int drm_client_init(drm_device*, drm_client_dev*, const char*, const drm_client_funcs*)' at drm_client.c:78:1 has some sub-type changes: CRC value (modversions) changed from 0x25b7b0a2 to 0x42140dc2 [C] 'function int drm_client_modeset_commit_force(drm_client_dev*)' at drm_client_modeset.c:1035:1 has some sub-type changes: CRC value (modversions) changed from 0x2db8d249 to 0x1803a725 [C] 'function void drm_client_register(drm_client_dev*)' at drm_client.c:125:1 has some sub-type changes: CRC value (modversions) changed from 0xf0a47e0d to 0xbe459c3c [C] 'function long int drm_compat_ioctl(file*, unsigned int, unsigned long int)' at drm_ioc32.c:970:1 has some sub-type changes: CRC value (modversions) changed from 0xd74436b7 to 0xecdfca3d [C] 'function int drm_connector_attach_content_protection_property(drm_connector*, bool)' at drm_hdcp.c:391:1 has some sub-type changes: CRC value (modversions) changed from 0x702264bb to 0x43b7478f [C] 'function void drm_connector_attach_edid_property(drm_connector*)' at drm_connector.c:344:1 has some sub-type changes: CRC value (modversions) changed from 0xebefba7a to 0xae29434 [C] 'function int drm_connector_attach_encoder(drm_connector*, drm_encoder*)' at drm_connector.h:1447:1 has some sub-type changes: CRC value (modversions) changed from 0x25b0b047 to 0x83368cf1 [C] 'function void drm_connector_cleanup(drm_connector*)' at drm_connector.c:431:1 has some sub-type changes: CRC value (modversions) changed from 0x75268a78 to 0x3d180435 [C] 'function bool drm_connector_has_possible_encoder(drm_connector*, drm_encoder*)' at drm_connector.c:403:1 has some sub-type changes: CRC value (modversions) changed from 0x6ea820b6 to 0x13f6d9b4 [C] 'function int drm_connector_init(drm_device*, drm_connector*, const drm_connector_funcs*, int)' at drm_connector.h:1435:1 has some sub-type changes: CRC value (modversions) changed from 0x165293b4 to 0x8fd2b7aa [C] 'function void drm_connector_list_iter_begin(drm_device*, drm_connector_list_iter*)' at drm_connector.c:641:1 has some sub-type changes: CRC value (modversions) changed from 0xfc914416 to 0xfdd4ed32 [C] 'function void drm_connector_list_iter_end(drm_connector_list_iter*)' at drm_connector.h:1609:1 has some sub-type changes: CRC value (modversions) changed from 0x9878f27c to 0xe85bed3f [C] 'function drm_connector* drm_connector_list_iter_next(drm_connector_list_iter*)' at drm_connector.h:1608:1 has some sub-type changes: CRC value (modversions) changed from 0xd345301f to 0x2711ff86 [C] 'function int drm_connector_register(drm_connector*)' at drm_connector.c:489:1 has some sub-type changes: CRC value (modversions) changed from 0xf9a3b5ad to 0xfdf72584 [C] 'function void drm_connector_unregister(drm_connector*)' at drm_connector.c:536:1 has some sub-type changes: CRC value (modversions) changed from 0x88f52812 to 0x5f995872 [C] 'function int drm_connector_update_edid_property(drm_connector*, const edid*)' at drm_connector.h:1555:1 has some sub-type changes: CRC value (modversions) changed from 0x913d26ab to 0x6ca24ae4 [C] 'function void drm_crtc_arm_vblank_event(drm_crtc*, drm_pending_vblank_event*)' at drm_vblank.c:896:1 has some sub-type changes: CRC value (modversions) changed from 0x1c52eda5 to 0xf20cf314 [C] 'function void drm_crtc_cleanup(drm_crtc*)' at drm_crtc.c:316:1 has some sub-type changes: CRC value (modversions) changed from 0x8d2e1f39 to 0x62d6175f [C] 'function bool drm_crtc_handle_vblank(drm_crtc*)' at drm_vblank.c:1812:1 has some sub-type changes: CRC value (modversions) changed from 0xe6537ae7 to 0xe850716 [C] 'function int drm_crtc_init_with_planes(drm_device*, drm_crtc*, drm_plane*, drm_plane*, const drm_crtc_funcs*, const char*, ...)' at drm_crtc.h:1144:1 has some sub-type changes: CRC value (modversions) changed from 0x37fc8c6a to 0xdeb2ecc5 [C] 'function void drm_crtc_send_vblank_event(drm_crtc*, drm_pending_vblank_event*)' at drm_vblank.h:201:1 has some sub-type changes: CRC value (modversions) changed from 0xd06997b0 to 0x233a2314 [C] 'function void drm_crtc_set_max_vblank_count(drm_crtc*, u32)' at drm_vblank.c:1241:1 has some sub-type changes: CRC value (modversions) changed from 0x387b90e1 to 0xe6059858 [C] 'function long long unsigned int drm_crtc_vblank_count(drm_crtc*)' at drm_vblank.h:198:1 has some sub-type changes: CRC value (modversions) changed from 0x16b1f18a to 0xf4ac1837 [C] 'function int drm_crtc_vblank_get(drm_crtc*)' at drm_vblank.h:210:1 has some sub-type changes: CRC value (modversions) changed from 0x1a191c1d to 0xed55e9d6 [C] 'function void drm_crtc_vblank_off(drm_crtc*)' at drm_vblank.c:1132:1 has some sub-type changes: CRC value (modversions) changed from 0x7c8e1ec3 to 0xb77fc535 [C] 'function void drm_crtc_vblank_on(drm_crtc*)' at drm_vblank.c:1265:1 has some sub-type changes: CRC value (modversions) changed from 0x6a085c1b to 0xcf2b1fa0 [C] 'function void drm_crtc_vblank_put(drm_crtc*)' at drm_vblank.h:211:1 has some sub-type changes: CRC value (modversions) changed from 0x1987dfa6 to 0x6e53bd33 [C] 'function void drm_crtc_vblank_reset(drm_crtc*)' at drm_vblank.c:1202:1 has some sub-type changes: CRC value (modversions) changed from 0x1bca348c to 0x63bfcaf4 [C] 'function wait_queue_head_t* drm_crtc_vblank_waitqueue(drm_crtc*)' at drm_vblank.c:499:1 has some sub-type changes: CRC value (modversions) changed from 0x8d33635b to 0x90918362 [C] 'function void drm_crtc_wait_one_vblank(drm_crtc*)' at drm_vblank.h:213:1 has some sub-type changes: CRC value (modversions) changed from 0x92e45f4d to 0x34b82023 [C] 'function drm_display_mode* drm_cvt_mode(drm_device*, int, int, int, bool, bool, bool)' at drm_modes.c:140:1 has some sub-type changes: CRC value (modversions) changed from 0xf25aaeb2 to 0x2a8e796b [C] 'function drm_device* drm_dev_alloc(drm_driver*, device*)' at drm_drv.c:819:1 has some sub-type changes: CRC value (modversions) changed from 0xf4758a65 to 0x3ed3228c [C] 'function void drm_dev_dbg(const device*, unsigned int, const char*, ...)' at drm_print.h:279:1 has some sub-type changes: CRC value (modversions) changed from 0x999475d0 to 0xa8883391 [C] 'function void drm_dev_printk(const device*, const char*, const char*, ...)' at drm_print.h:276:1 has some sub-type changes: CRC value (modversions) changed from 0x5d91feb to 0xef80c617 [C] 'function void drm_dev_put(drm_device*)' at drm_drv.c:877:1 has some sub-type changes: CRC value (modversions) changed from 0x6e008345 to 0x7da02449 [C] 'function int drm_dev_register(drm_device*, unsigned long int)' at drm_drv.c:960:1 has some sub-type changes: CRC value (modversions) changed from 0xc59c7435 to 0xeca5a9e0 [C] 'function int drm_dev_set_unique(drm_device*, const char*)' at drm_drv.c:1061:1 has some sub-type changes: CRC value (modversions) changed from 0x785f89e to 0xf15172c3 [C] 'function void drm_dev_unregister(drm_device*)' at drm_drv.c:1024:1 has some sub-type changes: CRC value (modversions) changed from 0x3500d06 to 0x55bbe50b [C] 'function edid* drm_do_get_edid(drm_connector*, int (void*, u8*, unsigned int, typedef size_t)*, void*)' at drm_edid.c:1661:1 has some sub-type changes: CRC value (modversions) changed from 0x6acc7611 to 0x80cff6c9 [C] 'function int drm_dp_atomic_find_vcpi_slots(drm_atomic_state*, drm_dp_mst_topology_mgr*, drm_dp_mst_port*, int)' at drm_dp_mst_topology.c:3242:1 has some sub-type changes: CRC value (modversions) changed from 0x930d3459 to 0x8a5f3734 [C] 'function int drm_dp_atomic_release_vcpi_slots(drm_atomic_state*, drm_dp_mst_topology_mgr*, drm_dp_mst_port*)' at drm_dp_mst_topology.c:3326:1 has some sub-type changes: CRC value (modversions) changed from 0xf7ca5205 to 0xfda08e93 [C] 'function int drm_dp_aux_register(drm_dp_aux*)' at drm_dp_helper.c:1174:1 has some sub-type changes: CRC value (modversions) changed from 0xd078d159 to 0x375a5db5 [C] 'function void drm_dp_aux_unregister(drm_dp_aux*)' at drm_dp_helper.c:1206:1 has some sub-type changes: CRC value (modversions) changed from 0x8fe4bfc to 0xa24ecf95 [C] 'function int drm_dp_check_act_status(drm_dp_mst_topology_mgr*)' at drm_dp_mst_topology.c:3520:1 has some sub-type changes: CRC value (modversions) changed from 0x2d495608 to 0x86867284 [C] 'function ssize_t drm_dp_dpcd_read(drm_dp_aux*, unsigned int, void*, size_t)' at drm_dp_helper.c:266:1 has some sub-type changes: CRC value (modversions) changed from 0x11103e9b to 0xa21aee56 [C] 'function int drm_dp_dpcd_read_link_status(drm_dp_aux*, u8*)' at drm_dp_helper.c:331:1 has some sub-type changes: CRC value (modversions) changed from 0xb94d49c7 to 0x4b9502fd [C] 'function ssize_t drm_dp_dpcd_write(drm_dp_aux*, unsigned int, void*, size_t)' at drm_dp_helper.c:311:1 has some sub-type changes: CRC value (modversions) changed from 0x255d510a to 0xeb9a4282 [C] 'function int drm_dp_find_vcpi_slots(drm_dp_mst_topology_mgr*, int)' at drm_dp_mst_topology.c:3179:1 has some sub-type changes: CRC value (modversions) changed from 0x3f75406d to 0x1f8d7568 [C] 'function int drm_dp_link_configure(drm_dp_aux*, drm_dp_link*)' at drm_dp_helper.c:507:1 has some sub-type changes: CRC value (modversions) changed from 0x3bc5d144 to 0xd8f8e6b8 [C] 'function int drm_dp_link_power_down(drm_dp_aux*, drm_dp_link*)' at drm_dp_helper.c:476:1 has some sub-type changes: CRC value (modversions) changed from 0x8fedebe2 to 0x1abd07bd [C] 'function int drm_dp_link_power_up(drm_dp_aux*, drm_dp_link*)' at drm_dp_helper.c:438:1 has some sub-type changes: CRC value (modversions) changed from 0x6d13c0dd to 0x35ba1bf8 [C] 'function int drm_dp_link_probe(drm_dp_aux*, drm_dp_link*)' at drm_dp_helper.c:409:1 has some sub-type changes: CRC value (modversions) changed from 0xe72b5345 to 0xbf07b715 [C] 'function bool drm_dp_mst_allocate_vcpi(drm_dp_mst_topology_mgr*, drm_dp_mst_port*, int, int)' at drm_dp_mst_topology.c:3367:1 has some sub-type changes: CRC value (modversions) changed from 0x9b1fff4 to 0xe073785f [C] 'function void drm_dp_mst_deallocate_vcpi(drm_dp_mst_topology_mgr*, drm_dp_mst_port*)' at drm_dp_mst_topology.c:3445:1 has some sub-type changes: CRC value (modversions) changed from 0x7b653fd5 to 0x47eef5b1 [C] 'function drm_connector_status drm_dp_mst_detect_port(drm_connector*, drm_dp_mst_topology_mgr*, drm_dp_mst_port*)' at drm_dp_mst_topology.c:3080:1 has some sub-type changes: CRC value (modversions) changed from 0x9a798f0d to 0x54634f15 [C] 'function edid* drm_dp_mst_get_edid(drm_connector*, drm_dp_mst_topology_mgr*, drm_dp_mst_port*)' at drm_dp_mst_topology.c:3147:1 has some sub-type changes: CRC value (modversions) changed from 0xc12a614a to 0x2a41f667 [C] 'function void drm_dp_mst_get_port_malloc(drm_dp_mst_port*)' at drm_dp_mst_topology.c:1087:1 has some sub-type changes: CRC value (modversions) changed from 0xf2172a80 to 0x56ffa81c [C] 'function int drm_dp_mst_hpd_irq(drm_dp_mst_topology_mgr*, u8*, bool*)' at drm_dp_mst_topology.c:3044:1 has some sub-type changes: CRC value (modversions) changed from 0x1129cd36 to 0xab7639b3 [C] 'function void drm_dp_mst_put_port_malloc(drm_dp_mst_port*)' at drm_dp_mst_topology.c:1105:1 has some sub-type changes: CRC value (modversions) changed from 0xa84b2a3d to 0x8116b3e4 [C] 'function void drm_dp_mst_reset_vcpi_slots(drm_dp_mst_topology_mgr*, drm_dp_mst_port*)' at drm_dp_mst_topology.c:3426:1 has some sub-type changes: CRC value (modversions) changed from 0xebac0981 to 0x6d748b68 [C] 'function void drm_dp_mst_topology_mgr_destroy(drm_dp_mst_topology_mgr*)' at drm_dp_mst_topology.c:4010:1 has some sub-type changes: CRC value (modversions) changed from 0x4c46b229 to 0xdcc9b8d3 [C] 'function int drm_dp_mst_topology_mgr_init(drm_dp_mst_topology_mgr*, drm_device*, drm_dp_aux*, int, int, int)' at drm_dp_mst_topology.c:3956:1 has some sub-type changes: CRC value (modversions) changed from 0xae7dbd5 to 0x3a346018 [C] 'function int drm_dp_mst_topology_mgr_set_mst(drm_dp_mst_topology_mgr*, bool)' at drm_dp_mst_topology.c:2695:1 has some sub-type changes: CRC value (modversions) changed from 0x416896e4 to 0xbdb8acd1 [C] 'function int drm_dp_send_power_updown_phy(drm_dp_mst_topology_mgr*, drm_dp_mst_port*, bool)' at drm_dp_mst_topology.c:2302:1 has some sub-type changes: CRC value (modversions) changed from 0xcaa36e76 to 0x9026f4a0 [C] 'function int drm_dp_update_payload_part1(drm_dp_mst_topology_mgr*)' at drm_dp_mst_topology.c:2401:1 has some sub-type changes: CRC value (modversions) changed from 0x496e2e16 to 0xdd2fdb2e [C] 'function int drm_dp_update_payload_part2(drm_dp_mst_topology_mgr*)' at drm_dp_mst_topology.c:2508:1 has some sub-type changes: CRC value (modversions) changed from 0x25f444a1 to 0x526c8464 [C] 'function void drm_encoder_cleanup(drm_encoder*)' at drm_encoder.c:159:1 has some sub-type changes: CRC value (modversions) changed from 0x3c1cfbda to 0xfd601798 [C] 'function int drm_encoder_init(drm_device*, drm_encoder*, const drm_encoder_funcs*, int, const char*, ...)' at drm_encoder.h:183:1 has some sub-type changes: CRC value (modversions) changed from 0x6b0fcdf9 to 0x1cc1618e [C] 'function int drm_event_reserve_init_locked(drm_device*, drm_file*, drm_pending_event*, drm_event*)' at drm_file.c:614:1 has some sub-type changes: CRC value (modversions) changed from 0xee4fa745 to 0x1f1b830b [C] 'function drm_gem_cma_object* drm_fb_cma_get_gem_obj(drm_framebuffer*, unsigned int)' at drm_fb_cma_helper.c:38:1 has some sub-type changes: CRC value (modversions) changed from 0xe0cfc25c to 0x89f2a4ae [C] 'function int drm_framebuffer_init(drm_device*, drm_framebuffer*, const drm_framebuffer_funcs*)' at drm_framebuffer.h:218:1 has some sub-type changes: CRC value (modversions) changed from 0xc4ed9475 to 0xf303152f [C] 'function drm_framebuffer* drm_framebuffer_lookup(drm_device*, drm_file*, unsigned int)' at drm_framebuffer.h:221:1 has some sub-type changes: CRC value (modversions) changed from 0x65d67f19 to 0x3eaf5e49 [C] 'function void drm_framebuffer_remove(drm_framebuffer*)' at drm_framebuffer.c:963:1 has some sub-type changes: CRC value (modversions) changed from 0x5ad3ce9a to 0xe679daad [C] 'function void drm_framebuffer_unregister_private(drm_framebuffer*)' at drm_framebuffer.c:791:1 has some sub-type changes: CRC value (modversions) changed from 0x718b204 to 0xaa7850b6 [C] 'function int drm_gem_cma_dumb_create_internal(drm_file*, drm_device*, drm_mode_create_dumb*)' at drm_gem_cma_helper.c:211:1 has some sub-type changes: CRC value (modversions) changed from 0x21c9f202 to 0x273c627d [C] 'function void drm_gem_cma_free_object(drm_gem_object*)' at drm_gem_cma_helper.c:176:1 has some sub-type changes: CRC value (modversions) changed from 0xa823ce3c to 0xd68e3044 [C] 'function int drm_gem_cma_mmap(file*, vm_area_struct*)' at drm_gem_cma_helper.c:308:1 has some sub-type changes: CRC value (modversions) changed from 0xdb2644b0 to 0x2ae62503 [C] 'function sg_table* drm_gem_cma_prime_get_sg_table(drm_gem_object*)' at drm_gem_cma_helper.c:427:1 has some sub-type changes: CRC value (modversions) changed from 0x80f4b18a to 0xa5bb8fdf [C] 'function drm_gem_object* drm_gem_cma_prime_import_sg_table(drm_device*, dma_buf_attachment*, sg_table*)' at drm_gem_cma_helper.c:468:1 has some sub-type changes: CRC value (modversions) changed from 0xa5e9761d to 0xcf7b509 [C] 'function int drm_gem_cma_prime_mmap(drm_gem_object*, vm_area_struct*)' at drm_gem_cma_helper.c:521:1 has some sub-type changes: CRC value (modversions) changed from 0x563f79be to 0x8c1d98dd [C] 'function void* drm_gem_cma_prime_vmap(drm_gem_object*)' at drm_gem_cma_helper.c:550:1 has some sub-type changes: CRC value (modversions) changed from 0x6da20bc0 to 0x7b34417d [C] 'function void drm_gem_cma_prime_vunmap(drm_gem_object*, void*)' at drm_gem_cma_helper.c:569:1 has some sub-type changes: CRC value (modversions) changed from 0xe9ddffdd to 0x5bf242f6 [C] 'function int drm_gem_create_mmap_offset(drm_gem_object*)' at drm_gem.c:515:1 has some sub-type changes: CRC value (modversions) changed from 0x45724bab to 0xa5f72461 [C] 'function drm_framebuffer* drm_gem_fb_create(drm_device*, drm_file*, const drm_mode_fb_cmd2*)' at drm_gem_framebuffer_helper.c:223:1 has some sub-type changes: CRC value (modversions) changed from 0xa46c8c22 to 0xeb19319e [C] 'function int drm_gem_fb_create_handle(drm_framebuffer*, drm_file*, unsigned int*)' at drm_gem_framebuffer_helper.c:119:1 has some sub-type changes: CRC value (modversions) changed from 0xdddccfdd to 0x29c7c080 [C] 'function void drm_gem_fb_destroy(drm_framebuffer*)' at drm_gem_framebuffer_helper.c:94:1 has some sub-type changes: CRC value (modversions) changed from 0x3a232fd6 to 0x45a593b9 [C] 'function drm_gem_object* drm_gem_fb_get_obj(drm_framebuffer*, unsigned int)' at drm_gem_framebuffer_helper.c:47:1 has some sub-type changes: CRC value (modversions) changed from 0x534c8d55 to 0xdec3fb5 [C] 'function int drm_gem_fb_prepare_fb(drm_plane*, drm_plane_state*)' at drm_gem_framebuffer_helper.c:287:1 has some sub-type changes: CRC value (modversions) changed from 0xd59ccb53 to 0x4fd6210c [C] 'function void drm_gem_free_mmap_offset(drm_gem_object*)' at drm_gem.c:466:1 has some sub-type changes: CRC value (modversions) changed from 0x410800b1 to 0x1c211a5 [C] 'function page** drm_gem_get_pages(drm_gem_object*)' at drm_gem.c:553:1 has some sub-type changes: CRC value (modversions) changed from 0x881eac1b to 0x4bd6e25 [C] 'function int drm_gem_handle_create(drm_file*, drm_gem_object*, unsigned int*)' at drm_gem.h:376:1 has some sub-type changes: CRC value (modversions) changed from 0x81676934 to 0xb86dbf6 [C] 'function int drm_gem_mmap(file*, vm_area_struct*)' at drm_gem.c:1144:1 has some sub-type changes: CRC value (modversions) changed from 0x7e8d1293 to 0x5e407ad5 [C] 'function int drm_gem_mmap_obj(drm_gem_object*, unsigned long int, vm_area_struct*)' at drm_gem.c:1096:1 has some sub-type changes: CRC value (modversions) changed from 0x69e928da to 0x43221074 [C] 'function int drm_gem_object_init(drm_device*, drm_gem_object*, size_t)' at drm_gem.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0x87dc75bf to 0x4d6ce378 [C] 'function drm_gem_object* drm_gem_object_lookup(drm_file*, unsigned int)' at drm_gem.h:392:1 has some sub-type changes: CRC value (modversions) changed from 0x57abb890 to 0x596704b [C] 'function void drm_gem_object_put(drm_gem_object*)' at drm_gem.c:1032:1 has some sub-type changes: CRC value (modversions) changed from 0xb246cf11 to 0x76d3ad82 [C] 'function void drm_gem_object_put_unlocked(drm_gem_object*)' at drm_gem.h:373:1 has some sub-type changes: CRC value (modversions) changed from 0xc4a781a9 to 0x72291c88 [C] 'function void drm_gem_object_release(drm_gem_object*)' at drm_gem.c:950:1 has some sub-type changes: CRC value (modversions) changed from 0x4fce10c3 to 0x295a82b7 [C] 'function dma_buf* drm_gem_prime_export(drm_gem_object*, int)' at drm_prime.c:848:1 has some sub-type changes: CRC value (modversions) changed from 0xea86da2c to 0xc7f9f3a9 [C] 'function int drm_gem_prime_fd_to_handle(drm_device*, drm_file*, int, uint32_t*)' at drm_prime.c:291:1 has some sub-type changes: CRC value (modversions) changed from 0xdd187d1e to 0x506ea3c7 [C] 'function int drm_gem_prime_handle_to_fd(drm_device*, drm_file*, uint32_t, uint32_t, int*)' at drm_prime.c:422:1 has some sub-type changes: CRC value (modversions) changed from 0x86c6a56d to 0x4962ab50 [C] 'function drm_gem_object* drm_gem_prime_import(drm_device*, dma_buf*)' at drm_prime.c:950:1 has some sub-type changes: CRC value (modversions) changed from 0x53abee86 to 0x88fd2326 [C] 'function int drm_gem_prime_mmap(drm_gem_object*, vm_area_struct*)' at drm_prime.c:710:1 has some sub-type changes: CRC value (modversions) changed from 0x1fc15ec to 0x746927de [C] 'function void drm_gem_private_object_init(drm_device*, drm_gem_object*, size_t)' at drm_gem.c:151:1 has some sub-type changes: CRC value (modversions) changed from 0xb687100f to 0x4d05d424 [C] 'function void drm_gem_put_pages(drm_gem_object*, page**, bool, bool)' at drm_gem.c:616:1 has some sub-type changes: CRC value (modversions) changed from 0xa4a86d6e to 0x35f665f [C] 'function void drm_gem_vm_close(vm_area_struct*)' at drm_gem.c:1064:1 has some sub-type changes: CRC value (modversions) changed from 0xbc37558c to 0xc0422254 [C] 'function void drm_gem_vm_open(vm_area_struct*)' at drm_gem.c:1049:1 has some sub-type changes: CRC value (modversions) changed from 0xf5c79d7e to 0x8baef01b [C] 'function edid* drm_get_edid(drm_connector*, i2c_adapter*)' at drm_edid.h:475:1 has some sub-type changes: CRC value (modversions) changed from 0xb84831fc to 0xed17c91a [C] 'function bool drm_handle_vblank(drm_device*, unsigned int)' at drm_vblank.c:1747:1 has some sub-type changes: CRC value (modversions) changed from 0x203cd11a to 0xd1e30498 [C] 'function bool drm_hdcp_check_ksvs_revoked(drm_device*, u8*, u32)' at drm_hdcp.c:284:1 has some sub-type changes: CRC value (modversions) changed from 0x83afb0d8 to 0xdc3b1f3a [C] 'function void drm_hdcp_update_content_protection(drm_connector*, u64)' at drm_hdcp.c:443:1 has some sub-type changes: CRC value (modversions) changed from 0x64eda81f to 0x2aa9790e [C] 'function int drm_hdmi_avi_infoframe_from_display_mode(hdmi_avi_infoframe*, drm_connector*, const drm_display_mode*)' at drm_edid.c:5101:1 has some sub-type changes: CRC value (modversions) changed from 0x776e137d to 0xf4acef09 [C] 'function bool drm_helper_hpd_irq_event(drm_device*)' at drm_probe_helper.c:773:1 has some sub-type changes: CRC value (modversions) changed from 0x4a56a2d9 to 0xf346d53b [C] 'function void drm_helper_mode_fill_fb_struct(drm_device*, drm_framebuffer*, const drm_mode_fb_cmd2*)' at drm_modeset_helper.c:79:1 has some sub-type changes: CRC value (modversions) changed from 0x1b1f8b3a to 0xc3165a85 [C] 'function int drm_helper_probe_single_connector_modes(drm_connector*, uint32_t, uint32_t)' at drm_probe_helper.c:388:1 has some sub-type changes: CRC value (modversions) changed from 0xf6876181 to 0xb6458060 [C] 'function long int drm_ioctl(file*, unsigned int, unsigned long int)' at drm_ioctl.c:809:1 has some sub-type changes: CRC value (modversions) changed from 0xfdfcbeb5 to 0xaad3dc79 [C] 'function int drm_irq_install(drm_device*, int)' at drm_irq.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0x3d173bc8 to 0xda5f4cb4 [C] 'function int drm_irq_uninstall(drm_device*)' at drm_irq.c:173:1 has some sub-type changes: CRC value (modversions) changed from 0xf0b782fa to 0x5e1a5de1 [C] 'function void drm_kms_helper_hotplug_event(drm_device*)' at drm_probe_helper.c:565:1 has some sub-type changes: CRC value (modversions) changed from 0xe23c2d3a to 0xc98d9cd0 [C] 'function void drm_kms_helper_poll_disable(drm_device*)' at drm_probe_helper.c:700:1 has some sub-type changes: CRC value (modversions) changed from 0x2947a785 to 0x1c53427a [C] 'function void drm_kms_helper_poll_enable(drm_device*)' at drm_probe_helper.c:223:1 has some sub-type changes: CRC value (modversions) changed from 0xefc75bd3 to 0xe68a8c4e [C] 'function void drm_kms_helper_poll_fini(drm_device*)' at drm_probe_helper.c:740:1 has some sub-type changes: CRC value (modversions) changed from 0x36ab3311 to 0x82b29e8e [C] 'function void drm_kms_helper_poll_init(drm_device*)' at drm_probe_helper.c:727:1 has some sub-type changes: CRC value (modversions) changed from 0xbdfcff2b to 0x7cd7b7fc [C] 'function void drm_mode_config_cleanup(drm_device*)' at drm_mode_config.c:434:1 has some sub-type changes: CRC value (modversions) changed from 0xdf9ae054 to 0x8790e89b [C] 'function void drm_mode_config_init(drm_device*)' at drm_mode_config.c:387:1 has some sub-type changes: CRC value (modversions) changed from 0x9fee073e to 0xc93cd39a [C] 'function void drm_mode_config_reset(drm_device*)' at drm_mode_config.h:933:1 has some sub-type changes: CRC value (modversions) changed from 0x3c53664 to 0xc8fa3d02 [C] 'function int drm_mode_convert_umode(drm_device*, drm_display_mode*, const drm_mode_modeinfo*)' at drm_modes.h:468:1 has some sub-type changes: CRC value (modversions) changed from 0x1046d83b to 0x2ce3e901 [C] 'function drm_display_mode* drm_mode_create(drm_device*)' at drm_modes.c:70:1 has some sub-type changes: CRC value (modversions) changed from 0x81daaa60 to 0xdeebed78 [C] 'function int drm_mode_create_dp_colorspace_property(drm_connector*)' at drm_connector.c:1777:1 has some sub-type changes: CRC value (modversions) changed from 0xc2442f5e to 0x4b48f785 [C] 'function int drm_mode_crtc_set_gamma_size(drm_crtc*, int)' at drm_color_mgmt.c:195:1 has some sub-type changes: CRC value (modversions) changed from 0x6670d395 to 0xb81d524e [C] 'function void drm_mode_destroy(drm_device*, drm_display_mode*)' at drm_modes.h:465:1 has some sub-type changes: CRC value (modversions) changed from 0x8fbf41e9 to 0x3fac46cd [C] 'function drm_display_mode* drm_mode_duplicate(drm_device*, const drm_display_mode*)' at drm_modes.h:512:1 has some sub-type changes: CRC value (modversions) changed from 0xe03935c7 to 0xca8b588d [C] 'function drm_mode_object* drm_mode_object_find(drm_device*, drm_file*, uint32_t, uint32_t)' at drm_mode_object.c:173:1 has some sub-type changes: CRC value (modversions) changed from 0x718c5e46 to 0xb35cb603 [C] 'function void drm_mode_object_get(drm_mode_object*)' at drm_mode_object.h:120:1 has some sub-type changes: CRC value (modversions) changed from 0xdfc398b0 to 0xfc59f31b [C] 'function void drm_mode_object_put(drm_mode_object*)' at drm_mode_object.h:121:1 has some sub-type changes: CRC value (modversions) changed from 0x449d96b7 to 0x585019d7 [C] 'function void drm_mode_probed_add(drm_connector*, drm_display_mode*)' at drm_modes.h:471:1 has some sub-type changes: CRC value (modversions) changed from 0xd1e4162e to 0x7dc3955c [C] 'function void drm_modeset_acquire_fini(drm_modeset_acquire_ctx*)' at drm_modeset_lock.c:214:1 has some sub-type changes: CRC value (modversions) changed from 0x432f1d6f to 0xcd139681 [C] 'function void drm_modeset_acquire_init(drm_modeset_acquire_ctx*, unsigned int)' at drm_modeset_lock.h:91:1 has some sub-type changes: CRC value (modversions) changed from 0x589c778e to 0xf313fecb [C] 'function int drm_modeset_backoff(drm_modeset_acquire_ctx*)' at drm_modeset_lock.h:95:1 has some sub-type changes: CRC value (modversions) changed from 0x1c643bb4 to 0x768660bf [C] 'function void drm_modeset_drop_locks(drm_modeset_acquire_ctx*)' at drm_modeset_lock.h:94:1 has some sub-type changes: CRC value (modversions) changed from 0x43828719 to 0xe6b95e2d [C] 'function int drm_modeset_lock(drm_modeset_lock*, drm_modeset_acquire_ctx*)' at drm_modeset_lock.h:117:1 has some sub-type changes: CRC value (modversions) changed from 0x643b0f13 to 0xd7b7d087 [C] 'function void drm_modeset_lock_all(drm_device*)' at drm_modeset_lock.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0xc77f2d15 to 0xbcf96979 [C] 'function int drm_modeset_lock_all_ctx(drm_device*, drm_modeset_acquire_ctx*)' at drm_modeset_lock.h:130:1 has some sub-type changes: CRC value (modversions) changed from 0xa9aea79f to 0x783a5a60 [C] 'function void drm_modeset_lock_init(drm_modeset_lock*)' at drm_modeset_lock.h:97:1 has some sub-type changes: CRC value (modversions) changed from 0x212abbcb to 0xa7770682 [C] 'function void drm_modeset_unlock(drm_modeset_lock*)' at drm_modeset_lock.h:120:1 has some sub-type changes: CRC value (modversions) changed from 0x1609edeb to 0x7faeff7d [C] 'function void drm_modeset_unlock_all(drm_device*)' at drm_modeset_lock.h:127:1 has some sub-type changes: CRC value (modversions) changed from 0x752e3cd1 to 0xffec9016 [C] 'function void drm_object_attach_property(drm_mode_object*, drm_property*, long long unsigned int)' at drm_mode_object.h:130:1 has some sub-type changes: CRC value (modversions) changed from 0x7b559ed6 to 0xf9c244fe [C] 'function int drm_object_property_set_value(drm_mode_object*, drm_property*, long long unsigned int)' at drm_mode_object.h:123:1 has some sub-type changes: CRC value (modversions) changed from 0x9d8b2979 to 0x48855b1b [C] 'function void drm_of_component_match_add(device*, component_match**, int (device*, void*)*, device_node*)' at drm_of.c:91:1 has some sub-type changes: CRC value (modversions) changed from 0x4365c1f2 to 0x70f6befc [C] 'function uint32_t drm_of_find_possible_crtcs(drm_device*, device_node*)' at drm_of.c:62:1 has some sub-type changes: CRC value (modversions) changed from 0x2e733ff2 to 0x88d7f9e0 [C] 'function int drm_open(inode*, file*)' at drm_file.c:370:1 has some sub-type changes: CRC value (modversions) changed from 0x54259ca8 to 0x194b1deb [C] 'function int drm_panel_add(drm_panel*)' at drm_panel.c:67:1 has some sub-type changes: CRC value (modversions) changed from 0x67a4eaab to 0x136af6b1 [C] 'function int drm_panel_attach(drm_panel*, drm_connector*)' at drm_panel.h:185:1 has some sub-type changes: CRC value (modversions) changed from 0x2be34247 to 0x49408ad1 [C] 'function void drm_panel_detach(drm_panel*)' at drm_panel.c:128:1 has some sub-type changes: CRC value (modversions) changed from 0xe15e45c0 to 0x931b0f43 [C] 'function int drm_panel_disable(drm_panel*)' at drm_panel.h:199:1 has some sub-type changes: CRC value (modversions) changed from 0xf0d45425 to 0xbeecb13f [C] 'function int drm_panel_enable(drm_panel*)' at drm_panel.h:198:1 has some sub-type changes: CRC value (modversions) changed from 0x98b533b6 to 0xfa79b62c [C] 'function int drm_panel_get_modes(drm_panel*)' at drm_panel.h:201:1 has some sub-type changes: CRC value (modversions) changed from 0xcbb3a579 to 0x7b80d396 [C] 'function void drm_panel_init(drm_panel*)' at drm_panel.c:51:1 has some sub-type changes: CRC value (modversions) changed from 0xf268c296 to 0xfd0432e4 [C] 'function int drm_panel_notifier_call_chain(drm_panel*, unsigned long int, void*)' at drm_panel.c:284:1 has some sub-type changes: CRC value (modversions) changed from 0xa66649bc to 0xb1c88af0 [C] 'function int drm_panel_notifier_register(drm_panel*, notifier_block*)' at drm_panel.c:270:1 has some sub-type changes: CRC value (modversions) changed from 0x986376c9 to 0xaf259817 [C] 'function int drm_panel_notifier_unregister(drm_panel*, notifier_block*)' at drm_panel.c:277:1 has some sub-type changes: CRC value (modversions) changed from 0xe0f753f2 to 0x51e0533 [C] 'function int drm_panel_prepare(drm_panel*)' at drm_panel.h:195:1 has some sub-type changes: CRC value (modversions) changed from 0xfdbc0733 to 0xdd38175a [C] 'function void drm_panel_remove(drm_panel*)' at drm_panel.c:83:1 has some sub-type changes: CRC value (modversions) changed from 0xc0133485 to 0x8ed6b7c9 [C] 'function int drm_panel_unprepare(drm_panel*)' at drm_panel.h:196:1 has some sub-type changes: CRC value (modversions) changed from 0xe179d385 to 0x874228e8 [C] 'function void drm_plane_cleanup(drm_plane*)' at drm_plane.h:728:1 has some sub-type changes: CRC value (modversions) changed from 0x3ff83be9 to 0x3df81757 [C] 'function int drm_plane_create_alpha_property(drm_plane*)' at drm_blend.c:199:1 has some sub-type changes: CRC value (modversions) changed from 0xceb19c7c to 0x780ebaf6 [C] 'function int drm_plane_create_blend_mode_property(drm_plane*, unsigned int)' at drm_blend.c:552:1 has some sub-type changes: CRC value (modversions) changed from 0xccbe92a3 to 0x5d983271 [C] 'function int drm_plane_create_color_properties(drm_plane*, u32, u32, drm_color_encoding, drm_color_range)' at drm_color_mgmt.c:406:1 has some sub-type changes: CRC value (modversions) changed from 0x650844ac to 0xc6a25d40 [C] 'function int drm_plane_create_rotation_property(drm_plane*, unsigned int, unsigned int)' at drm_blend.c:252:1 has some sub-type changes: CRC value (modversions) changed from 0xb84d905 to 0xcc6a6587 [C] 'function int drm_plane_create_zpos_immutable_property(drm_plane*, unsigned int)' at drm_blend.c:388:1 has some sub-type changes: CRC value (modversions) changed from 0x9e61f225 to 0x183f43f3 [C] 'function int drm_plane_create_zpos_property(drm_plane*, unsigned int, unsigned int, unsigned int)' at drm_blend.c:349:1 has some sub-type changes: CRC value (modversions) changed from 0x626fd85b to 0xae67c2b [C] 'function void drm_plane_enable_fb_damage_clips(drm_plane*)' at drm_damage_helper.c:96:1 has some sub-type changes: CRC value (modversions) changed from 0xd24f7de2 to 0xa2522688 [C] 'function __poll_t drm_poll(file*, poll_table_struct*)' at drm_file.c:576:1 has some sub-type changes: CRC value (modversions) changed from 0xc0b0fffe to 0xbdeb2f54 [C] 'function void drm_prime_gem_destroy(drm_gem_object*, sg_table*)' at drm_prime.c:1011:1 has some sub-type changes: CRC value (modversions) changed from 0xfec4d354 to 0x6df25469 [C] 'function sg_table* drm_prime_pages_to_sg(page**, unsigned int)' at drm_prime.c:816:1 has some sub-type changes: CRC value (modversions) changed from 0x1cc5559a to 0x863572a2 [C] 'function int drm_prime_sg_to_page_addr_arrays(sg_table*, page**, dma_addr_t*, int)' at drm_prime.c:970:1 has some sub-type changes: CRC value (modversions) changed from 0x4bc31cd1 to 0x35a3333e [C] 'function drm_property_blob* drm_property_blob_get(drm_property_blob*)' at drm_property.c:637:1 has some sub-type changes: CRC value (modversions) changed from 0xe0802fe4 to 0x8af3c011 [C] 'function void drm_property_blob_put(drm_property_blob*)' at drm_property.h:284:1 has some sub-type changes: CRC value (modversions) changed from 0xb60e7ef4 to 0x7ffb155a [C] 'function drm_property* drm_property_create(drm_device*, unsigned int, const char*, int)' at drm_property.h:243:1 has some sub-type changes: CRC value (modversions) changed from 0xa9f722a1 to 0xb52af374 [C] 'function drm_property* drm_property_create_bitmask(drm_device*, unsigned int, const char*, const drm_prop_enum_list*, int, long long unsigned int)' at drm_property.h:250:1 has some sub-type changes: CRC value (modversions) changed from 0x945f2023 to 0xd24abc76 [C] 'function drm_property_blob* drm_property_create_blob(drm_device*, unsigned long int, void*)' at drm_property.h:270:1 has some sub-type changes: CRC value (modversions) changed from 0xef7afc36 to 0xb0e622e2 [C] 'function drm_property* drm_property_create_enum(drm_device*, unsigned int, const char*, const drm_prop_enum_list*, int)' at drm_property.h:246:1 has some sub-type changes: CRC value (modversions) changed from 0x6fd6c567 to 0xba1fc0ab [C] 'function drm_property* drm_property_create_range(drm_device*, unsigned int, const char*, long long unsigned int, long long unsigned int)' at drm_property.h:255:1 has some sub-type changes: CRC value (modversions) changed from 0xfda9b47b to 0x730d4c0d [C] 'function drm_property_blob* drm_property_lookup_blob(drm_device*, uint32_t)' at drm_property.c:656:1 has some sub-type changes: CRC value (modversions) changed from 0xd43a527e to 0xef87632f [C] 'function void drm_put_dev(drm_device*)' at drm_drv.c:439:1 has some sub-type changes: CRC value (modversions) changed from 0x2e1d2f54 to 0xe303c310 [C] 'function ssize_t drm_read(file*, char*, size_t, loff_t*)' at drm_file.c:489:1 has some sub-type changes: CRC value (modversions) changed from 0xf40abe6c to 0xd5b567bb [C] 'function int drm_release(inode*, file*)' at drm_file.c:440:1 has some sub-type changes: CRC value (modversions) changed from 0xeeb781fc to 0x1446847f [C] 'function void drm_send_event_locked(drm_device*, drm_pending_event*)' at drm_file.c:713:1 has some sub-type changes: CRC value (modversions) changed from 0x7d09b220 to 0xe0b524e7 [C] 'function void drm_set_preferred_mode(drm_connector*, int, int)' at drm_edid.c:4993:1 has some sub-type changes: CRC value (modversions) changed from 0x470978e5 to 0xc1c7ae21 [C] 'function void drm_state_dump(drm_device*, drm_printer*)' at drm_atomic.c:1502:1 has some sub-type changes: CRC value (modversions) changed from 0xecb06cd6 to 0xe57018f2 [C] 'function void drm_sysfs_hotplug_event(drm_device*)' at drm_sysfs.h:13:1 has some sub-type changes: CRC value (modversions) changed from 0x263dcef6 to 0x2cd88af9 [C] 'function int drm_universal_plane_init(drm_device*, drm_plane*, unsigned int, const drm_plane_funcs*, const unsigned int*, unsigned int, const long long unsigned int*, drm_plane_type, const char*, ...)' at drm_plane.h:713:1 has some sub-type changes: CRC value (modversions) changed from 0xba130c6e to 0x71b926bc [C] 'function int drm_vblank_init(drm_device*, unsigned int)' at drm_vblank.c:444:1 has some sub-type changes: CRC value (modversions) changed from 0x2092426e to 0xa088c7ce [C] 'function void drm_wait_one_vblank(drm_device*, unsigned int)' at drm_vblank.c:1082:1 has some sub-type changes: CRC value (modversions) changed from 0x50d98e34 to 0xafcdf62f [C] 'function void drop_nlink(inode*)' at fs.h:2248:1 has some sub-type changes: CRC value (modversions) changed from 0xdc0c9198 to 0x3c7cbf60 [C] 'function void dst_release(dst_entry*)' at dst.h:252:1 has some sub-type changes: CRC value (modversions) changed from 0x8cbefdd0 to 0x4714bffb [C] 'function void dump_page(page*, const char*)' at debug.c:111:1 has some sub-type changes: CRC value (modversions) changed from 0xc0863830 to 0xf4ee18d5 [C] 'function void* dup_iter(iov_iter*, iov_iter*, gfp_t)' at iov_iter.c:1596:1 has some sub-type changes: CRC value (modversions) changed from 0x1f543326 to 0xadd46247 [C] 'function int dw_pcie_host_init(pcie_port*)' at pcie-designware.h:363:1 has some sub-type changes: CRC value (modversions) changed from 0x56bc1b30 to 0xbe9abcc [C] 'function void dw_pcie_msi_init(pcie_port*)' at pcie-designware.h:360:1 has some sub-type changes: CRC value (modversions) changed from 0xdcb80245 to 0xe14e1251 [C] 'function void dw_pcie_setup_rc(pcie_port*)' at pcie-designware.h:362:1 has some sub-type changes: CRC value (modversions) changed from 0x4eb5ac49 to 0x6cbe283f [C] 'function int dw_pcie_wait_for_link(dw_pcie*)' at pcie-designware.h:276:1 has some sub-type changes: CRC value (modversions) changed from 0xf90799e6 to 0x4192326c [C] 'function void end_buffer_read_sync(buffer_head*, int)' at buffer.c:163:1 has some sub-type changes: CRC value (modversions) changed from 0x716591b7 to 0xc2aeb5a2 [C] 'function void end_buffer_write_sync(buffer_head*, int)' at buffer.c:170:1 has some sub-type changes: CRC value (modversions) changed from 0xee1f2f75 to 0x286da2 [C] 'function void eth_commit_mac_addr_change(net_device*, void*)' at eth.c:308:1 has some sub-type changes: CRC value (modversions) changed from 0x4030f3ad to 0xbcffbe5f [C] 'function int eth_mac_addr(net_device*, void*)' at eth.c:326:1 has some sub-type changes: CRC value (modversions) changed from 0xf6cf3acf to 0x3bdadbf7 [C] 'function int eth_platform_get_mac_address(device*, u8*)' at etherdevice.h:28:1 has some sub-type changes: CRC value (modversions) changed from 0x4103bafc to 0xb2ff9728 [C] 'function int eth_prepare_mac_addr_change(net_device*, void*)' at eth.c:291:1 has some sub-type changes: CRC value (modversions) changed from 0xf71d0988 to 0xc32ffe0b [C] 'function unsigned short int eth_type_trans(sk_buff*, net_device*)' at etherdevice.h:32:1 has some sub-type changes: CRC value (modversions) changed from 0xad34b441 to 0x59965f6e [C] 'function int eth_validate_addr(net_device*)' at eth.c:354:1 has some sub-type changes: CRC value (modversions) changed from 0x3c358c73 to 0xe2f3dde7 [C] 'function void ether_setup(net_device*)' at netdevice.h:4134:1 has some sub-type changes: CRC value (modversions) changed from 0x4c4569bc to 0xee0710f0 [C] 'function unsigned int ethtool_op_get_link(net_device*)' at ethtool.h:87:1 has some sub-type changes: CRC value (modversions) changed from 0x10236e4d to 0x40bb0782 [C] 'function int ethtool_op_get_ts_info(net_device*, ethtool_ts_info*)' at ethtool.c:42:1 has some sub-type changes: CRC value (modversions) changed from 0xa160ffda to 0x843b9b6d [C] 'function event_trigger_type event_triggers_call(trace_event_file*, void*, ring_buffer_event*)' at trace_events.h:443:1 has some sub-type changes: CRC value (modversions) changed from 0xb57b63c1 to 0x7154b8ac [C] 'function extcon_dev* extcon_find_edev_by_node(device_node*)' at extcon.c:1336:1 has some sub-type changes: CRC value (modversions) changed from 0x3e0d3bcb to 0x83e4cbb8 [C] 'function extcon_dev* extcon_get_edev_by_phandle(device*, int)' at extcon.h:226:1 has some sub-type changes: CRC value (modversions) changed from 0xd067dcbc to 0x4bbab169 [C] 'function const char* extcon_get_edev_name(extcon_dev*)' at extcon.c:1405:1 has some sub-type changes: CRC value (modversions) changed from 0x5d4b28c1 to 0xcf6cd992 [C] 'function extcon_dev* extcon_get_extcon_dev(const char*)' at extcon.c:867:1 has some sub-type changes: CRC value (modversions) changed from 0x21cb4c4f to 0xa62f6a4e [C] 'function int extcon_get_property(extcon_dev*, unsigned int, unsigned int, extcon_property_value*)' at extcon.c:615:1 has some sub-type changes: CRC value (modversions) changed from 0x60320162 to 0xde984b22 [C] 'function int extcon_get_state(extcon_dev*, unsigned int)' at extcon.h:173:1 has some sub-type changes: CRC value (modversions) changed from 0x77762143 to 0xecfe20f5 [C] 'function int extcon_register_notifier(extcon_dev*, unsigned int, notifier_block*)' at extcon.c:899:1 has some sub-type changes: CRC value (modversions) changed from 0x18ca64b0 to 0xfa9e305 [C] 'function int extcon_set_property(extcon_dev*, unsigned int, unsigned int, extcon_property_value)' at extcon.c:694:1 has some sub-type changes: CRC value (modversions) changed from 0xba0fd944 to 0x55a37530 [C] 'function int extcon_set_property_capability(extcon_dev*, unsigned int, unsigned int)' at extcon.c:816:1 has some sub-type changes: CRC value (modversions) changed from 0xdaa1165c to 0xb6e7e418 [C] 'function int extcon_set_state_sync(extcon_dev*, unsigned int, bool)' at extcon.c:577:1 has some sub-type changes: CRC value (modversions) changed from 0xfddc6c7a to 0xbce5ab81 [C] 'function int extcon_unregister_notifier(extcon_dev*, unsigned int, notifier_block*)' at extcon.c:928:1 has some sub-type changes: CRC value (modversions) changed from 0x36329ed5 to 0xa3068c5b [C] 'function int fasync_helper(int, file*, int, fasync_struct**)' at fs.h:1373:1 has some sub-type changes: CRC value (modversions) changed from 0x8a04e728 to 0xd51b4164 [C] 'function void fd_install(unsigned int, file*)' at file.h:89:1 has some sub-type changes: CRC value (modversions) changed from 0x5d553789 to 0x3ec866b6 [C] 'function file* fget(unsigned int)' at file.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0xcf592d6d to 0x8db3314e [C] 'function char* file_path(file*, char*, int)' at fs.h:3085:1 has some sub-type changes: CRC value (modversions) changed from 0xb536e5e7 to 0xeef215f5 [C] 'function int filemap_fdatawait_range(address_space*, loff_t, loff_t)' at filemap.c:550:1 has some sub-type changes: CRC value (modversions) changed from 0x1d8daa31 to 0x8ea9f7bf [C] 'function int filemap_fdatawrite_range(address_space*, loff_t, loff_t)' at filemap.c:438:1 has some sub-type changes: CRC value (modversions) changed from 0xd41253b to 0xf0c68511 [C] 'function file* filp_open(const char*, int, umode_t)' at open.c:1055:1 has some sub-type changes: CRC value (modversions) changed from 0x3000d58b to 0x5cb6dcc9 [C] 'function pid* find_get_pid(int)' at pid.h:120:1 has some sub-type changes: CRC value (modversions) changed from 0x67989fc0 to 0x82c23fca [C] 'function snd_usb_substream* find_snd_usb_substream(unsigned int, unsigned int, unsigned int, snd_usb_audio**, void (snd_usb_audio*)*)' at card.c:222:1 has some sub-type changes: CRC value (modversions) changed from 0x576fc0ed to 0x535d39f7 [C] 'function vm_area_struct* find_vma(mm_struct*, unsigned long int)' at mm.h:2483:1 has some sub-type changes: CRC value (modversions) changed from 0x7a9c5c9e to 0xe260978a [C] 'function pid* find_vpid(int)' at pid.h:115:1 has some sub-type changes: CRC value (modversions) changed from 0x3435a9d7 to 0x1c2cdb1d [C] 'function int firmware_request_nowarn(const firmware**, const char*, device*)' at main.c:846:1 has some sub-type changes: CRC value (modversions) changed from 0xd491ae9e to 0xdaa3456 [C] 'function phy_device* fixed_phy_register(unsigned int, fixed_phy_status*, device_node*)' at fixed_phy.c:316:1 has some sub-type changes: CRC value (modversions) changed from 0xcecd7209 to 0x90389a88 [C] 'function void fixed_phy_unregister(phy_device*)' at fixed_phy.c:333:1 has some sub-type changes: CRC value (modversions) changed from 0x5a08d774 to 0xceb62698 [C] 'function void flush_dcache_page(page*)' at cacheflush.h:146:1 has some sub-type changes: CRC value (modversions) changed from 0xd618cf85 to 0xb00a979f [C] 'function void flush_signals(task_struct*)' at signal.c:475:1 has some sub-type changes: CRC value (modversions) changed from 0x6c1ea8ba to 0xbbabce7d [C] 'function void fput(file*)' at file.h:15:1 has some sub-type changes: CRC value (modversions) changed from 0x8d81553a to 0x93f2ab3b [C] 'function void free_buffer_head(buffer_head*)' at buffer.c:3371:1 has some sub-type changes: CRC value (modversions) changed from 0xf72ee2fb to 0x2dfe80bc [C] 'function void free_netdev(net_device*)' at netdevice.h:2696:1 has some sub-type changes: CRC value (modversions) changed from 0x8158c0f0 to 0xea0c91f6 [C] 'function bool freezing_slow_path(task_struct*)' at freezer.h:30:1 has some sub-type changes: CRC value (modversions) changed from 0xe873b1e5 to 0x12cc7930 [C] 'function const ieee80211_reg_rule* freq_reg_info(wiphy*, u32)' at reg.c:1629:1 has some sub-type changes: CRC value (modversions) changed from 0xcb20e1a8 to 0xbddd72d2 [C] 'function int fsl8250_handle_irq(uart_port*)' at 8250_fsl.c:27:1 has some sub-type changes: CRC value (modversions) changed from 0xa66eba89 to 0x1d80383c [C] 'function void fsstack_copy_attr_all(inode*, const inode*)' at stack.c:63:1 has some sub-type changes: CRC value (modversions) changed from 0x8690b462 to 0xce3a0f16 [C] 'function void* fwnode_connection_find_match(fwnode_handle*, const char*, void*, devcon_match_fn_t)' at devcon.c:71:1 has some sub-type changes: CRC value (modversions) changed from 0x3b1f939e to 0x50d4fab6 [C] 'function fwnode_handle* fwnode_get_parent(const fwnode_handle*)' at property.c:587:1 has some sub-type changes: CRC value (modversions) changed from 0x24d26b05 to 0xd03a5a69 [C] 'function void fwnode_handle_put(fwnode_handle*)' at property.h:112:1 has some sub-type changes: CRC value (modversions) changed from 0x49f670bf to 0xa672c38e [C] 'function bool fwnode_property_present(const fwnode_handle*, const char*)' at property.h:53:1 has some sub-type changes: CRC value (modversions) changed from 0xceed4692 to 0xdeb2c514 [C] 'function int fwnode_property_read_string(const fwnode_handle*, const char*, const char**)' at property.h:70:1 has some sub-type changes: CRC value (modversions) changed from 0xeaf52003 to 0x6def7678 [C] 'function int fwnode_property_read_u16_array(const fwnode_handle*, const char*, u16*, size_t)' at property.c:291:1 has some sub-type changes: CRC value (modversions) changed from 0x43bf02af to 0xc9f1b1ad [C] 'function int fwnode_property_read_u32_array(const fwnode_handle*, const char*, unsigned int*, unsigned long int)' at property.h:61:1 has some sub-type changes: CRC value (modversions) changed from 0xcd2d3f73 to 0x95a8b5fc [C] 'function usb_role_switch* fwnode_usb_role_switch_get(fwnode_handle*)' at class.c:148:1 has some sub-type changes: CRC value (modversions) changed from 0xe66c5880 to 0xdd3acbff [C] 'function sector_t generic_block_bmap(address_space*, sector_t, get_block_t*)' at buffer.c:2970:1 has some sub-type changes: CRC value (modversions) changed from 0x308959cd to 0x71d33d18 [C] 'function int generic_cont_expand_simple(inode*, loff_t)' at buffer.c:2318:1 has some sub-type changes: CRC value (modversions) changed from 0x61278be2 to 0x59af7d81 [C] 'function int generic_delete_inode(inode*)' at inode.c:1523:1 has some sub-type changes: CRC value (modversions) changed from 0xce4b706f to 0x1d5b9206 [C] 'function iommu_group* generic_device_group(device*)' at iommu.c:1277:1 has some sub-type changes: CRC value (modversions) changed from 0x21053ecd to 0x2d8e5bb1 [C] 'function int generic_error_remove_page(address_space*, page*)' at truncate.c:235:1 has some sub-type changes: CRC value (modversions) changed from 0x429db42f to 0xb3c2d197 [C] 'function dentry* generic_fh_to_dentry(super_block*, fid*, int, int, inode* (super_block*, typedef u64, typedef u32)*)' at libfs.c:932:1 has some sub-type changes: CRC value (modversions) changed from 0xed2b1356 to 0x6ff8d3a4 [C] 'function dentry* generic_fh_to_parent(super_block*, fid*, int, int, inode* (super_block*, typedef u64, typedef u32)*)' at libfs.c:965:1 has some sub-type changes: CRC value (modversions) changed from 0x4d4d6b6f to 0xcf9eab9d [C] 'function int generic_file_fsync(file*, loff_t, loff_t, int)' at libfs.c:1039:1 has some sub-type changes: CRC value (modversions) changed from 0xb5df6c39 to 0x9f5db8c0 [C] 'function loff_t generic_file_llseek(file*, loff_t, int)' at read_write.c:144:1 has some sub-type changes: CRC value (modversions) changed from 0x4d1cc3b2 to 0x5e9b6da0 [C] 'function int generic_file_mmap(file*, vm_area_struct*)' at filemap.c:2705:1 has some sub-type changes: CRC value (modversions) changed from 0x4634262c to 0x73830590 [C] 'function int generic_file_open(inode*, file*)' at fs.h:3219:1 has some sub-type changes: CRC value (modversions) changed from 0x4500c3c0 to 0x46bad72c [C] 'function ssize_t generic_file_read_iter(kiocb*, iov_iter*)' at filemap.c:2274:1 has some sub-type changes: CRC value (modversions) changed from 0xcf98ba72 to 0x8709d697 [C] 'function ssize_t generic_file_splice_read(file*, loff_t*, pipe_inode_info*, size_t, unsigned int)' at splice.c:295:1 has some sub-type changes: CRC value (modversions) changed from 0x12b5bb3c to 0x777a4282 [C] 'function ssize_t generic_file_write_iter(kiocb*, iov_iter*)' at filemap.c:3436:1 has some sub-type changes: CRC value (modversions) changed from 0xc1d2b476 to 0xe9cf0d22 [C] 'function void generic_fillattr(inode*, kstat*)' at fs.h:3298:1 has some sub-type changes: CRC value (modversions) changed from 0x81c321a7 to 0xcf995572 [C] 'function int generic_mii_ioctl(mii_if_info*, mii_ioctl_data*, int, unsigned int*)' at mii.h:46:1 has some sub-type changes: CRC value (modversions) changed from 0xd89a5f0e to 0x8d8156ac [C] 'function int generic_permission(inode*, int)' at namei.c:335:1 has some sub-type changes: CRC value (modversions) changed from 0xeac86901 to 0xb4b38b48 [C] 'function ssize_t generic_read_dir(file*, char*, size_t, loff_t*)' at libfs.c:223:1 has some sub-type changes: CRC value (modversions) changed from 0x3d401537 to 0x4b8969cd [C] 'function void generic_shutdown_super(super_block*)' at super.c:442:1 has some sub-type changes: CRC value (modversions) changed from 0x9ce4aeff to 0x6227aa04 [C] 'function int generic_write_end(file*, address_space*, loff_t, unsigned int, unsigned int, page*, void*)' at buffer.c:2137:1 has some sub-type changes: CRC value (modversions) changed from 0x8ff5d768 to 0x5e51cdb6 [C] 'function void genl_notify(const genl_family*, sk_buff*, genl_info*, u32, gfp_t)' at genetlink.c:1109:1 has some sub-type changes: CRC value (modversions) changed from 0xc20b8a81 to 0xcd749795 [C] 'function int genl_register_family(genl_family*)' at genetlink.h:145:1 has some sub-type changes: CRC value (modversions) changed from 0xb6010b9 to 0x2b2aa0ca [C] 'function int genl_unregister_family(const genl_family*)' at genetlink.h:146:1 has some sub-type changes: CRC value (modversions) changed from 0xd7bf5443 to 0x7b88786 [C] 'function void* genlmsg_put(sk_buff*, unsigned int, unsigned int, const genl_family*, int, unsigned char)' at genetlink.h:150:1 has some sub-type changes: CRC value (modversions) changed from 0xb8703548 to 0xf532c9cf [C] 'function int genphy_read_status(phy_device*)' at phy.h:1094:1 has some sub-type changes: CRC value (modversions) changed from 0xe953ed97 to 0x3a2c6eaf [C] 'function int genphy_resume(phy_device*)' at phy_device.c:2005:1 has some sub-type changes: CRC value (modversions) changed from 0xf22ab96a to 0x429b7f7c [C] 'function int genphy_suspend(phy_device*)' at phy_device.c:1999:1 has some sub-type changes: CRC value (modversions) changed from 0xdb6d3e3c to 0x50905168 [C] 'function device* get_cpu_device(unsigned int)' at cpu.h:38:1 has some sub-type changes: CRC value (modversions) changed from 0xbcb53f5f to 0xea1538a9 [C] 'function device* get_device(device*)' at device.h:1708:1 has some sub-type changes: CRC value (modversions) changed from 0xc7fcfc23 to 0x3a57b70f [C] 'function int get_device_system_crosststamp(int (ktime_t*, system_counterval_t*, void*)*, void*, system_time_snapshot*, system_device_crosststamp*)' at timekeeping.c:1117:1 has some sub-type changes: CRC value (modversions) changed from 0xfe97a35c to 0x6389293d [C] 'function task_struct* get_pid_task(pid*, pid_type)' at pid.c:381:1 has some sub-type changes: CRC value (modversions) changed from 0xfc32839f to 0x7a95c9a4 [C] 'function file* get_task_exe_file(task_struct*)' at fork.c:1188:1 has some sub-type changes: CRC value (modversions) changed from 0x930183fe to 0xd70df60 [C] 'function mm_struct* get_task_mm(task_struct*)' at fork.c:1213:1 has some sub-type changes: CRC value (modversions) changed from 0x6269cf41 to 0x2070c465 [C] 'function thermal_instance* get_thermal_instance(thermal_zone_device*, thermal_cooling_device*, int)' at thermal_helpers.c:44:1 has some sub-type changes: CRC value (modversions) changed from 0xdee443e1 to 0x75e3cfed [C] 'function int get_tree_single(fs_context*, int (super_block*, fs_context*)*)' at fs_context.h:155:1 has some sub-type changes: CRC value (modversions) changed from 0x2ed40e02 to 0x41df7995 [C] 'function unsigned long int get_unmapped_area(file*, unsigned long int, unsigned long int, unsigned long int, unsigned long int)' at mm.h:2360:1 has some sub-type changes: CRC value (modversions) changed from 0xa2d1ee4a to 0xebdd4d83 [C] 'function long int get_user_pages(unsigned long int, unsigned long int, unsigned int, page**, vm_area_struct**)' at gup.c:1622:1 has some sub-type changes: CRC value (modversions) changed from 0xaacab9b7 to 0xae1e79bd [C] 'function int get_user_pages_fast(unsigned long int, int, unsigned int, page**)' at mm.h:1555:1 has some sub-type changes: CRC value (modversions) changed from 0xefa408a4 to 0xcd1bcfea [C] 'function long int get_user_pages_remote(task_struct*, mm_struct*, unsigned long int, unsigned long int, unsigned int, page**, vm_area_struct**, int*)' at mm.h:1543:1 has some sub-type changes: CRC value (modversions) changed from 0x249b7680 to 0x12d61d24 [C] 'function net_device* gether_connect(gether*)' at u_ether.h:250:1 has some sub-type changes: CRC value (modversions) changed from 0x52dc6598 to 0x54a47e2e [C] 'function void gether_disconnect(gether*)' at u_ether.h:251:1 has some sub-type changes: CRC value (modversions) changed from 0xaedbb4fb to 0xcfddff5a [C] 'function int gether_get_dev_addr(net_device*, char*, int)' at u_ether.h:172:1 has some sub-type changes: CRC value (modversions) changed from 0xdefd652b to 0x4dfc481 [C] 'function int gether_get_host_addr(net_device*, char*, int)' at u_ether.h:194:1 has some sub-type changes: CRC value (modversions) changed from 0xd71df634 to 0xb53d3c50 [C] 'function int gether_get_host_addr_cdc(net_device*, char*, int)' at u_ether.h:206:1 has some sub-type changes: CRC value (modversions) changed from 0x6c344722 to 0xb8f6e345 [C] 'function int gether_get_ifname(net_device*, char*, int)' at u_ether.h:245:1 has some sub-type changes: CRC value (modversions) changed from 0x5294d7bb to 0xd2a4d609 [C] 'function unsigned int gether_get_qmult(net_device*)' at u_ether.h:234:1 has some sub-type changes: CRC value (modversions) changed from 0x303c5d64 to 0x44e06650 [C] 'function int gether_register_netdev(net_device*)' at u_ether.h:127:1 has some sub-type changes: CRC value (modversions) changed from 0xad52b783 to 0xbcf93e1 [C] 'function int gether_set_dev_addr(net_device*, const char*)' at u_ether.h:161:1 has some sub-type changes: CRC value (modversions) changed from 0x4afe34db to 0x569c7d1a [C] 'function void gether_set_gadget(net_device*, usb_gadget*)' at u_ether.h:150:1 has some sub-type changes: CRC value (modversions) changed from 0xcfaea59a to 0x48aff282 [C] 'function int gether_set_host_addr(net_device*, const char*)' at u_ether.h:183:1 has some sub-type changes: CRC value (modversions) changed from 0x68604eb2 to 0xd0e67cee [C] 'function void gether_set_qmult(net_device*, unsigned int)' at u_ether.h:226:1 has some sub-type changes: CRC value (modversions) changed from 0x7beb2c1c to 0xbbbe3e14 [C] 'function net_device* gether_setup_name_default(const char*)' at u_ether.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0xa8230111 to 0xe2162694 [C] 'function gnss_device* gnss_allocate_device(device*)' at core.c:224:1 has some sub-type changes: CRC value (modversions) changed from 0xf62dc483 to 0x59c21967 [C] 'function void gnss_deregister_device(gnss_device*)' at core.c:301:1 has some sub-type changes: CRC value (modversions) changed from 0xb2569aba to 0xaed1439c [C] 'function int gnss_insert_raw(gnss_device*, const unsigned char*, size_t)' at core.c:320:1 has some sub-type changes: CRC value (modversions) changed from 0xf833488 to 0x7facd88a [C] 'function void gnss_put_device(gnss_device*)' at core.c:277:1 has some sub-type changes: CRC value (modversions) changed from 0x6dfdbe13 to 0x76b88f59 [C] 'function int gnss_register_device(gnss_device*)' at core.c:283:1 has some sub-type changes: CRC value (modversions) changed from 0x36c97b39 to 0x4e7d95c1 [C] 'function gpio_desc* gpio_to_desc(unsigned int)' at consumer.h:170:1 has some sub-type changes: CRC value (modversions) changed from 0xdbf9b981 to 0x665b6edf [C] 'function int gpiochip_add_data_with_key(gpio_chip*, void*, lock_class_key*, lock_class_key*)' at driver.h:458:1 has some sub-type changes: CRC value (modversions) changed from 0x7ddca3bc to 0x1198903e [C] 'function int gpiochip_add_pin_range(gpio_chip*, const char*, unsigned int, unsigned int, unsigned int)' at driver.h:678:1 has some sub-type changes: CRC value (modversions) changed from 0x460ca943 to 0x2a8b236a [C] 'function gpio_chip* gpiochip_find(void*, int (gpio_chip*, void*)*)' at gpiolib.c:1600:1 has some sub-type changes: CRC value (modversions) changed from 0xc8b6d931 to 0x16a48390 [C] 'function void gpiochip_generic_free(gpio_chip*, unsigned int)' at gpiolib.c:2513:1 has some sub-type changes: CRC value (modversions) changed from 0xcf211b7b to 0x2b2582dc [C] 'function int gpiochip_generic_request(gpio_chip*, unsigned int)' at gpiolib.c:2502:1 has some sub-type changes: CRC value (modversions) changed from 0xc2256512 to 0xd3584372 [C] 'function void* gpiochip_get_data(gpio_chip*)' at driver.h:522:1 has some sub-type changes: CRC value (modversions) changed from 0x27829ccf to 0xb462c01 [C] 'function bool gpiochip_line_is_irq(gpio_chip*, unsigned int)' at driver.h:507:1 has some sub-type changes: CRC value (modversions) changed from 0xb832749b to 0x55fc7358 [C] 'function bool gpiochip_line_is_valid(const gpio_chip*, unsigned int)' at gpiolib.c:401:1 has some sub-type changes: CRC value (modversions) changed from 0x5cb19d6 to 0x682bc70e [C] 'function int gpiochip_lock_as_irq(gpio_chip*, unsigned int)' at gpiolib.c:3875:1 has some sub-type changes: CRC value (modversions) changed from 0x7368701a to 0x31f33d98 [C] 'function void gpiochip_populate_parent_fwspec_fourcell(gpio_chip*, irq_fwspec*, unsigned int, unsigned int)' at gpiolib.c:2008:1 has some sub-type changes: CRC value (modversions) changed from 0xb3ba69d2 to 0x957de0a0 [C] 'function void gpiochip_remove(gpio_chip*)' at driver.h:500:1 has some sub-type changes: CRC value (modversions) changed from 0xebe57678 to 0xe9ac3ae6 [C] 'function void gpiochip_set_chained_irqchip(gpio_chip*, irq_chip*, unsigned int, irq_flow_handler_t)' at gpiolib.c:1738:1 has some sub-type changes: CRC value (modversions) changed from 0x14bb0c80 to 0xa4de1d3d [C] 'function void gpiochip_unlock_as_irq(gpio_chip*, unsigned int)' at gpiolib.c:3929:1 has some sub-type changes: CRC value (modversions) changed from 0x16ac437c to 0x99a384d7 [C] 'function int gpiod_cansleep(const gpio_desc*)' at gpiolib.c:3804:1 has some sub-type changes: CRC value (modversions) changed from 0xee37c629 to 0x8e328dd0 [C] 'function int gpiod_direction_input(gpio_desc*)' at gpiolib.c:2958:1 has some sub-type changes: CRC value (modversions) changed from 0x70864e1b to 0x6218fa0 [C] 'function int gpiod_direction_output(gpio_desc*, int)' at gpiolib.c:3082:1 has some sub-type changes: CRC value (modversions) changed from 0xbacc4581 to 0x2a2b2fe1 [C] 'function int gpiod_direction_output_raw(gpio_desc*, int)' at consumer.h:113:1 has some sub-type changes: CRC value (modversions) changed from 0xef9bab to 0x9d13e101 [C] 'function int gpiod_get_direction(gpio_desc*)' at gpiolib.c:214:1 has some sub-type changes: CRC value (modversions) changed from 0x1a8ffccd to 0xe02d1d2a [C] 'function gpio_desc* gpiod_get_optional(device*, const char*, gpiod_flags)' at consumer.h:71:1 has some sub-type changes: CRC value (modversions) changed from 0xf1d4e72f to 0xf1ee83a7 [C] 'function int gpiod_get_raw_value(const gpio_desc*)' at gpiolib.c:3410:1 has some sub-type changes: CRC value (modversions) changed from 0x7ac801ca to 0xb4b7612a [C] 'function int gpiod_get_raw_value_cansleep(const gpio_desc*)' at gpiolib.c:4042:1 has some sub-type changes: CRC value (modversions) changed from 0x4041a1ef to 0x74a27cce [C] 'function int gpiod_get_value(const gpio_desc*)' at gpiolib.c:3429:1 has some sub-type changes: CRC value (modversions) changed from 0x5f6198fe to 0xffb99610 [C] 'function int gpiod_get_value_cansleep(const gpio_desc*)' at consumer.h:138:1 has some sub-type changes: CRC value (modversions) changed from 0x86019dd3 to 0xfb3aa23 [C] 'function int gpiod_is_active_low(const gpio_desc*)' at consumer.h:163:1 has some sub-type changes: CRC value (modversions) changed from 0xe8ad4557 to 0xe92884ef [C] 'function int gpiod_set_consumer_name(gpio_desc*, const char*)' at gpiolib.c:3816:1 has some sub-type changes: CRC value (modversions) changed from 0x62d2d49b to 0x76a741d4 [C] 'function int gpiod_set_debounce(gpio_desc*, unsigned int)' at consumer.h:159:1 has some sub-type changes: CRC value (modversions) changed from 0x7960d0ae to 0xe0a00316 [C] 'function void gpiod_set_raw_value(gpio_desc*, int)' at gpiolib.c:3698:1 has some sub-type changes: CRC value (modversions) changed from 0xbe3343df to 0xe29a4be5 [C] 'function void gpiod_set_raw_value_cansleep(gpio_desc*, int)' at gpiolib.c:4139:1 has some sub-type changes: CRC value (modversions) changed from 0x8a668748 to 0x1931b6dd [C] 'function void gpiod_set_value(gpio_desc*, int)' at gpiolib.c:3739:1 has some sub-type changes: CRC value (modversions) changed from 0x1fa4f054 to 0x8188aab3 [C] 'function void gpiod_set_value_cansleep(gpio_desc*, int)' at consumer.h:143:1 has some sub-type changes: CRC value (modversions) changed from 0xce304267 to 0x29225bcd [C] 'function gpio_chip* gpiod_to_chip(const gpio_desc*)' at driver.h:726:1 has some sub-type changes: CRC value (modversions) changed from 0x35c7ae0 to 0xb02034ea [C] 'function int gpiod_to_irq(const gpio_desc*)' at consumer.h:166:1 has some sub-type changes: CRC value (modversions) changed from 0xd6657f76 to 0x8728924a [C] 'function int gre_add_protocol(const gre_protocol*, unsigned char)' at gre.h:32:1 has some sub-type changes: CRC value (modversions) changed from 0xcea07e3e to 0x8fbafac6 [C] 'function int gre_del_protocol(const gre_protocol*, unsigned char)' at gre.h:33:1 has some sub-type changes: CRC value (modversions) changed from 0x614854ed to 0x4b2126b4 [C] 'function int gro_cells_init(gro_cells*, net_device*)' at gro_cells.h:16:1 has some sub-type changes: CRC value (modversions) changed from 0x8424ab44 to 0x57385561 [C] 'function int gro_cells_receive(gro_cells*, sk_buff*)' at gro_cells.c:12:1 has some sub-type changes: CRC value (modversions) changed from 0xb87449e2 to 0x5308e6af [C] 'function int gserial_connect(gserial*, unsigned char)' at u_serial.h:61:1 has some sub-type changes: CRC value (modversions) changed from 0xb9376c60 to 0xb5fbf549 [C] 'function void gserial_disconnect(gserial*)' at u_serial.h:62:1 has some sub-type changes: CRC value (modversions) changed from 0xb518d58f to 0x8c97d8af [C] 'function void handle_bad_irq(irq_desc*)' at handle.c:31:1 has some sub-type changes: CRC value (modversions) changed from 0xe739a72f to 0x8b2790be [C] 'function void handle_edge_irq(irq_desc*)' at chip.c:801:1 has some sub-type changes: CRC value (modversions) changed from 0xa3b8d7bb to 0x5045b74c [C] 'function void handle_fasteoi_irq(irq_desc*)' at chip.c:714:1 has some sub-type changes: CRC value (modversions) changed from 0xc9ae90fa to 0x6083a4ab [C] 'function void handle_level_irq(irq_desc*)' at chip.c:645:1 has some sub-type changes: CRC value (modversions) changed from 0x325e3f6d to 0xbc1befc9 [C] 'function void handle_simple_irq(irq_desc*)' at chip.c:553:1 has some sub-type changes: CRC value (modversions) changed from 0x8e163b25 to 0x1687da0a [C] 'function hvc_struct* hvc_alloc(uint32_t, int, const hv_ops*, int)' at hvc_console.c:911:1 has some sub-type changes: CRC value (modversions) changed from 0xfd2f9583 to 0xdde8fc57 [C] 'function int hvc_instantiate(uint32_t, int, const hv_ops*)' at hvc_console.c:285:1 has some sub-type changes: CRC value (modversions) changed from 0x708ce910 to 0x5b73c31f [C] 'function int hvc_poll(hvc_struct*)' at hvc_console.c:762:1 has some sub-type changes: CRC value (modversions) changed from 0xfe922a27 to 0x3b8a78f6 [C] 'function int hvc_remove(hvc_struct*)' at hvc_console.c:979:1 has some sub-type changes: CRC value (modversions) changed from 0x4b03d910 to 0x3e9c631c [C] 'function int hwspin_lock_free(hwspinlock*)' at hwspinlock.h:63:1 has some sub-type changes: CRC value (modversions) changed from 0xf356b75c to 0x8af407e2 [C] 'function int hwspin_lock_register(hwspinlock_device*, device*, const hwspinlock_ops*, int, int)' at hwspinlock_core.c:486:1 has some sub-type changes: CRC value (modversions) changed from 0xe865d1f3 to 0xa9947b0b [C] 'function hwspinlock* hwspin_lock_request_specific(unsigned int)' at hwspinlock.h:62:1 has some sub-type changes: CRC value (modversions) changed from 0xe70245fa to 0xa466ba99 [C] 'function int hwspin_lock_unregister(hwspinlock_device*)' at hwspinlock_core.c:534:1 has some sub-type changes: CRC value (modversions) changed from 0x968b37e to 0xed521eb9 [C] 'function int i2c_add_adapter(i2c_adapter*)' at i2c.h:836:1 has some sub-type changes: CRC value (modversions) changed from 0xa6ae7fd to 0xe0a338b3 [C] 'function void i2c_del_adapter(i2c_adapter*)' at i2c.h:837:1 has some sub-type changes: CRC value (modversions) changed from 0x241b0351 to 0x3898f827 [C] 'function void i2c_del_driver(i2c_driver*)' at i2c.h:841:1 has some sub-type changes: CRC value (modversions) changed from 0x47ae2894 to 0x878ca819 [C] 'function int i2c_for_each_dev(void*, int (device*, void*)*)' at i2c-core-base.c:1681:1 has some sub-type changes: CRC value (modversions) changed from 0x49892d0c to 0x68c1e236 [C] 'function i2c_client* i2c_new_ancillary_device(i2c_client*, const char*, u16)' at i2c-core-base.c:1005:1 has some sub-type changes: CRC value (modversions) changed from 0x43770fd8 to 0x9b0ca1fe [C] 'function i2c_client* i2c_new_dummy(i2c_adapter*, u16)' at i2c-core-base.c:930:1 has some sub-type changes: CRC value (modversions) changed from 0xbdc57338 to 0xc38ef856 [C] 'function i2c_client* i2c_new_dummy_device(i2c_adapter*, u16)' at i2c-core-base.c:906:1 has some sub-type changes: CRC value (modversions) changed from 0xdff201ee to 0xd4cf6cba [C] 'function i2c_client* i2c_new_probed_device(i2c_adapter*, i2c_board_info*, const unsigned short int*, int (i2c_adapter*, unsigned short int)*)' at i2c-core-base.c:2291:1 has some sub-type changes: CRC value (modversions) changed from 0x5395f8a9 to 0xd1b8904c [C] 'function void i2c_parse_fw_timings(device*, i2c_timings*, bool)' at i2c-core-base.c:1641:1 has some sub-type changes: CRC value (modversions) changed from 0xb3c6f62f to 0x5c2e7ca2 [C] 'function int i2c_register_driver(module*, i2c_driver*)' at i2c.h:840:1 has some sub-type changes: CRC value (modversions) changed from 0x4fcb0b38 to 0xc110b59b [C] 'function int i2c_smbus_read_byte_data(const i2c_client*, unsigned char)' at i2c.h:143:1 has some sub-type changes: CRC value (modversions) changed from 0x66743e47 to 0x6f3a2c4d [C] 'function int i2c_smbus_read_i2c_block_data(const i2c_client*, unsigned char, unsigned char, unsigned char*)' at i2c.h:173:1 has some sub-type changes: CRC value (modversions) changed from 0x6c1e5cac to 0x6200168e [C] 'function int i2c_smbus_read_word_data(const i2c_client*, unsigned char)' at i2c.h:147:1 has some sub-type changes: CRC value (modversions) changed from 0x596b8efe to 0x1039ad23 [C] 'function s32 i2c_smbus_write_byte(const i2c_client*, u8)' at i2c-core-smbus.c:113:1 has some sub-type changes: CRC value (modversions) changed from 0x8e65d042 to 0xa9e8c9aa [C] 'function int i2c_smbus_write_byte_data(const i2c_client*, unsigned char, unsigned char)' at i2c.h:145:1 has some sub-type changes: CRC value (modversions) changed from 0x6ca50618 to 0xdc486f39 [C] 'function int i2c_smbus_write_i2c_block_data(const i2c_client*, unsigned char, unsigned char, const unsigned char*)' at i2c.h:175:1 has some sub-type changes: CRC value (modversions) changed from 0x1320e9a7 to 0xad4112d [C] 'function int i2c_smbus_write_word_data(const i2c_client*, unsigned char, unsigned short int)' at i2c.h:149:1 has some sub-type changes: CRC value (modversions) changed from 0x5652b72c to 0xe3a4925d [C] 'function int i2c_transfer(i2c_adapter*, i2c_msg*, int)' at i2c.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0xd3e6372 to 0xf88359d6 [C] 'function int i2c_transfer_buffer_flags(const i2c_client*, char*, int, unsigned short int)' at i2c.h:53:1 has some sub-type changes: CRC value (modversions) changed from 0x9a42b47f to 0x27bc7b8e [C] 'function void i2c_unregister_device(i2c_client*)' at i2c.h:480:1 has some sub-type changes: CRC value (modversions) changed from 0x18e0091c to 0x5c21bb6d [C] 'function i2c_client* i2c_verify_client(device*)' at i2c-core-base.c:528:1 has some sub-type changes: CRC value (modversions) changed from 0xcefd366a to 0xe778593a [C] 'function icc_path* icc_get(device*, const int, const int)' at core.c:488:1 has some sub-type changes: CRC value (modversions) changed from 0xa13c7a0b to 0x53edfde7 [C] 'function int icc_link_create(icc_node*, const int)' at core.c:634:1 has some sub-type changes: CRC value (modversions) changed from 0x3bfa9176 to 0xc40cbfe2 [C] 'function void icc_node_add(icc_node*, icc_provider*)' at core.c:722:1 has some sub-type changes: CRC value (modversions) changed from 0x7d53bd97 to 0x9f8c1c5e [C] 'function icc_node* icc_node_create(int)' at core.c:585:1 has some sub-type changes: CRC value (modversions) changed from 0x1d12723 to 0x6282fdfb [C] 'function void icc_node_del(icc_node*)' at core.c:737:1 has some sub-type changes: CRC value (modversions) changed from 0x93928de9 to 0x19a210c5 [C] 'function int icc_provider_add(icc_provider*)' at core.c:753:1 has some sub-type changes: CRC value (modversions) changed from 0x8ea0f547 to 0x34ae04e4 [C] 'function int icc_provider_del(icc_provider*)' at core.c:779:1 has some sub-type changes: CRC value (modversions) changed from 0x8f103927 to 0x770d03b [C] 'function void icc_put(icc_path*)' at core.c:527:1 has some sub-type changes: CRC value (modversions) changed from 0xee10c270 to 0xa84542a5 [C] 'function int icc_set_bw(icc_path*, u32, u32)' at core.c:422:1 has some sub-type changes: CRC value (modversions) changed from 0x47014688 to 0xea2c8d42 [C] 'function void icc_set_tag(icc_path*, u32)' at core.c:391:1 has some sub-type changes: CRC value (modversions) changed from 0x283a9ee9 to 0xa3c1af0a [C] 'function void icmpv6_send(sk_buff*, unsigned char, unsigned char, unsigned int)' at icmpv6.h:16:1 has some sub-type changes: CRC value (modversions) changed from 0x5ebfcd08 to 0xbe36a2a5 [C] 'function ieee80211_hw* ieee80211_alloc_hw_nm(size_t, const ieee80211_ops*, const char*)' at main.c:507:1 has some sub-type changes: CRC value (modversions) changed from 0xcb188be1 to 0xe2b1e2d3 [C] 'function void ieee80211_amsdu_to_8023s(sk_buff*, sk_buff_head*, const u8*, nl80211_iftype, const unsigned int, const u8*, const u8*)' at util.c:666:1 has some sub-type changes: CRC value (modversions) changed from 0xdaac4afa to 0xe02e1d11 [C] 'function sk_buff* ieee80211_ap_probereq_get(ieee80211_hw*, ieee80211_vif*)' at mlme.c:2613:1 has some sub-type changes: CRC value (modversions) changed from 0x47747b2d to 0x6e529451 [C] 'function sk_buff* ieee80211_beacon_get_tim(ieee80211_hw*, ieee80211_vif*, u16*, u16*)' at tx.c:4653:1 has some sub-type changes: CRC value (modversions) changed from 0x7472c1ff to 0xf8e213cb [C] 'function int ieee80211_data_to_8023_exthdr(sk_buff*, ethhdr*, const u8*, nl80211_iftype, u8)' at util.c:463:1 has some sub-type changes: CRC value (modversions) changed from 0x8d219e3c to 0x3bb206ef [C] 'function void ieee80211_free_hw(ieee80211_hw*)' at main.c:1367:1 has some sub-type changes: CRC value (modversions) changed from 0x16e29ee2 to 0x73a5b886 [C] 'function void ieee80211_free_txskb(ieee80211_hw*, sk_buff*)' at status.c:1188:1 has some sub-type changes: CRC value (modversions) changed from 0xbcbb7b05 to 0x6c074d8d [C] 'function ieee80211_channel* ieee80211_get_channel_khz(wiphy*, u32)' at util.c:136:1 has some sub-type changes: CRC value (modversions) changed from 0x38e33e78 to 0xcf856e5f [C] 'function unsigned int ieee80211_get_hdrlen_from_skb(const sk_buff*)' at util.c:427:1 has some sub-type changes: CRC value (modversions) changed from 0x6eaa72be to 0x27eee792 [C] 'function void ieee80211_get_tx_rates(ieee80211_vif*, ieee80211_sta*, sk_buff*, ieee80211_tx_rate*, int)' at rate.c:840:1 has some sub-type changes: CRC value (modversions) changed from 0x4a04a356 to 0xaf8455c3 [C] 'function void ieee80211_iterate_active_interfaces_atomic(ieee80211_hw*, u32, void (void*, u8*, ieee80211_vif*)*, void*)' at util.c:765:1 has some sub-type changes: CRC value (modversions) changed from 0x1c524ff4 to 0x57de407a [C] 'function void ieee80211_iterate_interfaces(ieee80211_hw*, u32, void (void*, u8*, ieee80211_vif*)*, void*)' at util.c:751:1 has some sub-type changes: CRC value (modversions) changed from 0x96cd2206 to 0xd688c607 [C] 'function sk_buff* ieee80211_nullfunc_get(ieee80211_hw*, ieee80211_vif*, bool)' at tx.c:4764:1 has some sub-type changes: CRC value (modversions) changed from 0xc35032a to 0xe0e90db [C] 'function sk_buff* ieee80211_probereq_get(ieee80211_hw*, const u8*, const u8*, size_t, size_t)' at tx.c:4823:1 has some sub-type changes: CRC value (modversions) changed from 0x454d0f37 to 0xed2034d9 [C] 'function sk_buff* ieee80211_proberesp_get(ieee80211_hw*, ieee80211_vif*)' at tx.c:4693:1 has some sub-type changes: CRC value (modversions) changed from 0x94f51f48 to 0xbd7b1691 [C] 'function sk_buff* ieee80211_pspoll_get(ieee80211_hw*, ieee80211_vif*)' at tx.c:4727:1 has some sub-type changes: CRC value (modversions) changed from 0x4a77d5b9 to 0xd9f4f414 [C] 'function void ieee80211_queue_delayed_work(ieee80211_hw*, delayed_work*, unsigned long int)' at mac80211.h:5358:1 has some sub-type changes: CRC value (modversions) changed from 0x43bff709 to 0x49f965c9 [C] 'function void ieee80211_queue_work(ieee80211_hw*, work_struct*)' at mac80211.h:5346:1 has some sub-type changes: CRC value (modversions) changed from 0xa6c86069 to 0x73855b31 [C] 'function void ieee80211_radar_detected(ieee80211_hw*)' at util.c:3439:1 has some sub-type changes: CRC value (modversions) changed from 0xddf9e611 to 0xacaaa51 [C] 'function void ieee80211_ready_on_channel(ieee80211_hw*)' at offchannel.c:298:1 has some sub-type changes: CRC value (modversions) changed from 0xc8b790a0 to 0xaddbad72 [C] 'function int ieee80211_register_hw(ieee80211_hw*)' at main.c:862:1 has some sub-type changes: CRC value (modversions) changed from 0x72c5b052 to 0x255e7d4a [C] 'function void ieee80211_remain_on_channel_expired(ieee80211_hw*)' at offchannel.c:497:1 has some sub-type changes: CRC value (modversions) changed from 0x13e43e0f to 0x607e5cb4 [C] 'function void ieee80211_restart_hw(ieee80211_hw*)' at main.c:292:1 has some sub-type changes: CRC value (modversions) changed from 0xf000b3dd to 0x85db190f [C] 'function void ieee80211_rx_irqsafe(ieee80211_hw*, sk_buff*)' at rx.c:4672:1 has some sub-type changes: CRC value (modversions) changed from 0x5596db85 to 0x2ba9caf2 [C] 'function void ieee80211_rx_napi(ieee80211_hw*, ieee80211_sta*, sk_buff*, napi_struct*)' at mac80211.h:4313:1 has some sub-type changes: CRC value (modversions) changed from 0x28b61bfd to 0x9bf2e8e0 [C] 'function void ieee80211_scan_completed(ieee80211_hw*, cfg80211_scan_info*)' at scan.c:465:1 has some sub-type changes: CRC value (modversions) changed from 0x4c3706e4 to 0xa5483c5a [C] 'function void ieee80211_sched_scan_results(ieee80211_hw*)' at scan.c:1341:1 has some sub-type changes: CRC value (modversions) changed from 0xa0da8237 to 0x736da4cb [C] 'function void ieee80211_sched_scan_stopped(ieee80211_hw*)' at scan.c:1379:1 has some sub-type changes: CRC value (modversions) changed from 0xe5dc3194 to 0xc2172c94 [C] 'function void ieee80211_stop_queue(ieee80211_hw*, int)' at util.c:512:1 has some sub-type changes: CRC value (modversions) changed from 0xf7abd2fa to 0x93bc8532 [C] 'function void ieee80211_stop_queues(ieee80211_hw*)' at util.c:592:1 has some sub-type changes: CRC value (modversions) changed from 0x2246ccbb to 0x56bc28b5 [C] 'function void ieee80211_tx_status(ieee80211_hw*, sk_buff*)' at mac80211.h:4555:1 has some sub-type changes: CRC value (modversions) changed from 0x5a6be700 to 0x8f7e3b45 [C] 'function void ieee80211_tx_status_irqsafe(ieee80211_hw*, sk_buff*)' at status.c:21:1 has some sub-type changes: CRC value (modversions) changed from 0xe9bd46a4 to 0x473cb467 [C] 'function void ieee80211_unregister_hw(ieee80211_hw*)' at main.c:1311:1 has some sub-type changes: CRC value (modversions) changed from 0xf6834003 to 0xf0d4becc [C] 'function void ieee80211_wake_queue(ieee80211_hw*, int)' at util.c:445:1 has some sub-type changes: CRC value (modversions) changed from 0xf9e146f7 to 0xe98066e0 [C] 'function void ieee80211_wake_queues(ieee80211_hw*)' at util.c:634:1 has some sub-type changes: CRC value (modversions) changed from 0x917ddc63 to 0x3948643f [C] 'function inode* iget5_locked(super_block*, unsigned long int, int (inode*, void*)*, int (inode*, void*)*, void*)' at inode.c:1141:1 has some sub-type changes: CRC value (modversions) changed from 0x2d34f504 to 0xdc5b302 [C] 'function void ihold(inode*)' at fs.h:2405:1 has some sub-type changes: CRC value (modversions) changed from 0x275f3065 to 0xa32ad084 [C] 'function iio_poll_func* iio_alloc_pollfunc(typedef irqreturn_t (int, void*)*, typedef irqreturn_t (int, void*)*, int, iio_dev*, const char*, ...)' at industrialio-trigger.c:324:1 has some sub-type changes: CRC value (modversions) changed from 0x84c2cc77 to 0xea15ac0f [C] 'function void iio_buffer_init(iio_buffer*)' at industrialio-buffer.c:198:1 has some sub-type changes: CRC value (modversions) changed from 0x7fbdff5f to 0x616536a5 [C] 'function void iio_buffer_put(iio_buffer*)' at buffer_impl.h:155:1 has some sub-type changes: CRC value (modversions) changed from 0xdea6feb7 to 0xb73d87d1 [C] 'function iio_channel* iio_channel_get(device*, const char*)' at inkern.c:330:1 has some sub-type changes: CRC value (modversions) changed from 0x53cfef3b to 0x20e704f7 [C] 'function void iio_channel_release(iio_channel*)' at inkern.c:347:1 has some sub-type changes: CRC value (modversions) changed from 0xa1ed6ea4 to 0xb3f1b4b3 [C] 'function void iio_dealloc_pollfunc(iio_poll_func*)' at industrialio-trigger.c:353:1 has some sub-type changes: CRC value (modversions) changed from 0xafaaf81f to 0xba978339 [C] 'function iio_dev* iio_device_alloc(int)' at industrialio-core.c:1426:1 has some sub-type changes: CRC value (modversions) changed from 0x156eec6e to 0x422f2bdd [C] 'function void iio_device_attach_buffer(iio_dev*, iio_buffer*)' at industrialio-buffer.c:1471:1 has some sub-type changes: CRC value (modversions) changed from 0xd535e3fd to 0x2cb07f61 [C] 'function void iio_device_free(iio_dev*)' at industrialio-core.c:1470:1 has some sub-type changes: CRC value (modversions) changed from 0x30d47cf6 to 0x14e90ede [C] 'function void iio_device_unregister(iio_dev*)' at industrialio-core.c:1716:1 has some sub-type changes: CRC value (modversions) changed from 0x47ab2fab to 0x9e98a862 [C] 'function int iio_push_to_buffers(iio_dev*, void*)' at industrialio-buffer.c:1405:1 has some sub-type changes: CRC value (modversions) changed from 0xc09bb279 to 0x924e49a3 [C] 'function int iio_read_channel_processed(iio_channel*, int*)' at inkern.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0x29f0ccc1 to 0x64967092 [C] 'function int iio_read_channel_raw(iio_channel*, int*)' at inkern.c:552:1 has some sub-type changes: CRC value (modversions) changed from 0xb72def1f to 0x69e1d662 [C] 'function iio_trigger* iio_trigger_alloc(const char*, ...)' at industrialio-trigger.c:563:1 has some sub-type changes: CRC value (modversions) changed from 0x681bc39b to 0x744c1c3d [C] 'function void iio_trigger_free(iio_trigger*)' at industrialio-trigger.c:576:1 has some sub-type changes: CRC value (modversions) changed from 0x8b792447 to 0x2f1fa2a7 [C] 'function void iio_trigger_notify_done(iio_trigger*)' at industrialio-trigger.c:203:1 has some sub-type changes: CRC value (modversions) changed from 0x648a6dec to 0xb74d3ce0 [C] 'function void iio_trigger_poll(iio_trigger*)' at industrialio-trigger.c:162:1 has some sub-type changes: CRC value (modversions) changed from 0xad4e88c2 to 0x74cb782c [C] 'function void iio_trigger_unregister(iio_trigger*)' at industrialio-trigger.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0xc2531f44 to 0x67c5fcf3 [C] 'function int iio_triggered_buffer_postenable(iio_dev*)' at industrialio-trigger.c:762:1 has some sub-type changes: CRC value (modversions) changed from 0xec332639 to 0xb9db433 [C] 'function int iio_triggered_buffer_predisable(iio_dev*)' at industrialio-trigger.c:769:1 has some sub-type changes: CRC value (modversions) changed from 0xbf8178d7 to 0x25990c00 [C] 'function int iio_write_channel_attribute(iio_channel*, int, int, iio_chan_info_enum)' at inkern.c:862:1 has some sub-type changes: CRC value (modversions) changed from 0x70e10e9c to 0xa34dfe74 [C] 'function int iio_write_channel_raw(iio_channel*, int)' at inkern.c:881:1 has some sub-type changes: CRC value (modversions) changed from 0x2c8d3d43 to 0x43efdc62 [C] 'function inode* ilookup(super_block*, unsigned long int)' at inode.c:1387:1 has some sub-type changes: CRC value (modversions) changed from 0xf568d130 to 0x517655c8 [C] 'function long int import_iovec(int, const iovec*, unsigned int, unsigned int, iovec**, iov_iter*)' at uio.h:270:1 has some sub-type changes: CRC value (modversions) changed from 0x358544c0 to 0x16c3e712 [C] 'function void inc_nlink(inode*)' at fs.h:2247:1 has some sub-type changes: CRC value (modversions) changed from 0x6b84233c to 0x61d75b1b [C] 'function unsigned int inet_dev_addr_type(net*, const net_device*, __be32)' at fib_frontend.c:258:1 has some sub-type changes: CRC value (modversions) changed from 0xc4da5817 to 0xb1934713 [C] 'function int inet_diag_bc_sk(const nlattr*, sock*)' at inet_diag.h:56:1 has some sub-type changes: CRC value (modversions) changed from 0xde3f05f1 to 0x6c12e8c9 [C] 'function int inet_diag_register(const inet_diag_handler*)' at inet_diag.h:75:1 has some sub-type changes: CRC value (modversions) changed from 0xe9f3bf60 to 0x67d25c7b [C] 'function void inet_diag_unregister(const inet_diag_handler*)' at inet_diag.h:76:1 has some sub-type changes: CRC value (modversions) changed from 0x8cc6610 to 0xb761e7c9 [C] 'function void inet_proto_csum_replace4(unsigned short int*, sk_buff*, unsigned int, unsigned int, bool)' at checksum.h:143:1 has some sub-type changes: CRC value (modversions) changed from 0xb458e090 to 0xcc100dcb [C] 'function unsigned int inet_select_addr(const net_device*, unsigned int, int)' at inetdevice.h:183:1 has some sub-type changes: CRC value (modversions) changed from 0x147d50cb to 0x3a4ca814 [C] 'function int inet_sk_diag_fill(sock*, inet_connection_sock*, sk_buff*, const inet_diag_req_v2*, user_namespace*, unsigned int, unsigned int, unsigned short int, const nlmsghdr*, bool)' at inet_diag.h:39:1 has some sub-type changes: CRC value (modversions) changed from 0xbe8b9702 to 0x33322cc7 [C] 'function int init_dummy_netdev(net_device*)' at dev.c:9164:1 has some sub-type changes: CRC value (modversions) changed from 0xa10799bc to 0xc8671dae [C] 'function void inode_init_once(inode*)' at fs.h:3095:1 has some sub-type changes: CRC value (modversions) changed from 0x83cb0411 to 0x59af5955 [C] 'function void inode_init_owner(inode*, const inode*, unsigned short int)' at fs.h:1785:1 has some sub-type changes: CRC value (modversions) changed from 0xa6f904e6 to 0xc3c7119b [C] 'function void input_alloc_absinfo(input_dev*)' at input.h:466:1 has some sub-type changes: CRC value (modversions) changed from 0xc83ef57f to 0x2624ff37 [C] 'function input_dev* input_allocate_device()' at input.h:351:1 has some sub-type changes: CRC value (modversions) changed from 0x3ad3a200 to 0x5d4bb68 [C] 'function void input_close_device(input_handle*)' at input.h:404:1 has some sub-type changes: CRC value (modversions) changed from 0x1cc292a1 to 0x68c30cd8 [C] 'function void input_event(input_dev*, unsigned int, unsigned int, int)' at input.h:411:1 has some sub-type changes: CRC value (modversions) changed from 0x15363696 to 0x9370c917 [C] 'function int input_ff_create(input_dev*, unsigned int)' at input.h:555:1 has some sub-type changes: CRC value (modversions) changed from 0x5100ccdb to 0x6cf97dad [C] 'function int input_ff_create_memless(input_dev*, void*, int (input_dev*, void*, ff_effect*)*)' at input.h:564:1 has some sub-type changes: CRC value (modversions) changed from 0x91434bd3 to 0x8d849080 [C] 'function void input_ff_destroy(input_dev*)' at input.h:556:1 has some sub-type changes: CRC value (modversions) changed from 0x696b2d0 to 0x2f5fe358 [C] 'function void input_free_device(input_dev*)' at input.h:353:1 has some sub-type changes: CRC value (modversions) changed from 0xa229b610 to 0x5bcf37e7 [C] 'function void input_mt_destroy_slots(input_dev*)' at mt.h:78:1 has some sub-type changes: CRC value (modversions) changed from 0xa3f4edc7 to 0xd590ef6a [C] 'function int input_mt_get_slot_by_key(input_dev*, int)' at mt.h:122:1 has some sub-type changes: CRC value (modversions) changed from 0x53f381f6 to 0xf3795822 [C] 'function int input_mt_init_slots(input_dev*, unsigned int, unsigned int)' at mt.h:76:1 has some sub-type changes: CRC value (modversions) changed from 0xcf3ee1f to 0x48e36609 [C] 'function void input_mt_report_pointer_emulation(input_dev*, bool)' at mt.h:104:1 has some sub-type changes: CRC value (modversions) changed from 0x17a3c9d2 to 0x5df72b82 [C] 'function bool input_mt_report_slot_state(input_dev*, unsigned int, bool)' at mt.h:100:1 has some sub-type changes: CRC value (modversions) changed from 0x6c07f01b to 0x61d41dab [C] 'function void input_mt_sync_frame(input_dev*)' at mt.h:107:1 has some sub-type changes: CRC value (modversions) changed from 0x12c19548 to 0x14ab2c16 [C] 'function int input_open_device(input_handle*)' at input.h:403:1 has some sub-type changes: CRC value (modversions) changed from 0xdbf401e6 to 0xcbeaa270 [C] 'function int input_register_device(input_dev*)' at input.h:376:1 has some sub-type changes: CRC value (modversions) changed from 0xeac09f9e to 0x5dbbf67f [C] 'function int input_register_handle(input_handle*)' at input.h:397:1 has some sub-type changes: CRC value (modversions) changed from 0x6921852f to 0x263925ef [C] 'function int input_register_handler(input_handler*)' at input.h:387:1 has some sub-type changes: CRC value (modversions) changed from 0x822bc989 to 0x5459d7be [C] 'function void input_set_abs_params(input_dev*, unsigned int, int, int, int, int)' at input.h:467:1 has some sub-type changes: CRC value (modversions) changed from 0x802a9b15 to 0x866164eb [C] 'function void input_set_capability(input_dev*, unsigned int, unsigned int)' at input.h:449:1 has some sub-type changes: CRC value (modversions) changed from 0x9e3864ce to 0x3fb92adc [C] 'function void input_unregister_device(input_dev*)' at input.h:377:1 has some sub-type changes: CRC value (modversions) changed from 0xcf5ceb40 to 0xbe36fdbe [C] 'function void input_unregister_handle(input_handle*)' at input.h:398:1 has some sub-type changes: CRC value (modversions) changed from 0x5cdcfead to 0xc6a9ff2d [C] 'function void input_unregister_handler(input_handler*)' at input.h:388:1 has some sub-type changes: CRC value (modversions) changed from 0x4c49ae09 to 0xcb93b928 [C] 'function void invalidate_bdev(block_device*)' at fs.h:2650:1 has some sub-type changes: CRC value (modversions) changed from 0x8c37bbf7 to 0x7d43686c [C] 'function void invalidate_inode_buffers(inode*)' at buffer.c:762:1 has some sub-type changes: CRC value (modversions) changed from 0x225e09cb to 0x358b076f [C] 'function unsigned long int invalidate_mapping_pages(address_space*, unsigned long int, unsigned long int)' at fs.h:2793:1 has some sub-type changes: CRC value (modversions) changed from 0xd30f5fad to 0x332b58dd [C] 'function int iommu_attach_device(iommu_domain*, device*)' at iommu.c:1668:1 has some sub-type changes: CRC value (modversions) changed from 0xccb2b281 to 0xab71ac3 [C] 'function int iommu_attach_group(iommu_domain*, iommu_group*)' at iommu.c:1791:1 has some sub-type changes: CRC value (modversions) changed from 0x9ed6f1c3 to 0x5810c8d5 [C] 'function void iommu_detach_device(iommu_domain*, device*)' at iommu.c:1710:1 has some sub-type changes: CRC value (modversions) changed from 0x52618981 to 0xa351ee80 [C] 'function int iommu_device_link(iommu_device*, device*)' at iommu-sysfs.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0x5813bee1 to 0x3b20b1bd [C] 'function int iommu_device_register(iommu_device*)' at iommu.c:138:1 has some sub-type changes: CRC value (modversions) changed from 0x88bb8918 to 0xc8e48a3f [C] 'function int iommu_device_sysfs_add(iommu_device*, device*, const attribute_group**, const char*, ...)' at iommu-sysfs.c:54:1 has some sub-type changes: CRC value (modversions) changed from 0xc6621708 to 0xe640f330 [C] 'function void iommu_device_sysfs_remove(iommu_device*)' at iommu-sysfs.c:92:1 has some sub-type changes: CRC value (modversions) changed from 0x4234ee8e to 0x4074a222 [C] 'function void iommu_device_unlink(iommu_device*, device*)' at iommu-sysfs.c:127:1 has some sub-type changes: CRC value (modversions) changed from 0x2d8d7716 to 0xee79bcf3 [C] 'function void iommu_device_unregister(iommu_device*)' at iommu.c:147:1 has some sub-type changes: CRC value (modversions) changed from 0x329f31a4 to 0xb94614ad [C] 'function int iommu_dma_enable_best_fit_algo(device*)' at dma-iommu.c:386:1 has some sub-type changes: CRC value (modversions) changed from 0xba83040 to 0x823bd81 [C] 'function void iommu_dma_get_resv_regions(device*, list_head*)' at dma-iommu.c:160:1 has some sub-type changes: CRC value (modversions) changed from 0x6a60b90f to 0xf8909b6b [C] 'function int iommu_dma_reserve_iova(device*, dma_addr_t, u64)' at dma-iommu.c:358:1 has some sub-type changes: CRC value (modversions) changed from 0x646b343d to 0x90af8d1f [C] 'function iommu_domain* iommu_domain_alloc(bus_type*)' at iommu.c:1639:1 has some sub-type changes: CRC value (modversions) changed from 0x5439dd27 to 0x4a40ca2b [C] 'function void iommu_domain_free(iommu_domain*)' at iommu.c:1645:1 has some sub-type changes: CRC value (modversions) changed from 0x6baa00a7 to 0x34e55cd2 [C] 'function int iommu_domain_get_attr(iommu_domain*, iommu_attr, void*)' at iommu.c:2138:1 has some sub-type changes: CRC value (modversions) changed from 0x226ca1b0 to 0x3c8e0d7f [C] 'function int iommu_domain_set_attr(iommu_domain*, iommu_attr, void*)' at iommu.c:2166:1 has some sub-type changes: CRC value (modversions) changed from 0xf9d257c0 to 0x6c2880ad [C] 'function int iommu_fwspec_add_ids(device*, u32*, int)' at iommu.c:2352:1 has some sub-type changes: CRC value (modversions) changed from 0xbd2120e1 to 0x2b64d44e [C] 'function void iommu_fwspec_free(device*)' at iommu.c:2340:1 has some sub-type changes: CRC value (modversions) changed from 0x17206e4c to 0x7db2b993 [C] 'function int iommu_get_dma_cookie(iommu_domain*)' at dma-iommu.c:78:1 has some sub-type changes: CRC value (modversions) changed from 0xdf544623 to 0x854277a0 [C] 'function iommu_domain* iommu_get_domain_for_dev(device*)' at iommu.c:1732:1 has some sub-type changes: CRC value (modversions) changed from 0x647d02da to 0x3330f74b [C] 'function int iommu_group_for_each_dev(iommu_group*, void*, int (device*, void*)*)' at iommu.c:863:1 has some sub-type changes: CRC value (modversions) changed from 0x69689b34 to 0xc000461d [C] 'function iommu_group* iommu_group_get(device*)' at iommu.c:884:1 has some sub-type changes: CRC value (modversions) changed from 0x62c34f5b to 0x54cb4244 [C] 'function iommu_group* iommu_group_get_for_dev(device*)' at iommu.c:1374:1 has some sub-type changes: CRC value (modversions) changed from 0x9c34ff19 to 0xe4b4233b [C] 'function void iommu_group_remove_device(device*)' at iommu.c:790:1 has some sub-type changes: CRC value (modversions) changed from 0x5ba91f97 to 0xd17852d2 [C] 'function phys_addr_t iommu_iova_to_phys(iommu_domain*, dma_addr_t)' at iommu.c:1844:1 has some sub-type changes: CRC value (modversions) changed from 0x7e3aa805 to 0x5a783350 [C] 'function int iommu_map(iommu_domain*, unsigned long int, phys_addr_t, size_t, int)' at iommu.c:1885:1 has some sub-type changes: CRC value (modversions) changed from 0xe6b2d98e to 0xa6ecd839 [C] 'function size_t iommu_map_sg(iommu_domain*, unsigned long int, scatterlist*, unsigned int, int)' at iommu.c:2022:1 has some sub-type changes: CRC value (modversions) changed from 0x2013cf55 to 0x91c58214 [C] 'function bool iommu_present(bus_type*)' at iommu.c:1581:1 has some sub-type changes: CRC value (modversions) changed from 0x5fc82579 to 0x6b122e27 [C] 'function void iommu_put_dma_cookie(iommu_domain*)' at dma-iommu.c:130:1 has some sub-type changes: CRC value (modversions) changed from 0x18dd16f5 to 0x4ba54cb5 [C] 'function int iommu_register_device_fault_handler(device*, iommu_dev_fault_handler_t, void*)' at iommu.c:971:1 has some sub-type changes: CRC value (modversions) changed from 0x18261d6 to 0x63b99a53 [C] 'function int iommu_report_device_fault(device*, iommu_fault_event*)' at iommu.c:1056:1 has some sub-type changes: CRC value (modversions) changed from 0x8d243137 to 0x56106872 [C] 'function void iommu_set_fault_handler(iommu_domain*, iommu_fault_handler_t, void*)' at iommu.c:1608:1 has some sub-type changes: CRC value (modversions) changed from 0x33563643 to 0x55df1d32 [C] 'function size_t iommu_unmap(iommu_domain*, unsigned long int, size_t)' at iommu.c:2000:1 has some sub-type changes: CRC value (modversions) changed from 0xd60a5dbb to 0x3374b403 [C] 'function int iommu_unregister_device_fault_handler(device*)' at iommu.c:1016:1 has some sub-type changes: CRC value (modversions) changed from 0xa720e69c to 0xd4bb782e [C] 'function dma_buf* ion_alloc(size_t, unsigned int, unsigned int)' at ion.c:35:1 has some sub-type changes: CRC value (modversions) changed from 0x72bc1d96 to 0xbecda0b6 [C] 'function void ion_buffer_prep_noncached(ion_buffer*)' at ion.h:304:1 has some sub-type changes: CRC value (modversions) changed from 0xe3917fd9 to 0xc3194a32 [C] 'function int ion_buffer_zero(ion_buffer*)' at ion.h:291:1 has some sub-type changes: CRC value (modversions) changed from 0xeea01045 to 0x11e1b3b1 [C] 'function void ion_device_remove_heap(ion_heap*)' at ion.h:178:1 has some sub-type changes: CRC value (modversions) changed from 0xc33a3cd3 to 0xaa177f20 [C] 'function int ion_free(ion_buffer*)' at ion.c:42:1 has some sub-type changes: CRC value (modversions) changed from 0x492ce9ff to 0x3b8396af [C] 'function void* ion_heap_map_kernel(ion_heap*, ion_buffer*)' at ion.h:260:1 has some sub-type changes: CRC value (modversions) changed from 0x2478c64 to 0x1b7b0b78 [C] 'function int ion_heap_map_user(ion_heap*, ion_buffer*, vm_area_struct*)' at ion.h:282:1 has some sub-type changes: CRC value (modversions) changed from 0xed37f2a5 to 0xeb6a4a8b [C] 'function void ion_heap_unmap_kernel(ion_heap*, ion_buffer*)' at ion_heap.c:164:1 has some sub-type changes: CRC value (modversions) changed from 0xe112ae1e to 0xaee178ab [C] 'function void iov_iter_bvec(iov_iter*, unsigned int, const bio_vec*, unsigned long int, unsigned long int)' at uio.h:220:1 has some sub-type changes: CRC value (modversions) changed from 0xbb5afc76 to 0x9cbaa8 [C] 'function void iov_iter_init(iov_iter*, unsigned int, const iovec*, unsigned long int, unsigned long int)' at uio.h:216:1 has some sub-type changes: CRC value (modversions) changed from 0x331563ed to 0x4bd8558d [C] 'function int ip6_local_out(net*, sock*, sk_buff*)' at ipv6.h:1040:1 has some sub-type changes: CRC value (modversions) changed from 0x4b9cc4cd to 0x76c00ab5 [C] 'function void ip6_redirect(sk_buff*, net*, int, unsigned int, __anonymous_struct__)' at ip6_route.h:186:1 has some sub-type changes: CRC value (modversions) changed from 0x1a544438 to 0x284d7e0a [C] 'function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int)' at ip6_route.h:91:1 has some sub-type changes: CRC value (modversions) changed from 0x7e3cde05 to 0xbdfda1d0 [C] 'function void ip6_update_pmtu(sk_buff*, net*, unsigned int, int, unsigned int, __anonymous_struct__)' at ip6_route.h:183:1 has some sub-type changes: CRC value (modversions) changed from 0xefad7dbd to 0xcfdcaacd [C] 'function unsigned int ip6t_do_table(sk_buff*, const nf_hook_state*, xt_table*)' at ip6_tables.h:32:1 has some sub-type changes: CRC value (modversions) changed from 0x1c9677c6 to 0x62fb146c [C] 'function int ip6t_register_table(net*, const xt_table*, const ip6t_replace*, const nf_hook_ops*, xt_table**)' at ip6_tables.h:27:1 has some sub-type changes: CRC value (modversions) changed from 0x451470e6 to 0xc8d07310 [C] 'function void ip6t_unregister_table(net*, xt_table*, const nf_hook_ops*)' at ip6_tables.h:30:1 has some sub-type changes: CRC value (modversions) changed from 0xffdc3cdd to 0xe7ff1789 [C] 'function int ip_local_out(net*, sock*, sk_buff*)' at ip.h:205:1 has some sub-type changes: CRC value (modversions) changed from 0x9d70d80a to 0x37c76e58 [C] 'function rtable* ip_route_output_flow(net*, flowi4*, const sock*)' at route.h:129:1 has some sub-type changes: CRC value (modversions) changed from 0x59266652 to 0x99aea3b1 [C] 'function void ipcomp_destroy(xfrm_state*)' at xfrm_ipcomp.c:324:1 has some sub-type changes: CRC value (modversions) changed from 0x61239ea8 to 0x2ed17806 [C] 'function int ipcomp_init_state(xfrm_state*)' at ipcomp.h:23:1 has some sub-type changes: CRC value (modversions) changed from 0xdb261457 to 0x6b2c1e36 [C] 'function int ipcomp_input(xfrm_state*, sk_buff*)' at xfrm_ipcomp.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0x9ec8d8d7 to 0xfa325b89 [C] 'function int ipcomp_output(xfrm_state*, sk_buff*)' at xfrm_ipcomp.c:167:1 has some sub-type changes: CRC value (modversions) changed from 0x73400087 to 0x413d164e [C] 'function void iput(inode*)' at fs.h:2406:1 has some sub-type changes: CRC value (modversions) changed from 0xc6cc0998 to 0xf3982465 [C] 'function void ipv4_redirect(sk_buff*, net*, int, unsigned char)' at route.h:208:1 has some sub-type changes: CRC value (modversions) changed from 0xb9dcf073 to 0x2b9f117c [C] 'function void ipv4_update_pmtu(sk_buff*, net*, unsigned int, int, unsigned char)' at route.h:205:1 has some sub-type changes: CRC value (modversions) changed from 0xe32ce7b1 to 0x19f97c32 [C] 'function int ipv6_chk_addr(net*, const in6_addr*, const net_device*, int)' at addrconf.c:1890:1 has some sub-type changes: CRC value (modversions) changed from 0xabebf1ad to 0x1482551a [C] 'function int ipv6_dev_get_saddr(net*, const net_device*, const in6_addr*, unsigned int, in6_addr*)' at addrconf.h:103:1 has some sub-type changes: CRC value (modversions) changed from 0x1f22f3fe to 0xb3b99901 [C] 'function int ipv6_find_hdr(const sk_buff*, unsigned int*, int, unsigned short int*, int*)' at ipv6.h:1064:1 has some sub-type changes: CRC value (modversions) changed from 0xe03d08da to 0xa8376749 [C] 'function int ipv6_skip_exthdr(const sk_buff*, int, unsigned char*, unsigned short int*)' at ipv6.h:1052:1 has some sub-type changes: CRC value (modversions) changed from 0xad4568f2 to 0x6ac1da8d [C] 'function void irq_chip_ack_parent(irq_data*)' at chip.c:1393:1 has some sub-type changes: CRC value (modversions) changed from 0xdace9a91 to 0x37389d91 [C] 'function void irq_chip_disable_parent(irq_data*)' at chip.c:1379:1 has some sub-type changes: CRC value (modversions) changed from 0xb823628e to 0x4a8faa8d [C] 'function void irq_chip_enable_parent(irq_data*)' at chip.c:1364:1 has some sub-type changes: CRC value (modversions) changed from 0x71b97e43 to 0x1fa7e216 [C] 'function void irq_chip_eoi_parent(irq_data*)' at chip.c:1437:1 has some sub-type changes: CRC value (modversions) changed from 0x74da0203 to 0xf529e685 [C] 'function int irq_chip_get_parent_state(irq_data*, irqchip_irq_state, bool*)' at chip.c:1346:1 has some sub-type changes: CRC value (modversions) changed from 0x49a7c335 to 0x29a57f3f [C] 'function void irq_chip_mask_parent(irq_data*)' at irq.h:641:1 has some sub-type changes: CRC value (modversions) changed from 0x9ad0aca8 to 0x5ae9b917 [C] 'function int irq_chip_retrigger_hierarchy(irq_data*)' at chip.c:1488:1 has some sub-type changes: CRC value (modversions) changed from 0xc683778d to 0x4695860c [C] 'function int irq_chip_set_affinity_parent(irq_data*, const cpumask*, bool)' at chip.c:1452:1 has some sub-type changes: CRC value (modversions) changed from 0xf66dcffe to 0xf7dfa426 [C] 'function int irq_chip_set_parent_state(irq_data*, irqchip_irq_state, bool)' at chip.c:1324:1 has some sub-type changes: CRC value (modversions) changed from 0xf8d1f3d6 to 0x3fa91adf [C] 'function int irq_chip_set_type_parent(irq_data*, unsigned int)' at chip.c:1470:1 has some sub-type changes: CRC value (modversions) changed from 0xcda9fad1 to 0x3bf9c15 [C] 'function int irq_chip_set_vcpu_affinity_parent(irq_data*, void*)' at chip.c:1503:1 has some sub-type changes: CRC value (modversions) changed from 0x8c4fc9fd to 0xb68b7887 [C] 'function int irq_chip_set_wake_parent(irq_data*, unsigned int)' at chip.c:1519:1 has some sub-type changes: CRC value (modversions) changed from 0x26e76d40 to 0x6e7894e8 [C] 'function void irq_chip_unmask_parent(irq_data*)' at irq.h:643:1 has some sub-type changes: CRC value (modversions) changed from 0x48592b02 to 0x4356218 [C] 'function unsigned int irq_create_fwspec_mapping(irq_fwspec*)' at irqdomain.h:394:1 has some sub-type changes: CRC value (modversions) changed from 0x2226340d to 0x33c3175f [C] 'function unsigned int irq_create_mapping(irq_domain*, irq_hw_number_t)' at irqdomain.c:651:1 has some sub-type changes: CRC value (modversions) changed from 0x576bfdf4 to 0x1c6d58f9 [C] 'function unsigned int irq_create_of_mapping(of_phandle_args*)' at irqdomain.c:853:1 has some sub-type changes: CRC value (modversions) changed from 0x70d1a850 to 0x3e080ed1 [C] 'function irq_domain* irq_domain_add_simple(device_node*, unsigned int, unsigned int, const irq_domain_ops*, void*)' at irqdomain.h:268:1 has some sub-type changes: CRC value (modversions) changed from 0x280003f3 to 0x9ac7f450 [C] 'function int irq_domain_alloc_irqs_parent(irq_domain*, unsigned int, unsigned int, void*)' at irqdomain.c:1579:1 has some sub-type changes: CRC value (modversions) changed from 0xe562c072 to 0x9e981471 [C] 'function irq_domain* irq_domain_create_hierarchy(irq_domain*, unsigned int, unsigned int, fwnode_handle*, const irq_domain_ops*, void*)' at irqdomain.c:1050:1 has some sub-type changes: CRC value (modversions) changed from 0x68a763c4 to 0xd7fba845 [C] 'function void irq_domain_free_irqs_common(irq_domain*, unsigned int, unsigned int)' at irqdomain.c:1252:1 has some sub-type changes: CRC value (modversions) changed from 0xce18183 to 0x26823707 [C] 'function void irq_domain_free_irqs_parent(irq_domain*, unsigned int, unsigned int)' at irqdomain.c:1599:1 has some sub-type changes: CRC value (modversions) changed from 0x7259b80e to 0x4e017faa [C] 'function irq_data* irq_domain_get_irq_data(irq_domain*, unsigned int)' at irqdomain.h:448:1 has some sub-type changes: CRC value (modversions) changed from 0x1e8b9e5b to 0x65615748 [C] 'function void irq_domain_remove(irq_domain*)' at irqdomain.h:382:1 has some sub-type changes: CRC value (modversions) changed from 0x310720e2 to 0x3bcd667a [C] 'function int irq_domain_set_hwirq_and_chip(irq_domain*, unsigned int, unsigned long int, irq_chip*, void*)' at irqdomain.h:490:1 has some sub-type changes: CRC value (modversions) changed from 0x267fa3ef to 0xbf4995dc [C] 'function void irq_domain_set_info(irq_domain*, unsigned int, unsigned long int, irq_chip*, void*, void (irq_desc*)*, void*, const char*)' at irqdomain.h:450:1 has some sub-type changes: CRC value (modversions) changed from 0x75f21ef1 to 0x3d4f59a3 [C] 'function void irq_domain_update_bus_token(irq_domain*, irq_domain_bus_token)' at irqdomain.h:300:1 has some sub-type changes: CRC value (modversions) changed from 0xe01d56c7 to 0xc20ef171 [C] 'function int irq_domain_xlate_onecell(irq_domain*, device_node*, const u32*, unsigned int, unsigned long int*, unsigned int*)' at irqdomain.c:928:1 has some sub-type changes: CRC value (modversions) changed from 0x89d4ef1a to 0x84c9a80f [C] 'function int irq_domain_xlate_onetwocell(irq_domain*, device_node*, const u32*, unsigned int, unsigned long int*, unsigned int*)' at irqdomain.c:969:1 has some sub-type changes: CRC value (modversions) changed from 0x97d59db1 to 0x9bc713df [C] 'function int irq_domain_xlate_twocell(irq_domain*, device_node*, const u32*, unsigned int, irq_hw_number_t*, unsigned int*)' at irqdomain.c:947:1 has some sub-type changes: CRC value (modversions) changed from 0x99aadcea to 0xe6bedad8 [C] 'function unsigned int irq_find_mapping(irq_domain*, unsigned long int)' at irqdomain.h:412:1 has some sub-type changes: CRC value (modversions) changed from 0x26104555 to 0x1ee38271 [C] 'function irq_domain* irq_find_matching_fwspec(irq_fwspec*, irq_domain_bus_token)' at irqdomain.h:279:1 has some sub-type changes: CRC value (modversions) changed from 0x12047ebf to 0xe6faade0 [C] 'function irq_data* irq_get_irq_data(unsigned int)' at irq.h:771:1 has some sub-type changes: CRC value (modversions) changed from 0x7aa2a316 to 0x587104c4 [C] 'function unsigned int irq_of_parse_and_map(device_node*, int)' at of_irq.h:108:1 has some sub-type changes: CRC value (modversions) changed from 0x60f8e7da to 0x5294801 [C] 'function void irq_set_chained_handler_and_data(unsigned int, void (irq_desc*)*, void*)' at irq.h:713:1 has some sub-type changes: CRC value (modversions) changed from 0x7381e7bc to 0x142d7395 [C] 'function int irq_set_chip(unsigned int, irq_chip*)' at chip.c:42:1 has some sub-type changes: CRC value (modversions) changed from 0x194cb235 to 0x5064e3fd [C] 'function void irq_set_chip_and_handler_name(unsigned int, irq_chip*, void (irq_desc*)*, const char*)' at irq.h:671:1 has some sub-type changes: CRC value (modversions) changed from 0xf2751d7b to 0x6c425963 [C] 'function irq_desc* irq_to_desc(unsigned int)' at irqnr.h:9:1 has some sub-type changes: CRC value (modversions) changed from 0x38d96880 to 0x519a90d9 [C] 'function bool is_bad_inode(inode*)' at bad_inode.c:224:1 has some sub-type changes: CRC value (modversions) changed from 0xf395a674 to 0x58a53f4b [C] 'function int iterate_dir(file*, dir_context*)' at readdir.c:40:1 has some sub-type changes: CRC value (modversions) changed from 0xec3ad212 to 0xb31bb1f5 [C] 'function int iterate_fd(files_struct*, unsigned int, int (void*, file*, unsigned int)*, void*)' at file.c:996:1 has some sub-type changes: CRC value (modversions) changed from 0x86b55579 to 0x6e79b106 [C] 'function ino_t iunique(super_block*, ino_t)' at inode.c:1273:1 has some sub-type changes: CRC value (modversions) changed from 0x161c211e to 0x8d6b1cf6 [C] 'function int kern_path(const char*, unsigned int, path*)' at namei.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0x94d2c3d2 to 0xce20a5b0 [C] 'function int kernel_bind(socket*, sockaddr*, int)' at socket.c:3578:1 has some sub-type changes: CRC value (modversions) changed from 0x633f6a8a to 0x7eb448 [C] 'function int kernel_connect(socket*, sockaddr*, int, int)' at socket.c:3647:1 has some sub-type changes: CRC value (modversions) changed from 0x567d1725 to 0x1e9dcfe [C] 'function int kernel_getsockname(socket*, sockaddr*)' at socket.c:3663:1 has some sub-type changes: CRC value (modversions) changed from 0xe91ed834 to 0x3fb23d56 [C] 'function void kernel_param_lock(module*)' at params.c:583:1 has some sub-type changes: CRC value (modversions) changed from 0xd9250db0 to 0x9d39c642 [C] 'function void kernel_param_unlock(module*)' at params.c:588:1 has some sub-type changes: CRC value (modversions) changed from 0x34889378 to 0x31ea888a [C] 'function long int kernel_read(file*, void*, unsigned long int, long long int*)' at fs.h:3076:1 has some sub-type changes: CRC value (modversions) changed from 0x340a18db to 0x87947b7e [C] 'function int kernel_recvmsg(socket*, msghdr*, kvec*, size_t, size_t, int)' at socket.c:910:1 has some sub-type changes: CRC value (modversions) changed from 0x5db3b899 to 0x4fb6c130 [C] 'function int kernel_sendmsg(socket*, msghdr*, kvec*, size_t, size_t)' at socket.c:674:1 has some sub-type changes: CRC value (modversions) changed from 0xf5bd3cc6 to 0xb8111a47 [C] 'function int kernel_setsockopt(socket*, int, int, char*, unsigned int)' at socket.c:3729:1 has some sub-type changes: CRC value (modversions) changed from 0xfb15db28 to 0x290d57cf [C] 'function long int kernel_write(file*, void*, unsigned long int, long long int*)' at fs.h:3077:1 has some sub-type changes: CRC value (modversions) changed from 0xf8d6fe00 to 0x6a495253 [C] 'function kernfs_node* kernfs_find_and_get_ns(kernfs_node*, const char*, void*)' at kernfs.h:336:1 has some sub-type changes: CRC value (modversions) changed from 0xb991e030 to 0x4aa10ba2 [C] 'function void kernfs_notify(kernfs_node*)' at kernfs.h:381:1 has some sub-type changes: CRC value (modversions) changed from 0x137aa2b6 to 0xfaa66be5 [C] 'function void kernfs_put(kernfs_node*)' at kernfs.h:341:1 has some sub-type changes: CRC value (modversions) changed from 0x67bab797 to 0x51090dc4 [C] 'function key* keyring_alloc(const char*, __anonymous_struct__, __anonymous_struct__1, const cred*, unsigned int, unsigned long int, key_restriction*, key*)' at key.h:385:1 has some sub-type changes: CRC value (modversions) changed from 0x39e45944 to 0x78462fd2 [C] 'function keyslot_manager* keyslot_manager_create(device*, unsigned int, const keyslot_mgmt_ll_ops*, unsigned int, const unsigned int*, void*)' at keyslot-manager.c:157:1 has some sub-type changes: CRC value (modversions) changed from 0x1517b755 to 0x46e6c20f [C] 'function keyslot_manager* keyslot_manager_create_passthrough(device*, const keyslot_mgmt_ll_ops*, unsigned int, const unsigned int*, void*)' at keyslot-manager.c:566:1 has some sub-type changes: CRC value (modversions) changed from 0x8dd02b25 to 0xa2e6e3f0 [C] 'function void kfree_skb(sk_buff*)' at skbuff.h:1025:1 has some sub-type changes: CRC value (modversions) changed from 0x3bdc3fbb to 0xeae32e39 [C] 'function void kfree_skb_list(sk_buff*)' at skbuff.h:1026:1 has some sub-type changes: CRC value (modversions) changed from 0x7281ebd1 to 0x191907f5 [C] 'function void kill_block_super(super_block*)' at super.c:1438:1 has some sub-type changes: CRC value (modversions) changed from 0x9f1509b to 0x189304aa [C] 'function void kill_fasync(fasync_struct**, int, int)' at fs.h:1380:1 has some sub-type changes: CRC value (modversions) changed from 0x78d115fe to 0xad38581 [C] 'function void kill_litter_super(super_block*)' at super.c:1113:1 has some sub-type changes: CRC value (modversions) changed from 0xcaf02ddf to 0x347c631c [C] 'function int kill_pid(pid*, int, int)' at signal.c:1796:1 has some sub-type changes: CRC value (modversions) changed from 0x7bdf62a2 to 0x891408a0 [C] 'function void kiocb_set_cancel_fn(kiocb*, kiocb_cancel_fn*)' at aio.c:562:1 has some sub-type changes: CRC value (modversions) changed from 0x852f63ea to 0x3899d85c [C] 'function void* kmem_cache_alloc(kmem_cache*, unsigned int)' at slab.h:394:1 has some sub-type changes: CRC value (modversions) changed from 0x831d87a6 to 0x98ec97d0 [C] 'function int kmem_cache_alloc_bulk(kmem_cache*, unsigned int, unsigned long int, void**)' at slab.h:405:1 has some sub-type changes: CRC value (modversions) changed from 0x76ddac84 to 0x8bd1d4d1 [C] 'function void* kmem_cache_alloc_trace(kmem_cache*, unsigned int, unsigned long int)' at slab.h:432:1 has some sub-type changes: CRC value (modversions) changed from 0x3917f0a6 to 0x53738cc6 [C] 'function kmem_cache* kmem_cache_create(const char*, unsigned int, unsigned int, unsigned int, void (void*)*)' at slab.h:147:1 has some sub-type changes: CRC value (modversions) changed from 0x181f8cd4 to 0x5aaa2d18 [C] 'function void kmem_cache_destroy(kmem_cache*)' at slab.h:155:1 has some sub-type changes: CRC value (modversions) changed from 0xe19f307a to 0xbe5624c5 [C] 'function void kmem_cache_free(kmem_cache*, void*)' at slab.h:395:1 has some sub-type changes: CRC value (modversions) changed from 0xc8d01635 to 0xb4c7105f [C] 'function void kmem_cache_free_bulk(kmem_cache*, size_t, void**)' at slub.c:3154:1 has some sub-type changes: CRC value (modversions) changed from 0xd5fc0ed2 to 0x92ed6829 [C] 'function int kobject_add(kobject*, kobject*, const char*, ...)' at kobject.h:102:1 has some sub-type changes: CRC value (modversions) changed from 0xfdfa20ae to 0xdf9af442 [C] 'function kobject* kobject_create_and_add(const char*, kobject*)' at kobject.h:112:1 has some sub-type changes: CRC value (modversions) changed from 0x33bfbddf to 0xe720659c [C] 'function void kobject_del(kobject*)' at kobject.h:109:1 has some sub-type changes: CRC value (modversions) changed from 0x46775f5d to 0x402bfdeb [C] 'function kobject* kobject_get(kobject*)' at kobject.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0x93be55a3 to 0xc0b9a38c [C] 'function char* kobject_get_path(kobject*, unsigned int)' at kobject.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x32d502f2 to 0x9b1479bb [C] 'function void kobject_init(kobject*, kobj_type*)' at kobject.h:100:1 has some sub-type changes: CRC value (modversions) changed from 0x6a219b8e to 0x7caf051b [C] 'function int kobject_init_and_add(kobject*, kobj_type*, kobject*, const char*, ...)' at kobject.h:105:1 has some sub-type changes: CRC value (modversions) changed from 0xbebd208c to 0xa9435ab6 [C] 'function void kobject_put(kobject*)' at kobject.h:121:1 has some sub-type changes: CRC value (modversions) changed from 0x3e198c92 to 0x9b4ce245 [C] 'function int kobject_set_name(kobject*, const char*, ...)' at kobject.h:90:1 has some sub-type changes: CRC value (modversions) changed from 0x4129a5d9 to 0x9c9d7ddf [C] 'function int kobject_uevent(kobject*, kobject_action)' at kobject_uevent.c:639:1 has some sub-type changes: CRC value (modversions) changed from 0x40ccc6e1 to 0x42b7c771 [C] 'function int kobject_uevent_env(kobject*, kobject_action, char**)' at kobject.h:257:1 has some sub-type changes: CRC value (modversions) changed from 0x75a91c4c to 0x702e9c3 [C] 'function kset* kset_create_and_add(const char*, const kset_uevent_ops*, kobject*)' at kobject.h:219:1 has some sub-type changes: CRC value (modversions) changed from 0xa9ce2829 to 0xafad98a7 [C] 'function void kset_unregister(kset*)' at kobject.h:218:1 has some sub-type changes: CRC value (modversions) changed from 0xe2bf6dae to 0x1c63c5f0 [C] 'function char* kstrdup_quotable_cmdline(task_struct*, gfp_t)' at string_helpers.c:597:1 has some sub-type changes: CRC value (modversions) changed from 0x690fee92 to 0xf9ad9555 [C] 'function void kthread_bind(task_struct*, unsigned int)' at kthread.c:443:1 has some sub-type changes: CRC value (modversions) changed from 0x80d95275 to 0x6f69fd0e [C] 'function bool kthread_cancel_delayed_work_sync(kthread_delayed_work*)' at kthread.c:1158:1 has some sub-type changes: CRC value (modversions) changed from 0xd2277428 to 0xf6729a2c [C] 'function bool kthread_cancel_work_sync(kthread_work*)' at kthread.c:1143:1 has some sub-type changes: CRC value (modversions) changed from 0xb9b5cbad to 0x1f1105bf [C] 'function task_struct* kthread_create_on_node(int (void*)*, void*, int, const char*, ...)' at kthread.h:9:1 has some sub-type changes: CRC value (modversions) changed from 0x3dcb1745 to 0x58d38e4a [C] 'function kthread_worker* kthread_create_worker(unsigned int, const char*, ...)' at kthread.c:739:1 has some sub-type changes: CRC value (modversions) changed from 0x2c5fac8e to 0x688147b8 [C] 'function void kthread_destroy_worker(kthread_worker*)' at kthread.c:1191:1 has some sub-type changes: CRC value (modversions) changed from 0x3fed2f14 to 0xd5868c49 [C] 'function void kthread_flush_work(kthread_work*)' at kthread.c:964:1 has some sub-type changes: CRC value (modversions) changed from 0xf6bd558 to 0x7b888c07 [C] 'function void kthread_flush_worker(kthread_worker*)' at kthread.c:1171:1 has some sub-type changes: CRC value (modversions) changed from 0xbd5e6b0d to 0x2dcecc1d [C] 'function bool kthread_mod_delayed_work(kthread_worker*, kthread_delayed_work*, unsigned long int)' at kthread.c:1063:1 has some sub-type changes: CRC value (modversions) changed from 0xc8dadde9 to 0x785621ac [C] 'function int kthread_park(task_struct*)' at kthread.h:62:1 has some sub-type changes: CRC value (modversions) changed from 0xb45b344b to 0x3be50a9b [C] 'function bool kthread_queue_delayed_work(kthread_worker*, kthread_delayed_work*, unsigned long int)' at kthread.c:926:1 has some sub-type changes: CRC value (modversions) changed from 0xfa2ffa58 to 0xc5e908ab [C] 'function bool kthread_queue_work(kthread_worker*, kthread_work*)' at kthread.c:831:1 has some sub-type changes: CRC value (modversions) changed from 0xedd888eb to 0xe7db2744 [C] 'function int kthread_stop(task_struct*)' at kthread.h:55:1 has some sub-type changes: CRC value (modversions) changed from 0x7a9a2b5d to 0x44a9aa9e [C] 'function void kthread_unpark(task_struct*)' at kthread.h:63:1 has some sub-type changes: CRC value (modversions) changed from 0x4c83328d to 0xde39dd26 [C] 'function l2tp_session* l2tp_session_create(int, l2tp_tunnel*, unsigned int, unsigned int, l2tp_session_cfg*)' at l2tp_core.h:211:1 has some sub-type changes: CRC value (modversions) changed from 0xe9db08b8 to 0x3249ad4e [C] 'function int l2tp_session_delete(l2tp_session*)' at l2tp_core.h:219:1 has some sub-type changes: CRC value (modversions) changed from 0x717655b1 to 0x733de3b6 [C] 'function void l2tp_session_free(l2tp_session*)' at l2tp_core.h:220:1 has some sub-type changes: CRC value (modversions) changed from 0x23f14030 to 0x7aa4731 [C] 'function l2tp_session* l2tp_session_get_nth(l2tp_tunnel*, int)' at l2tp_core.h:200:1 has some sub-type changes: CRC value (modversions) changed from 0x5561e2ed to 0x9eba6b4 [C] 'function int l2tp_session_register(l2tp_session*, l2tp_tunnel*)' at l2tp_core.h:215:1 has some sub-type changes: CRC value (modversions) changed from 0x891d1ed0 to 0x693ec591 [C] 'function void l2tp_session_set_header_len(l2tp_session*, int)' at l2tp_core.h:225:1 has some sub-type changes: CRC value (modversions) changed from 0x6f35cad8 to 0xd14c488 [C] 'function int l2tp_tunnel_create(net*, int, int, unsigned int, unsigned int, l2tp_tunnel_cfg*, l2tp_tunnel**)' at l2tp_core.h:204:1 has some sub-type changes: CRC value (modversions) changed from 0x3443c016 to 0xf5ffbfd0 [C] 'function void l2tp_tunnel_delete(l2tp_tunnel*)' at l2tp_core.h:210:1 has some sub-type changes: CRC value (modversions) changed from 0x1fa670ce to 0x9e78b5ef [C] 'function void l2tp_tunnel_free(l2tp_tunnel*)' at l2tp_core.h:197:1 has some sub-type changes: CRC value (modversions) changed from 0x54964196 to 0x264128ea [C] 'function l2tp_tunnel* l2tp_tunnel_get(const net*, unsigned int)' at l2tp_core.h:192:1 has some sub-type changes: CRC value (modversions) changed from 0x76b0a636 to 0x7e9657ce [C] 'function l2tp_tunnel* l2tp_tunnel_get_nth(const net*, int)' at l2tp_core.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0xa3445fa5 to 0x9995731c [C] 'function l2tp_session* l2tp_tunnel_get_session(l2tp_tunnel*, unsigned int)' at l2tp_core.h:194:1 has some sub-type changes: CRC value (modversions) changed from 0x82c5a4a7 to 0x78d051fb [C] 'function int l2tp_tunnel_register(l2tp_tunnel*, net*, l2tp_tunnel_cfg*)' at l2tp_core.h:207:1 has some sub-type changes: CRC value (modversions) changed from 0x84bf2fc9 to 0x7c175eab [C] 'function int l2tp_udp_encap_recv(sock*, sk_buff*)' at l2tp_core.h:224:1 has some sub-type changes: CRC value (modversions) changed from 0xc50568db to 0x7cdd88d1 [C] 'function int l2tp_xmit_skb(l2tp_session*, sk_buff*, int)' at l2tp_core.h:227:1 has some sub-type changes: CRC value (modversions) changed from 0x4eb90a to 0x60775efc [C] 'function void led_blink_set(led_classdev*, unsigned long int*, unsigned long int*)' at leds.h:214:1 has some sub-type changes: CRC value (modversions) changed from 0x56fc427c to 0x39c5b6cd [C] 'function int led_classdev_register_ext(device*, led_classdev*, led_init_data*)' at leds.h:164:1 has some sub-type changes: CRC value (modversions) changed from 0x16dc2456 to 0x1856cfca [C] 'function void led_classdev_unregister(led_classdev*)' at leds.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0xa72febeb to 0x10fe19bd [C] 'function unsigned int* led_get_default_pattern(led_classdev*, unsigned int*)' at leds.h:282:1 has some sub-type changes: CRC value (modversions) changed from 0xe32b7500 to 0xdd6abf88 [C] 'function void led_set_brightness(led_classdev*, led_brightness)' at leds.h:244:1 has some sub-type changes: CRC value (modversions) changed from 0x74dc154b to 0x8ce8968f [C] 'function void led_trigger_event(led_trigger*, led_brightness)' at leds.h:377:1 has some sub-type changes: CRC value (modversions) changed from 0x7acee44d to 0xbc872a26 [C] 'function int led_trigger_register(led_trigger*)' at leds.h:369:1 has some sub-type changes: CRC value (modversions) changed from 0xc6e31fc3 to 0xbe77e072 [C] 'function void led_trigger_register_simple(const char*, led_trigger**)' at leds.h:374:1 has some sub-type changes: CRC value (modversions) changed from 0xd95959af to 0xcb66efd6 [C] 'function void led_trigger_unregister(led_trigger*)' at leds.h:370:1 has some sub-type changes: CRC value (modversions) changed from 0x45c8f3c5 to 0xd8362e38 [C] 'function void led_trigger_unregister_simple(led_trigger*)' at leds.h:376:1 has some sub-type changes: CRC value (modversions) changed from 0xedde9e6c to 0xd7e65333 [C] 'function nls_table* load_nls(char*)' at nls.h:50:1 has some sub-type changes: CRC value (modversions) changed from 0x242e8ef5 to 0x9c2f5fc [C] 'function nls_table* load_nls_default()' at nls_base.c:532:1 has some sub-type changes: CRC value (modversions) changed from 0x8fbcde32 to 0x8a8d7517 [C] 'function dentry* lock_rename(dentry*, dentry*)' at namei.h:68:1 has some sub-type changes: CRC value (modversions) changed from 0xa02998b8 to 0x6f196f83 [C] 'function void lock_sock_nested(sock*, int)' at sock.h:1538:1 has some sub-type changes: CRC value (modversions) changed from 0x2033fb75 to 0xe20a07e4 [C] 'function dentry* lookup_one_len(const char*, dentry*, int)' at namei.h:61:1 has some sub-type changes: CRC value (modversions) changed from 0x7b659b33 to 0x8514c9cc [C] 'function void make_bad_inode(inode*)' at bad_inode.c:198:1 has some sub-type changes: CRC value (modversions) changed from 0x145f20a8 to 0xfa5d1e6b [C] 'function void mark_buffer_dirty(buffer_head*)' at buffer.c:1087:1 has some sub-type changes: CRC value (modversions) changed from 0xba456b5a to 0x8f4b13a2 [C] 'function void mark_page_accessed(page*)' at swap.h:337:1 has some sub-type changes: CRC value (modversions) changed from 0x80d47bf6 to 0x994b4127 [C] 'function void mbox_chan_received_data(mbox_chan*, void*)' at mailbox_controller.h:131:1 has some sub-type changes: CRC value (modversions) changed from 0xcbe06ac9 to 0xc1f733dc [C] 'function void mbox_chan_txdone(mbox_chan*, int)' at mailbox_controller.h:132:1 has some sub-type changes: CRC value (modversions) changed from 0xc38e67df to 0x1ff33764 [C] 'function void mbox_client_txdone(mbox_chan*, int)' at mailbox_client.h:45:1 has some sub-type changes: CRC value (modversions) changed from 0x885e5415 to 0x9f3c824 [C] 'function int mbox_controller_register(mbox_controller*)' at mailbox.c:476:1 has some sub-type changes: CRC value (modversions) changed from 0x910d18ae to 0xbdcb7c8a [C] 'function void mbox_controller_unregister(mbox_controller*)' at mailbox.c:527:1 has some sub-type changes: CRC value (modversions) changed from 0x9c9fd46f to 0x59057fb5 [C] 'function void mbox_free_channel(mbox_chan*)' at mailbox_client.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0x5bc337 to 0x17db8c99 [C] 'function mbox_chan* mbox_request_channel(mbox_client*, int)' at mailbox_client.h:42:1 has some sub-type changes: CRC value (modversions) changed from 0x1176b264 to 0x9876a8b6 [C] 'function int mbox_send_message(mbox_chan*, void*)' at mailbox_client.h:43:1 has some sub-type changes: CRC value (modversions) changed from 0x22e4a4f0 to 0x4eaabe06 [C] 'function mii_bus* mdiobus_alloc_size(size_t)' at mdio_bus.c:146:1 has some sub-type changes: CRC value (modversions) changed from 0xfc510948 to 0x3c34c1c0 [C] 'function void mdiobus_free(mii_bus*)' at mdio_bus.c:487:1 has some sub-type changes: CRC value (modversions) changed from 0x171033ce to 0x724bef21 [C] 'function int mdiobus_read(mii_bus*, int, unsigned int)' at mdio.h:320:1 has some sub-type changes: CRC value (modversions) changed from 0x356ade02 to 0xa663c2b8 [C] 'function void mdiobus_unregister(mii_bus*)' at mdio_bus.c:451:1 has some sub-type changes: CRC value (modversions) changed from 0x32d8dcc9 to 0x1847dc57 [C] 'function int mdiobus_write(mii_bus*, int, unsigned int, unsigned short int)' at mdio.h:322:1 has some sub-type changes: CRC value (modversions) changed from 0xd628781a to 0xf4e2f385 [C] 'function media_link* media_create_intf_link(media_entity*, media_interface*, u32)' at mc-entity.c:962:1 has some sub-type changes: CRC value (modversions) changed from 0xaff8e951 to 0x647039ee [C] 'function int media_create_pad_link(media_entity*, u16, media_entity*, u16, u32)' at mc-entity.c:659:1 has some sub-type changes: CRC value (modversions) changed from 0x2af1cbc8 to 0xdefca085 [C] 'function void media_device_cleanup(media_device*)' at mc-device.c:720:1 has some sub-type changes: CRC value (modversions) changed from 0x6d10a55 to 0x962c35f7 [C] 'function void media_device_init(media_device*)' at mc-device.c:702:1 has some sub-type changes: CRC value (modversions) changed from 0x14512640 to 0x3c8767f4 [C] 'function int media_device_register_entity(media_device*, media_entity*)' at mc-device.c:583:1 has some sub-type changes: CRC value (modversions) changed from 0xc97ed7a4 to 0x7113f001 [C] 'function void media_device_unregister(media_device*)' at mc-device.c:799:1 has some sub-type changes: CRC value (modversions) changed from 0x23b82b89 to 0xabb01dab [C] 'function void media_device_unregister_entity(media_entity*)' at mc-device.c:679:1 has some sub-type changes: CRC value (modversions) changed from 0xb4259ab5 to 0x6faada22 [C] 'function media_intf_devnode* media_devnode_create(media_device*, u32, u32, u32, u32)' at mc-entity.c:934:1 has some sub-type changes: CRC value (modversions) changed from 0x1b81383f to 0x7975df13 [C] 'function void media_devnode_remove(media_intf_devnode*)' at mc-entity.c:954:1 has some sub-type changes: CRC value (modversions) changed from 0xbfd5b20c to 0x899884e [C] 'function media_link* media_entity_find_link(media_pad*, media_pad*)' at media-entity.h:844:1 has some sub-type changes: CRC value (modversions) changed from 0x212ddfa6 to 0xd02428f5 [C] 'function int media_entity_pads_init(media_entity*, u16, media_pad*)' at mc-entity.c:197:1 has some sub-type changes: CRC value (modversions) changed from 0x5ade09ff to 0xad3ed395 [C] 'function media_pad* media_entity_remote_pad(const media_pad*)' at mc-entity.c:900:1 has some sub-type changes: CRC value (modversions) changed from 0x98fddc5f to 0x9d8698b [C] 'function void media_entity_remove_links(media_entity*)' at mc-entity.c:787:1 has some sub-type changes: CRC value (modversions) changed from 0x181cf576 to 0xc1a9577a [C] 'function int media_entity_setup_link(media_link*, u32)' at mc-entity.c:871:1 has some sub-type changes: CRC value (modversions) changed from 0x464e29c9 to 0x49ccebca [C] 'function int media_graph_walk_init(media_graph*, media_device*)' at media-entity.h:888:1 has some sub-type changes: CRC value (modversions) changed from 0x6844e918 to 0xfa6114cf [C] 'function media_entity* media_graph_walk_next(media_graph*)' at mc-entity.c:345:1 has some sub-type changes: CRC value (modversions) changed from 0x7b1e466 to 0xd138500b [C] 'function void media_graph_walk_start(media_graph*, media_entity*)' at mc-entity.c:294:1 has some sub-type changes: CRC value (modversions) changed from 0x55aa1ca3 to 0x5c50a8b0 [C] 'function void media_remove_intf_links(media_interface*)' at mc-entity.c:1016:1 has some sub-type changes: CRC value (modversions) changed from 0xbf877e60 to 0x7a89071b [C] 'function int mfd_add_devices(device*, int, const mfd_cell*, int, resource*, int, irq_domain*)' at mfd-core.c:282:1 has some sub-type changes: CRC value (modversions) changed from 0x9215cd38 to 0x4a82b38f [C] 'function void mfd_remove_devices(device*)' at mfd-core.c:338:1 has some sub-type changes: CRC value (modversions) changed from 0x7eabf3cb to 0x9172a594 [C] 'function unsigned int mii_check_media(mii_if_info*, unsigned int, unsigned int)' at mii.h:43:1 has some sub-type changes: CRC value (modversions) changed from 0xe2ae7858 to 0xc7162c77 [C] 'function void mii_ethtool_get_link_ksettings(mii_if_info*, ethtool_link_ksettings*)' at mii.h:36:1 has some sub-type changes: CRC value (modversions) changed from 0xfdb69b94 to 0xd9584ac4 [C] 'function int mii_ethtool_gset(mii_if_info*, ethtool_cmd*)' at mii.h:35:1 has some sub-type changes: CRC value (modversions) changed from 0x4750be2e to 0xa321d71c [C] 'function int mii_ethtool_set_link_ksettings(mii_if_info*, const ethtool_link_ksettings*)' at mii.h:39:1 has some sub-type changes: CRC value (modversions) changed from 0x592cbe4 to 0x5b2ce144 [C] 'function int mii_link_ok(mii_if_info*)' at mii.h:33:1 has some sub-type changes: CRC value (modversions) changed from 0x1bdaebda to 0x1f462558 [C] 'function int mii_nway_restart(mii_if_info*)' at mii.h:34:1 has some sub-type changes: CRC value (modversions) changed from 0x678a0da8 to 0x5b24e290 [C] 'function int mipi_dsi_attach(mipi_dsi_device*)' at drm_mipi_dsi.c:322:1 has some sub-type changes: CRC value (modversions) changed from 0xe3c77137 to 0x3ccbea4b [C] 'function ssize_t mipi_dsi_dcs_read(mipi_dsi_device*, u8, void*, size_t)' at drm_mipi_dsi.c:734:1 has some sub-type changes: CRC value (modversions) changed from 0x1fb9db45 to 0x46be8c35 [C] 'function int mipi_dsi_dcs_set_display_brightness(mipi_dsi_device*, u16)' at drm_mipi_dsi.c:1053:1 has some sub-type changes: CRC value (modversions) changed from 0xdb5023db to 0x6c2b1bc3 [C] 'function int mipi_dsi_dcs_set_tear_off(mipi_dsi_device*)' at drm_mipi_dsi.c:967:1 has some sub-type changes: CRC value (modversions) changed from 0x87ae222d to 0xd2753cb9 [C] 'function ssize_t mipi_dsi_dcs_write(mipi_dsi_device*, u8, void*, size_t)' at drm_mipi_dsi.c:694:1 has some sub-type changes: CRC value (modversions) changed from 0x91d6f46e to 0xe1d16051 [C] 'function ssize_t mipi_dsi_dcs_write_buffer(mipi_dsi_device*, void*, size_t)' at drm_mipi_dsi.c:651:1 has some sub-type changes: CRC value (modversions) changed from 0x2a8278c0 to 0xffbc3fec [C] 'function int mipi_dsi_detach(mipi_dsi_device*)' at drm_mipi_dsi.c:337:1 has some sub-type changes: CRC value (modversions) changed from 0xbefada79 to 0x6340105f [C] 'function mipi_dsi_device* mipi_dsi_device_register_full(mipi_dsi_host*, const mipi_dsi_device_info*)' at drm_mipi_dsi.c:200:1 has some sub-type changes: CRC value (modversions) changed from 0x43493595 to 0x2eb9dffc [C] 'function void mipi_dsi_device_unregister(mipi_dsi_device*)' at drm_mipi_dsi.c:243:1 has some sub-type changes: CRC value (modversions) changed from 0x622134d4 to 0x71e254b [C] 'function int mipi_dsi_driver_register_full(mipi_dsi_driver*, module*)' at drm_mipi_dsi.c:1125:1 has some sub-type changes: CRC value (modversions) changed from 0xb4176deb to 0x503743ea [C] 'function void mipi_dsi_driver_unregister(mipi_dsi_driver*)' at drm_mipi_dsi.c:1148:1 has some sub-type changes: CRC value (modversions) changed from 0xaf8736d1 to 0x32dd67c4 [C] 'function ssize_t mipi_dsi_generic_read(mipi_dsi_device*, void*, size_t, void*, size_t)' at drm_mipi_dsi.c:607:1 has some sub-type changes: CRC value (modversions) changed from 0x152a5fb6 to 0xa90a1a14 [C] 'function ssize_t mipi_dsi_generic_write(mipi_dsi_device*, void*, size_t)' at drm_mipi_dsi.c:562:1 has some sub-type changes: CRC value (modversions) changed from 0x8da9095d to 0xdf4e1f7e [C] 'function int mipi_dsi_host_register(mipi_dsi_host*)' at drm_mipi_dsi.c:280:1 has some sub-type changes: CRC value (modversions) changed from 0xd220abd9 to 0x6bcb89b3 [C] 'function void mipi_dsi_host_unregister(mipi_dsi_host*)' at drm_mipi_dsi.c:308:1 has some sub-type changes: CRC value (modversions) changed from 0x261a7b7b to 0x7fcb8133 [C] 'function int mipi_dsi_set_maximum_return_packet_size(mipi_dsi_device*, u16)' at drm_mipi_dsi.c:534:1 has some sub-type changes: CRC value (modversions) changed from 0x8351fd4b to 0xd4e2cd94 [C] 'function void misc_deregister(miscdevice*)' at miscdevice.h:79:1 has some sub-type changes: CRC value (modversions) changed from 0x8a3cbfaa to 0x3568cca5 [C] 'function int misc_register(miscdevice*)' at miscdevice.h:78:1 has some sub-type changes: CRC value (modversions) changed from 0xe8dc60c6 to 0x9e5e0245 [C] 'function void mm_trace_rss_stat(mm_struct*, int, long int, long int)' at mm.h:1669:1 has some sub-type changes: CRC value (modversions) changed from 0xa89c6f59 to 0xf35c7c18 [C] 'function int mmc_add_host(mmc_host*)' at host.c:463:1 has some sub-type changes: CRC value (modversions) changed from 0xf17ed7a6 to 0x1cd5b534 [C] 'function mmc_host* mmc_alloc_host(int, device*)' at host.c:397:1 has some sub-type changes: CRC value (modversions) changed from 0x7a95407c to 0x2b556196 [C] 'function int mmc_app_cmd(mmc_host*, mmc_card*)' at sd_ops.c:21:1 has some sub-type changes: CRC value (modversions) changed from 0xafc22602 to 0xa9be585e [C] 'function unsigned int mmc_calc_max_discard(mmc_card*)' at core.c:2060:1 has some sub-type changes: CRC value (modversions) changed from 0xe59b3ece to 0x239c9a21 [C] 'function int mmc_can_erase(mmc_card*)' at core.c:1922:1 has some sub-type changes: CRC value (modversions) changed from 0x7bbc8e9f to 0xe819f423 [C] 'function bool mmc_can_gpio_cd(mmc_host*)' at slot-gpio.c:207:1 has some sub-type changes: CRC value (modversions) changed from 0xec787d5a to 0x93aaa620 [C] 'function int mmc_can_sanitize(mmc_card*)' at core.c:1952:1 has some sub-type changes: CRC value (modversions) changed from 0xf75e3d41 to 0xb1cb7433 [C] 'function int mmc_can_secure_erase_trim(mmc_card*)' at core.c:1962:1 has some sub-type changes: CRC value (modversions) changed from 0x9af2ec2c to 0x910818e3 [C] 'function int mmc_can_trim(mmc_card*)' at core.c:1931:1 has some sub-type changes: CRC value (modversions) changed from 0xa225749f to 0x2079ea02 [C] 'function int mmc_cmdq_disable(mmc_card*)' at mmc_ops.c:998:1 has some sub-type changes: CRC value (modversions) changed from 0x3fce8227 to 0x3eafa465 [C] 'function int mmc_cmdq_enable(mmc_card*)' at mmc_ops.h:41:1 has some sub-type changes: CRC value (modversions) changed from 0x84c055b4 to 0xa830e348 [C] 'function void mmc_cqe_post_req(mmc_host*, mmc_request*)' at core.c:532:1 has some sub-type changes: CRC value (modversions) changed from 0xc470f7bb to 0xf62f6d0c [C] 'function int mmc_cqe_recovery(mmc_host*)' at core.c:551:1 has some sub-type changes: CRC value (modversions) changed from 0x7af9cd95 to 0xed22ee71 [C] 'function void mmc_cqe_request_done(mmc_host*, mmc_request*)' at core.c:498:1 has some sub-type changes: CRC value (modversions) changed from 0x8ea2b039 to 0x5a84b69d [C] 'function int mmc_cqe_start_req(mmc_host*, mmc_request*)' at core.c:448:1 has some sub-type changes: CRC value (modversions) changed from 0x8a4a7f70 to 0xacf8c083 [C] 'function int mmc_detect_card_removed(mmc_host*)' at core.c:2241:1 has some sub-type changes: CRC value (modversions) changed from 0x45ae6d7 to 0x578adf33 [C] 'function void mmc_detect_change(mmc_host*, unsigned long int)' at core.c:1496:1 has some sub-type changes: CRC value (modversions) changed from 0x60a95a8f to 0x9e0e9624 [C] 'function int mmc_erase(mmc_card*, unsigned int, unsigned int, unsigned int)' at core.c:1861:1 has some sub-type changes: CRC value (modversions) changed from 0x596d550b to 0x3596b5df [C] 'function int mmc_erase_group_aligned(mmc_card*, unsigned int, unsigned int)' at core.c:1971:1 has some sub-type changes: CRC value (modversions) changed from 0xa98e9262 to 0xe16a8e6c [C] 'function int mmc_flush_cache(mmc_card*)' at mmc_ops.h:40:1 has some sub-type changes: CRC value (modversions) changed from 0x25d91d45 to 0x6a9afef7 [C] 'function void mmc_free_host(mmc_host*)' at host.c:520:1 has some sub-type changes: CRC value (modversions) changed from 0xf701efbb to 0xfe32b19e [C] 'function void mmc_get_card(mmc_card*, mmc_ctx*)' at core.c:873:1 has some sub-type changes: CRC value (modversions) changed from 0xd9b30063 to 0x43f0dc86 [C] 'function int mmc_get_ext_csd(mmc_card*, unsigned char**)' at mmc_ops.h:31:1 has some sub-type changes: CRC value (modversions) changed from 0x805a99fa to 0x1ca374d1 [C] 'function int mmc_gpio_get_cd(mmc_host*)' at slot-gpio.c:74:1 has some sub-type changes: CRC value (modversions) changed from 0x49df4a0e to 0x7b602e65 [C] 'function int mmc_gpio_get_ro(mmc_host*)' at slot-gpio.c:63:1 has some sub-type changes: CRC value (modversions) changed from 0xc1d67391 to 0x2af2efd8 [C] 'function int mmc_gpiod_request_cd(mmc_host*, const char*, unsigned int, bool, unsigned int, bool*)' at slot-gpio.h:18:1 has some sub-type changes: CRC value (modversions) changed from 0x3357f22e to 0x341fac01 [C] 'function void mmc_gpiod_request_cd_irq(mmc_host*)' at slot-gpio.h:27:1 has some sub-type changes: CRC value (modversions) changed from 0xcdc1abae to 0x9c1022ec [C] 'function int mmc_gpiod_request_ro(mmc_host*, const char*, unsigned int, unsigned int, bool*)' at slot-gpio.h:21:1 has some sub-type changes: CRC value (modversions) changed from 0x11affa5c to 0xf9becbd5 [C] 'function int mmc_hw_reset(mmc_host*)' at core.c:2118:1 has some sub-type changes: CRC value (modversions) changed from 0xc560dd0d to 0x161cf23d [C] 'function int mmc_of_parse(mmc_host*)' at host.c:174:1 has some sub-type changes: CRC value (modversions) changed from 0x645d9f2f to 0xe02cebab [C] 'function int mmc_of_parse_voltage(device_node*, u32*)' at host.c:355:1 has some sub-type changes: CRC value (modversions) changed from 0x61013eba to 0x2f9eba11 [C] 'function void mmc_put_card(mmc_card*, mmc_ctx*)' at core.c:884:1 has some sub-type changes: CRC value (modversions) changed from 0xa0e9fa37 to 0x8683beab [C] 'function int mmc_register_driver(mmc_driver*)' at bus.c:227:1 has some sub-type changes: CRC value (modversions) changed from 0xa2fff8c8 to 0x6f7f0104 [C] 'function int mmc_regulator_get_supply(mmc_host*)' at regulator.c:232:1 has some sub-type changes: CRC value (modversions) changed from 0xe3e038b8 to 0x8cc9a390 [C] 'function int mmc_regulator_set_ocr(mmc_host*, regulator*, unsigned short int)' at regulator.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0x966b6390 to 0x91cfd5ae [C] 'function int mmc_regulator_set_vqmmc(mmc_host*, mmc_ios*)' at regulator.c:167:1 has some sub-type changes: CRC value (modversions) changed from 0xbedaf0d1 to 0x7beec8da [C] 'function void mmc_release_host(mmc_host*)' at core.c:844:1 has some sub-type changes: CRC value (modversions) changed from 0x1c5017e3 to 0x91d85d9a [C] 'function void mmc_remove_host(mmc_host*)' at host.c:497:1 has some sub-type changes: CRC value (modversions) changed from 0xaa9d2633 to 0xc7bf9eaf [C] 'function void mmc_request_done(mmc_host*, mmc_request*)' at core.c:138:1 has some sub-type changes: CRC value (modversions) changed from 0x6555f291 to 0x448711f9 [C] 'function void mmc_retune_pause(mmc_host*)' at host.c:71:1 has some sub-type changes: CRC value (modversions) changed from 0xce99e666 to 0xe80b91a4 [C] 'function void mmc_retune_release(mmc_host*)' at host.h:19:1 has some sub-type changes: CRC value (modversions) changed from 0x68eedf00 to 0x43bd069d [C] 'function void mmc_retune_unpause(mmc_host*)' at host.c:81:1 has some sub-type changes: CRC value (modversions) changed from 0x23ff2ed7 to 0xf65f2a09 [C] 'function void mmc_run_bkops(mmc_card*)' at mmc_ops.c:920:1 has some sub-type changes: CRC value (modversions) changed from 0xe0191fb to 0x534cde34 [C] 'function int mmc_send_status(mmc_card*, unsigned int*)' at mmc_ops.h:24:1 has some sub-type changes: CRC value (modversions) changed from 0x26568d84 to 0x364a33da [C] 'function int mmc_send_tuning(mmc_host*, u32, int*)' at mmc_ops.c:611:1 has some sub-type changes: CRC value (modversions) changed from 0xfe844edb to 0x27ec8ee3 [C] 'function void mmc_set_data_timeout(mmc_data*, const mmc_card*)' at core.c:665:1 has some sub-type changes: CRC value (modversions) changed from 0x508de522 to 0x45736ca8 [C] 'function int mmc_start_request(mmc_host*, mmc_request*)' at core.c:335:1 has some sub-type changes: CRC value (modversions) changed from 0x5b3edebf to 0x87b5d8a5 [C] 'function int mmc_switch(mmc_card*, u8, u8, u8, unsigned int)' at mmc_ops.c:603:1 has some sub-type changes: CRC value (modversions) changed from 0x200c85ae to 0xa2afe1e0 [C] 'function void mmc_unregister_driver(mmc_driver*)' at bus.c:239:1 has some sub-type changes: CRC value (modversions) changed from 0xe93d052e to 0x52cc4b3b [C] 'function int mmc_wait_for_cmd(mmc_host*, mmc_command*, int)' at core.c:638:1 has some sub-type changes: CRC value (modversions) changed from 0x2364dacb to 0xf65a43e4 [C] 'function void mmc_wait_for_req(mmc_host*, mmc_request*)' at core.c:619:1 has some sub-type changes: CRC value (modversions) changed from 0xb68eb011 to 0x10c71cd4 [C] 'function void mmput(mm_struct*)' at fork.c:1106:1 has some sub-type changes: CRC value (modversions) changed from 0x8f825f43 to 0x438b01c5 [C] 'function void mod_node_page_state(pglist_data*, node_stat_item, long int)' at vmstat.c:575:1 has some sub-type changes: CRC value (modversions) changed from 0x98c8cd34 to 0x9211de16 [C] 'function void module_layout(module*, modversion_info*, kernel_param*, kernel_symbol*, tracepoint* const*)' at module.c:4574:1 has some sub-type changes: CRC value (modversions) changed from 0xc6c639c1 to 0xdc6e892c [C] 'function void module_put(module*)' at module.h:634:1 has some sub-type changes: CRC value (modversions) changed from 0x47867fa to 0x83dd2344 [C] 'function dentry* mount_bdev(file_system_type*, int, const char*, void*, int (super_block*, void*, int)*)' at fs.h:2321:1 has some sub-type changes: CRC value (modversions) changed from 0xc2c9647b to 0xfb61999a [C] 'function int mpage_readpage(page*, get_block_t*)' at mpage.c:454:1 has some sub-type changes: CRC value (modversions) changed from 0x2b06831d to 0xf6c529df [C] 'function int mpage_readpages(address_space*, list_head*, unsigned int, int (inode*, long long unsigned int, buffer_head*, int)*)' at mpage.h:17:1 has some sub-type changes: CRC value (modversions) changed from 0xef8ecb0e to 0xee9fa0c2 [C] 'function int mpage_writepages(address_space*, writeback_control*, get_block_t*)' at mpage.c:748:1 has some sub-type changes: CRC value (modversions) changed from 0x2409541c to 0x5f94c6d7 [C] 'function int n_tty_ioctl_helper(tty_struct*, file*, unsigned int, unsigned long int)' at tty.h:757:1 has some sub-type changes: CRC value (modversions) changed from 0xbc3a848a to 0xc7b9eac8 [C] 'function bool napi_complete_done(napi_struct*, int)' at netdevice.h:479:1 has some sub-type changes: CRC value (modversions) changed from 0x5badd170 to 0x64333a03 [C] 'function void napi_consume_skb(sk_buff*, int)' at skbuff.c:897:1 has some sub-type changes: CRC value (modversions) changed from 0x9143440f to 0x41237899 [C] 'function void napi_disable(napi_struct*)' at netdevice.h:514:1 has some sub-type changes: CRC value (modversions) changed from 0xf5395eb8 to 0x35a2dc59 [C] 'function void napi_gro_flush(napi_struct*, bool)' at dev.c:5353:1 has some sub-type changes: CRC value (modversions) changed from 0x712961e4 to 0xb5658925 [C] 'function gro_result napi_gro_receive(napi_struct*, sk_buff*)' at netdevice.h:3683:1 has some sub-type changes: CRC value (modversions) changed from 0xfb696948 to 0x13ec801c [C] 'function bool napi_hash_del(napi_struct*)' at netdevice.h:505:1 has some sub-type changes: CRC value (modversions) changed from 0xdb8decfa to 0xa59ab01 [C] 'function bool napi_schedule_prep(napi_struct*)' at netdevice.h:442:1 has some sub-type changes: CRC value (modversions) changed from 0x810d8937 to 0x82ae55a0 [C] 'function void neigh_destroy(neighbour*)' at neighbour.h:325:1 has some sub-type changes: CRC value (modversions) changed from 0x91ed3055 to 0x8c901846 [C] 'function void netdev_change_features(net_device*)' at dev.c:8820:1 has some sub-type changes: CRC value (modversions) changed from 0x7d8645a2 to 0xc9c0136 [C] 'function void netdev_err(const net_device*, const char*, ...)' at netdevice.h:4768:1 has some sub-type changes: CRC value (modversions) changed from 0xf1d5b0e2 to 0x1023623a [C] 'function void netdev_info(const net_device*, const char*, ...)' at netdevice.h:4774:1 has some sub-type changes: CRC value (modversions) changed from 0x8d659099 to 0xf7a7fe3a [C] 'function void netdev_lower_state_changed(net_device*, void*)' at dev.c:7628:1 has some sub-type changes: CRC value (modversions) changed from 0xa46ab006 to 0xb89deee7 [C] 'function int netdev_master_upper_dev_link(net_device*, net_device*, void*, void*, netlink_ext_ack*)' at dev.c:7377:1 has some sub-type changes: CRC value (modversions) changed from 0xd3864d7e to 0x2c6fb42f [C] 'function void netdev_notify_peers(net_device*)' at dev.c:1290:1 has some sub-type changes: CRC value (modversions) changed from 0x6f93ff1e to 0x44a41ad9 [C] 'function u16 netdev_pick_tx(net_device*, sk_buff*, net_device*)' at dev.c:3622:1 has some sub-type changes: CRC value (modversions) changed from 0x39e31411 to 0x33f55219 [C] 'function void netdev_printk(const char*, const net_device*, const char*, ...)' at netdevice.h:4759:1 has some sub-type changes: CRC value (modversions) changed from 0x5ba9c77a to 0x178668e4 [C] 'function int netdev_rx_handler_register(net_device*, rx_handler_func_t*, void*)' at dev.c:4642:1 has some sub-type changes: CRC value (modversions) changed from 0xc2e40f3a to 0xbc3cd807 [C] 'function void netdev_rx_handler_unregister(net_device*)' at dev.c:4668:1 has some sub-type changes: CRC value (modversions) changed from 0xc58453cb to 0xa53bd945 [C] 'function int netdev_upper_dev_link(net_device*, net_device*, netlink_ext_ack*)' at dev.c:7354:1 has some sub-type changes: CRC value (modversions) changed from 0x9a43d7b6 to 0xd49687b9 [C] 'function void netdev_upper_dev_unlink(net_device*, net_device*)' at dev.c:7395:1 has some sub-type changes: CRC value (modversions) changed from 0xaae17b56 to 0xf5a4838f [C] 'function void netdev_warn(const net_device*, const char*, ...)' at netdevice.h:4770:1 has some sub-type changes: CRC value (modversions) changed from 0x8ed84003 to 0x7b02a93b [C] 'function void netif_carrier_off(net_device*)' at netdevice.h:3832:1 has some sub-type changes: CRC value (modversions) changed from 0x6a05d1b0 to 0x86b0ad5a [C] 'function void netif_carrier_on(net_device*)' at netdevice.h:3830:1 has some sub-type changes: CRC value (modversions) changed from 0x41d6f911 to 0x1f277d4c [C] 'function void netif_device_attach(net_device*)' at netdevice.h:3901:1 has some sub-type changes: CRC value (modversions) changed from 0xc60aef5 to 0x779c0ec4 [C] 'function void netif_device_detach(net_device*)' at netdevice.h:3899:1 has some sub-type changes: CRC value (modversions) changed from 0xf96b632d to 0xc25d6ab0 [C] 'function void netif_napi_add(net_device*, napi_struct*, int (napi_struct*, int)*, int)' at netdevice.h:2265:1 has some sub-type changes: CRC value (modversions) changed from 0x949f5ff4 to 0x310d3b5b [C] 'function void netif_napi_del(napi_struct*)' at netdevice.h:2294:1 has some sub-type changes: CRC value (modversions) changed from 0xc5881500 to 0x890a4968 [C] 'function int netif_receive_skb(sk_buff*)' at netdevice.h:3680:1 has some sub-type changes: CRC value (modversions) changed from 0x6674ac74 to 0xe6a07190 [C] 'function int netif_rx(sk_buff*)' at netdevice.h:3678:1 has some sub-type changes: CRC value (modversions) changed from 0xdfbcbaa6 to 0x69f585b9 [C] 'function int netif_rx_ni(sk_buff*)' at dev.c:4467:1 has some sub-type changes: CRC value (modversions) changed from 0xfd40bb10 to 0x407ffbbc [C] 'function void netif_schedule_queue(netdev_queue*)' at netdevice.h:3112:1 has some sub-type changes: CRC value (modversions) changed from 0x2183754e to 0xab08223b [C] 'function int netif_set_real_num_rx_queues(net_device*, unsigned int)' at netdevice.h:3598:1 has some sub-type changes: CRC value (modversions) changed from 0x22242c6 to 0x3c70ad02 [C] 'function int netif_set_real_num_tx_queues(net_device*, unsigned int)' at netdevice.h:3595:1 has some sub-type changes: CRC value (modversions) changed from 0xe53b355f to 0x1c9e8e3e [C] 'function void netif_stacked_transfer_operstate(const net_device*, net_device*)' at dev.c:8836:1 has some sub-type changes: CRC value (modversions) changed from 0x8f5465ad to 0x97cf52c4 [C] 'function void netif_tx_stop_all_queues(net_device*)' at netdevice.h:3189:1 has some sub-type changes: CRC value (modversions) changed from 0x705eade3 to 0xd4655a1e [C] 'function void netif_tx_wake_queue(netdev_queue*)' at netdevice.h:3148:1 has some sub-type changes: CRC value (modversions) changed from 0x1068efd6 to 0xae6bdf31 [C] 'function int netlink_broadcast(sock*, sk_buff*, unsigned int, unsigned int, unsigned int)' at netlink.h:132:1 has some sub-type changes: CRC value (modversions) changed from 0x365033f2 to 0xa5ffc7bf [C] 'function bool netlink_capable(const sk_buff*, int)' at netlink.h:249:1 has some sub-type changes: CRC value (modversions) changed from 0x41cea6c5 to 0x20b3183f [C] 'function int netlink_has_listeners(sock*, unsigned int)' at netlink.h:128:1 has some sub-type changes: CRC value (modversions) changed from 0x9462cd1d to 0x46f916c [C] 'function void netlink_kernel_release(sock*)' at netlink.h:122:1 has some sub-type changes: CRC value (modversions) changed from 0xbf1edfce to 0x7d9d2d25 [C] 'function bool netlink_net_capable(const sk_buff*, int)' at netlink.h:250:1 has some sub-type changes: CRC value (modversions) changed from 0x4202f7d5 to 0x6efdf388 [C] 'function int netlink_unicast(sock*, sk_buff*, unsigned int, int)' at netlink.h:131:1 has some sub-type changes: CRC value (modversions) changed from 0x19f911e6 to 0xb453150a [C] 'function inode* new_inode(super_block*)' at fs.h:3141:1 has some sub-type changes: CRC value (modversions) changed from 0x100aea3 to 0x96584627 [C] 'function nf_conntrack_tuple_hash* nf_conntrack_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)' at nf_conntrack_core.h:49:1 has some sub-type changes: CRC value (modversions) changed from 0xf7c5bb13 to 0xdbd80acc [C] 'function bool nf_ct_get_tuplepr(const sk_buff*, unsigned int, unsigned short int, net*, nf_conntrack_tuple*)' at nf_conntrack.h:182:1 has some sub-type changes: CRC value (modversions) changed from 0x1d22596c to 0x8e7b6bb6 [C] 'function const nf_conntrack_l4proto* nf_ct_l4proto_find(unsigned char)' at nf_conntrack_l4proto.h:149:1 has some sub-type changes: CRC value (modversions) changed from 0xbd990c80 to 0x47c7ab97 [C] 'function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int)' at netfilter.h:185:1 has some sub-type changes: CRC value (modversions) changed from 0x4a56ca9c to 0x45795695 [C] 'function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int)' at netfilter.h:187:1 has some sub-type changes: CRC value (modversions) changed from 0xd1576304 to 0x35d70773 [C] 'function loff_t no_llseek(file*, loff_t, int)' at read_write.c:230:1 has some sub-type changes: CRC value (modversions) changed from 0x3eb088a7 to 0x594b656f [C] 'function int nonseekable_open(inode*, file*)' at open.c:1236:1 has some sub-type changes: CRC value (modversions) changed from 0x2f458ba4 to 0x9e65be3b [C] 'function loff_t noop_llseek(file*, loff_t, int)' at read_write.c:224:1 has some sub-type changes: CRC value (modversions) changed from 0x503b6003 to 0x58c044b4 [C] 'function int notify_change(dentry*, iattr*, inode**)' at fs.h:2948:1 has some sub-type changes: CRC value (modversions) changed from 0x432718de to 0x1101882e [C] 'function nvdimm_bus* nvdimm_bus_register(device*, nvdimm_bus_descriptor*)' at libnvdimm.h:213:1 has some sub-type changes: CRC value (modversions) changed from 0x828919e7 to 0x7c46dc03 [C] 'function void nvdimm_bus_unregister(nvdimm_bus*)' at libnvdimm.h:215:1 has some sub-type changes: CRC value (modversions) changed from 0xef7309c7 to 0xf635921f [C] 'function nd_region* nvdimm_pmem_region_create(nvdimm_bus*, nd_region_desc*)' at libnvdimm.h:250:1 has some sub-type changes: CRC value (modversions) changed from 0x4984f317 to 0xae1e8b0a [C] 'function nvmem_cell* nvmem_cell_get(device*, const char*)' at nvmem-consumer.h:58:1 has some sub-type changes: CRC value (modversions) changed from 0xd2d3da2f to 0x446c0325 [C] 'function int nvmem_cell_read_u32(device*, const char*, u32*)' at core.c:1129:1 has some sub-type changes: CRC value (modversions) changed from 0x9bb44e19 to 0x8e3dc8a [C] 'function int nvmem_device_read(nvmem_device*, unsigned int, unsigned long int, void*)' at nvmem-consumer.h:73:1 has some sub-type changes: CRC value (modversions) changed from 0x7321fa23 to 0x15ad3882 [C] 'function int nvmem_device_write(nvmem_device*, unsigned int, unsigned long int, void*)' at nvmem-consumer.h:75:1 has some sub-type changes: CRC value (modversions) changed from 0xcac8ce3e to 0x390082d5 [C] 'function int of_address_to_resource(device_node*, int, resource*)' at of_address.h:113:1 has some sub-type changes: CRC value (modversions) changed from 0x45b29707 to 0xa961df97 [C] 'function int of_alias_get_id(device_node*, const char*)' at of.h:392:1 has some sub-type changes: CRC value (modversions) changed from 0x9978d46b to 0xbb0a96b5 [C] 'function int of_clk_add_hw_provider(device_node*, clk_hw* (of_phandle_args*, void*)*, void*)' at clk-provider.h:1048:1 has some sub-type changes: CRC value (modversions) changed from 0xacc45efd to 0xc6b53119 [C] 'function int of_clk_add_provider(device_node*, clk* (of_phandle_args*, void*)*, void*)' at clk-provider.h:1044:1 has some sub-type changes: CRC value (modversions) changed from 0x7a6043c7 to 0xad968f53 [C] 'function void of_clk_del_provider(device_node*)' at clk-provider.h:1056:1 has some sub-type changes: CRC value (modversions) changed from 0xaf33a466 to 0x15b05ce5 [C] 'function clk* of_clk_get(device_node*, int)' at clk.h:966:1 has some sub-type changes: CRC value (modversions) changed from 0xd0102547 to 0xa89cbba6 [C] 'function clk* of_clk_get_by_name(device_node*, const char*)' at clk.h:967:1 has some sub-type changes: CRC value (modversions) changed from 0x308cd556 to 0x95fd9a94 [C] 'function clk* of_clk_get_from_provider(of_phandle_args*)' at clk.c:4688:1 has some sub-type changes: CRC value (modversions) changed from 0xd3fa7420 to 0xa6f9df84 [C] 'function unsigned int of_clk_get_parent_count(device_node*)' at clk.c:4752:1 has some sub-type changes: CRC value (modversions) changed from 0x31c79278 to 0x7a27273f [C] 'function const char* of_clk_get_parent_name(device_node*, int)' at clk.c:4764:1 has some sub-type changes: CRC value (modversions) changed from 0x169a1bc5 to 0x6edd1f5d [C] 'function clk_hw* of_clk_hw_onecell_get(of_phandle_args*, void*)' at clk.c:4368:1 has some sub-type changes: CRC value (modversions) changed from 0x788dee44 to 0x87d01fc9 [C] 'function int of_clk_hw_register(device_node*, clk_hw*)' at clk.c:3895:1 has some sub-type changes: CRC value (modversions) changed from 0x9fd9624c to 0x5e75753d [C] 'function clk_hw* of_clk_hw_simple_get(of_phandle_args*, void*)' at clk.c:4347:1 has some sub-type changes: CRC value (modversions) changed from 0x49ee2289 to 0x1b75df50 [C] 'function int of_clk_set_defaults(device_node*, bool)' at clk-conf.h:15:1 has some sub-type changes: CRC value (modversions) changed from 0x28b635bf to 0xb16f3f53 [C] 'function clk* of_clk_src_onecell_get(of_phandle_args*, void*)' at clk.c:4353:1 has some sub-type changes: CRC value (modversions) changed from 0xfe748b6e to 0x6981863f [C] 'function clk* of_clk_src_simple_get(of_phandle_args*, void*)' at clk.c:4340:1 has some sub-type changes: CRC value (modversions) changed from 0x84e73578 to 0xfa9e88a3 [C] 'function int of_count_phandle_with_args(const device_node*, const char*, const char*)' at of.h:376:1 has some sub-type changes: CRC value (modversions) changed from 0xa9eb43ee to 0xd987410e [C] 'function thermal_cooling_device* of_cpufreq_cooling_register(cpufreq_policy*)' at cpu_cooling.c:690:1 has some sub-type changes: CRC value (modversions) changed from 0xfa1d3b8a to 0x5762d675 [C] 'function void of_dev_put(platform_device*)' at device.c:49:1 has some sub-type changes: CRC value (modversions) changed from 0x223dc15b to 0x65552c5 [C] 'function thermal_cooling_device* of_devfreq_cooling_register(device_node*, devfreq*)' at devfreq_cooling.c:572:1 has some sub-type changes: CRC value (modversions) changed from 0xecb71956 to 0xfd6cc5e5 [C] 'function thermal_cooling_device* of_devfreq_cooling_register_power(device_node*, devfreq*, devfreq_cooling_power*)' at devfreq_cooling.c:505:1 has some sub-type changes: CRC value (modversions) changed from 0x1a07eadc to 0x10f6a32a [C] 'function void* of_device_get_match_data(const device*)' at of_device.h:36:1 has some sub-type changes: CRC value (modversions) changed from 0x69aa5b2f to 0xec74232a [C] 'function bool of_device_is_available(const device_node*)' at of.h:347:1 has some sub-type changes: CRC value (modversions) changed from 0xf04d5e19 to 0x8951bd74 [C] 'function bool of_device_is_big_endian(const device_node*)' at of.h:348:1 has some sub-type changes: CRC value (modversions) changed from 0x6c0e0fc8 to 0xbb069ce [C] 'function int of_device_is_compatible(const device_node*, const char*)' at of.h:343:1 has some sub-type changes: CRC value (modversions) changed from 0x495d72c4 to 0x915a41b4 [C] 'function long int of_device_modalias(device*, char*, long int)' at of_device.h:38:1 has some sub-type changes: CRC value (modversions) changed from 0x30b4008b to 0xce14e92 [C] 'function int of_device_request_module(device*)' at device.c:239:1 has some sub-type changes: CRC value (modversions) changed from 0x3f0a3786 to 0xa2992c67 [C] 'function int of_device_uevent_modalias(device*, kobj_uevent_env*)' at of_device.h:42:1 has some sub-type changes: CRC value (modversions) changed from 0xbda2995f to 0x3058fbe2 [C] 'function int of_dma_configure(device*, device_node*, bool)' at of_device.h:58:1 has some sub-type changes: CRC value (modversions) changed from 0xe0358156 to 0xcf187e2c [C] 'function void of_dma_controller_free(device_node*)' at of-dma.c:136:1 has some sub-type changes: CRC value (modversions) changed from 0xebe4a0d4 to 0x76636c7 [C] 'function int of_dma_controller_register(device_node*, dma_chan* (of_phandle_args*, of_dma*)*, void*)' at of-dma.c:101:1 has some sub-type changes: CRC value (modversions) changed from 0x61e6a258 to 0x3992da70 [C] 'function bool of_dma_is_coherent(device_node*)' at of_address.h:59:1 has some sub-type changes: CRC value (modversions) changed from 0xff909b9b to 0xec68b95d [C] 'function dma_chan* of_dma_request_slave_channel(device_node*, const char*)' at of_dma.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0x436e94e3 to 0xf1285b2a [C] 'function dma_chan* of_dma_simple_xlate(of_phandle_args*, of_dma*)' at of-dma.c:304:1 has some sub-type changes: CRC value (modversions) changed from 0xf484c3e to 0x14e396c1 [C] 'function drm_bridge* of_drm_find_bridge(device_node*)' at drm_bridge.c:475:1 has some sub-type changes: CRC value (modversions) changed from 0x110087c8 to 0x31b2d417 [C] 'function drm_panel* of_drm_find_panel(const device_node*)' at drm_panel.c:248:1 has some sub-type changes: CRC value (modversions) changed from 0xbd1e6336 to 0x7a4e948d [C] 'function void* of_fdt_unflatten_tree(const unsigned long int*, device_node*, device_node**)' at fdt.c:448:1 has some sub-type changes: CRC value (modversions) changed from 0xa97a8b84 to 0x9d3d5e0 [C] 'function backlight_device* of_find_backlight_by_node(device_node*)' at backlight.c:592:1 has some sub-type changes: CRC value (modversions) changed from 0x1745e6f9 to 0xe947b585 [C] 'function device_node* of_find_compatible_node(device_node*, const char*, const char*)' at of.h:271:1 has some sub-type changes: CRC value (modversions) changed from 0x68d87281 to 0x219e5a05 [C] 'function platform_device* of_find_device_by_node(device_node*)' at of_platform.h:56:1 has some sub-type changes: CRC value (modversions) changed from 0xe47859a1 to 0x29445c9d [C] 'function i2c_adapter* of_find_i2c_adapter_by_node(device_node*)' at i2c-core-of.c:147:1 has some sub-type changes: CRC value (modversions) changed from 0x74be0e87 to 0x3cd5e95a [C] 'function i2c_client* of_find_i2c_device_by_node(device_node*)' at i2c-core-of.c:129:1 has some sub-type changes: CRC value (modversions) changed from 0x4c031ff1 to 0x3bae7d0f [C] 'function device_node* of_find_matching_node_and_match(device_node*, const of_device_id*, const of_device_id**)' at of.h:273:1 has some sub-type changes: CRC value (modversions) changed from 0x5d53ef34 to 0x16c6aad5 [C] 'function mipi_dsi_host* of_find_mipi_dsi_host_by_node(device_node*)' at drm_mipi_dsi.c:261:1 has some sub-type changes: CRC value (modversions) changed from 0xc28ec2ba to 0xa19b7bf4 [C] 'function device_node* of_find_node_by_name(device_node*, const char*)' at of.h:267:1 has some sub-type changes: CRC value (modversions) changed from 0x56869dd0 to 0xe6e45d4a [C] 'function device_node* of_find_node_by_phandle(unsigned int)' at of.h:285:1 has some sub-type changes: CRC value (modversions) changed from 0xe3bc1183 to 0xa6bd526e [C] 'function device_node* of_find_node_by_type(device_node*, const char*)' at base.c:1037:1 has some sub-type changes: CRC value (modversions) changed from 0xd5e99c29 to 0x658b5cb3 [C] 'function device_node* of_find_node_opts_by_path(const char*, const char**)' at of.h:278:1 has some sub-type changes: CRC value (modversions) changed from 0x5376b60c to 0xe12e0e76 [C] 'function device_node* of_find_node_with_property(device_node*, const char*)' at of.h:301:1 has some sub-type changes: CRC value (modversions) changed from 0x2523bd2d to 0x24baa14b [C] 'function property* of_find_property(const device_node*, const char*, int*)' at of.h:304:1 has some sub-type changes: CRC value (modversions) changed from 0x1c9296df to 0x2e6f0712 [C] 'function int of_genpd_add_provider_onecell(device_node*, genpd_onecell_data*)' at domain.c:2085:1 has some sub-type changes: CRC value (modversions) changed from 0x7661fb82 to 0x19a8ea97 [C] 'function int of_genpd_add_provider_simple(device_node*, generic_pm_domain*)' at domain.c:2028:1 has some sub-type changes: CRC value (modversions) changed from 0xfc9bd872 to 0x722583fb [C] 'function int of_genpd_add_subdomain(of_phandle_args*, of_phandle_args*)' at domain.c:2276:1 has some sub-type changes: CRC value (modversions) changed from 0xe98ea1d7 to 0xab7c93c1 [C] 'function void of_genpd_del_provider(device_node*)' at domain.c:2165:1 has some sub-type changes: CRC value (modversions) changed from 0x3ec174f to 0x4c25a695 [C] 'function const __be32* of_get_address(device_node*, int, u64*, unsigned int*)' at address.c:740:1 has some sub-type changes: CRC value (modversions) changed from 0x553abf25 to 0xb914766e [C] 'function device_node* of_get_child_by_name(const device_node*, const char*)' at of.h:295:1 has some sub-type changes: CRC value (modversions) changed from 0x7fc525d6 to 0x7e5c39b0 [C] 'function device_node* of_get_compatible_child(const device_node*, const char*)' at base.c:860:1 has some sub-type changes: CRC value (modversions) changed from 0x3d4a043c to 0x1eb4c512 [C] 'function device_node* of_get_cpu_node(int, unsigned int*)' at of.h:352:1 has some sub-type changes: CRC value (modversions) changed from 0xc319499 to 0xd918b153 [C] 'function int of_get_dma_window(device_node*, const char*, int, unsigned long int*, dma_addr_t*, size_t*)' at of_iommu.c:34:1 has some sub-type changes: CRC value (modversions) changed from 0xd578e7cb to 0x24e83d83 [C] 'function int of_get_drm_display_mode(device_node*, drm_display_mode*, u32*, int)' at drm_modes.c:707:1 has some sub-type changes: CRC value (modversions) changed from 0x2c5f4e6b to 0x60b2d1d5 [C] 'function int of_get_named_gpio_flags(device_node*, const char*, int, of_gpio_flags*)' at of_gpio.h:51:1 has some sub-type changes: CRC value (modversions) changed from 0x4ee3a64b to 0x1432e34f [C] 'function device_node* of_get_next_available_child(const device_node*, device_node*)' at of.h:290:1 has some sub-type changes: CRC value (modversions) changed from 0x9cb84de5 to 0xb866b4ff [C] 'function device_node* of_get_next_child(const device_node*, device_node*)' at of.h:288:1 has some sub-type changes: CRC value (modversions) changed from 0xb0bfd054 to 0x57db08a0 [C] 'function device_node* of_get_parent(const device_node*)' at of.h:286:1 has some sub-type changes: CRC value (modversions) changed from 0xd76750ec to 0x42ee6335 [C] 'function void* of_get_property(const device_node*, const char*, int*)' at of.h:349:1 has some sub-type changes: CRC value (modversions) changed from 0xbf183df to 0xc74f2a3f [C] 'function regulator_init_data* of_get_regulator_init_data(device*, device_node*, const regulator_desc*)' at of_regulator.h:22:1 has some sub-type changes: CRC value (modversions) changed from 0x5528fe5d to 0x2661976a [C] 'function int of_get_videomode(device_node*, videomode*, int)' at of_videomode.c:30:1 has some sub-type changes: CRC value (modversions) changed from 0x8efd6b8c to 0xdf285e34 [C] 'function device_node* of_graph_get_endpoint_by_regs(const device_node*, int, int)' at property.c:665:1 has some sub-type changes: CRC value (modversions) changed from 0xa6fe44df to 0x8d41a8f6 [C] 'function device_node* of_graph_get_next_endpoint(const device_node*, device_node*)' at of_graph.h:45:1 has some sub-type changes: CRC value (modversions) changed from 0x7590089d to 0xa240236 [C] 'function device_node* of_graph_get_remote_node(const device_node*, unsigned int, unsigned int)' at of_graph.h:55:1 has some sub-type changes: CRC value (modversions) changed from 0x41d4e353 to 0xddfee4c5 [C] 'function device_node* of_graph_get_remote_port_parent(const device_node*)' at of_graph.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0xa08f2f6d to 0xae2eb7da [C] 'function int of_graph_parse_endpoint(const device_node*, of_endpoint*)' at of_graph.h:41:1 has some sub-type changes: CRC value (modversions) changed from 0x92e98bae to 0x9f2dc6d [C] 'function int of_hwspin_lock_get_id(device_node*, int)' at hwspinlock.h:64:1 has some sub-type changes: CRC value (modversions) changed from 0xbbff4330 to 0x5f4991b8 [C] 'function int of_hwspin_lock_get_id_byname(device_node*, const char*)' at hwspinlock_core.c:406:1 has some sub-type changes: CRC value (modversions) changed from 0xe514e322 to 0xf3040b78 [C] 'function icc_path* of_icc_get(device*, const char*)' at core.c:294:1 has some sub-type changes: CRC value (modversions) changed from 0x7644b3a3 to 0x170ab849 [C] 'function icc_node* of_icc_xlate_onecell(of_phandle_args*, void*)' at core.c:234:1 has some sub-type changes: CRC value (modversions) changed from 0x11351162 to 0x44418c15 [C] 'function void* of_io_request_and_map(device_node*, int, const char*)' at of_address.h:42:1 has some sub-type changes: CRC value (modversions) changed from 0x57d2414e to 0x3dc3f8a2 [C] 'function void* of_iomap(device_node*, int)' at of_address.h:115:1 has some sub-type changes: CRC value (modversions) changed from 0x885e00d to 0xeb62b4f5 [C] 'function device_node* of_irq_find_parent(device_node*)' at irq.c:54:1 has some sub-type changes: CRC value (modversions) changed from 0x99fdf3fe to 0x411226c5 [C] 'function int of_irq_get(device_node*, int)' at of_irq.h:46:1 has some sub-type changes: CRC value (modversions) changed from 0x2f7918f4 to 0x3401d750 [C] 'function int of_irq_get_byname(device_node*, const char*)' at of_irq.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0xb15f16f4 to 0x6bb08e19 [C] 'function int of_irq_parse_and_map_pci(const pci_dev*, u8, u8)' at of.c:469:1 has some sub-type changes: CRC value (modversions) changed from 0x5c55851b to 0xdb60be8f [C] 'function int of_irq_parse_one(device_node*, int, of_phandle_args*)' at of_irq.h:36:1 has some sub-type changes: CRC value (modversions) changed from 0xfc6e7449 to 0x3fb69f16 [C] 'function int of_irq_to_resource(device_node*, int, resource*)' at irq.c:349:1 has some sub-type changes: CRC value (modversions) changed from 0x2a13b8c2 to 0xefe7ce3e [C] 'function const of_device_id* of_match_device(const of_device_id*, const device*)' at of_device.h:15:1 has some sub-type changes: CRC value (modversions) changed from 0x848d8efc to 0xa7888331 [C] 'function const of_device_id* of_match_node(const of_device_id*, const device_node*)' at of.h:360:1 has some sub-type changes: CRC value (modversions) changed from 0x905bd9d8 to 0xd702a0ef [C] 'function int of_mdiobus_register(mii_bus*, device_node*)' at of_mdio.c:199:1 has some sub-type changes: CRC value (modversions) changed from 0xf630626f to 0xb62a9373 [C] 'function int of_modalias_node(device_node*, char*, int)' at of.h:362:1 has some sub-type changes: CRC value (modversions) changed from 0xfbcf5b5b to 0x672d1e33 [C] 'function int of_n_addr_cells(device_node*)' at of.h:358:1 has some sub-type changes: CRC value (modversions) changed from 0xaad8df1e to 0x17d62c73 [C] 'function int of_n_size_cells(device_node*)' at of.h:359:1 has some sub-type changes: CRC value (modversions) changed from 0xe01415a0 to 0x2f81ba5f [C] 'function bool of_node_name_eq(const device_node*, const char*)' at of.h:256:1 has some sub-type changes: CRC value (modversions) changed from 0x9e68bbf3 to 0x16202a10 [C] 'function nvmem_cell* of_nvmem_cell_get(device_node*, const char*)' at core.c:766:1 has some sub-type changes: CRC value (modversions) changed from 0xf93a43f8 to 0x1bc9117a [C] 'function device_node* of_parse_phandle(const device_node*, const char*, int)' at of.h:364:1 has some sub-type changes: CRC value (modversions) changed from 0xa233d065 to 0x85954192 [C] 'function int of_parse_phandle_with_args(const device_node*, const char*, const char*, int, of_phandle_args*)' at of.h:367:1 has some sub-type changes: CRC value (modversions) changed from 0x5baad13b to 0xcd0224e9 [C] 'function int of_parse_phandle_with_fixed_args(const device_node*, const char*, int, int, of_phandle_args*)' at of.h:373:1 has some sub-type changes: CRC value (modversions) changed from 0xfa9f641 to 0xd5af30d0 [C] 'function int of_phandle_iterator_init(of_phandle_iterator*, const device_node*, const char*, const char*, int)' at of.h:380:1 has some sub-type changes: CRC value (modversions) changed from 0xf18f9ca6 to 0x74c5c195 [C] 'function int of_phandle_iterator_next(of_phandle_iterator*)' at of.h:386:1 has some sub-type changes: CRC value (modversions) changed from 0x5c77b85c to 0x80a49ee1 [C] 'function phy* of_phy_simple_xlate(device*, of_phandle_args*)' at phy-core.c:619:1 has some sub-type changes: CRC value (modversions) changed from 0x511c600 to 0x26fcf2c1 [C] 'function void of_platform_depopulate(device*)' at platform.c:590:1 has some sub-type changes: CRC value (modversions) changed from 0xdd63fb3e to 0x6e4ef506 [C] 'function platform_device* of_platform_device_create(device_node*, const char*, device*)' at of_platform.h:65:1 has some sub-type changes: CRC value (modversions) changed from 0x65a5f375 to 0xb9ad4db6 [C] 'function int of_platform_populate(device_node*, const of_device_id*, const of_dev_auxdata*, device*)' at platform.c:468:1 has some sub-type changes: CRC value (modversions) changed from 0x59f8e169 to 0x4b0f5854 [C] 'function const char* of_prop_next_string(property*, const char*)' at of.h:549:1 has some sub-type changes: CRC value (modversions) changed from 0x5f7e96cc to 0x5c55df6f [C] 'function const unsigned int* of_prop_next_u32(property*, const unsigned int*, unsigned int*)' at of.h:540:1 has some sub-type changes: CRC value (modversions) changed from 0x97f29a9 to 0x5b569ca9 [C] 'function int of_property_count_elems_of_size(const device_node*, const char*, int)' at of.h:307:1 has some sub-type changes: CRC value (modversions) changed from 0x94b4dd2f to 0x3ba2d53c [C] 'function int of_property_match_string(const device_node*, const char*, const char*)' at of.h:337:1 has some sub-type changes: CRC value (modversions) changed from 0xc82c3697 to 0x635adc0e [C] 'function int of_property_read_string(const device_node*, const char*, const char**)' at of.h:334:1 has some sub-type changes: CRC value (modversions) changed from 0x14450824 to 0x45b837a [C] 'function int of_property_read_string_helper(const device_node*, const char*, const char**, unsigned long int, int)' at of.h:340:1 has some sub-type changes: CRC value (modversions) changed from 0x120107fc to 0x8f63be4e [C] 'function int of_property_read_u32_index(const device_node*, const char*, unsigned int, unsigned int*)' at of.h:309:1 has some sub-type changes: CRC value (modversions) changed from 0xd50581ec to 0xfd4920af [C] 'function int of_property_read_u64(const device_node*, const char*, long long unsigned int*)' at of.h:326:1 has some sub-type changes: CRC value (modversions) changed from 0xe13ade69 to 0x65803055 [C] 'function int of_property_read_u64_index(const device_node*, const char*, u32, u64*)' at property.c:146:1 has some sub-type changes: CRC value (modversions) changed from 0xd06e40ba to 0xb2c6c45c [C] 'function int of_property_read_variable_u16_array(const device_node*, const char*, u16*, size_t, size_t)' at property.c:232:1 has some sub-type changes: CRC value (modversions) changed from 0x4a7568f3 to 0x536c9687 [C] 'function int of_property_read_variable_u32_array(const device_node*, const char*, unsigned int*, unsigned long int, unsigned long int)' at of.h:321:1 has some sub-type changes: CRC value (modversions) changed from 0x88da51b to 0x861fbb2b [C] 'function int of_property_read_variable_u64_array(const device_node*, const char*, u64*, size_t, size_t)' at property.c:351:1 has some sub-type changes: CRC value (modversions) changed from 0x681aa15 to 0xea38702a [C] 'function int of_property_read_variable_u8_array(const device_node*, const char*, u8*, size_t, size_t)' at property.c:184:1 has some sub-type changes: CRC value (modversions) changed from 0x14617cf7 to 0x24a721b2 [C] 'function pwm_device* of_pwm_get(device*, device_node*, const char*)' at core.c:678:1 has some sub-type changes: CRC value (modversions) changed from 0xb4016629 to 0x9f5aa01c [C] 'function pwm_device* of_pwm_xlate_with_flags(pwm_chip*, const of_phandle_args*)' at core.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0xf22f8d02 to 0x72de3c4a [C] 'function int of_reserved_mem_device_init_by_idx(device*, device_node*, int)' at of_reserved_mem.c:312:1 has some sub-type changes: CRC value (modversions) changed from 0xcc469347 to 0x84e40699 [C] 'function void of_reserved_mem_device_release(device*)' at of_reserved_mem.c:367:1 has some sub-type changes: CRC value (modversions) changed from 0xf2586c68 to 0x7f26fd62 [C] 'function reserved_mem* of_reserved_mem_lookup(device_node*)' at of_reserved_mem.c:399:1 has some sub-type changes: CRC value (modversions) changed from 0xfbb19b4b to 0x4e5eb6f1 [C] 'function reset_control* of_reset_control_array_get(device_node*, bool, bool, bool)' at reset.h:36:1 has some sub-type changes: CRC value (modversions) changed from 0x62cfea0 to 0x8093db16 [C] 'function int of_thermal_get_ntrips(thermal_zone_device*)' at thermal_core.h:96:1 has some sub-type changes: CRC value (modversions) changed from 0xc54bb589 to 0xf1a3515d [C] 'function const thermal_trip* of_thermal_get_trip_points(thermal_zone_device*)' at thermal_core.h:99:1 has some sub-type changes: CRC value (modversions) changed from 0xde90c6e8 to 0x45291909 [C] 'function bool of_thermal_is_trip_valid(thermal_zone_device*, int)' at of-thermal.c:142:1 has some sub-type changes: CRC value (modversions) changed from 0xa9de5815 to 0x5e7a1e71 [C] 'function long long unsigned int of_translate_address(device_node*, const unsigned int*)' at of_address.h:34:1 has some sub-type changes: CRC value (modversions) changed from 0x26cd87a3 to 0x9c9b6c94 [C] 'function usb_phy_interface of_usb_get_phy_mode(device_node*)' at of.c:28:1 has some sub-type changes: CRC value (modversions) changed from 0xaaba881 to 0x2bcbff85 [C] 'function bool of_usb_host_tpl_support(device_node*)' at common.c:208:1 has some sub-type changes: CRC value (modversions) changed from 0x79cec2ef to 0x948019f4 [C] 'function page* pagecache_get_page(address_space*, unsigned long int, int, unsigned int)' at pagemap.h:244:1 has some sub-type changes: CRC value (modversions) changed from 0xe0ca61ac to 0xf0c2cb7d [C] 'function int param_get_int(char*, const kernel_param*)' at params.c:239:1 has some sub-type changes: CRC value (modversions) changed from 0x92ed4985 to 0x574431f5 [C] 'function int param_get_string(char*, const kernel_param*)' at params.c:505:1 has some sub-type changes: CRC value (modversions) changed from 0xa74a8ead to 0xdd399c2f [C] 'function int param_get_ullong(char*, const kernel_param*)' at params.c:243:1 has some sub-type changes: CRC value (modversions) changed from 0x2bd2c4e6 to 0xa5b11f62 [C] 'function int param_set_bool(const char*, const kernel_param*)' at moduleparam.h:387:1 has some sub-type changes: CRC value (modversions) changed from 0xdc647b9b to 0x2760171a [C] 'function int param_set_copystring(const char*, const kernel_param*)' at params.c:491:1 has some sub-type changes: CRC value (modversions) changed from 0x62a6bb26 to 0x28ce25f0 [C] 'function int param_set_int(const char*, const kernel_param*)' at params.c:239:1 has some sub-type changes: CRC value (modversions) changed from 0x2948a640 to 0xf519b7a1 [C] 'function int param_set_uint(const char*, const kernel_param*)' at params.c:240:1 has some sub-type changes: CRC value (modversions) changed from 0x738bbf9d to 0x33baf877 [C] 'function netdev_features_t passthru_features_check(sk_buff*, net_device*, netdev_features_t)' at dev.c:3114:1 has some sub-type changes: CRC value (modversions) changed from 0xdc5a901e to 0x7ddcffb7 [C] 'function void path_get(const path*)' at path.h:13:1 has some sub-type changes: CRC value (modversions) changed from 0x22ea7276 to 0xa5ea9115 [C] 'function void path_put(const path*)' at path.h:14:1 has some sub-type changes: CRC value (modversions) changed from 0x4a204e72 to 0x3efc8d2a [C] 'function int pci_alloc_irq_vectors_affinity(pci_dev*, unsigned int, unsigned int, unsigned int, irq_affinity*)' at pci.h:1466:1 has some sub-type changes: CRC value (modversions) changed from 0x1edc705a to 0x9001484a [C] 'function int pci_assign_resource(pci_dev*, int)' at pci.h:1217:1 has some sub-type changes: CRC value (modversions) changed from 0xcd91b700 to 0xa6bc2d25 [C] 'function void pci_assign_unassigned_bus_resources(pci_bus*)' at pci.h:1292:1 has some sub-type changes: CRC value (modversions) changed from 0xecb49243 to 0x6ca67a22 [C] 'function void pci_bus_add_devices(const pci_bus*)' at bus.c:342:1 has some sub-type changes: CRC value (modversions) changed from 0x2c82bafe to 0xab27cad4 [C] 'function bool pci_check_and_mask_intx(pci_dev*)' at pci.c:4396:1 has some sub-type changes: CRC value (modversions) changed from 0x845ed47e to 0x1c8dffdf [C] 'function bool pci_check_and_unmask_intx(pci_dev*)' at pci.c:4410:1 has some sub-type changes: CRC value (modversions) changed from 0x4892931d to 0xbc95ed9e [C] 'function void pci_clear_master(pci_dev*)' at pci.c:4177:1 has some sub-type changes: CRC value (modversions) changed from 0xa8bab6f1 to 0xd4e051b3 [C] 'function u8 pci_common_swizzle(pci_dev*, u8*)' at pci.c:3646:1 has some sub-type changes: CRC value (modversions) changed from 0xfc99505f to 0xe3460c07 [C] 'function void pci_d3cold_disable(pci_dev*)' at pci.c:2772:1 has some sub-type changes: CRC value (modversions) changed from 0x44b93b8c to 0x88a19132 [C] 'function pci_dev* pci_dev_get(pci_dev*)' at pci-driver.c:1533:1 has some sub-type changes: CRC value (modversions) changed from 0xa338492a to 0xcb7b838c [C] 'function void pci_dev_put(pci_dev*)' at pci.h:1038:1 has some sub-type changes: CRC value (modversions) changed from 0x5d63f6c2 to 0x4c2a26f0 [C] 'function iommu_group* pci_device_group(device*)' at iommu.c:1287:1 has some sub-type changes: CRC value (modversions) changed from 0x4d2c3c9 to 0xf1421d62 [C] 'function bool pci_device_is_present(pci_dev*)' at pci.c:6063:1 has some sub-type changes: CRC value (modversions) changed from 0x347c4cc8 to 0x9d8dade3 [C] 'function void pci_disable_device(pci_dev*)' at pci.c:1935:1 has some sub-type changes: CRC value (modversions) changed from 0x2b708d1 to 0xbfd86639 [C] 'function void pci_disable_msi(pci_dev*)' at pci.h:1450:1 has some sub-type changes: CRC value (modversions) changed from 0xd88ef308 to 0xbdd0d017 [C] 'function void pci_disable_msix(pci_dev*)' at pci.h:1452:1 has some sub-type changes: CRC value (modversions) changed from 0xa2e7b90 to 0x68cddb9a [C] 'function int pci_enable_device(pci_dev*)' at pci.c:1742:1 has some sub-type changes: CRC value (modversions) changed from 0x7f6bb04a to 0x280e8060 [C] 'function int pci_enable_device_mem(pci_dev*)' at pci.c:1725:1 has some sub-type changes: CRC value (modversions) changed from 0x2bdc68af to 0x75293b2e [C] 'function int pci_enable_msi(pci_dev*)' at msi.c:1107:1 has some sub-type changes: CRC value (modversions) changed from 0x6e7da60e to 0x1562d214 [C] 'function int pci_enable_msix_range(pci_dev*, msix_entry*, int, int)' at msi.c:1164:1 has some sub-type changes: CRC value (modversions) changed from 0x924dd25e to 0xa2024b9d [C] 'function int pci_enable_wake(pci_dev*, pci_power_t, bool)' at pci.c:2284:1 has some sub-type changes: CRC value (modversions) changed from 0xbeaf7e77 to 0x17a6ea03 [C] 'function pci_bus* pci_find_bus(int, int)' at pci.h:1000:1 has some sub-type changes: CRC value (modversions) changed from 0x4ae384c6 to 0xcf4dfc67 [C] 'function int pci_find_capability(pci_dev*, int)' at pci.h:1059:1 has some sub-type changes: CRC value (modversions) changed from 0x748f9245 to 0xb8800368 [C] 'function int pci_find_ext_capability(pci_dev*, int)' at pci.h:1061:1 has some sub-type changes: CRC value (modversions) changed from 0x3a376ace to 0x9ce59ef6 [C] 'function int pci_find_next_capability(pci_dev*, u8, int)' at pci.c:394:1 has some sub-type changes: CRC value (modversions) changed from 0x82600ee0 to 0x93b9f89e [C] 'function pci_dev* pci_find_pcie_root_port(pci_dev*)' at pci.h:1033:1 has some sub-type changes: CRC value (modversions) changed from 0x8ac86fcc to 0xd5928bf7 [C] 'function void pci_free_irq(pci_dev*, unsigned int, void*)' at irq.c:120:1 has some sub-type changes: CRC value (modversions) changed from 0xae279080 to 0xa00c99fa [C] 'function void pci_free_irq_vectors(pci_dev*)' at msi.c:1246:1 has some sub-type changes: CRC value (modversions) changed from 0x99fd9304 to 0x941c61c0 [C] 'function pci_dev* pci_get_device(unsigned int, unsigned int, pci_dev*)' at search.c:327:1 has some sub-type changes: CRC value (modversions) changed from 0xdfb718d9 to 0x336f749a [C] 'function pci_dev* pci_get_slot(pci_bus*, unsigned int)' at pci.h:1072:1 has some sub-type changes: CRC value (modversions) changed from 0xe4e66104 to 0xe0df5151 [C] 'function void pci_intx(pci_dev*, int)' at pci.c:4319:1 has some sub-type changes: CRC value (modversions) changed from 0xefe5924e to 0xc639872f [C] 'function void* pci_iomap(pci_dev*, int, unsigned long int)' at pci_iomap.c:111:1 has some sub-type changes: CRC value (modversions) changed from 0x8470e4c7 to 0x68cc5f8f [C] 'function void* pci_iomap_range(pci_dev*, int, unsigned long int, unsigned long int)' at pci_iomap.c:28:1 has some sub-type changes: CRC value (modversions) changed from 0x39b96aea to 0x4f97bc70 [C] 'function void* pci_ioremap_bar(pci_dev*, int)' at pci.c:169:1 has some sub-type changes: CRC value (modversions) changed from 0x4d37c73f to 0xffa8aaf0 [C] 'function void* pci_ioremap_wc_bar(pci_dev*, int)' at pci.c:184:1 has some sub-type changes: CRC value (modversions) changed from 0x2128a79 to 0x96f943a1 [C] 'function const cpumask* pci_irq_get_affinity(pci_dev*, int)' at pci.h:1472:1 has some sub-type changes: CRC value (modversions) changed from 0x32e7d474 to 0x2bef449b [C] 'function int pci_irq_vector(pci_dev*, unsigned int)' at pci.h:1471:1 has some sub-type changes: CRC value (modversions) changed from 0xbe5b7320 to 0x3ccae113 [C] 'function int pci_load_and_free_saved_state(pci_dev*, pci_saved_state**)' at pci.c:1578:1 has some sub-type changes: CRC value (modversions) changed from 0xd4332800 to 0xbff7ed3b [C] 'function int pci_load_saved_state(pci_dev*, pci_saved_state*)' at pci.c:1541:1 has some sub-type changes: CRC value (modversions) changed from 0x7f454f6a to 0xc9fe4329 [C] 'function const pci_device_id* pci_match_id(const pci_device_id*, pci_dev*)' at pci.h:1400:1 has some sub-type changes: CRC value (modversions) changed from 0x18f68bcd to 0xc2885fdf [C] 'function irq_domain* pci_msi_create_irq_domain(fwnode_handle*, msi_domain_info*, irq_domain*)' at msi.h:369:1 has some sub-type changes: CRC value (modversions) changed from 0xb1d44018 to 0x9288e786 [C] 'function void pci_msi_mask_irq(irq_data*)' at msi.h:192:1 has some sub-type changes: CRC value (modversions) changed from 0x4d25a38c to 0x6a92c128 [C] 'function void pci_msi_unmask_irq(irq_data*)' at msi.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0x136daea1 to 0x2f35cfd1 [C] 'function int pci_msi_vec_count(pci_dev*)' at pci.h:1449:1 has some sub-type changes: CRC value (modversions) changed from 0x215039eb to 0xe8743cc3 [C] 'function int pci_read_config_byte(const pci_dev*, int, unsigned char*)' at pci.h:1102:1 has some sub-type changes: CRC value (modversions) changed from 0xba396e5b to 0x3db25dbf [C] 'function int pci_read_config_dword(const pci_dev*, int, unsigned int*)' at pci.h:1104:1 has some sub-type changes: CRC value (modversions) changed from 0x9cc57125 to 0xf49b1df3 [C] 'function int pci_read_config_word(const pci_dev*, int, unsigned short int*)' at pci.h:1103:1 has some sub-type changes: CRC value (modversions) changed from 0x70f7ccdd to 0xcfd45df7 [C] 'function void pci_release_region(pci_dev*, int)' at pci.h:1304:1 has some sub-type changes: CRC value (modversions) changed from 0x7295f27c to 0xe95b241a [C] 'function void pci_release_regions(pci_dev*)' at pci.c:3827:1 has some sub-type changes: CRC value (modversions) changed from 0x427baa83 to 0xb120ea91 [C] 'function void pci_release_selected_regions(pci_dev*, int)' at pci.h:1307:1 has some sub-type changes: CRC value (modversions) changed from 0x2ebc2950 to 0xb650916b [C] 'function int pci_request_irq(pci_dev*, unsigned int, irq_handler_t, irq_handler_t, void*, const char*, ...)' at irq.c:83:1 has some sub-type changes: CRC value (modversions) changed from 0xb781af08 to 0x246a0db4 [C] 'function int pci_request_region(pci_dev*, int, const char*)' at pci.c:3752:1 has some sub-type changes: CRC value (modversions) changed from 0xa07d783b to 0x73014098 [C] 'function int pci_request_regions(pci_dev*, const char*)' at pci.c:3846:1 has some sub-type changes: CRC value (modversions) changed from 0x746b5736 to 0x15e8f55d [C] 'function int pci_request_selected_regions(pci_dev*, int, const char*)' at pci.c:3802:1 has some sub-type changes: CRC value (modversions) changed from 0x8a0036f1 to 0x2aea7902 [C] 'function unsigned int pci_rescan_bus(pci_bus*)' at probe.c:3172:1 has some sub-type changes: CRC value (modversions) changed from 0xda128cb9 to 0x10f6e243 [C] 'function int pci_reset_function(pci_dev*)' at pci.c:5067:1 has some sub-type changes: CRC value (modversions) changed from 0x77c1f524 to 0x32a857c3 [C] 'function void pci_restore_state(pci_dev*)' at pci.c:1456:1 has some sub-type changes: CRC value (modversions) changed from 0x2b0263a4 to 0xaa817216 [C] 'function int pci_save_state(pci_dev*)' at pci.c:1345:1 has some sub-type changes: CRC value (modversions) changed from 0xd8482d5c to 0xada03c90 [C] 'function unsigned int pci_scan_child_bus(pci_bus*)' at probe.c:2897:1 has some sub-type changes: CRC value (modversions) changed from 0x2b25cdc4 to 0xf3d4ad36 [C] 'function int pci_scan_root_bus_bridge(pci_host_bridge*)' at probe.c:3046:1 has some sub-type changes: CRC value (modversions) changed from 0x62ffa5db to 0xfd1d298f [C] 'function int pci_select_bars(pci_dev*, unsigned long int)' at pci.c:5912:1 has some sub-type changes: CRC value (modversions) changed from 0xed69374d to 0x5b687d3 [C] 'function void pci_set_master(pci_dev*)' at pci.h:1179:1 has some sub-type changes: CRC value (modversions) changed from 0xff574b4d to 0x9c0b07db [C] 'function int pci_set_mwi(pci_dev*)' at pci.h:1185:1 has some sub-type changes: CRC value (modversions) changed from 0x8aaa8edb to 0x78c7347f [C] 'function int pci_set_power_state(pci_dev*, pci_power_t)' at pci.c:1098:1 has some sub-type changes: CRC value (modversions) changed from 0x367f7089 to 0xb2e0665b [C] 'function void pci_stop_and_remove_bus_device(pci_dev*)' at remove.c:114:1 has some sub-type changes: CRC value (modversions) changed from 0xca0145b7 to 0x9a2f3ab6 [C] 'function pci_saved_state* pci_store_saved_state(pci_dev*)' at pci.c:1502:1 has some sub-type changes: CRC value (modversions) changed from 0xcd83a065 to 0xb1ffd2bd [C] 'function void pci_unregister_driver(pci_driver*)' at pci.h:1370:1 has some sub-type changes: CRC value (modversions) changed from 0x82b226de to 0xab317bb4 [C] 'function void pci_walk_bus(pci_bus*, int (pci_dev*, void*)*, void*)' at pci.h:1405:1 has some sub-type changes: CRC value (modversions) changed from 0xdf3a715e to 0xde0113e7 [C] 'function int pci_write_config_byte(const pci_dev*, int, unsigned char)' at pci.h:1105:1 has some sub-type changes: CRC value (modversions) changed from 0x23a3b6f9 to 0x6a9f97f6 [C] 'function int pci_write_config_dword(const pci_dev*, int, u32)' at access.c:570:1 has some sub-type changes: CRC value (modversions) changed from 0x443443b6 to 0x4e520e8 [C] 'function int pci_write_config_word(const pci_dev*, int, u16)' at access.c:562:1 has some sub-type changes: CRC value (modversions) changed from 0x146db544 to 0x4e46d977 [C] 'function void pcie_bus_configure_settings(pci_bus*)' at probe.c:2705:1 has some sub-type changes: CRC value (modversions) changed from 0x366097f7 to 0x2c68de75 [C] 'function int pcie_capability_read_dword(pci_dev*, int, u32*)' at access.c:437:1 has some sub-type changes: CRC value (modversions) changed from 0x232ffc1e to 0x9820e02f [C] 'function int pcie_capability_read_word(pci_dev*, int, u16*)' at access.c:402:1 has some sub-type changes: CRC value (modversions) changed from 0x5a5a5dd0 to 0x87c8f677 [C] 'function int pcim_enable_device(pci_dev*)' at pci.h:1154:1 has some sub-type changes: CRC value (modversions) changed from 0x134471b9 to 0x5e4257c [C] 'function perf_event* perf_event_create_kernel_counter(perf_event_attr*, int, task_struct*, perf_overflow_handler_t, void*)' at core.c:11391:1 has some sub-type changes: CRC value (modversions) changed from 0x5f4359b3 to 0xf6cc07b5 [C] 'function void perf_event_disable(perf_event*)' at core.c:2280:1 has some sub-type changes: CRC value (modversions) changed from 0x9a52a7ce to 0xfc31785f [C] 'function void perf_event_enable(perf_event*)' at core.c:2825:1 has some sub-type changes: CRC value (modversions) changed from 0x677624c6 to 0x544c653 [C] 'function u64 perf_event_read_value(perf_event*, u64*, u64*)' at core.c:4835:1 has some sub-type changes: CRC value (modversions) changed from 0x8c3c1972 to 0xed819d74 [C] 'function int perf_event_release_kernel(perf_event*)' at core.c:4685:1 has some sub-type changes: CRC value (modversions) changed from 0xd80315f5 to 0xb4e40c6b [C] 'function void perf_trace_run_bpf_submit(void*, int, int, trace_event_call*, long long unsigned int, pt_regs*, hlist_head*, task_struct*)' at trace_events.h:632:1 has some sub-type changes: CRC value (modversions) changed from 0x1ece16c0 to 0xcd49bceb [C] 'function int phy_calibrate(phy*)' at phy-core.c:407:1 has some sub-type changes: CRC value (modversions) changed from 0xb5629389 to 0xa8b35e62 [C] 'function int phy_configure(phy*, phy_configure_opts*)' at phy-core.c:433:1 has some sub-type changes: CRC value (modversions) changed from 0xef6f4e25 to 0xc90ba1a0 [C] 'function phy_device* phy_connect(net_device*, const char*, void (net_device*)*, phy_interface_t)' at phy_device.c:991:1 has some sub-type changes: CRC value (modversions) changed from 0x9d081b71 to 0x5e1aa148 [C] 'function int phy_connect_direct(net_device*, phy_device*, void (net_device*)*, phy_interface_t)' at phy_device.c:955:1 has some sub-type changes: CRC value (modversions) changed from 0x4f8a3f27 to 0x13ab4391 [C] 'function void phy_disconnect(phy_device*)' at phy_device.c:1023:1 has some sub-type changes: CRC value (modversions) changed from 0x57619b91 to 0x8e9d371f [C] 'function int phy_drivers_register(phy_driver*, int, module*)' at phy_device.c:2342:1 has some sub-type changes: CRC value (modversions) changed from 0xc145378f to 0x67070d57 [C] 'function void phy_drivers_unregister(phy_driver*, int)' at phy_device.c:2365:1 has some sub-type changes: CRC value (modversions) changed from 0x30bb168a to 0x9d36b2e9 [C] 'function int phy_ethtool_get_eee(phy_device*, ethtool_eee*)' at phy.c:1093:1 has some sub-type changes: CRC value (modversions) changed from 0xfb721754 to 0xd8f7268b [C] 'function int phy_ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)' at phy.c:1190:1 has some sub-type changes: CRC value (modversions) changed from 0x636f6a37 to 0x46f3b486 [C] 'function void phy_ethtool_ksettings_get(phy_device*, ethtool_link_ksettings*)' at phy.c:366:1 has some sub-type changes: CRC value (modversions) changed from 0xd419a09c to 0x52b4c9e8 [C] 'function int phy_ethtool_ksettings_set(phy_device*, const ethtool_link_ksettings*)' at phy.c:315:1 has some sub-type changes: CRC value (modversions) changed from 0x738e90a8 to 0x3e59e3b1 [C] 'function int phy_ethtool_nway_reset(net_device*)' at phy.c:1216:1 has some sub-type changes: CRC value (modversions) changed from 0x54d3b723 to 0x120d1e8c [C] 'function int phy_ethtool_set_eee(phy_device*, ethtool_eee*)' at phy.c:1132:1 has some sub-type changes: CRC value (modversions) changed from 0xbe9464b6 to 0x95945532 [C] 'function int phy_ethtool_set_link_ksettings(net_device*, const ethtool_link_ksettings*)' at phy.c:1204:1 has some sub-type changes: CRC value (modversions) changed from 0xf774192 to 0xeb2288cb [C] 'function int phy_ethtool_set_wol(phy_device*, ethtool_wolinfo*)' at phy.c:1174:1 has some sub-type changes: CRC value (modversions) changed from 0x192e6aec to 0xfd188cdd [C] 'function int phy_exit(phy*)' at phy-core.c:261:1 has some sub-type changes: CRC value (modversions) changed from 0xc07422e4 to 0x97674b48 [C] 'function phy_device* phy_find_first(mii_bus*)' at phy_device.c:903:1 has some sub-type changes: CRC value (modversions) changed from 0x3b51224 to 0x2ff34e01 [C] 'function int phy_init(phy*)' at phy.h:203:1 has some sub-type changes: CRC value (modversions) changed from 0x396af901 to 0x25d2adfe [C] 'function int phy_mii_ioctl(phy_device*, ifreq*, int)' at phy.c:398:1 has some sub-type changes: CRC value (modversions) changed from 0x34d80855 to 0xc32b483a [C] 'function int phy_pm_runtime_get_sync(phy*)' at phy-core.c:166:1 has some sub-type changes: CRC value (modversions) changed from 0x86e74333 to 0xdd70248b [C] 'function int phy_pm_runtime_put_sync(phy*)' at phy-core.c:196:1 has some sub-type changes: CRC value (modversions) changed from 0xe93ec377 to 0xb0d8ad47 [C] 'function int phy_power_off(phy*)' at phy.h:206:1 has some sub-type changes: CRC value (modversions) changed from 0x251e6f46 to 0xfe246bcf [C] 'function int phy_power_on(phy*)' at phy.h:205:1 has some sub-type changes: CRC value (modversions) changed from 0xa0c16f72 to 0x7429115c [C] 'function void phy_print_status(phy_device*)' at phy.c:94:1 has some sub-type changes: CRC value (modversions) changed from 0x393ba4cd to 0x9c89549f [C] 'function int phy_read_mmd(phy_device*, int, unsigned int)' at phy.h:761:1 has some sub-type changes: CRC value (modversions) changed from 0xd6b11356 to 0x1505e113 [C] 'function int phy_register_fixup_for_uid(u32, u32, int (phy_device*)*)' at phy_device.c:380:1 has some sub-type changes: CRC value (modversions) changed from 0x9c563408 to 0xbbe5d7a1 [C] 'function void phy_remove_link_mode(phy_device*, u32)' at phy_device.c:2027:1 has some sub-type changes: CRC value (modversions) changed from 0x7424d09b to 0xf99a32d7 [C] 'function int phy_reset(phy*)' at phy-core.c:376:1 has some sub-type changes: CRC value (modversions) changed from 0x5aee5f14 to 0x40260507 [C] 'function int phy_restore_page(phy_device*, int, int)' at phy-core.c:760:1 has some sub-type changes: CRC value (modversions) changed from 0x2fcd94fb to 0xbfdb51a [C] 'function int phy_save_page(phy_device*)' at phy-core.c:708:1 has some sub-type changes: CRC value (modversions) changed from 0x73b52c60 to 0xb63cc4ea [C] 'function int phy_set_mode_ext(phy*, phy_mode, int)' at phy-core.c:359:1 has some sub-type changes: CRC value (modversions) changed from 0xd4a0b22d to 0x485f726 [C] 'function void phy_start(phy_device*)' at phy.c:869:1 has some sub-type changes: CRC value (modversions) changed from 0x14803024 to 0xfaf57578 [C] 'function void phy_stop(phy_device*)' at phy.c:835:1 has some sub-type changes: CRC value (modversions) changed from 0xebbf052f to 0x6042d64d [C] 'function int phy_write_mmd(phy_device*, int, unsigned int, unsigned short int)' at phy.h:784:1 has some sub-type changes: CRC value (modversions) changed from 0x8c8337cd to 0x4f35fe2a [C] 'function const char* pin_get_name(pinctrl_dev*, const unsigned int)' at core.c:166:1 has some sub-type changes: CRC value (modversions) changed from 0x95eb20a7 to 0xfb6b30f [C] 'function int pinconf_generic_dt_node_to_map(pinctrl_dev*, device_node*, pinctrl_map**, unsigned int*, pinctrl_map_type)' at pinconf-generic.h:188:1 has some sub-type changes: CRC value (modversions) changed from 0xc14474a5 to 0xe3c7a82d [C] 'function int pinconf_generic_parse_dt_config(device_node*, pinctrl_dev*, unsigned long int**, unsigned int*)' at pinconf-generic.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x3013bd2f to 0x809dc5a1 [C] 'function void pinctrl_add_gpio_range(pinctrl_dev*, pinctrl_gpio_range*)' at core.c:402:1 has some sub-type changes: CRC value (modversions) changed from 0xb0ac0a2a to 0x2d6460e5 [C] 'function void* pinctrl_dev_get_drvdata(pinctrl_dev*)' at pinctrl.h:201:1 has some sub-type changes: CRC value (modversions) changed from 0x36479860 to 0x9ce7849 [C] 'function int pinctrl_force_default(pinctrl_dev*)' at core.h:244:1 has some sub-type changes: CRC value (modversions) changed from 0xed9d4051 to 0x80db9aad [C] 'function int pinctrl_force_sleep(pinctrl_dev*)' at core.h:243:1 has some sub-type changes: CRC value (modversions) changed from 0xca202a00 to 0xe10ce8a3 [C] 'function pinctrl* pinctrl_get(device*)' at core.c:1113:1 has some sub-type changes: CRC value (modversions) changed from 0x2b24eef9 to 0x55af325d [C] 'function pinctrl_state* pinctrl_lookup_state(pinctrl*, const char*)' at core.c:1204:1 has some sub-type changes: CRC value (modversions) changed from 0x147049c4 to 0x7b887a29 [C] 'function int pinctrl_pm_select_default_state(device*)' at consumer.h:45:1 has some sub-type changes: CRC value (modversions) changed from 0xc1d43c3b to 0xf01e8584 [C] 'function int pinctrl_pm_select_idle_state(device*)' at core.c:1591:1 has some sub-type changes: CRC value (modversions) changed from 0xf6cc10ae to 0xb400784 [C] 'function int pinctrl_pm_select_sleep_state(device*)' at consumer.h:46:1 has some sub-type changes: CRC value (modversions) changed from 0xf78d7bef to 0xb49dced6 [C] 'function void pinctrl_put(pinctrl*)' at core.c:1193:1 has some sub-type changes: CRC value (modversions) changed from 0x114ffc0 to 0xa1b54ce [C] 'function pinctrl_dev* pinctrl_register(pinctrl_desc*, device*, void*)' at core.c:2086:1 has some sub-type changes: CRC value (modversions) changed from 0xaeb5c3f4 to 0x7f58900a [C] 'function void pinctrl_remove_gpio_range(pinctrl_dev*, pinctrl_gpio_range*)' at core.c:508:1 has some sub-type changes: CRC value (modversions) changed from 0x1229503f to 0xcb7ecd65 [C] 'function int pinctrl_select_state(pinctrl*, pinctrl_state*)' at core.c:1317:1 has some sub-type changes: CRC value (modversions) changed from 0xa0156d08 to 0xf8c220bd [C] 'function void pinctrl_unregister(pinctrl_dev*)' at pinctrl.h:157:1 has some sub-type changes: CRC value (modversions) changed from 0x3efee9b0 to 0x73f16519 [C] 'function int pinctrl_utils_add_map_configs(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, const char*, unsigned long int*, unsigned int, pinctrl_map_type)' at pinctrl-utils.c:73:1 has some sub-type changes: CRC value (modversions) changed from 0xef848394 to 0x725cc8b0 [C] 'function int pinctrl_utils_add_map_mux(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, const char*, const char*)' at pinctrl-utils.c:56:1 has some sub-type changes: CRC value (modversions) changed from 0xce7942aa to 0x1c6d1c7b [C] 'function void pinctrl_utils_free_map(pinctrl_dev*, pinctrl_map*, unsigned int)' at pinctrl-utils.c:123:1 has some sub-type changes: CRC value (modversions) changed from 0x20abe51a to 0xca801381 [C] 'function int pinctrl_utils_reserve_map(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, unsigned int)' at pinctrl-utils.c:31:1 has some sub-type changes: CRC value (modversions) changed from 0xb7fea8dd to 0x2ec89cea [C] 'function void pipe_lock(pipe_inode_info*)' at pipe.c:66:1 has some sub-type changes: CRC value (modversions) changed from 0x73c604b6 to 0x9f5fc623 [C] 'function void pipe_unlock(pipe_inode_info*)' at pipe.c:75:1 has some sub-type changes: CRC value (modversions) changed from 0xc823b495 to 0x5968415c [C] 'function int platform_device_add(platform_device*)' at platform_device.h:186:1 has some sub-type changes: CRC value (modversions) changed from 0x7fe91507 to 0xcff86487 [C] 'function int platform_device_add_data(platform_device*, void*, unsigned long int)' at platform_device.h:182:1 has some sub-type changes: CRC value (modversions) changed from 0xfccf4ec2 to 0x179d9ad2 [C] 'function int platform_device_add_properties(platform_device*, const property_entry*)' at platform.c:461:1 has some sub-type changes: CRC value (modversions) changed from 0xbb2bcf67 to 0xa3c00331 [C] 'function int platform_device_add_resources(platform_device*, const resource*, unsigned int)' at platform.c:407:1 has some sub-type changes: CRC value (modversions) changed from 0x7e6ec7a3 to 0x90068ab0 [C] 'function platform_device* platform_device_alloc(const char*, int)' at platform_device.h:178:1 has some sub-type changes: CRC value (modversions) changed from 0x8dedf9ad to 0xff8194bf [C] 'function void platform_device_del(platform_device*)' at platform_device.h:187:1 has some sub-type changes: CRC value (modversions) changed from 0x8e95a44d to 0xdc16a7b [C] 'function void platform_device_put(platform_device*)' at platform_device.h:188:1 has some sub-type changes: CRC value (modversions) changed from 0xc59c80a9 to 0x6cf2e61f [C] 'function int platform_device_register(platform_device*)' at platform_device.h:46:1 has some sub-type changes: CRC value (modversions) changed from 0x805148b0 to 0xf77be0dc [C] 'function platform_device* platform_device_register_full(const platform_device_info*)' at platform_device.h:88:1 has some sub-type changes: CRC value (modversions) changed from 0x8bf4da05 to 0xe701c34b [C] 'function void platform_device_unregister(platform_device*)' at platform_device.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0x4c1a8b2c to 0x8217f7d2 [C] 'function void platform_driver_unregister(platform_driver*)' at platform_device.h:211:1 has some sub-type changes: CRC value (modversions) changed from 0x5f155a5d to 0x2fa836b9 [C] 'function int platform_get_irq(platform_device*, unsigned int)' at platform_device.h:60:1 has some sub-type changes: CRC value (modversions) changed from 0x234750af to 0x9675753f [C] 'function int platform_get_irq_byname(platform_device*, const char*)' at platform_device.h:66:1 has some sub-type changes: CRC value (modversions) changed from 0xb5e2ff16 to 0x5b47db81 [C] 'function int platform_get_irq_byname_optional(platform_device*, const char*)' at platform.c:296:1 has some sub-type changes: CRC value (modversions) changed from 0x274eb0c7 to 0x3f414129 [C] 'function int platform_get_irq_optional(platform_device*, unsigned int)' at platform.c:194:1 has some sub-type changes: CRC value (modversions) changed from 0xbf0ff144 to 0x43eddd7b [C] 'function resource* platform_get_resource(platform_device*, unsigned int, unsigned int)' at platform_device.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0x4743b7c5 to 0x85fae98 [C] 'function resource* platform_get_resource_byname(platform_device*, unsigned int, const char*)' at platform_device.h:63:1 has some sub-type changes: CRC value (modversions) changed from 0xe18d2e35 to 0x42c12106 [C] 'function int platform_irq_count(platform_device*)' at platform.c:206:1 has some sub-type changes: CRC value (modversions) changed from 0x81ff91a0 to 0xfc87d1a7 [C] 'function void platform_unregister_drivers(platform_driver* const*, unsigned int)' at platform.c:935:1 has some sub-type changes: CRC value (modversions) changed from 0x86a5bc6e to 0x571c0a41 [C] 'function int pm_clk_add(device*, const char*)' at clock_ops.c:123:1 has some sub-type changes: CRC value (modversions) changed from 0xf3aabdfb to 0x51da82a4 [C] 'function int pm_clk_create(device*)' at clock_ops.c:350:1 has some sub-type changes: CRC value (modversions) changed from 0xefba126d to 0xe31afd93 [C] 'function void pm_clk_destroy(device*)' at clock_ops.c:364:1 has some sub-type changes: CRC value (modversions) changed from 0x5bf3ee1d to 0xf8ae26c4 [C] 'function int pm_clk_resume(device*)' at clock_ops.c:426:1 has some sub-type changes: CRC value (modversions) changed from 0xa6da5812 to 0x493d4c8c [C] 'function int pm_clk_suspend(device*)' at clock_ops.c:395:1 has some sub-type changes: CRC value (modversions) changed from 0x954ee9a to 0xe795fa69 [C] 'function int pm_generic_resume(device*)' at generic_ops.c:241:1 has some sub-type changes: CRC value (modversions) changed from 0xbe9813ec to 0x902029c0 [C] 'function int pm_generic_runtime_resume(device*)' at pm_runtime.h:34:1 has some sub-type changes: CRC value (modversions) changed from 0x3c0918d8 to 0x70b6c088 [C] 'function int pm_generic_runtime_suspend(device*)' at pm_runtime.h:33:1 has some sub-type changes: CRC value (modversions) changed from 0x252c0ac5 to 0x9ece6fc9 [C] 'function int pm_generic_suspend(device*)' at generic_ops.c:97:1 has some sub-type changes: CRC value (modversions) changed from 0x41a6f7b to 0xe6293082 [C] 'function int pm_genpd_add_subdomain(generic_pm_domain*, generic_pm_domain*)' at domain.c:1677:1 has some sub-type changes: CRC value (modversions) changed from 0x5b807e65 to 0x42dc333b [C] 'function int pm_genpd_init(generic_pm_domain*, dev_power_governor*, bool)' at domain.c:1776:1 has some sub-type changes: CRC value (modversions) changed from 0x732fef3b to 0x75c26f2d [C] 'function int pm_genpd_remove(generic_pm_domain*)' at domain.c:1899:1 has some sub-type changes: CRC value (modversions) changed from 0xbf2f43ad to 0x7334e65f [C] 'function int pm_genpd_remove_subdomain(generic_pm_domain*, generic_pm_domain*)' at domain.c:1695:1 has some sub-type changes: CRC value (modversions) changed from 0x32ed63b to 0x9987d474 [C] 'function void pm_relax(device*)' at pm_wakeup.h:103:1 has some sub-type changes: CRC value (modversions) changed from 0xb211ff89 to 0xfbed4a7f [C] 'function void pm_runtime_allow(device*)' at pm_runtime.h:47:1 has some sub-type changes: CRC value (modversions) changed from 0x59a87d8b to 0xeb761da0 [C] 'function int pm_runtime_barrier(device*)' at pm_runtime.h:44:1 has some sub-type changes: CRC value (modversions) changed from 0x1605b833 to 0xa4393e82 [C] 'function void pm_runtime_enable(device*)' at pm_runtime.h:45:1 has some sub-type changes: CRC value (modversions) changed from 0xfac21c56 to 0xb4d558f7 [C] 'function void pm_runtime_forbid(device*)' at pm_runtime.h:48:1 has some sub-type changes: CRC value (modversions) changed from 0x578addd2 to 0x24c7aef2 [C] 'function int pm_runtime_force_resume(device*)' at runtime.c:1786:1 has some sub-type changes: CRC value (modversions) changed from 0x9d3ba92a to 0x734f53ac [C] 'function int pm_runtime_force_suspend(device*)' at runtime.c:1740:1 has some sub-type changes: CRC value (modversions) changed from 0xe1465e6c to 0x3badf8af [C] 'function int pm_runtime_get_if_in_use(device*)' at runtime.c:1095:1 has some sub-type changes: CRC value (modversions) changed from 0x146d47d to 0x8c4017ca [C] 'function void pm_runtime_irq_safe(device*)' at runtime.c:1472:1 has some sub-type changes: CRC value (modversions) changed from 0x236b9799 to 0xbe0e6e6b [C] 'function void pm_runtime_no_callbacks(device*)' at pm_runtime.h:49:1 has some sub-type changes: CRC value (modversions) changed from 0xe6f57069 to 0x90a41132 [C] 'function void pm_runtime_set_autosuspend_delay(device*, int)' at pm_runtime.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0x57f10015 to 0x173be91a [C] 'function void pm_stay_awake(device*)' at pm_wakeup.h:101:1 has some sub-type changes: CRC value (modversions) changed from 0x9a0f3fc7 to 0x8296dfb8 [C] 'function void pm_wakeup_dev_event(device*, unsigned int, bool)' at pm_wakeup.h:105:1 has some sub-type changes: CRC value (modversions) changed from 0x616e8e36 to 0xe2e67c41 [C] 'function void pm_wakeup_ws_event(wakeup_source*, unsigned int, bool)' at pm_wakeup.h:104:1 has some sub-type changes: CRC value (modversions) changed from 0x8a32d8c to 0xc65eb400 [C] 'function bool policy_has_boost_freq(cpufreq_policy*)' at freq_table.c:17:1 has some sub-type changes: CRC value (modversions) changed from 0xd2c68965 to 0xd6da6f1 [C] 'function void power_supply_changed(power_supply*)' at power_supply.h:403:1 has some sub-type changes: CRC value (modversions) changed from 0xf803cab4 to 0x168f5ca5 [C] 'function int power_supply_get_battery_info(power_supply*, power_supply_battery_info*)' at power_supply_core.c:565:1 has some sub-type changes: CRC value (modversions) changed from 0xba360504 to 0xc720d1a9 [C] 'function power_supply* power_supply_get_by_name(const char*)' at power_supply_core.c:451:1 has some sub-type changes: CRC value (modversions) changed from 0xf3d80a48 to 0x164afb64 [C] 'function void* power_supply_get_drvdata(power_supply*)' at power_supply.h:446:1 has some sub-type changes: CRC value (modversions) changed from 0xa8a4ff35 to 0x84d8ca40 [C] 'function int power_supply_get_property(power_supply*, power_supply_property, power_supply_propval*)' at power_supply_core.c:837:1 has some sub-type changes: CRC value (modversions) changed from 0x2abe429 to 0x66ac8a9e [C] 'function int power_supply_powers(power_supply*, device*)' at power_supply.h:442:1 has some sub-type changes: CRC value (modversions) changed from 0xe37b723c to 0x897739ff [C] 'function void power_supply_put(power_supply*)' at power_supply_core.c:473:1 has some sub-type changes: CRC value (modversions) changed from 0xda2c41b6 to 0x4bb471d2 [C] 'function void power_supply_put_battery_info(power_supply*, power_supply_battery_info*)' at power_supply_core.c:708:1 has some sub-type changes: CRC value (modversions) changed from 0x8703515f to 0x36175e3 [C] 'function power_supply* power_supply_register(device*, const power_supply_desc*, const power_supply_config*)' at power_supply.h:426:1 has some sub-type changes: CRC value (modversions) changed from 0xf0304356 to 0x7198f5c8 [C] 'function int power_supply_set_property(power_supply*, power_supply_property, const power_supply_propval*)' at power_supply_core.c:851:1 has some sub-type changes: CRC value (modversions) changed from 0x351e9691 to 0xc3378ca6 [C] 'function void power_supply_unregister(power_supply*)' at power_supply.h:441:1 has some sub-type changes: CRC value (modversions) changed from 0x8c4ed1cd to 0xf0e46bae [C] 'function int ppp_channel_index(ppp_channel*)' at ppp_generic.c:2636:1 has some sub-type changes: CRC value (modversions) changed from 0xf83bc6ff to 0x634972f7 [C] 'function char* ppp_dev_name(ppp_channel*)' at ppp_channel.h:72:1 has some sub-type changes: CRC value (modversions) changed from 0xd4dbb845 to 0x6826fb81 [C] 'function void ppp_input(ppp_channel*, sk_buff*)' at ppp_channel.h:50:1 has some sub-type changes: CRC value (modversions) changed from 0x9e73e2f0 to 0x9449051e [C] 'function void ppp_input_error(ppp_channel*, int)' at ppp_generic.c:2044:1 has some sub-type changes: CRC value (modversions) changed from 0x25ee0fdf to 0x63112896 [C] 'function void ppp_output_wakeup(ppp_channel*)' at ppp_generic.c:2722:1 has some sub-type changes: CRC value (modversions) changed from 0xac016033 to 0x7a3456ce [C] 'function int ppp_register_channel(ppp_channel*)' at ppp_channel.h:60:1 has some sub-type changes: CRC value (modversions) changed from 0xd7a07d0f to 0x9c655176 [C] 'function int ppp_register_compressor(compressor*)' at bsd_comp.c:192:1 has some sub-type changes: CRC value (modversions) changed from 0x8a7e014c to 0x374eb29b [C] 'function int ppp_register_net_channel(net*, ppp_channel*)' at ppp_channel.h:57:1 has some sub-type changes: CRC value (modversions) changed from 0xc2c3b393 to 0x82c339a1 [C] 'function int ppp_unit_number(ppp_channel*)' at ppp_generic.c:2648:1 has some sub-type changes: CRC value (modversions) changed from 0x49d72fcc to 0xa5001aa5 [C] 'function void ppp_unregister_channel(ppp_channel*)' at ppp_generic.c:2685:1 has some sub-type changes: CRC value (modversions) changed from 0xfcb8c91f to 0x9f1e9006 [C] 'function void ppp_unregister_compressor(compressor*)' at bsd_comp.c:193:1 has some sub-type changes: CRC value (modversions) changed from 0xaa6b9fde to 0x40831fb4 [C] 'function int pppox_compat_ioctl(socket*, unsigned int, unsigned long int)' at pppox.c:103:1 has some sub-type changes: CRC value (modversions) changed from 0xd05d0d7c to 0x376513d3 [C] 'function int pppox_ioctl(socket*, unsigned int, unsigned long int)' at pppox.c:67:1 has some sub-type changes: CRC value (modversions) changed from 0x78c02731 to 0x715da01b [C] 'function void pppox_unbind_sock(sock*)' at if_pppox.h:81:1 has some sub-type changes: CRC value (modversions) changed from 0x102fbca9 to 0x15925513 [C] 'function int prepare_binprm(linux_binprm*)' at binfmts.h:120:1 has some sub-type changes: CRC value (modversions) changed from 0x6e65a257 to 0xafee0171 [C] 'function cred* prepare_kernel_cred(task_struct*)' at cred.h:166:1 has some sub-type changes: CRC value (modversions) changed from 0x954c0d35 to 0x7b07f745 [C] 'function proc_dir_entry* proc_create(const char*, unsigned short int, proc_dir_entry*, const file_operations*)' at proc_fs.h:49:1 has some sub-type changes: CRC value (modversions) changed from 0x16f8bc9d to 0x5acab547 [C] 'function proc_dir_entry* proc_create_data(const char*, unsigned short int, proc_dir_entry*, const file_operations*, void*)' at proc_fs.h:44:1 has some sub-type changes: CRC value (modversions) changed from 0xf9821122 to 0x2c18c69d [C] 'function proc_dir_entry* proc_create_net_data(const char*, unsigned short int, proc_dir_entry*, const seq_operations*, unsigned int, void*)' at proc_fs.h:58:1 has some sub-type changes: CRC value (modversions) changed from 0xbbfd5144 to 0x331e1174 [C] 'function proc_dir_entry* proc_create_net_single(const char*, umode_t, proc_dir_entry*, int (seq_file*, void*)*, void*)' at proc_net.c:194:1 has some sub-type changes: CRC value (modversions) changed from 0x7fadb7d8 to 0x6b4d501d [C] 'function proc_dir_entry* proc_create_seq_private(const char*, unsigned short int, proc_dir_entry*, const seq_operations*, unsigned int, void*)' at proc_fs.h:31:1 has some sub-type changes: CRC value (modversions) changed from 0xa9fb5a62 to 0x7e03c167 [C] 'function proc_dir_entry* proc_create_single_data(const char*, unsigned short int, proc_dir_entry*, int (seq_file*, void*)*, void*)' at proc_fs.h:38:1 has some sub-type changes: CRC value (modversions) changed from 0xcbb83374 to 0xaa28e5db [C] 'function proc_dir_entry* proc_mkdir(const char*, proc_dir_entry*)' at proc_fs.h:24:1 has some sub-type changes: CRC value (modversions) changed from 0x2e31f200 to 0x52c9a15c [C] 'function proc_dir_entry* proc_mkdir_data(const char*, umode_t, proc_dir_entry*, void*)' at generic.c:462:1 has some sub-type changes: CRC value (modversions) changed from 0xd884bb6e to 0x4a2bd1c4 [C] 'function void proc_remove(proc_dir_entry*)' at proc_fs.h:54:1 has some sub-type changes: CRC value (modversions) changed from 0x92ef64ea to 0xb32d305e [C] 'function void proc_set_size(proc_dir_entry*, long long int)' at proc_fs.h:50:1 has some sub-type changes: CRC value (modversions) changed from 0xaa1daab7 to 0x22791ea6 [C] 'function void proc_set_user(proc_dir_entry*, __anonymous_struct__, __anonymous_struct__1)' at proc_fs.h:51:1 has some sub-type changes: CRC value (modversions) changed from 0x335ab52a to 0xa3e94565 [C] 'function proc_dir_entry* proc_symlink(const char*, proc_dir_entry*, const char*)' at proc_fs.h:22:1 has some sub-type changes: CRC value (modversions) changed from 0x21fcbe3b to 0x58aa928d [C] 'function int proto_register(proto*, int)' at sock.h:1199:1 has some sub-type changes: CRC value (modversions) changed from 0xcb921530 to 0x52018f7e [C] 'function void proto_unregister(proto*)' at sock.h:1200:1 has some sub-type changes: CRC value (modversions) changed from 0x5cd09394 to 0x4d2da413 [C] 'function int pskb_expand_head(sk_buff*, int, int, unsigned int)' at skbuff.h:1122:1 has some sub-type changes: CRC value (modversions) changed from 0x6018bd60 to 0x94aec631 [C] 'function int pskb_trim_rcsum_slow(sk_buff*, unsigned int)' at skbuff.c:2014:1 has some sub-type changes: CRC value (modversions) changed from 0x9a4c8231 to 0xe171329c [C] 'function void put_device(device*)' at device.h:1709:1 has some sub-type changes: CRC value (modversions) changed from 0x988aa3b6 to 0xe5ee84ed [C] 'function void put_disk(gendisk*)' at genhd.h:653:1 has some sub-type changes: CRC value (modversions) changed from 0x1e15631f to 0xcfd2a598 [C] 'function void put_pid(pid*)' at pid.h:86:1 has some sub-type changes: CRC value (modversions) changed from 0x6c46d8b5 to 0xa86a9147 [C] 'function void put_tty_driver(tty_driver*)' at tty_io.c:3303:1 has some sub-type changes: CRC value (modversions) changed from 0xbbd75a78 to 0x1f4afa1d [C] 'function int pwm_apply_state(pwm_device*, const pwm_state*)' at core.c:454:1 has some sub-type changes: CRC value (modversions) changed from 0x7cb52cb6 to 0xd371065e [C] 'function void pwm_free(pwm_device*)' at core.c:443:1 has some sub-type changes: CRC value (modversions) changed from 0xb9b0c3e5 to 0xd7c5b0d2 [C] 'function void* pwm_get_chip_data(pwm_device*)' at core.c:221:1 has some sub-type changes: CRC value (modversions) changed from 0x98202e9e to 0xed499291 [C] 'function pwm_device* pwm_request(int, const char*)' at core.c:378:1 has some sub-type changes: CRC value (modversions) changed from 0x31b42b44 to 0x81e7e9a0 [C] 'function int pwm_set_chip_data(pwm_device*, void*)' at core.c:204:1 has some sub-type changes: CRC value (modversions) changed from 0xa41afdaa to 0xf322e053 [C] 'function int pwmchip_add(pwm_chip*)' at core.c:322:1 has some sub-type changes: CRC value (modversions) changed from 0xeae45f94 to 0x5cd1b7c6 [C] 'function int pwmchip_remove(pwm_chip*)' at core.c:337:1 has some sub-type changes: CRC value (modversions) changed from 0xf71f14b8 to 0x82c2a523 [C] 'function qcom_smem_state* qcom_smem_state_get(device*, const char*, unsigned int*)' at smem_state.c:88:1 has some sub-type changes: CRC value (modversions) changed from 0x7054d77d to 0x308de1a4 [C] 'function qcom_smem_state* qcom_smem_state_register(device_node*, const qcom_smem_state_ops*, void*)' at smem_state.c:160:1 has some sub-type changes: CRC value (modversions) changed from 0xb95ea3d0 to 0xf93db736 [C] 'function void qdisc_reset(Qdisc*)' at sch_generic.h:640:1 has some sub-type changes: CRC value (modversions) changed from 0xc8fe4132 to 0x39412835 [C] 'function void* rdev_get_drvdata(regulator_dev*)' at driver.h:500:1 has some sub-type changes: CRC value (modversions) changed from 0x3e5944ea to 0x578b7216 [C] 'function int rdev_get_id(regulator_dev*)' at core.c:5381:1 has some sub-type changes: CRC value (modversions) changed from 0xfa02ec54 to 0x257d0936 [C] 'function page* read_cache_page(address_space*, unsigned long int, int (void*, page*)*, void*)' at filemap.c:2869:1 has some sub-type changes: CRC value (modversions) changed from 0x2d078558 to 0xdb301a92 [C] 'function void regcache_cache_bypass(regmap*, bool)' at regcache.c:538:1 has some sub-type changes: CRC value (modversions) changed from 0x40527683 to 0x59af531a [C] 'function void regcache_cache_only(regmap*, bool)' at regcache.c:495:1 has some sub-type changes: CRC value (modversions) changed from 0x561d436f to 0x43e410a [C] 'function int regcache_drop_region(regmap*, unsigned int, unsigned int)' at regcache.c:463:1 has some sub-type changes: CRC value (modversions) changed from 0x128cc908 to 0x28b490d8 [C] 'function void regcache_mark_dirty(regmap*)' at regcache.c:518:1 has some sub-type changes: CRC value (modversions) changed from 0xaf450cf2 to 0xce63b859 [C] 'function int regcache_sync(regmap*)' at regcache.c:339:1 has some sub-type changes: CRC value (modversions) changed from 0xc8f394c to 0x6506f898 [C] 'function int regcache_sync_region(regmap*, unsigned int, unsigned int)' at regcache.c:408:1 has some sub-type changes: CRC value (modversions) changed from 0x3dbe342b to 0x696d08f5 [C] 'function void register_console(console*)' at console.h:175:1 has some sub-type changes: CRC value (modversions) changed from 0xfb2588d8 to 0x7dabd966 [C] 'function int register_filesystem(file_system_type*)' at fs.h:2381:1 has some sub-type changes: CRC value (modversions) changed from 0x858e9912 to 0x1c6b99c0 [C] 'function ctl_table_header* register_net_sysctl(net*, const char*, ctl_table*)' at net_namespace.h:411:1 has some sub-type changes: CRC value (modversions) changed from 0x9e733453 to 0xabf3be51 [C] 'function int register_netdev(net_device*)' at netdevice.h:4151:1 has some sub-type changes: CRC value (modversions) changed from 0x278c31a2 to 0x29b9dbd1 [C] 'function int register_netdevice(net_device*)' at netdevice.h:2687:1 has some sub-type changes: CRC value (modversions) changed from 0x5a340b12 to 0xc4a18cdd [C] 'function int register_pernet_device(pernet_operations*)' at net_namespace.h:403:1 has some sub-type changes: CRC value (modversions) changed from 0x6da814eb to 0x85d662ca [C] 'function int register_pernet_subsys(pernet_operations*)' at net_namespace.h:401:1 has some sub-type changes: CRC value (modversions) changed from 0xa2f9eded to 0xf6e2d844 [C] 'function int register_pppox_proto(int, const pppox_proto*)' at if_pppox.h:79:1 has some sub-type changes: CRC value (modversions) changed from 0x841c696e to 0xcef69b57 [C] 'function int register_shrinker(shrinker*)' at shrinker.h:92:1 has some sub-type changes: CRC value (modversions) changed from 0x247140e9 to 0x49ffbb42 [C] 'function int register_tcf_proto_ops(tcf_proto_ops*)' at pkt_cls.h:25:1 has some sub-type changes: CRC value (modversions) changed from 0x812136ab to 0x1dac8460 [C] 'function int register_virtio_device(virtio_device*)' at virtio.c:318:1 has some sub-type changes: CRC value (modversions) changed from 0xef050a3b to 0xee7e9e59 [C] 'function int register_virtio_driver(virtio_driver*)' at virtio.c:294:1 has some sub-type changes: CRC value (modversions) changed from 0x7316e086 to 0xce4a0fa5 [C] 'function int regmap_add_irq_chip(regmap*, int, int, int, const regmap_irq_chip*, regmap_irq_chip_data**)' at regmap-irq.c:559:1 has some sub-type changes: CRC value (modversions) changed from 0xd52d8146 to 0x49f4c35b [C] 'function int regmap_async_complete(regmap*)' at regmap.c:2973:1 has some sub-type changes: CRC value (modversions) changed from 0x7089a1fe to 0x305ddf60 [C] 'function int regmap_bulk_read(regmap*, unsigned int, void*, size_t)' at regmap.c:2792:1 has some sub-type changes: CRC value (modversions) changed from 0x28034c5d to 0x3bd6b189 [C] 'function int regmap_bulk_write(regmap*, unsigned int, void*, size_t)' at regmap.c:2056:1 has some sub-type changes: CRC value (modversions) changed from 0x83c70173 to 0x82388514 [C] 'function void regmap_exit(regmap*)' at regmap.c:1330:1 has some sub-type changes: CRC value (modversions) changed from 0x64e0a552 to 0xf3bc54e [C] 'function int regmap_field_read(regmap_field*, unsigned int*)' at regmap.c:2732:1 has some sub-type changes: CRC value (modversions) changed from 0x22a6ad97 to 0x3b02d2b8 [C] 'function int regmap_field_update_bits_base(regmap_field*, unsigned int, unsigned int, bool*, bool, bool)' at regmap.c:1999:1 has some sub-type changes: CRC value (modversions) changed from 0xa46cb833 to 0xd921aff5 [C] 'function int regmap_get_reg_stride(regmap*)' at regmap.c:3095:1 has some sub-type changes: CRC value (modversions) changed from 0x52ddc592 to 0xd3251a45 [C] 'function int regmap_get_val_bytes(regmap*)' at regmap.c:3064:1 has some sub-type changes: CRC value (modversions) changed from 0xecd92039 to 0x1269829 [C] 'function irq_domain* regmap_irq_get_domain(regmap_irq_chip_data*)' at regmap-irq.c:985:1 has some sub-type changes: CRC value (modversions) changed from 0xdb1331ac to 0x8afe5a0a [C] 'function int regmap_multi_reg_write(regmap*, const reg_sequence*, int)' at regmap.c:2355:1 has some sub-type changes: CRC value (modversions) changed from 0xade230d0 to 0xf9aa0845 [C] 'function int regmap_multi_reg_write_bypassed(regmap*, const reg_sequence*, int)' at regmap.c:2388:1 has some sub-type changes: CRC value (modversions) changed from 0xfd756951 to 0xb7769be2 [C] 'function int regmap_raw_read(regmap*, unsigned int, void*, size_t)' at regmap.c:2585:1 has some sub-type changes: CRC value (modversions) changed from 0x6c9beabd to 0xcf8858da [C] 'function int regmap_raw_write(regmap*, unsigned int, void*, size_t)' at regmap.c:1899:1 has some sub-type changes: CRC value (modversions) changed from 0xba22f62c to 0x2f69cc2e [C] 'function int regmap_raw_write_async(regmap*, unsigned int, void*, size_t)' at regmap.c:2432:1 has some sub-type changes: CRC value (modversions) changed from 0xaa718f68 to 0x165e7e46 [C] 'function int regmap_read(regmap*, unsigned int, unsigned int*)' at regmap.h:1024:1 has some sub-type changes: CRC value (modversions) changed from 0x9c8a32cc to 0x4591c022 [C] 'function int regmap_register_patch(regmap*, const reg_sequence*, int)' at regmap.c:3014:1 has some sub-type changes: CRC value (modversions) changed from 0xe386995f to 0xacbd303a [C] 'function int regmap_update_bits_base(regmap*, unsigned int, unsigned int, unsigned int, bool*, bool, bool)' at regmap.h:1031:1 has some sub-type changes: CRC value (modversions) changed from 0xe6c114d5 to 0x873e2cd2 [C] 'function int regmap_write(regmap*, unsigned int, unsigned int)' at regmap.h:1009:1 has some sub-type changes: CRC value (modversions) changed from 0x7b580217 to 0x18493170 [C] 'function int regulator_bulk_disable(int, regulator_bulk_data*)' at consumer.h:234:1 has some sub-type changes: CRC value (modversions) changed from 0x76e0598d to 0x4cd9e4e1 [C] 'function int regulator_bulk_enable(int, regulator_bulk_data*)' at consumer.h:232:1 has some sub-type changes: CRC value (modversions) changed from 0xbeba7ea3 to 0x3fc2c88d [C] 'function int regulator_count_voltages(regulator*)' at core.c:2887:1 has some sub-type changes: CRC value (modversions) changed from 0x1aa507bd to 0x2d9ad1f6 [C] 'function int regulator_disable(regulator*)' at consumer.h:223:1 has some sub-type changes: CRC value (modversions) changed from 0x35154ca6 to 0x398c8b3f [C] 'function int regulator_disable_deferred(regulator*, int)' at core.c:2788:1 has some sub-type changes: CRC value (modversions) changed from 0xa23c1852 to 0x913591c8 [C] 'function int regulator_disable_regmap(regulator_dev*)' at helpers.c:85:1 has some sub-type changes: CRC value (modversions) changed from 0xd3871ceb to 0x1ee5f1bc [C] 'function int regulator_enable(regulator*)' at consumer.h:222:1 has some sub-type changes: CRC value (modversions) changed from 0xb34da123 to 0x1ba8212a [C] 'function int regulator_enable_regmap(regulator_dev*)' at helpers.c:59:1 has some sub-type changes: CRC value (modversions) changed from 0x5e27e317 to 0x37cf1546 [C] 'function int regulator_force_disable(regulator*)' at core.c:2707:1 has some sub-type changes: CRC value (modversions) changed from 0xbd91df94 to 0xc5ea8c59 [C] 'function regulator* regulator_get(device*, const char*)' at core.c:1977:1 has some sub-type changes: CRC value (modversions) changed from 0x151ee967 to 0xe7dbe14a [C] 'function int regulator_get_current_limit(regulator*)' at core.c:4129:1 has some sub-type changes: CRC value (modversions) changed from 0xc6dce4ac to 0x836eb07e [C] 'function void* regulator_get_drvdata(regulator*)' at core.c:5360:1 has some sub-type changes: CRC value (modversions) changed from 0xb7d2befe to 0xedde3df0 [C] 'function unsigned int regulator_get_linear_step(regulator*)' at core.c:2995:1 has some sub-type changes: CRC value (modversions) changed from 0x11ff9e84 to 0xfcee657d [C] 'function unsigned int regulator_get_mode(regulator*)' at core.c:4207:1 has some sub-type changes: CRC value (modversions) changed from 0xef99c90d to 0x90ade655 [C] 'function regulator* regulator_get_optional(device*, const char*)' at core.c:2030:1 has some sub-type changes: CRC value (modversions) changed from 0xcc4a7d3 to 0x6ae0d1ac [C] 'function int regulator_get_voltage(regulator*)' at core.c:4045:1 has some sub-type changes: CRC value (modversions) changed from 0x19282a16 to 0xee2f50e3 [C] 'function int regulator_get_voltage_sel_regmap(regulator_dev*)' at helpers.c:233:1 has some sub-type changes: CRC value (modversions) changed from 0xbaa944f6 to 0xcaa3011b [C] 'function int regulator_is_enabled(regulator*)' at core.c:2864:1 has some sub-type changes: CRC value (modversions) changed from 0xd637b3fe to 0xd44e7f8e [C] 'function int regulator_is_enabled_regmap(regulator_dev*)' at helpers.c:27:1 has some sub-type changes: CRC value (modversions) changed from 0x5131a9a5 to 0xc21ccfa1 [C] 'function int regulator_is_supported_voltage(regulator*, int, int)' at core.c:3012:1 has some sub-type changes: CRC value (modversions) changed from 0xbaeb7e3e to 0xb0f707ed [C] 'function int regulator_list_voltage(regulator*, unsigned int)' at core.c:2911:1 has some sub-type changes: CRC value (modversions) changed from 0xf3317b02 to 0x43b2a072 [C] 'function int regulator_list_voltage_linear(regulator_dev*, unsigned int)' at helpers.c:538:1 has some sub-type changes: CRC value (modversions) changed from 0xf326d02d to 0xd704b1d [C] 'function int regulator_list_voltage_linear_range(regulator_dev*, unsigned int)' at helpers.c:641:1 has some sub-type changes: CRC value (modversions) changed from 0x816a92cd to 0x4e5d3fcd [C] 'function int regulator_list_voltage_table(regulator_dev*, unsigned int)' at helpers.c:658:1 has some sub-type changes: CRC value (modversions) changed from 0xec0c7ea9 to 0xd5dd774a [C] 'function void regulator_lock(regulator_dev*)' at core.c:192:1 has some sub-type changes: CRC value (modversions) changed from 0x265e2ca9 to 0x3bacb1c5 [C] 'function int regulator_map_voltage_ascend(regulator_dev*, int, int)' at helpers.c:328:1 has some sub-type changes: CRC value (modversions) changed from 0x7e435294 to 0x63813a26 [C] 'function int regulator_map_voltage_linear(regulator_dev*, int, int)' at driver.h:515:1 has some sub-type changes: CRC value (modversions) changed from 0xfccf7150 to 0xadc926ce [C] 'function int regulator_notifier_call_chain(regulator_dev*, unsigned long int, void*)' at core.c:4601:1 has some sub-type changes: CRC value (modversions) changed from 0x4bc73e02 to 0xc3b7f948 [C] 'function void regulator_put(regulator*)' at core.c:2083:1 has some sub-type changes: CRC value (modversions) changed from 0x85b4dfda to 0xa43a85d1 [C] 'function regulator_dev* regulator_register(const regulator_desc*, const regulator_config*)' at core.c:4991:1 has some sub-type changes: CRC value (modversions) changed from 0x47f8d401 to 0xd58bda5 [C] 'function int regulator_register_notifier(regulator*, notifier_block*)' at core.c:4359:1 has some sub-type changes: CRC value (modversions) changed from 0xb09ab6ab to 0x13840c4 [C] 'function int regulator_set_current_limit(regulator*, int, int)' at core.c:4074:1 has some sub-type changes: CRC value (modversions) changed from 0xe2570063 to 0x13dae5bf [C] 'function int regulator_set_load(regulator*, int)' at core.c:4280:1 has some sub-type changes: CRC value (modversions) changed from 0x271bf45b to 0x80a84492 [C] 'function int regulator_set_mode(regulator*, unsigned int)' at core.c:4146:1 has some sub-type changes: CRC value (modversions) changed from 0x6c3d3bf7 to 0x1379e072 [C] 'function int regulator_set_voltage(regulator*, int, int)' at core.c:3762:1 has some sub-type changes: CRC value (modversions) changed from 0xf3a6e9c7 to 0x5e415569 [C] 'function int regulator_set_voltage_sel_regmap(regulator_dev*, unsigned int)' at helpers.c:259:1 has some sub-type changes: CRC value (modversions) changed from 0x4d039aa7 to 0x735e3e66 [C] 'function int regulator_set_voltage_time_sel(regulator_dev*, unsigned int, unsigned int)' at core.c:3923:1 has some sub-type changes: CRC value (modversions) changed from 0xd98da785 to 0x2fc3cbb2 [C] 'function void regulator_unlock(regulator_dev*)' at core.c:205:1 has some sub-type changes: CRC value (modversions) changed from 0x223b51e3 to 0xc35bfa48 [C] 'function void regulator_unregister(regulator_dev*)' at core.c:5232:1 has some sub-type changes: CRC value (modversions) changed from 0x5185cf3b to 0xce46a51 [C] 'function int regulator_unregister_notifier(regulator*, notifier_block*)' at core.c:4374:1 has some sub-type changes: CRC value (modversions) changed from 0x399764ad to 0xf8ca4781 [C] 'function int regulatory_hint(wiphy*, const char*)' at reg.c:3008:1 has some sub-type changes: CRC value (modversions) changed from 0x7a5f9406 to 0xec908487 [C] 'function int regulatory_set_wiphy_regd(wiphy*, ieee80211_regdomain*)' at reg.c:3739:1 has some sub-type changes: CRC value (modversions) changed from 0x7d72c952 to 0x2004d7d7 [C] 'function void release_firmware(const firmware*)' at firmware.h:56:1 has some sub-type changes: CRC value (modversions) changed from 0x88d7e7bd to 0x1299170 [C] 'function void release_pages(page**, int)' at swap.c:760:1 has some sub-type changes: CRC value (modversions) changed from 0x8fddcb6e to 0x27b68124 [C] 'function void release_sock(sock*)' at sock.h:1546:1 has some sub-type changes: CRC value (modversions) changed from 0x59963d75 to 0x4db4436c [C] 'function int remap_pfn_range(vm_area_struct*, unsigned long int, unsigned long int, unsigned long int, __anonymous_struct__15)' at mm.h:2565:1 has some sub-type changes: CRC value (modversions) changed from 0xa5d5969a to 0x6bde5eb6 [C] 'function int remap_vmalloc_range(vm_area_struct*, void*, unsigned long int)' at vmalloc.c:3053:1 has some sub-type changes: CRC value (modversions) changed from 0xce3d1805 to 0xe6522642 [C] 'function int remove_arg_zero(linux_binprm*)' at binfmts.h:121:1 has some sub-type changes: CRC value (modversions) changed from 0xa815aeb3 to 0xb922d346 [C] 'function void remove_proc_entry(const char*, proc_dir_entry*)' at proc_fs.h:55:1 has some sub-type changes: CRC value (modversions) changed from 0x871ec87f to 0x12f2af03 [C] 'function int remove_proc_subtree(const char*, proc_dir_entry*)' at generic.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0x28ac8b85 to 0x60e2bdd4 [C] 'function int report_iommu_fault(iommu_domain*, device*, unsigned long int, int)' at iommu.c:2108:1 has some sub-type changes: CRC value (modversions) changed from 0x87f1db1c to 0xae458653 [C] 'function int request_firmware(const firmware**, const char*, device*)' at main.c:819:1 has some sub-type changes: CRC value (modversions) changed from 0x4c57ef17 to 0x81561847 [C] 'function int request_firmware_direct(const firmware**, const char*, device*)' at main.c:871:1 has some sub-type changes: CRC value (modversions) changed from 0x5296b06c to 0xfdcbf4b2 [C] 'function int request_firmware_into_buf(const firmware**, const char*, device*, void*, size_t)' at main.c:925:1 has some sub-type changes: CRC value (modversions) changed from 0xb123ffd7 to 0x4851c37d [C] 'function int request_firmware_nowait(module*, bool, const char*, device*, gfp_t, void*, void (const firmware*, void*)*)' at main.c:1007:1 has some sub-type changes: CRC value (modversions) changed from 0xc5826f91 to 0xd9c7a0ba [C] 'function key* request_key_tag(key_type*, const char*, key_tag*, const char*)' at key.h:295:1 has some sub-type changes: CRC value (modversions) changed from 0x852fffc2 to 0x8219e9dd [C] 'function int reset_controller_register(reset_controller_dev*)' at reset-controller.h:81:1 has some sub-type changes: CRC value (modversions) changed from 0x5ed35c84 to 0x6abec690 [C] 'function int revalidate_disk(gendisk*)' at fs.h:2788:1 has some sub-type changes: CRC value (modversions) changed from 0x2adff4ca to 0x810bf161 [C] 'function rfkill* rfkill_alloc(const char*, device*, rfkill_type, const rfkill_ops*, void*)' at rfkill.h:79:1 has some sub-type changes: CRC value (modversions) changed from 0x7bd7de2b to 0x587df66b [C] 'function void rndis_deregister(rndis_params*)' at rndis.h:182:1 has some sub-type changes: CRC value (modversions) changed from 0x162e9080 to 0x1280ae91 [C] 'function void rndis_free_response(rndis_params*, unsigned char*)' at rndis.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0x1d02e093 to 0xa710226d [C] 'function unsigned char* rndis_get_next_response(rndis_params*, unsigned int*)' at rndis.h:192:1 has some sub-type changes: CRC value (modversions) changed from 0xdeabc179 to 0xcd0dcff [C] 'function int rndis_msg_parser(rndis_params*, unsigned char*)' at rndis.h:180:1 has some sub-type changes: CRC value (modversions) changed from 0x51240e51 to 0x73827a27 [C] 'function rndis_params* rndis_register(void (void*)*, void*)' at rndis.h:181:1 has some sub-type changes: CRC value (modversions) changed from 0xf09ab635 to 0xed16e1b2 [C] 'function void rndis_set_host_mac(rndis_params*, const u8*)' at rndis.c:778:1 has some sub-type changes: CRC value (modversions) changed from 0xe9d6f24 to 0x2eeb06d4 [C] 'function int rndis_set_param_dev(rndis_params*, net_device*, unsigned short int*)' at rndis.h:183:1 has some sub-type changes: CRC value (modversions) changed from 0xde72ab3f to 0x85f3e02a [C] 'function int rndis_set_param_medium(rndis_params*, unsigned int, unsigned int)' at rndis.h:187:1 has some sub-type changes: CRC value (modversions) changed from 0xaf6b40ea to 0x9ff9d60f [C] 'function int rndis_set_param_vendor(rndis_params*, unsigned int, const char*)' at rndis.h:185:1 has some sub-type changes: CRC value (modversions) changed from 0x40779f74 to 0xfcbba6d6 [C] 'function int rndis_signal_connect(rndis_params*)' at rndis.h:196:1 has some sub-type changes: CRC value (modversions) changed from 0x3b50ddf0 to 0xdef8b64b [C] 'function void rndis_uninit(rndis_params*)' at rndis.h:195:1 has some sub-type changes: CRC value (modversions) changed from 0x12267cca to 0x8cc34c93 [C] 'function rpmsg_endpoint* rpmsg_create_ept(rpmsg_device*, int (rpmsg_device*, void*, int, void*, unsigned int)*, void*, rpmsg_channel_info)' at rpmsg.h:128:1 has some sub-type changes: CRC value (modversions) changed from 0x3e600166 to 0x6f90365c [C] 'function void rpmsg_destroy_ept(rpmsg_endpoint*)' at rpmsg.h:127:1 has some sub-type changes: CRC value (modversions) changed from 0x8f43cbb7 to 0x348fedae [C] 'function int rpmsg_get_signals(rpmsg_endpoint*)' at rpmsg_core.c:292:1 has some sub-type changes: CRC value (modversions) changed from 0x2c307478 to 0x6f6d15a8 [C] 'function unsigned int rpmsg_poll(rpmsg_endpoint*, file*, poll_table_struct*)' at rpmsg.h:142:1 has some sub-type changes: CRC value (modversions) changed from 0x72b454fa to 0x35e33e5 [C] 'function int rpmsg_register_device(rpmsg_device*)' at rpmsg_core.c:556:1 has some sub-type changes: CRC value (modversions) changed from 0x1de97744 to 0xbc3ef4ea [C] 'function int rpmsg_send(rpmsg_endpoint*, void*, int)' at rpmsg.h:132:1 has some sub-type changes: CRC value (modversions) changed from 0xc535296 to 0x92bb0f65 [C] 'function int rpmsg_set_signals(rpmsg_endpoint*, u32, u32)' at rpmsg_core.c:311:1 has some sub-type changes: CRC value (modversions) changed from 0x1398aaac to 0x1954aa1e [C] 'function int rpmsg_trysend(rpmsg_endpoint*, void*, int)' at rpmsg.h:137:1 has some sub-type changes: CRC value (modversions) changed from 0xbd357fac to 0x5530175f [C] 'function int rpmsg_unregister_device(device*, rpmsg_channel_info*)' at rpmsg_core.c:580:1 has some sub-type changes: CRC value (modversions) changed from 0xed471b97 to 0x5e544463 [C] 'function void rq_flush_dcache_pages(request*)' at blk-core.c:1528:1 has some sub-type changes: CRC value (modversions) changed from 0x37ceadb7 to 0x88f8361d [C] 'function rt6_info* rt6_lookup(net*, const in6_addr*, const in6_addr*, int, const sk_buff*, int)' at ip6_route.h:150:1 has some sub-type changes: CRC value (modversions) changed from 0x2f427278 to 0xb72ab2 [C] 'function void rt_mutex_lock(rt_mutex*)' at rtmutex.c:1495:1 has some sub-type changes: CRC value (modversions) changed from 0xde17cb96 to 0x7138e125 [C] 'function int rt_mutex_trylock(rt_mutex*)' at rtmutex.c:1581:1 has some sub-type changes: CRC value (modversions) changed from 0x69699efb to 0xe8e4f806 [C] 'function void rt_mutex_unlock(rt_mutex*)' at rtmutex.c:1601:1 has some sub-type changes: CRC value (modversions) changed from 0xffead289 to 0xd48d1bc8 [C] 'function void rtc_class_close(rtc_device*)' at rtc.h:190:1 has some sub-type changes: CRC value (modversions) changed from 0xb528c519 to 0xa2cbb721 [C] 'function rtc_device* rtc_class_open(const char*)' at rtc.h:189:1 has some sub-type changes: CRC value (modversions) changed from 0x3b891a0 to 0x6be1006d [C] 'function int rtc_read_time(rtc_device*, rtc_time*)' at rtc.h:176:1 has some sub-type changes: CRC value (modversions) changed from 0xc08d674d to 0x11f6093 [C] 'function void rtc_update_irq(rtc_device*, unsigned long int, unsigned long int)' at rtc.h:186:1 has some sub-type changes: CRC value (modversions) changed from 0x57605160 to 0x22a32778 [C] 'function int rtnl_link_register(rtnl_link_ops*)' at rtnetlink.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0xc541ff8b to 0x303dfd88 [C] 'function void rtnl_link_unregister(rtnl_link_ops*)' at rtnetlink.h:119:1 has some sub-type changes: CRC value (modversions) changed from 0x2eb3556e to 0x5307bfab [C] 'function int rtnl_register_module(module*, int, int, rtnl_doit_func, rtnl_dumpit_func, unsigned int)' at rtnetlink.c:241:1 has some sub-type changes: CRC value (modversions) changed from 0xdca005f3 to 0x3ba2c2bd [C] 'function void save_stack_trace_tsk(task_struct*, stack_trace*)' at stacktrace.c:201:1 has some sub-type changes: CRC value (modversions) changed from 0x39706a81 to 0x23fe1c57 [C] 'function void sb800_prefetch(device*, int)' at pci-quirks.c:191:1 has some sub-type changes: CRC value (modversions) changed from 0xbca8124b to 0x9ecd4ebc [C] 'function int sb_min_blocksize(super_block*, int)' at block_dev.c:157:1 has some sub-type changes: CRC value (modversions) changed from 0x17c12e4f to 0x9f3f8d24 [C] 'function int sb_set_blocksize(super_block*, int)' at fs.h:3165:1 has some sub-type changes: CRC value (modversions) changed from 0x1384453d to 0x627525c9 [C] 'function int sched_setattr(task_struct*, const sched_attr*)' at core.c:5060:1 has some sub-type changes: CRC value (modversions) changed from 0x1798a4a2 to 0x992d12fd [C] 'function int sched_setscheduler(task_struct*, int, const sched_param*)' at core.c:5053:1 has some sub-type changes: CRC value (modversions) changed from 0xe001181a to 0x455a6976 [C] 'function int sched_setscheduler_nocheck(task_struct*, int, const sched_param*)' at sched.h:1643:1 has some sub-type changes: CRC value (modversions) changed from 0x6eb5d0e1 to 0xb8559f58 [C] 'function void sched_show_task(task_struct*)' at core.c:5922:1 has some sub-type changes: CRC value (modversions) changed from 0x4f153dd1 to 0x5ec7190b [C] 'function void scmd_printk(const char*, const scsi_cmnd*, const char*, ...)' at scsi_device.h:263:1 has some sub-type changes: CRC value (modversions) changed from 0x979da11a to 0x705e47dd [C] 'function int scmi_driver_register(scmi_driver*, module*, const char*)' at scmi_protocol.h:286:1 has some sub-type changes: CRC value (modversions) changed from 0x60271e2f to 0x767318c4 [C] 'function void scmi_driver_unregister(scmi_driver*)' at scmi_protocol.h:288:1 has some sub-type changes: CRC value (modversions) changed from 0xf63f4166 to 0xb90a2154 [C] 'function int scsi_add_host_with_dma(Scsi_Host*, device*, device*)' at scsi_host.h:747:1 has some sub-type changes: CRC value (modversions) changed from 0x73d3364d to 0xfa24610f [C] 'function int scsi_autopm_get_device(scsi_device*)' at scsi_device.h:468:1 has some sub-type changes: CRC value (modversions) changed from 0xdcb26485 to 0x846bf19b [C] 'function void scsi_autopm_put_device(scsi_device*)' at scsi_pm.c:311:1 has some sub-type changes: CRC value (modversions) changed from 0xc9c1bc30 to 0x6fd835b6 [C] 'function void scsi_block_requests(Scsi_Host*)' at scsi_host.h:781:1 has some sub-type changes: CRC value (modversions) changed from 0x4f360469 to 0xd93f75f7 [C] 'function int scsi_block_when_processing_errors(scsi_device*)' at scsi_eh.h:17:1 has some sub-type changes: CRC value (modversions) changed from 0xda9700ff to 0x262f8bc4 [C] 'function int scsi_change_queue_depth(scsi_device*, int)' at scsi_device.h:397:1 has some sub-type changes: CRC value (modversions) changed from 0x16c33e75 to 0xe7fedc36 [C] 'function int scsi_device_get(scsi_device*)' at scsi.c:531:1 has some sub-type changes: CRC value (modversions) changed from 0x2f331ded to 0xc667cbf [C] 'function void scsi_device_put(scsi_device*)' at scsi.c:556:1 has some sub-type changes: CRC value (modversions) changed from 0xd0aa33bb to 0xdcbaf1b1 [C] 'function int scsi_dma_map(scsi_cmnd*)' at scsi_lib_dma.c:23:1 has some sub-type changes: CRC value (modversions) changed from 0x386e8a92 to 0x940381e1 [C] 'function void scsi_dma_unmap(scsi_cmnd*)' at scsi_lib_dma.c:43:1 has some sub-type changes: CRC value (modversions) changed from 0x71381f7f to 0x113b5a90 [C] 'function void scsi_eh_prep_cmnd(scsi_cmnd*, scsi_eh_save*, unsigned char*, int, unsigned int)' at scsi_error.c:953:1 has some sub-type changes: CRC value (modversions) changed from 0x958058eb to 0xcdcb26c5 [C] 'function void scsi_eh_restore_cmnd(scsi_cmnd*, scsi_eh_save*)' at scsi_error.c:1024:1 has some sub-type changes: CRC value (modversions) changed from 0xb0ef8c51 to 0x6ee021a4 [C] 'function scsi_device* scsi_get_host_dev(Scsi_Host*)' at scsi_scan.c:1895:1 has some sub-type changes: CRC value (modversions) changed from 0x7fea1f06 to 0x72b676cf [C] 'function Scsi_Host* scsi_host_alloc(scsi_host_template*, int)' at scsi_host.h:746:1 has some sub-type changes: CRC value (modversions) changed from 0x91bf1793 to 0x2a193c58 [C] 'function void scsi_host_put(Scsi_Host*)' at scsi_host.h:755:1 has some sub-type changes: CRC value (modversions) changed from 0x722e32c4 to 0x2a95a1b4 [C] 'function int scsi_ioctl(scsi_device*, int, void*)' at scsi_ioctl.c:202:1 has some sub-type changes: CRC value (modversions) changed from 0x648c4ac to 0xba543d7 [C] 'function int scsi_ioctl_block_when_processing_errors(scsi_device*, int, bool)' at scsi_ioctl.c:280:1 has some sub-type changes: CRC value (modversions) changed from 0xf4998f9c to 0x6fffcac [C] 'function int scsi_is_host_device(const device*)' at scsi_host.h:723:1 has some sub-type changes: CRC value (modversions) changed from 0x8f51cd8e to 0xcf00bbc5 [C] 'function void scsi_print_command(scsi_cmnd*)' at scsi_dbg.h:9:1 has some sub-type changes: CRC value (modversions) changed from 0x78bdaa7a to 0x695f1135 [C] 'function void scsi_print_sense_hdr(const scsi_device*, const char*, const scsi_sense_hdr*)' at scsi_logging.c:362:1 has some sub-type changes: CRC value (modversions) changed from 0x7c1aca4c to 0x251b9fbc [C] 'function int scsi_register_interface(class_interface*)' at scsi_sysfs.c:1529:1 has some sub-type changes: CRC value (modversions) changed from 0x8dcaf519 to 0x35c27115 [C] 'function void scsi_remove_device(scsi_device*)' at scsi_sysfs.c:1443:1 has some sub-type changes: CRC value (modversions) changed from 0xbbc179ed to 0x27e4a00b [C] 'function void scsi_remove_host(Scsi_Host*)' at scsi_host.h:752:1 has some sub-type changes: CRC value (modversions) changed from 0x8f52e2a0 to 0x3d87a14b [C] 'function void scsi_report_bus_reset(Scsi_Host*, int)' at scsi_eh.h:15:1 has some sub-type changes: CRC value (modversions) changed from 0xaeb992f7 to 0x4480f06c [C] 'function void scsi_report_device_reset(Scsi_Host*, int, int)' at scsi_error.c:2305:1 has some sub-type changes: CRC value (modversions) changed from 0x9383c07a to 0x4df2878f [C] 'function void scsi_scan_host(Scsi_Host*)' at scsi_host.h:750:1 has some sub-type changes: CRC value (modversions) changed from 0xe4c6bc62 to 0x4d00ddb2 [C] 'function void scsi_unblock_requests(Scsi_Host*)' at scsi_host.h:780:1 has some sub-type changes: CRC value (modversions) changed from 0xe8e5f0c1 to 0x59e4709f [C] 'function void sdev_prefix_printk(const char*, const scsi_device*, const char*, const char*, ...)' at scsi_device.h:256:1 has some sub-type changes: CRC value (modversions) changed from 0xc3a5126f to 0x734a08a3 [C] 'function int sdhci_add_host(sdhci_host*)' at sdhci.c:4477:1 has some sub-type changes: CRC value (modversions) changed from 0x501ef8f5 to 0xb1dc48de [C] 'function void sdhci_cleanup_host(sdhci_host*)' at sdhci.c:4399:1 has some sub-type changes: CRC value (modversions) changed from 0x9f551cc1 to 0x2be5ed24 [C] 'function void sdhci_cqe_disable(mmc_host*, bool)' at sdhci.c:3587:1 has some sub-type changes: CRC value (modversions) changed from 0x3d57004d to 0x5237a7e5 [C] 'function void sdhci_cqe_enable(mmc_host*)' at sdhci.c:3543:1 has some sub-type changes: CRC value (modversions) changed from 0x4e2d9a44 to 0x38e45022 [C] 'function bool sdhci_cqe_irq(sdhci_host*, u32, int*, int*)' at sdhci.c:3611:1 has some sub-type changes: CRC value (modversions) changed from 0x67586f2d to 0xcd40a54b [C] 'function void sdhci_dumpregs(sdhci_host*)' at sdhci.c:53:1 has some sub-type changes: CRC value (modversions) changed from 0x5fc3fd58 to 0x4cfd1777 [C] 'function void sdhci_enable_clk(sdhci_host*, u16)' at sdhci.c:1711:1 has some sub-type changes: CRC value (modversions) changed from 0xbfc4dfac to 0xb05d1e29 [C] 'function void sdhci_enable_v4_mode(sdhci_host*)' at sdhci.c:138:1 has some sub-type changes: CRC value (modversions) changed from 0xdf765519 to 0x5e7785b7 [C] 'function void sdhci_get_property(platform_device*)' at sdhci-pltfm.c:79:1 has some sub-type changes: CRC value (modversions) changed from 0xdb978efe to 0x33cfd532 [C] 'function void sdhci_pltfm_free(platform_device*)' at sdhci-pltfm.c:165:1 has some sub-type changes: CRC value (modversions) changed from 0xdb969b4a to 0xec75e8dc [C] 'function sdhci_host* sdhci_pltfm_init(platform_device*, const sdhci_pltfm_data*, size_t)' at sdhci-pltfm.c:116:1 has some sub-type changes: CRC value (modversions) changed from 0xfce85409 to 0xf9b00b2d [C] 'function void sdhci_remove_host(sdhci_host*, int)' at sdhci.c:4498:1 has some sub-type changes: CRC value (modversions) changed from 0x4070e086 to 0xbce45374 [C] 'function void sdhci_request(mmc_host*, mmc_request*)' at sdhci.c:1882:1 has some sub-type changes: CRC value (modversions) changed from 0x65a2f9f5 to 0xd89842cc [C] 'function int sdhci_request_atomic(mmc_host*, mmc_request*)' at sdhci.c:1926:1 has some sub-type changes: CRC value (modversions) changed from 0x1d4fd445 to 0x123ea884 [C] 'function void sdhci_reset(sdhci_host*, u8)' at sdhci.c:198:1 has some sub-type changes: CRC value (modversions) changed from 0xfd4449d5 to 0xfebb04c2 [C] 'function int sdhci_runtime_resume_host(sdhci_host*, int)' at sdhci.c:3485:1 has some sub-type changes: CRC value (modversions) changed from 0x3d22b0aa to 0x2355a2b4 [C] 'function int sdhci_runtime_suspend_host(sdhci_host*)' at sdhci.c:3463:1 has some sub-type changes: CRC value (modversions) changed from 0x917625f7 to 0x561bb9f [C] 'function void sdhci_set_bus_width(sdhci_host*, int)' at sdhci.c:1960:1 has some sub-type changes: CRC value (modversions) changed from 0xa967bba6 to 0x99278a3b [C] 'function int sdhci_setup_host(sdhci_host*)' at sdhci.c:3858:1 has some sub-type changes: CRC value (modversions) changed from 0x266e821d to 0x16540250 [C] 'function unsigned int sdio_align_size(sdio_func*, unsigned int)' at sdio_io.c:233:1 has some sub-type changes: CRC value (modversions) changed from 0x8ca484ed to 0xb6c22499 [C] 'function void sdio_claim_host(sdio_func*)' at sdio_func.h:125:1 has some sub-type changes: CRC value (modversions) changed from 0x49e27d35 to 0xa4b7fcd9 [C] 'function int sdio_claim_irq(sdio_func*, void (sdio_func*)*)' at sdio_func.h:133:1 has some sub-type changes: CRC value (modversions) changed from 0x96a8c1dc to 0x3dda1ec2 [C] 'function int sdio_disable_func(sdio_func*)' at sdio_func.h:129:1 has some sub-type changes: CRC value (modversions) changed from 0x3613a31b to 0x2ffe06a2 [C] 'function int sdio_enable_func(sdio_func*)' at sdio_func.h:128:1 has some sub-type changes: CRC value (modversions) changed from 0x83ab5c7b to 0x42f9ad89 [C] 'function unsigned char sdio_f0_readb(sdio_func*, unsigned int, int*)' at sdio_io.c:631:1 has some sub-type changes: CRC value (modversions) changed from 0xaca298f1 to 0x77dfb629 [C] 'function void sdio_f0_writeb(sdio_func*, unsigned char, unsigned int, int*)' at sdio_io.c:667:1 has some sub-type changes: CRC value (modversions) changed from 0xb5f5963e to 0x6f34abc3 [C] 'function mmc_pm_flag_t sdio_get_host_pm_caps(sdio_func*)' at sdio_io.c:700:1 has some sub-type changes: CRC value (modversions) changed from 0x63f1402f to 0x705d5d6f [C] 'function int sdio_memcpy_fromio(sdio_func*, void*, unsigned int, int)' at sdio_io.c:468:1 has some sub-type changes: CRC value (modversions) changed from 0xd8afbe03 to 0x2af8e424 [C] 'function int sdio_memcpy_toio(sdio_func*, unsigned int, void*, int)' at sdio_io.c:485:1 has some sub-type changes: CRC value (modversions) changed from 0x7f9c5942 to 0x63f43518 [C] 'function unsigned char sdio_readb(sdio_func*, unsigned int, int*)' at sdio_func.h:138:1 has some sub-type changes: CRC value (modversions) changed from 0x84a356d4 to 0xb1439d64 [C] 'function u32 sdio_readl(sdio_func*, unsigned int, int*)' at sdio_io.c:584:1 has some sub-type changes: CRC value (modversions) changed from 0x6a61a5a8 to 0x6293cc08 [C] 'function int sdio_readsb(sdio_func*, void*, unsigned int, int)' at sdio_func.h:144:1 has some sub-type changes: CRC value (modversions) changed from 0x384b793e to 0x83d1349f [C] 'function u16 sdio_readw(sdio_func*, unsigned int, int*)' at sdio_io.c:536:1 has some sub-type changes: CRC value (modversions) changed from 0xc821d711 to 0x97583734 [C] 'function int sdio_register_driver(sdio_driver*)' at sdio_func.h:107:1 has some sub-type changes: CRC value (modversions) changed from 0x784f820d to 0x2dd740ab [C] 'function void sdio_release_host(sdio_func*)' at sdio_func.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x21734f2b to 0xee64c2c5 [C] 'function int sdio_release_irq(sdio_func*)' at sdio_func.h:134:1 has some sub-type changes: CRC value (modversions) changed from 0x5ccd675c to 0x39ff5480 [C] 'function int sdio_set_block_size(sdio_func*, unsigned int)' at sdio_func.h:131:1 has some sub-type changes: CRC value (modversions) changed from 0x6490cc31 to 0x30c6df7d [C] 'function int sdio_set_host_pm_flags(sdio_func*, mmc_pm_flag_t)' at sdio_io.c:721:1 has some sub-type changes: CRC value (modversions) changed from 0x1e3b112c to 0x2b6f20d2 [C] 'function void sdio_signal_irq(mmc_host*)' at sdio_irq.c:132:1 has some sub-type changes: CRC value (modversions) changed from 0xca5a13d8 to 0x40a39809 [C] 'function void sdio_unregister_driver(sdio_driver*)' at sdio_func.h:108:1 has some sub-type changes: CRC value (modversions) changed from 0xed34e7c6 to 0x76d101c7 [C] 'function void sdio_writeb(sdio_func*, unsigned char, unsigned int, int*)' at sdio_func.h:147:1 has some sub-type changes: CRC value (modversions) changed from 0x108ccbae to 0x8ab5d96b [C] 'function void sdio_writel(sdio_func*, u32, unsigned int, int*)' at sdio_io.c:609:1 has some sub-type changes: CRC value (modversions) changed from 0x86da3c8f to 0x98da8ea2 [C] 'function int sdio_writesb(sdio_func*, unsigned int, void*, int)' at sdio_func.h:159:1 has some sub-type changes: CRC value (modversions) changed from 0xfd1d2b9 to 0x572069da [C] 'function void sdio_writew(sdio_func*, u16, unsigned int, int*)' at sdio_io.c:561:1 has some sub-type changes: CRC value (modversions) changed from 0x772c4151 to 0x23bed1bd [C] 'function int search_binary_handler(linux_binprm*)' at binfmts.h:122:1 has some sub-type changes: CRC value (modversions) changed from 0xf65c9073 to 0xc3ed40da [C] 'function dentry* securityfs_create_dir(const char*, dentry*)' at inode.c:228:1 has some sub-type changes: CRC value (modversions) changed from 0xdadf6f69 to 0xc478eef9 [C] 'function dentry* securityfs_create_file(const char*, umode_t, dentry*, void*, const file_operations*)' at inode.c:200:1 has some sub-type changes: CRC value (modversions) changed from 0x9633e6f2 to 0xcbececc7 [C] 'function void securityfs_remove(dentry*)' at inode.c:295:1 has some sub-type changes: CRC value (modversions) changed from 0x7aa59f97 to 0xb3ff9907 [C] 'function int send_sig_info(int, kernel_siginfo*, task_struct*)' at signal.h:327:1 has some sub-type changes: CRC value (modversions) changed from 0xde4105cc to 0x1622cbb9 [C] 'function int seq_file_path(seq_file*, file*, const char*)' at seq_file.c:492:1 has some sub-type changes: CRC value (modversions) changed from 0x41e69363 to 0x85971d1b [C] 'function void seq_hex_dump(seq_file*, const char*, int, int, int, void*, size_t, bool)' at seq_file.c:857:1 has some sub-type changes: CRC value (modversions) changed from 0x9fb4681 to 0xf9ff1d7b [C] 'function long long int seq_lseek(file*, long long int, int)' at seq_file.h:111:1 has some sub-type changes: CRC value (modversions) changed from 0x23715ca9 to 0x9f1ba5a5 [C] 'function int seq_open(file*, const seq_operations*)' at seq_file.h:109:1 has some sub-type changes: CRC value (modversions) changed from 0x3aa51e2e to 0xcd9a1de3 [C] 'function int seq_open_private(file*, const seq_operations*, int)' at seq_file.c:650:1 has some sub-type changes: CRC value (modversions) changed from 0x5cc90874 to 0xd155e995 [C] 'function void seq_printf(seq_file*, const char*, ...)' at seq_file.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0x33bdffdb to 0xd4f273af [C] 'function void seq_putc(seq_file*, char)' at seq_file.h:119:1 has some sub-type changes: CRC value (modversions) changed from 0xf11433ac to 0x79d3d500 [C] 'function void seq_puts(seq_file*, const char*)' at seq_file.h:120:1 has some sub-type changes: CRC value (modversions) changed from 0xe747144c to 0xa8230ab5 [C] 'function ssize_t seq_read(file*, char*, size_t, loff_t*)' at seq_file.c:153:1 has some sub-type changes: CRC value (modversions) changed from 0xd7432d4e to 0xb8e74dbf [C] 'function int seq_release(inode*, file*)' at seq_file.h:112:1 has some sub-type changes: CRC value (modversions) changed from 0x7abbb367 to 0xf2af47fb [C] 'function int seq_release_private(inode*, file*)' at seq_file.h:147:1 has some sub-type changes: CRC value (modversions) changed from 0x369e3dea to 0xea2b4569 [C] 'function void seq_vprintf(seq_file*, const char*, __va_list)' at seq_file.h:116:1 has some sub-type changes: CRC value (modversions) changed from 0x8f01e7ac to 0xf21a0e29 [C] 'function int seq_write(seq_file*, void*, unsigned long int)' at seq_file.h:113:1 has some sub-type changes: CRC value (modversions) changed from 0xf2206e70 to 0x5fc7ac77 [C] 'function void serdev_device_close(serdev_device*)' at core.c:196:1 has some sub-type changes: CRC value (modversions) changed from 0xe04e2bca to 0x52af057e [C] 'function int serdev_device_open(serdev_device*)' at core.c:168:1 has some sub-type changes: CRC value (modversions) changed from 0x5c468d98 to 0xcaaad3c0 [C] 'function unsigned int serdev_device_set_baudrate(serdev_device*, unsigned int)' at core.c:361:1 has some sub-type changes: CRC value (modversions) changed from 0xe465a836 to 0xd86227e9 [C] 'function void serdev_device_set_flow_control(serdev_device*, bool)' at core.c:373:1 has some sub-type changes: CRC value (modversions) changed from 0xb34497e1 to 0x91059f5c [C] 'function void serdev_device_wait_until_sent(serdev_device*, long int)' at core.c:396:1 has some sub-type changes: CRC value (modversions) changed from 0xd93e6f69 to 0x1cb805cb [C] 'function int serdev_device_write(serdev_device*, const unsigned char*, size_t, long int)' at core.c:291:1 has some sub-type changes: CRC value (modversions) changed from 0x6d0398be to 0xfa90048b [C] 'function void serdev_device_write_wakeup(serdev_device*)' at core.c:236:1 has some sub-type changes: CRC value (modversions) changed from 0x68d1935b to 0x56d85b65 [C] 'function void serial8250_clear_and_reinit_fifos(uart_8250_port*)' at 8250_port.c:578:1 has some sub-type changes: CRC value (modversions) changed from 0x8de702e0 to 0xf2737811 [C] 'function void serial8250_do_pm(uart_port*, unsigned int, unsigned int)' at 8250_port.c:2730:1 has some sub-type changes: CRC value (modversions) changed from 0x75d72966 to 0x3b785827 [C] 'function void serial8250_do_set_ldisc(uart_port*, ktermios*)' at 8250_port.c:2703:1 has some sub-type changes: CRC value (modversions) changed from 0xce6140a3 to 0xebbf16a2 [C] 'function void serial8250_do_set_termios(uart_port*, ktermios*, ktermios*)' at 8250_port.c:2556:1 has some sub-type changes: CRC value (modversions) changed from 0x90c9eb17 to 0xf2bc8b42 [C] 'function uart_8250_port* serial8250_get_port(int)' at 8250.h:151:1 has some sub-type changes: CRC value (modversions) changed from 0xe4684cc8 to 0xd8c15b9 [C] 'function int serial8250_handle_irq(uart_port*, unsigned int)' at 8250_port.c:1814:1 has some sub-type changes: CRC value (modversions) changed from 0xee55e41d to 0xe9dc5329 [C] 'function int serial8250_register_8250_port(uart_8250_port*)' at serial_8250.h:145:1 has some sub-type changes: CRC value (modversions) changed from 0x5b18cc08 to 0x5c6a7500 [C] 'function irqreturn serio_interrupt(serio*, unsigned char, unsigned int)' at serio.h:89:1 has some sub-type changes: CRC value (modversions) changed from 0x2848d6b5 to 0x35af4d35 [C] 'function void serio_reconnect(serio*)' at serio.h:88:1 has some sub-type changes: CRC value (modversions) changed from 0x94a187e6 to 0x71a260f5 [C] 'function void serio_unregister_port(serio*)' at serio.h:97:1 has some sub-type changes: CRC value (modversions) changed from 0x73e67ff5 to 0xab252eb1 [C] 'function int set_anon_super(super_block*, void*)' at super.c:1099:1 has some sub-type changes: CRC value (modversions) changed from 0xd2279b35 to 0xbc0447d8 [C] 'function int set_blocksize(block_device*, int)' at fs.h:3164:1 has some sub-type changes: CRC value (modversions) changed from 0xae097091 to 0x3100d4f0 [C] 'function int set_cpus_allowed_ptr(task_struct*, const cpumask*)' at core.c:1711:1 has some sub-type changes: CRC value (modversions) changed from 0x8b914798 to 0x824154fa [C] 'function void set_disk_ro(gendisk*, int)' at genhd.c:1577:1 has some sub-type changes: CRC value (modversions) changed from 0x45c35087 to 0x5abdffeb [C] 'function int set_page_dirty(page*)' at mm.h:1622:1 has some sub-type changes: CRC value (modversions) changed from 0xd19eb4d6 to 0x7b040ecc [C] 'function int set_page_dirty_lock(page*)' at page-writeback.c:2592:1 has some sub-type changes: CRC value (modversions) changed from 0x8e4ddec3 to 0xe08ed1ea [C] 'function void set_user_nice(task_struct*, long int)' at sched.h:1624:1 has some sub-type changes: CRC value (modversions) changed from 0x238946ff to 0xc28ba01c [C] 'function void setattr_copy(inode*, const iattr*)' at fs.h:3448:1 has some sub-type changes: CRC value (modversions) changed from 0x91db24db to 0x430bedcd [C] 'function int setup_irq(unsigned int, irqaction*)' at manage.c:1687:1 has some sub-type changes: CRC value (modversions) changed from 0x9639e0ad to 0x7cb3e70a [C] 'function int sg_alloc_table_from_pages(sg_table*, page**, unsigned int, unsigned int, unsigned long int, gfp_t)' at scatterlist.c:464:1 has some sub-type changes: CRC value (modversions) changed from 0xb6845e12 to 0x36f2b238 [C] 'function bool sg_miter_next(sg_mapping_iter*)' at scatterlist.h:464:1 has some sub-type changes: CRC value (modversions) changed from 0x62c58ccc to 0xb40fcf1f [C] 'function bool sg_miter_skip(sg_mapping_iter*, off_t)' at scatterlist.c:726:1 has some sub-type changes: CRC value (modversions) changed from 0xbcb5ffa to 0xa67f4f46 [C] 'function void sg_miter_start(sg_mapping_iter*, scatterlist*, unsigned int, unsigned int)' at scatterlist.h:461:1 has some sub-type changes: CRC value (modversions) changed from 0xae7d9e29 to 0x22deed7b [C] 'function void sg_miter_stop(sg_mapping_iter*)' at scatterlist.h:465:1 has some sub-type changes: CRC value (modversions) changed from 0x7668d864 to 0x691a629e [C] 'function int sg_scsi_ioctl(request_queue*, gendisk*, fmode_t, scsi_ioctl_command*)' at scsi_ioctl.c:404:1 has some sub-type changes: CRC value (modversions) changed from 0x7581bc08 to 0xe9ace6e3 [C] 'function super_block* sget(file_system_type*, int (super_block*, void*)*, int (super_block*, void*)*, int, void*)' at super.c:576:1 has some sub-type changes: CRC value (modversions) changed from 0x16924159 to 0x12ad04f0 [C] 'function void shash_free_instance(crypto_instance*)' at hash.h:107:1 has some sub-type changes: CRC value (modversions) changed from 0xbd294c36 to 0xbe5ad4a9 [C] 'function int shash_register_instance(crypto_template*, shash_instance*)' at hash.h:105:1 has some sub-type changes: CRC value (modversions) changed from 0x3094cb92 to 0x30b2fed4 [C] 'function file* shmem_file_setup(const char*, long long int, unsigned long int)' at shmem_fs.h:55:1 has some sub-type changes: CRC value (modversions) changed from 0xa1f1e8c2 to 0xca4e0ab [C] 'function page* shmem_read_mapping_page_gfp(address_space*, unsigned long int, unsigned int)' at shmem_fs.h:74:1 has some sub-type changes: CRC value (modversions) changed from 0xa1ee49bf to 0x79050148 [C] 'function void shmem_truncate_range(inode*, loff_t, loff_t)' at shmem.c:990:1 has some sub-type changes: CRC value (modversions) changed from 0xde79ed42 to 0xa0fc82ba [C] 'function int simple_attr_open(inode*, file*, int (void*, u64*)*, int (void*, typedef u64)*, const char*)' at libfs.c:820:1 has some sub-type changes: CRC value (modversions) changed from 0x7c2614f6 to 0xc889e551 [C] 'function ssize_t simple_attr_read(file*, char*, size_t, loff_t*)' at libfs.c:850:1 has some sub-type changes: CRC value (modversions) changed from 0x30a7324c to 0x7fe0d001 [C] 'function int simple_attr_release(inode*, file*)' at libfs.c:842:1 has some sub-type changes: CRC value (modversions) changed from 0x8c978045 to 0x451e0363 [C] 'function ssize_t simple_attr_write(file*, const char*, size_t, loff_t*)' at libfs.c:888:1 has some sub-type changes: CRC value (modversions) changed from 0xca3162e9 to 0xbd187a48 [C] 'function int simple_fill_super(super_block*, unsigned long int, const tree_descr*)' at fs.h:3405:1 has some sub-type changes: CRC value (modversions) changed from 0x4f856063 to 0x6170d59d [C] 'function int simple_getattr(const path*, kstat*, u32, unsigned int)' at libfs.c:29:1 has some sub-type changes: CRC value (modversions) changed from 0xafa569e8 to 0x36c4b87e [C] 'function int simple_open(inode*, file*)' at libfs.c:315:1 has some sub-type changes: CRC value (modversions) changed from 0xf2e7de9 to 0x360ee68f [C] 'function int simple_pin_fs(file_system_type*, vfsmount**, int*)' at fs.h:3407:1 has some sub-type changes: CRC value (modversions) changed from 0x5a6d6287 to 0xcf0f6475 [C] 'function void simple_release_fs(vfsmount**, int*)' at fs.h:3408:1 has some sub-type changes: CRC value (modversions) changed from 0x3eeef96e to 0x6c31fe21 [C] 'function int simple_setattr(dentry*, iattr*)' at fs.h:3370:1 has some sub-type changes: CRC value (modversions) changed from 0xde491667 to 0x894c9839 [C] 'function int simple_statfs(dentry*, kstatfs*)' at libfs.c:39:1 has some sub-type changes: CRC value (modversions) changed from 0x55700214 to 0x6ed868e0 [C] 'function int single_open(file*, int (seq_file*, void*)*, void*)' at seq_file.h:142:1 has some sub-type changes: CRC value (modversions) changed from 0xbc662686 to 0x1b73df5f [C] 'function int single_open_size(file*, int (seq_file*, void*)*, void*, unsigned long int)' at seq_file.h:143:1 has some sub-type changes: CRC value (modversions) changed from 0x40f1a466 to 0xbc5a356a [C] 'function int single_release(inode*, file*)' at seq_file.h:144:1 has some sub-type changes: CRC value (modversions) changed from 0x94b36794 to 0x526202c7 [C] 'function sock* sk_alloc(net*, int, unsigned int, proto*, int)' at sock.h:1612:1 has some sub-type changes: CRC value (modversions) changed from 0x13e6b86e to 0xe26e0f40 [C] 'function void sk_free(sock*)' at sock.h:1614:1 has some sub-type changes: CRC value (modversions) changed from 0x4edb7921 to 0xb90f4365 [C] 'function void sk_setup_caps(sock*, dst_entry*)' at sock.h:1982:1 has some sub-type changes: CRC value (modversions) changed from 0x8729e268 to 0x98ec50d [C] 'function void skb_add_rx_frag(sk_buff*, int, page*, int, int, unsigned int)' at skbuff.h:2148:1 has some sub-type changes: CRC value (modversions) changed from 0x319cc371 to 0xc8535acd [C] 'function int skb_append_pagefrags(sk_buff*, page*, int, size_t)' at skbuff.c:3590:1 has some sub-type changes: CRC value (modversions) changed from 0x5e3232bb to 0x3933f677 [C] 'function unsigned int skb_checksum(const sk_buff*, int, int, unsigned int)' at skbuff.h:3565:1 has some sub-type changes: CRC value (modversions) changed from 0x2cad9c3d to 0x6c3a5e5d [C] 'function int skb_checksum_help(sk_buff*)' at netdevice.h:4391:1 has some sub-type changes: CRC value (modversions) changed from 0x70254ae to 0x1c8a57e7 [C] 'function sk_buff* skb_clone(sk_buff*, unsigned int)' at skbuff.h:1111:1 has some sub-type changes: CRC value (modversions) changed from 0xb7b98150 to 0xd36d8a22 [C] 'function void skb_coalesce_rx_frag(sk_buff*, int, int, unsigned int)' at skbuff.c:554:1 has some sub-type changes: CRC value (modversions) changed from 0x804055ff to 0xf975231a [C] 'function sk_buff* skb_copy(const sk_buff*, unsigned int)' at skbuff.h:1113:1 has some sub-type changes: CRC value (modversions) changed from 0x6093200a to 0xbf9127eb [C] 'function int skb_copy_bits(const sk_buff*, int, void*, int)' at skbuff.h:3513:1 has some sub-type changes: CRC value (modversions) changed from 0x1d3f23e9 to 0x74256bac [C] 'function int skb_copy_datagram_iter(const sk_buff*, int, iov_iter*, int)' at skbuff.h:3490:1 has some sub-type changes: CRC value (modversions) changed from 0x50ff9c7a to 0x1401555a [C] 'function sk_buff* skb_copy_expand(const sk_buff*, int, int, unsigned int)' at skbuff.h:1125:1 has some sub-type changes: CRC value (modversions) changed from 0x485f9b0d to 0x417c8130 [C] 'function int skb_cow_data(sk_buff*, int, sk_buff**)' at skbuff.c:4305:1 has some sub-type changes: CRC value (modversions) changed from 0xb2b8875b to 0x7dbbb713 [C] 'function sk_buff* skb_dequeue(sk_buff_head*)' at skbuff.h:2051:1 has some sub-type changes: CRC value (modversions) changed from 0xbb96e4d1 to 0x43556c8 [C] 'function sk_buff* skb_dequeue_tail(sk_buff_head*)' at skbuff.c:3056:1 has some sub-type changes: CRC value (modversions) changed from 0x53456be to 0x67dc7412 [C] 'function int skb_ensure_writable(sk_buff*, int)' at skbuff.h:3533:1 has some sub-type changes: CRC value (modversions) changed from 0xbe02da16 to 0x225c8331 [C] 'function void skb_free_datagram(sock*, sk_buff*)' at skbuff.h:3505:1 has some sub-type changes: CRC value (modversions) changed from 0xf3337e1c to 0xab81cf9c [C] 'function bool skb_page_frag_refill(unsigned int, page_frag*, unsigned int)' at skbuff.h:3060:1 has some sub-type changes: CRC value (modversions) changed from 0x31946ffd to 0xf9fdf475 [C] 'function bool skb_partial_csum_set(sk_buff*, unsigned short int, unsigned short int)' at skbuff.h:4477:1 has some sub-type changes: CRC value (modversions) changed from 0x103d6ec1 to 0x692d1f9c [C] 'function void* skb_pull(sk_buff*, unsigned int)' at skbuff.h:2259:1 has some sub-type changes: CRC value (modversions) changed from 0x2ccb2b8d to 0x4e7e3a3c [C] 'function void* skb_pull_rcsum(sk_buff*, unsigned int)' at skbuff.h:3349:1 has some sub-type changes: CRC value (modversions) changed from 0x5c222cfd to 0x5e4b8b2d [C] 'function void* skb_push(sk_buff*, unsigned int)' at skbuff.h:2251:1 has some sub-type changes: CRC value (modversions) changed from 0x70b553a6 to 0xc18d1cba [C] 'function void* skb_put(sk_buff*, unsigned int)' at skbuff.h:2195:1 has some sub-type changes: CRC value (modversions) changed from 0x7161dfe5 to 0xc94a4bf1 [C] 'function void skb_queue_head(sk_buff_head*, sk_buff*)' at skbuff.h:2000:1 has some sub-type changes: CRC value (modversions) changed from 0xf3f87ffa to 0x23bcc658 [C] 'function void skb_queue_purge(sk_buff_head*)' at skbuff.h:2762:1 has some sub-type changes: CRC value (modversions) changed from 0x7545fa14 to 0x8c0ffdb9 [C] 'function void skb_queue_tail(sk_buff_head*, sk_buff*)' at skbuff.h:2017:1 has some sub-type changes: CRC value (modversions) changed from 0xbe338a99 to 0xe360d05d [C] 'function sk_buff* skb_realloc_headroom(sk_buff*, unsigned int)' at skbuff.h:1123:1 has some sub-type changes: CRC value (modversions) changed from 0xfeaf9ee8 to 0xf4e3cae [C] 'function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*)' at skbuff.h:3486:1 has some sub-type changes: CRC value (modversions) changed from 0x3c4e84e3 to 0x4d13492c [C] 'function void skb_scrub_packet(sk_buff*, bool)' at skbuff.h:3528:1 has some sub-type changes: CRC value (modversions) changed from 0x19de4aaa to 0x34c1e138 [C] 'function void skb_set_owner_w(sk_buff*, sock*)' at sock.h:2140:1 has some sub-type changes: CRC value (modversions) changed from 0xb2d9da44 to 0x729331ce [C] 'function int skb_store_bits(sk_buff*, int, void*, int)' at skbuff.c:2552:1 has some sub-type changes: CRC value (modversions) changed from 0xeb7fa6ea to 0x52b45216 [C] 'function int skb_to_sgvec(sk_buff*, scatterlist*, int, int)' at skbuff.c:4247:1 has some sub-type changes: CRC value (modversions) changed from 0x6fa8f643 to 0xdcb69e9f [C] 'function int skb_to_sgvec_nomark(sk_buff*, scatterlist*, int, int)' at skbuff.c:4279:1 has some sub-type changes: CRC value (modversions) changed from 0x3727d2fc to 0xd1c062f2 [C] 'function void skb_trim(sk_buff*, unsigned int)' at skbuff.h:2658:1 has some sub-type changes: CRC value (modversions) changed from 0x80cf3bf1 to 0xf408696b [C] 'function void skb_tstamp_tx(sk_buff*, skb_shared_hwtstamps*)' at skbuff.h:3816:1 has some sub-type changes: CRC value (modversions) changed from 0x4d8a4be6 to 0xdcc4f016 [C] 'function void skb_unlink(sk_buff*, sk_buff_head*)' at skbuff.c:3162:1 has some sub-type changes: CRC value (modversions) changed from 0xc5abdbd3 to 0x88d1c16 [C] 'function int skcipher_walk_aead_decrypt(skcipher_walk*, aead_request*, bool)' at skcipher.c:570:1 has some sub-type changes: CRC value (modversions) changed from 0xf2c9fbf5 to 0x525238ed [C] 'function int skcipher_walk_aead_encrypt(skcipher_walk*, aead_request*, bool)' at skcipher.c:561:1 has some sub-type changes: CRC value (modversions) changed from 0x3dbf0e37 to 0x7d711b4e [C] 'function int skcipher_walk_done(skcipher_walk*, int)' at skcipher.h:136:1 has some sub-type changes: CRC value (modversions) changed from 0x5940638e to 0xfeeea441 [C] 'function int skcipher_walk_virt(skcipher_walk*, skcipher_request*, bool)' at skcipher.h:137:1 has some sub-type changes: CRC value (modversions) changed from 0x89b8a452 to 0xaa720a67 [C] 'function int smpboot_register_percpu_thread(smp_hotplug_thread*)' at smpboot.h:45:1 has some sub-type changes: CRC value (modversions) changed from 0x9d254731 to 0x100d1b53 [C] 'function int snd_card_disconnect(snd_card*)' at core.h:226:1 has some sub-type changes: CRC value (modversions) changed from 0xaa181083 to 0x8989661b [C] 'function int snd_card_free(snd_card*)' at core.h:228:1 has some sub-type changes: CRC value (modversions) changed from 0x2f5f6b6a to 0x333f23e9 [C] 'function int snd_card_new(device*, int, const char*, module*, int, snd_card**)' at core.h:222:1 has some sub-type changes: CRC value (modversions) changed from 0xaa5958ce to 0x6060bac1 [C] 'function int snd_card_register(snd_card*)' at core.h:231:1 has some sub-type changes: CRC value (modversions) changed from 0x5c973c5a to 0xa29a724c [C] 'function int snd_card_rw_proc_new(snd_card*, const char*, void*, void (snd_info_entry*, snd_info_buffer*)*, void (snd_info_entry*, snd_info_buffer*)*)' at info.c:875:1 has some sub-type changes: CRC value (modversions) changed from 0x8260be6c to 0xb8132166 [C] 'function int snd_component_add(snd_card*, const char*)' at core.h:235:1 has some sub-type changes: CRC value (modversions) changed from 0xdd4c981b to 0x1fd28bcd [C] 'function int snd_compr_stop_error(snd_compr_stream*, snd_pcm_state_t)' at compress_offload.c:755:1 has some sub-type changes: CRC value (modversions) changed from 0x12ca91b9 to 0x32707658 [C] 'function int snd_ctl_add(snd_card*, snd_kcontrol*)' at control.c:422:1 has some sub-type changes: CRC value (modversions) changed from 0xff76bad7 to 0xa571f025 [C] 'function int snd_ctl_add_vmaster_hook(snd_kcontrol*, void (void*, int)*, void*)' at vmaster.c:446:1 has some sub-type changes: CRC value (modversions) changed from 0x396ced6a to 0xd354347 [C] 'function int snd_ctl_apply_vmaster_slaves(snd_kcontrol*, int (snd_kcontrol*, snd_kcontrol*, void*)*, void*)' at vmaster.c:498:1 has some sub-type changes: CRC value (modversions) changed from 0xa4b15c62 to 0xcc9321d4 [C] 'function int snd_ctl_boolean_mono_info(snd_kcontrol*, snd_ctl_elem_info*)' at control.c:1892:1 has some sub-type changes: CRC value (modversions) changed from 0x75109f46 to 0xaedb7bd8 [C] 'function int snd_ctl_boolean_stereo_info(snd_kcontrol*, snd_ctl_elem_info*)' at control.c:1912:1 has some sub-type changes: CRC value (modversions) changed from 0xad1eaecc to 0x6c3e35a8 [C] 'function snd_kcontrol* snd_ctl_find_id(snd_card*, snd_ctl_elem_id*)' at control.c:664:1 has some sub-type changes: CRC value (modversions) changed from 0xfe7389ee to 0xd157d31 [C] 'function snd_kcontrol* snd_ctl_make_virtual_master(char*, const unsigned int*)' at vmaster.c:391:1 has some sub-type changes: CRC value (modversions) changed from 0x671557f7 to 0x2b306869 [C] 'function snd_kcontrol* snd_ctl_new1(const snd_kcontrol_new*, void*)' at control.c:228:1 has some sub-type changes: CRC value (modversions) changed from 0xcbc41ab7 to 0x76fc6e40 [C] 'function void snd_ctl_notify(snd_card*, unsigned int, snd_ctl_elem_id*)' at control.c:141:1 has some sub-type changes: CRC value (modversions) changed from 0xdccbc9a7 to 0xd1220a1c [C] 'function int snd_ctl_remove(snd_card*, snd_kcontrol*)' at control.c:461:1 has some sub-type changes: CRC value (modversions) changed from 0x22f1a81 to 0x82a32364 [C] 'function int snd_ctl_remove_id(snd_card*, snd_ctl_elem_id*)' at control.c:488:1 has some sub-type changes: CRC value (modversions) changed from 0xdcd9077d to 0x3143e6e5 [C] 'function void snd_ctl_sync_vmaster(snd_kcontrol*, bool)' at vmaster.c:466:1 has some sub-type changes: CRC value (modversions) changed from 0x822b7ad1 to 0xf88d9b09 [C] 'function void snd_device_disconnect(snd_card*, void*)' at device.c:106:1 has some sub-type changes: CRC value (modversions) changed from 0xea228edc to 0x4726a234 [C] 'function void snd_device_free(snd_card*, void*)' at device.c:130:1 has some sub-type changes: CRC value (modversions) changed from 0x111a8e8e to 0xc21075fd [C] 'function int snd_device_new(snd_card*, snd_device_type, void*, snd_device_ops*)' at core.h:257:1 has some sub-type changes: CRC value (modversions) changed from 0x9385d341 to 0x4aedde13 [C] 'function int snd_dma_alloc_pages(int, device*, unsigned long int, snd_dma_buffer*)' at memalloc.h:133:1 has some sub-type changes: CRC value (modversions) changed from 0xb1841b8a to 0x6f630dc8 [C] 'function void snd_dma_free_pages(snd_dma_buffer*)' at memalloc.h:137:1 has some sub-type changes: CRC value (modversions) changed from 0x5212d238 to 0x96a3d6ed [C] 'function int snd_dmaengine_pcm_close_release_chan(snd_pcm_substream*)' at pcm_dmaengine.c:360:1 has some sub-type changes: CRC value (modversions) changed from 0xf7581895 to 0x735d6021 [C] 'function dma_chan* snd_dmaengine_pcm_get_chan(snd_pcm_substream*)' at pcm_dmaengine.c:35:1 has some sub-type changes: CRC value (modversions) changed from 0x687e8411 to 0xe8c15872 [C] 'function int snd_dmaengine_pcm_open_request_chan(snd_pcm_substream*, dma_filter_fn, void*)' at pcm_dmaengine.c:331:1 has some sub-type changes: CRC value (modversions) changed from 0x1318c99a to 0xa7a41772 [C] 'function snd_pcm_uframes_t snd_dmaengine_pcm_pointer(snd_pcm_substream*)' at pcm_dmaengine.c:240:1 has some sub-type changes: CRC value (modversions) changed from 0x19026663 to 0xd49d3d56 [C] 'function int snd_dmaengine_pcm_prepare_slave_config(snd_pcm_substream*, snd_pcm_hw_params*, dma_slave_config*)' at soc-generic-dmaengine-pcm.c:58:1 has some sub-type changes: CRC value (modversions) changed from 0x30dda42b to 0x33348762 [C] 'function int snd_dmaengine_pcm_trigger(snd_pcm_substream*, int)' at pcm_dmaengine.c:182:1 has some sub-type changes: CRC value (modversions) changed from 0xcd9626eb to 0xfefaf9ee [C] 'function int snd_hwdep_new(snd_card*, char*, int, snd_hwdep**)' at hwdep.c:351:1 has some sub-type changes: CRC value (modversions) changed from 0x13b7519c to 0x2fad6153 [C] 'function int snd_hwparams_to_dma_slave_config(const snd_pcm_substream*, const snd_pcm_hw_params*, dma_slave_config*)' at pcm_dmaengine.c:52:1 has some sub-type changes: CRC value (modversions) changed from 0xe829070b to 0xc8865247 [C] 'function snd_info_entry* snd_info_create_card_entry(snd_card*, const char*, snd_info_entry*)' at info.c:741:1 has some sub-type changes: CRC value (modversions) changed from 0xace68ebb to 0x6c1f55a7 [C] 'function snd_info_entry* snd_info_create_module_entry(module*, const char*, snd_info_entry*)' at info.c:721:1 has some sub-type changes: CRC value (modversions) changed from 0xed00bf99 to 0xa5f3fafc [C] 'function void snd_info_free_entry(snd_info_entry*)' at info.c:769:1 has some sub-type changes: CRC value (modversions) changed from 0x63012445 to 0x620ba32 [C] 'function int snd_info_register(snd_info_entry*)' at info.h:129:1 has some sub-type changes: CRC value (modversions) changed from 0x8d1def03 to 0x519942e9 [C] 'function int snd_jack_new(snd_card*, const char*, int, snd_jack**, bool, bool)' at jack.c:198:1 has some sub-type changes: CRC value (modversions) changed from 0xadbf4a58 to 0x2523d117 [C] 'function void snd_jack_report(snd_jack*, int)' at jack.c:340:1 has some sub-type changes: CRC value (modversions) changed from 0x12bc44b6 to 0x4262e0a9 [C] 'function int snd_jack_set_key(snd_jack*, snd_jack_types, int)' at jack.c:317:1 has some sub-type changes: CRC value (modversions) changed from 0x1231a81e to 0xc1df70f5 [C] 'function const snd_pci_quirk* snd_pci_quirk_lookup(pci_dev*, const snd_pci_quirk*)' at misc.c:138:1 has some sub-type changes: CRC value (modversions) changed from 0x9ed2e0a8 to 0x71eb396b [C] 'function int snd_pcm_add_chmap_ctls(snd_pcm*, int, const snd_pcm_chmap_elem*, int, unsigned long int, snd_pcm_chmap**)' at pcm_lib.c:2418:1 has some sub-type changes: CRC value (modversions) changed from 0xc92f9e0b to 0xfa6a7130 [C] 'function int snd_pcm_hw_constraint_eld(snd_pcm_runtime*, void*)' at pcm_drm_eld.c:80:1 has some sub-type changes: CRC value (modversions) changed from 0x4fb1b074 to 0x44ac8869 [C] 'function int snd_pcm_hw_constraint_integer(snd_pcm_runtime*, int)' at pcm.h:977:1 has some sub-type changes: CRC value (modversions) changed from 0x3ebc2f6c to 0xa8fb481b [C] 'function int snd_pcm_hw_constraint_list(snd_pcm_runtime*, unsigned int, snd_pcm_hw_param_t, const snd_pcm_hw_constraint_list*)' at pcm_lib.c:1260:1 has some sub-type changes: CRC value (modversions) changed from 0x417782cc to 0xf107594e [C] 'function int snd_pcm_hw_constraint_mask64(snd_pcm_runtime*, int, long long unsigned int)' at pcm.h:973:1 has some sub-type changes: CRC value (modversions) changed from 0x4534f23 to 0x614a44fc [C] 'function int snd_pcm_hw_constraint_minmax(snd_pcm_runtime*, int, unsigned int, unsigned int)' at pcm.h:975:1 has some sub-type changes: CRC value (modversions) changed from 0x64c4b3ce to 0x519cab67 [C] 'function int snd_pcm_hw_constraint_msbits(snd_pcm_runtime*, unsigned int, unsigned int, unsigned int)' at pcm_lib.c:1404:1 has some sub-type changes: CRC value (modversions) changed from 0xf0196672 to 0xea8b2bb9 [C] 'function int snd_pcm_hw_constraint_step(snd_pcm_runtime*, unsigned int, snd_pcm_hw_param_t, unsigned long int)' at pcm_lib.c:1433:1 has some sub-type changes: CRC value (modversions) changed from 0x7f050898 to 0xcd989f00 [C] 'function int snd_pcm_hw_rule_add(snd_pcm_runtime*, unsigned int, int, int (snd_pcm_hw_params*, snd_pcm_hw_rule*)*, void*, int, ...)' at pcm.h:1007:1 has some sub-type changes: CRC value (modversions) changed from 0x6cd9f717 to 0x3e5c1096 [C] 'function int snd_pcm_lib_default_mmap(snd_pcm_substream*, vm_area_struct*)' at pcm_native.c:3414:1 has some sub-type changes: CRC value (modversions) changed from 0xff9e7ee to 0x101ec7a [C] 'function int snd_pcm_lib_free_pages(snd_pcm_substream*)' at pcm_memory.c:338:1 has some sub-type changes: CRC value (modversions) changed from 0xac3a4a3b to 0x2032070 [C] 'function int snd_pcm_lib_ioctl(snd_pcm_substream*, unsigned int, void*)' at pcm_lib.c:1755:1 has some sub-type changes: CRC value (modversions) changed from 0xfcb3d602 to 0xe21d0787 [C] 'function int snd_pcm_lib_malloc_pages(snd_pcm_substream*, size_t)' at pcm_memory.c:287:1 has some sub-type changes: CRC value (modversions) changed from 0xbbbd3f6e to 0xe2526d09 [C] 'function void snd_pcm_lib_preallocate_free_for_all(snd_pcm*)' at pcm.h:1180:1 has some sub-type changes: CRC value (modversions) changed from 0x12e46061 to 0xa8fdf41 [C] 'function void snd_pcm_lib_preallocate_pages(snd_pcm_substream*, int, device*, size_t, size_t)' at pcm_memory.c:220:1 has some sub-type changes: CRC value (modversions) changed from 0x3fdadbef to 0xa50a6134 [C] 'function void snd_pcm_lib_preallocate_pages_for_all(snd_pcm*, int, void*, unsigned long int, unsigned long int)' at pcm.h:1184:1 has some sub-type changes: CRC value (modversions) changed from 0xcb0c45bb to 0xc1fa65fb [C] 'function int snd_pcm_limit_hw_rates(snd_pcm_runtime*)' at pcm.h:1121:1 has some sub-type changes: CRC value (modversions) changed from 0xa4dde84d to 0xae2251f1 [C] 'function int snd_pcm_new(snd_card*, const char*, int, int, int, snd_pcm**)' at pcm.c:773:1 has some sub-type changes: CRC value (modversions) changed from 0x2aba5030 to 0xaf0915da [C] 'function void snd_pcm_period_elapsed(snd_pcm_substream*)' at pcm.h:1060:1 has some sub-type changes: CRC value (modversions) changed from 0x7b12e097 to 0x1828652e [C] 'function void snd_pcm_set_ops(snd_pcm*, int, const snd_pcm_ops*)' at pcm.h:1055:1 has some sub-type changes: CRC value (modversions) changed from 0x1bdf6a44 to 0x16efb47 [C] 'function void snd_pcm_set_sync(snd_pcm_substream*)' at pcm_lib.c:488:1 has some sub-type changes: CRC value (modversions) changed from 0x87727d0a to 0x2fc24f48 [C] 'function int snd_pcm_stop(snd_pcm_substream*, int)' at pcm.h:561:1 has some sub-type changes: CRC value (modversions) changed from 0x787175fd to 0x7971f776 [C] 'function void snd_pcm_stream_unlock_irqrestore(snd_pcm_substream*, unsigned long int)' at pcm_native.c:180:1 has some sub-type changes: CRC value (modversions) changed from 0xf8a1c3ea to 0x78ab7238 [C] 'function int snd_soc_add_card_controls(snd_soc_card*, const snd_kcontrol_new*, int)' at soc-core.c:2360:1 has some sub-type changes: CRC value (modversions) changed from 0x2d31340c to 0xa6a11c63 [C] 'function int snd_soc_add_component_controls(snd_soc_component*, const snd_kcontrol_new*, unsigned int)' at soc-core.c:2340:1 has some sub-type changes: CRC value (modversions) changed from 0xbb307ebc to 0x9afd9df1 [C] 'function int snd_soc_bytes_info_ext(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:755:1 has some sub-type changes: CRC value (modversions) changed from 0x442e70a5 to 0xec46cf43 [C] 'function int snd_soc_bytes_tlv_callback(snd_kcontrol*, int, unsigned int, unsigned int*)' at soc-ops.c:767:1 has some sub-type changes: CRC value (modversions) changed from 0x9fe0d38b to 0x715b4cdf [C] 'function snd_kcontrol* snd_soc_card_get_kcontrol(snd_soc_card*, const char*)' at soc-core.c:2315:1 has some sub-type changes: CRC value (modversions) changed from 0xa343e889 to 0x68b0d745 [C] 'function int snd_soc_card_jack_new(snd_soc_card*, const char*, int, snd_soc_jack*, snd_soc_jack_pin*, unsigned int)' at soc-jack.c:41:1 has some sub-type changes: CRC value (modversions) changed from 0xcbe30604 to 0x80a22a22 [C] 'function void snd_soc_component_async_complete(snd_soc_component*)' at soc-component.h:269:1 has some sub-type changes: CRC value (modversions) changed from 0x96d58f30 to 0xbbdc6c87 [C] 'function int snd_soc_component_disable_pin(snd_soc_component*, const char*)' at soc-component.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0x2d0e8841 to 0xace7f739 [C] 'function void snd_soc_component_exit_regmap(snd_soc_component*)' at soc-core.c:2758:1 has some sub-type changes: CRC value (modversions) changed from 0x8c7c9d35 to 0x94cfda43 [C] 'function int snd_soc_component_force_enable_pin(snd_soc_component*, const char*)' at soc-component.c:234:1 has some sub-type changes: CRC value (modversions) changed from 0x8b6d95b to 0x1b71e81c [C] 'function void snd_soc_component_init_regmap(snd_soc_component*, regmap*)' at soc-core.c:2739:1 has some sub-type changes: CRC value (modversions) changed from 0xdb839830 to 0x7c3dc1b8 [C] 'function int snd_soc_component_read(snd_soc_component*, unsigned int, unsigned int*)' at soc-component.h:257:1 has some sub-type changes: CRC value (modversions) changed from 0xfba5c965 to 0xedd878c9 [C] 'function unsigned int snd_soc_component_read32(snd_soc_component*, unsigned int)' at soc-io.c:41:1 has some sub-type changes: CRC value (modversions) changed from 0xa6b911a5 to 0x27dc83cc [C] 'function int snd_soc_component_set_pll(snd_soc_component*, int, int, unsigned int, unsigned int)' at soc-component.h:278:1 has some sub-type changes: CRC value (modversions) changed from 0xa95f2453 to 0x8eb46a71 [C] 'function int snd_soc_component_set_sysclk(snd_soc_component*, int, int, unsigned int, int)' at soc-component.h:275:1 has some sub-type changes: CRC value (modversions) changed from 0xfa38862b to 0x15fc3101 [C] 'function int snd_soc_component_update_bits(snd_soc_component*, unsigned int, unsigned int, unsigned int)' at soc-component.h:263:1 has some sub-type changes: CRC value (modversions) changed from 0xae46b773 to 0x3d3828b2 [C] 'function int snd_soc_component_update_bits_async(snd_soc_component*, unsigned int, unsigned int, unsigned int)' at soc-io.c:145:1 has some sub-type changes: CRC value (modversions) changed from 0x8674cfc1 to 0x7c7b9fd9 [C] 'function int snd_soc_component_write(snd_soc_component*, unsigned int, unsigned int)' at soc-io.c:63:1 has some sub-type changes: CRC value (modversions) changed from 0x7b4cb6c6 to 0x9e49b16e [C] 'function int snd_soc_dai_get_channel_map(snd_soc_dai*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)' at soc-dai.c:207:1 has some sub-type changes: CRC value (modversions) changed from 0x99f2ca37 to 0xf7139029 [C] 'function int snd_soc_dai_set_bclk_ratio(snd_soc_dai*, unsigned int)' at soc-dai.c:81:1 has some sub-type changes: CRC value (modversions) changed from 0x70e33fa4 to 0x830a317 [C] 'function int snd_soc_dai_set_channel_map(snd_soc_dai*, unsigned int, unsigned int*, unsigned int, unsigned int*)' at soc-dai.c:185:1 has some sub-type changes: CRC value (modversions) changed from 0x5bff9af8 to 0x5f923507 [C] 'function int snd_soc_dai_set_clkdiv(snd_soc_dai*, int, int)' at soc-dai.c:42:1 has some sub-type changes: CRC value (modversions) changed from 0x6fda6009 to 0x9d302dea [C] 'function int snd_soc_dai_set_fmt(snd_soc_dai*, unsigned int)' at soc-dai.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x4a66dc23 to 0xd6d9dd27 [C] 'function int snd_soc_dai_set_pll(snd_soc_dai*, int, int, unsigned int, unsigned int)' at soc-dai.c:62:1 has some sub-type changes: CRC value (modversions) changed from 0x3485e280 to 0x3f882fd3 [C] 'function int snd_soc_dai_set_sysclk(snd_soc_dai*, int, unsigned int, int)' at soc-dai.c:21:1 has some sub-type changes: CRC value (modversions) changed from 0x162272bc to 0x1fe37146 [C] 'function int snd_soc_dai_set_tdm_slot(snd_soc_dai*, unsigned int, unsigned int, int, int)' at soc-dai.c:152:1 has some sub-type changes: CRC value (modversions) changed from 0x474c01fa to 0xf836b07b [C] 'function int snd_soc_dapm_add_routes(snd_soc_dapm_context*, const snd_soc_dapm_route*, int)' at soc-dapm.h:425:1 has some sub-type changes: CRC value (modversions) changed from 0xeb8d1f19 to 0x986005b5 [C] 'function int snd_soc_dapm_disable_pin(snd_soc_dapm_context*, const char*)' at soc-dapm.c:4609:1 has some sub-type changes: CRC value (modversions) changed from 0xc44125a9 to 0xba232b99 [C] 'function int snd_soc_dapm_enable_pin(snd_soc_dapm_context*, const char*)' at soc-dapm.c:4498:1 has some sub-type changes: CRC value (modversions) changed from 0xf6528556 to 0x9c1019d7 [C] 'function int snd_soc_dapm_force_enable_pin(snd_soc_dapm_context*, const char*)' at soc-dapm.c:4565:1 has some sub-type changes: CRC value (modversions) changed from 0x99785880 to 0xd11909a2 [C] 'function int snd_soc_dapm_get_enum_double(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3432:1 has some sub-type changes: CRC value (modversions) changed from 0xd59ddc66 to 0xf880a215 [C] 'function int snd_soc_dapm_get_pin_status(snd_soc_dapm_context*, const char*)' at soc-dapm.c:4684:1 has some sub-type changes: CRC value (modversions) changed from 0x5488f378 to 0x18886aba [C] 'function int snd_soc_dapm_get_pin_switch(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3554:1 has some sub-type changes: CRC value (modversions) changed from 0x7e469d0a to 0x8441597 [C] 'function int snd_soc_dapm_get_volsw(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3277:1 has some sub-type changes: CRC value (modversions) changed from 0x7a6a1395 to 0xeefd4f60 [C] 'function int snd_soc_dapm_ignore_suspend(snd_soc_dapm_context*, const char*)' at soc-dapm.c:4707:1 has some sub-type changes: CRC value (modversions) changed from 0xedb8c9a3 to 0x198e08c4 [C] 'function int snd_soc_dapm_info_pin_switch(snd_kcontrol*, snd_ctl_elem_info*)' at soc-dapm.c:3536:1 has some sub-type changes: CRC value (modversions) changed from 0xef39603e to 0xd7c67236 [C] 'function snd_soc_dapm_context* snd_soc_dapm_kcontrol_dapm(snd_kcontrol*)' at soc-dapm.c:591:1 has some sub-type changes: CRC value (modversions) changed from 0xca254744 to 0x3df14c76 [C] 'function snd_soc_dapm_widget* snd_soc_dapm_kcontrol_widget(snd_kcontrol*)' at soc-dapm.c:576:1 has some sub-type changes: CRC value (modversions) changed from 0x2b645792 to 0x2e83bd08 [C] 'function int snd_soc_dapm_mixer_update_power(snd_soc_dapm_context*, snd_kcontrol*, int, snd_soc_dapm_update*)' at soc-dapm.c:2361:1 has some sub-type changes: CRC value (modversions) changed from 0xcf796e28 to 0x6b62505 [C] 'function int snd_soc_dapm_mux_update_power(snd_soc_dapm_context*, snd_kcontrol*, int, soc_enum*, snd_soc_dapm_update*)' at soc-dapm.c:2296:1 has some sub-type changes: CRC value (modversions) changed from 0x54ad2988 to 0xfabd90d0 [C] 'function snd_soc_dapm_widget* snd_soc_dapm_new_control(snd_soc_dapm_context*, const snd_soc_dapm_widget*)' at soc-dapm.c:3752:1 has some sub-type changes: CRC value (modversions) changed from 0x288890d5 to 0x8776d6f0 [C] 'function int snd_soc_dapm_new_controls(snd_soc_dapm_context*, const snd_soc_dapm_widget*, int)' at soc-dapm.h:401:1 has some sub-type changes: CRC value (modversions) changed from 0xd4c9439d to 0xf373d670 [C] 'function int snd_soc_dapm_new_widgets(snd_soc_card*)' at soc-dapm.h:420:1 has some sub-type changes: CRC value (modversions) changed from 0x734eb71e to 0x7ba4816a [C] 'function int snd_soc_dapm_put_enum_double(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3473:1 has some sub-type changes: CRC value (modversions) changed from 0x40bb3e21 to 0x85724829 [C] 'function int snd_soc_dapm_put_pin_switch(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3577:1 has some sub-type changes: CRC value (modversions) changed from 0xe7ee58c2 to 0xfd309818 [C] 'function int snd_soc_dapm_put_volsw(snd_kcontrol*, snd_ctl_elem_value*)' at soc-dapm.c:3340:1 has some sub-type changes: CRC value (modversions) changed from 0x66ea636 to 0x22aae40d [C] 'function int snd_soc_dapm_sync(snd_soc_dapm_context*)' at soc-dapm.h:466:1 has some sub-type changes: CRC value (modversions) changed from 0x22d15dc6 to 0xba15d775 [C] 'function int snd_soc_dapm_weak_routes(snd_soc_dapm_context*, const snd_soc_dapm_route*, int)' at soc-dapm.c:3176:1 has some sub-type changes: CRC value (modversions) changed from 0x30b28817 to 0x52908578 [C] 'function snd_soc_dai* snd_soc_find_dai(const snd_soc_dai_link_component*)' at soc-core.c:795:1 has some sub-type changes: CRC value (modversions) changed from 0x25a94d8a to 0x8745355c [C] 'function int snd_soc_get_enum_double(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:59:1 has some sub-type changes: CRC value (modversions) changed from 0x66305368 to 0x64d438fc [C] 'function snd_soc_pcm_runtime* snd_soc_get_pcm_runtime(snd_soc_card*, const char*)' at soc-core.c:412:1 has some sub-type changes: CRC value (modversions) changed from 0x2fa26b27 to 0xfca51b6 [C] 'function int snd_soc_get_volsw(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:242:1 has some sub-type changes: CRC value (modversions) changed from 0xa63a4b7f to 0xc00619de [C] 'function int snd_soc_get_volsw_range(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:537:1 has some sub-type changes: CRC value (modversions) changed from 0x26360fa3 to 0x756529e1 [C] 'function int snd_soc_get_volsw_sx(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:364:1 has some sub-type changes: CRC value (modversions) changed from 0xe35211f5 to 0x86b6b46a [C] 'function int snd_soc_get_xr_sx(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:826:1 has some sub-type changes: CRC value (modversions) changed from 0x709ffbd9 to 0xcec3e63e [C] 'function int snd_soc_info_enum_double(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:40:1 has some sub-type changes: CRC value (modversions) changed from 0x105d57a3 to 0x514106dc [C] 'function int snd_soc_info_multi_ext(snd_kcontrol*, snd_ctl_elem_info*)' at soc-core.c:3364:1 has some sub-type changes: CRC value (modversions) changed from 0x68ca66be to 0x4c835da5 [C] 'function int snd_soc_info_volsw(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:181:1 has some sub-type changes: CRC value (modversions) changed from 0x1d0b0e97 to 0xbcee30e1 [C] 'function int snd_soc_info_volsw_range(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:455:1 has some sub-type changes: CRC value (modversions) changed from 0xc90afa49 to 0xe15b4707 [C] 'function int snd_soc_info_volsw_sx(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:216:1 has some sub-type changes: CRC value (modversions) changed from 0x21740818 to 0x86a893c5 [C] 'function int snd_soc_info_xr_sx(snd_kcontrol*, snd_ctl_elem_info*)' at soc-ops.c:799:1 has some sub-type changes: CRC value (modversions) changed from 0x6e184037 to 0xa299e2e9 [C] 'function int snd_soc_jack_add_gpios(snd_soc_jack*, int, snd_soc_jack_gpio*)' at soc-jack.c:350:1 has some sub-type changes: CRC value (modversions) changed from 0x573a3fe7 to 0xbf55644a [C] 'function void snd_soc_jack_report(snd_soc_jack*, int, int)' at soc-jack.c:78:1 has some sub-type changes: CRC value (modversions) changed from 0x233f15e1 to 0xf0d07128 [C] 'function snd_soc_component* snd_soc_lookup_component(device*, const char*)' at soc-core.c:2936:1 has some sub-type changes: CRC value (modversions) changed from 0x7c681057 to 0xbe310290 [C] 'function int snd_soc_new_compress(snd_soc_pcm_runtime*, int)' at soc-compress.c:856:1 has some sub-type changes: CRC value (modversions) changed from 0xb1cdf826 to 0xafbddbb9 [C] 'function int snd_soc_of_get_dai_link_codecs(device*, device_node*, snd_soc_dai_link*)' at soc-core.c:3497:1 has some sub-type changes: CRC value (modversions) changed from 0x115b5b4d to 0x14bb744e [C] 'function int snd_soc_of_get_dai_name(device_node*, const char**)' at soc-core.c:3444:1 has some sub-type changes: CRC value (modversions) changed from 0x75ebb83e to 0xcc68847e [C] 'function int snd_soc_of_parse_audio_routing(snd_soc_card*, const char*)' at soc-core.c:3154:1 has some sub-type changes: CRC value (modversions) changed from 0x5fc8b644 to 0x2493d7d6 [C] 'function int snd_soc_of_parse_audio_simple_widgets(snd_soc_card*, const char*)' at soc-core.c:3000:1 has some sub-type changes: CRC value (modversions) changed from 0xd7d232ce to 0xa6a0623c [C] 'function int snd_soc_of_parse_card_name(snd_soc_card*, const char*)' at soc-core.c:2963:1 has some sub-type changes: CRC value (modversions) changed from 0x83deb1a1 to 0xef28e8eb [C] 'function unsigned int snd_soc_of_parse_daifmt(device_node*, const char*, device_node**, device_node**)' at soc-core.c:3210:1 has some sub-type changes: CRC value (modversions) changed from 0xa45b558f to 0x68eb2231 [C] 'function void snd_soc_of_parse_node_prefix(device_node*, snd_soc_codec_conf*, device_node*, const char*)' at soc-core.c:3135:1 has some sub-type changes: CRC value (modversions) changed from 0x308bfe56 to 0x546692ba [C] 'function int snd_soc_of_parse_tdm_slot(device_node*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)' at soc-core.c:3099:1 has some sub-type changes: CRC value (modversions) changed from 0x631775e1 to 0x6af6e855 [C] 'function void snd_soc_of_put_dai_link_codecs(snd_soc_dai_link*)' at soc-core.c:3469:1 has some sub-type changes: CRC value (modversions) changed from 0x90ce59e4 to 0x2034a840 [C] 'function int snd_soc_put_enum_double(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:93:1 has some sub-type changes: CRC value (modversions) changed from 0x454541f9 to 0xdee8b778 [C] 'function int snd_soc_put_volsw(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:302:1 has some sub-type changes: CRC value (modversions) changed from 0x2069e98f to 0xfd078178 [C] 'function int snd_soc_put_volsw_range(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:485:1 has some sub-type changes: CRC value (modversions) changed from 0x5431d32 to 0xcf59a665 [C] 'function int snd_soc_put_volsw_sx(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:408:1 has some sub-type changes: CRC value (modversions) changed from 0x38c5bc86 to 0x95dca501 [C] 'function int snd_soc_put_xr_sx(snd_kcontrol*, snd_ctl_elem_value*)' at soc-ops.c:875:1 has some sub-type changes: CRC value (modversions) changed from 0xf6cc5929 to 0xf3c27e98 [C] 'function int snd_soc_register_card(snd_soc_card*)' at soc-core.c:2423:1 has some sub-type changes: CRC value (modversions) changed from 0xf60e2c35 to 0x4bf13dc9 [C] 'function int snd_soc_register_component(device*, const snd_soc_component_driver*, snd_soc_dai_driver*, int)' at soc-core.c:2883:1 has some sub-type changes: CRC value (modversions) changed from 0x6b2a94ab to 0xce5d9a4e [C] 'function snd_soc_component* snd_soc_rtdcom_lookup(snd_soc_pcm_runtime*, const char*)' at soc-core.c:310:1 has some sub-type changes: CRC value (modversions) changed from 0xaf9833f3 to 0xa6262a93 [C] 'function int snd_soc_runtime_set_dai_fmt(snd_soc_pcm_runtime*, unsigned int)' at soc-core.c:1650:1 has some sub-type changes: CRC value (modversions) changed from 0x9a516c55 to 0xcf77617f [C] 'function int snd_soc_set_runtime_hwparams(snd_pcm_substream*, const snd_pcm_hardware*)' at soc.h:502:1 has some sub-type changes: CRC value (modversions) changed from 0x9177b238 to 0x7d6fd6cc [C] 'function int snd_soc_tplg_component_load(snd_soc_component*, snd_soc_tplg_ops*, const firmware*, u32)' at soc-topology.c:2715:1 has some sub-type changes: CRC value (modversions) changed from 0x8ee98a5c to 0x1de8f22 [C] 'function int snd_soc_tplg_component_remove(snd_soc_component*, unsigned int)' at soc-topology.h:186:1 has some sub-type changes: CRC value (modversions) changed from 0xd60ed297 to 0x4a695a48 [C] 'function int snd_soc_tplg_widget_bind_event(snd_soc_dapm_widget*, const snd_soc_tplg_widget_events*, int, u16)' at soc-topology.c:660:1 has some sub-type changes: CRC value (modversions) changed from 0xee922110 to 0x691fd0fb [C] 'function int snd_soc_unregister_card(snd_soc_card*)' at soc-core.c:2477:1 has some sub-type changes: CRC value (modversions) changed from 0xbf0d619d to 0xb7cf822b [C] 'function void snd_soc_unregister_component(device*)' at soc-core.c:2929:1 has some sub-type changes: CRC value (modversions) changed from 0xd5926418 to 0xe2a6f4f1 [C] 'function void snd_timer_interrupt(snd_timer*, unsigned long int)' at timer.h:129:1 has some sub-type changes: CRC value (modversions) changed from 0x6b91c7a8 to 0xe8f513da [C] 'function int snd_usb_enable_audio_stream(snd_usb_substream*, int, bool)' at pcm.c:662:1 has some sub-type changes: CRC value (modversions) changed from 0xef5b811a to 0xedd47edb [C] 'function int snd_vendor_set_ops(snd_usb_audio_vendor_ops*)' at card.c:111:1 has some sub-type changes: CRC value (modversions) changed from 0x95ef16e8 to 0xfe60f42b [C] 'function soc_device* soc_device_register(soc_device_attribute*)' at soc.c:118:1 has some sub-type changes: CRC value (modversions) changed from 0xbf454beb to 0x3672e9fa [C] 'function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*)' at sock.c:2263:1 has some sub-type changes: CRC value (modversions) changed from 0x4bfa0d53 to 0x9f967adc [C] 'function int sock_create_kern(net*, int, int, int, socket**)' at socket.c:1486:1 has some sub-type changes: CRC value (modversions) changed from 0xe55c6003 to 0xee04f9c8 [C] 'function int sock_diag_destroy(sock*, int)' at sock_diag.h:80:1 has some sub-type changes: CRC value (modversions) changed from 0x9085f616 to 0xe197b605 [C] 'function int sock_diag_register(const sock_diag_handler*)' at sock_diag.h:22:1 has some sub-type changes: CRC value (modversions) changed from 0x402fdd99 to 0xf103692e [C] 'function void sock_diag_save_cookie(sock*, unsigned int*)' at sock_diag.h:30:1 has some sub-type changes: CRC value (modversions) changed from 0x7e3c418e to 0x540c564 [C] 'function void sock_diag_unregister(const sock_diag_handler*)' at sock_diag.h:23:1 has some sub-type changes: CRC value (modversions) changed from 0x39da302 to 0x604a387f [C] 'function void sock_efree(sk_buff*)' at sock.c:2064:1 has some sub-type changes: CRC value (modversions) changed from 0x842b2d4c to 0x1b5bf927 [C] 'function int sock_gettstamp(socket*, void*, bool, bool)' at sock.c:3011:1 has some sub-type changes: CRC value (modversions) changed from 0xd96eb3e6 to 0x6f9f904a [C] 'function unsigned long int sock_i_ino(sock*)' at sock.h:1853:1 has some sub-type changes: CRC value (modversions) changed from 0x67972d2e to 0x2c219cba [C] 'function void sock_init_data(socket*, sock*)' at sock.h:1714:1 has some sub-type changes: CRC value (modversions) changed from 0xcf0344d1 to 0x3d25d0a4 [C] 'function int sock_no_accept(socket*, socket*, int, bool)' at sock.c:2667:1 has some sub-type changes: CRC value (modversions) changed from 0x859a80a7 to 0x305ddfa5 [C] 'function int sock_no_bind(socket*, sockaddr*, int)' at sock.c:2648:1 has some sub-type changes: CRC value (modversions) changed from 0x277d7ac9 to 0x55801238 [C] 'function int sock_no_connect(socket*, sockaddr*, int, int)' at sock.c:2654:1 has some sub-type changes: CRC value (modversions) changed from 0x1ecc02a6 to 0xcb4760e4 [C] 'function int sock_no_getname(socket*, sockaddr*, int)' at sock.c:2674:1 has some sub-type changes: CRC value (modversions) changed from 0xfc7aff13 to 0xe7fa4389 [C] 'function int sock_no_getsockopt(socket*, int, int, char*, int*)' at sock.c:2706:1 has some sub-type changes: CRC value (modversions) changed from 0xc7017f5 to 0xb5be3a4c [C] 'function int sock_no_ioctl(socket*, unsigned int, unsigned long int)' at sock.c:2681:1 has some sub-type changes: CRC value (modversions) changed from 0xea8afb2b to 0x651f0555 [C] 'function int sock_no_listen(socket*, int)' at sock.c:2687:1 has some sub-type changes: CRC value (modversions) changed from 0x1f7cf67b to 0xedf471ae [C] 'function int sock_no_mmap(file*, socket*, vm_area_struct*)' at sock.c:2732:1 has some sub-type changes: CRC value (modversions) changed from 0x246998d8 to 0xb9ec74f2 [C] 'function int sock_no_recvmsg(socket*, msghdr*, size_t, int)' at sock.c:2725:1 has some sub-type changes: CRC value (modversions) changed from 0xacbe8fc4 to 0x43b2efc5 [C] 'function int sock_no_sendmsg(socket*, msghdr*, size_t)' at sock.c:2713:1 has some sub-type changes: CRC value (modversions) changed from 0x28b34858 to 0x1de175ee [C] 'function long int sock_no_sendpage(socket*, page*, int, unsigned long int, int)' at sock.h:1687:1 has some sub-type changes: CRC value (modversions) changed from 0x8a86582f to 0x9f29ad79 [C] 'function int sock_no_setsockopt(socket*, int, int, char*, unsigned int)' at sock.c:2699:1 has some sub-type changes: CRC value (modversions) changed from 0x8fd638a4 to 0xa4b73a45 [C] 'function int sock_no_shutdown(socket*, int)' at sock.c:2693:1 has some sub-type changes: CRC value (modversions) changed from 0x31fc4630 to 0x78cfa31b [C] 'function int sock_no_socketpair(socket*, socket*)' at sock.c:2661:1 has some sub-type changes: CRC value (modversions) changed from 0x4cf3ac6c to 0x69a0e5df [C] 'function int sock_queue_rcv_skb(sock*, sk_buff*)' at sock.h:2169:1 has some sub-type changes: CRC value (modversions) changed from 0x7167e1d4 to 0x4c2f5623 [C] 'function int sock_register(const net_proto_family*)' at net.h:234:1 has some sub-type changes: CRC value (modversions) changed from 0xbdfabe41 to 0x81fd43e9 [C] 'function void sock_release(socket*)' at net.h:243:1 has some sub-type changes: CRC value (modversions) changed from 0x28d24499 to 0xc41a5404 [C] 'function sk_buff* sock_wmalloc(sock*, unsigned long int, int, unsigned int)' at sock.h:1619:1 has some sub-type changes: CRC value (modversions) changed from 0x73e8219f to 0xda6ee4a7 [C] 'function int spi_bus_lock(spi_controller*)' at spi.c:3537:1 has some sub-type changes: CRC value (modversions) changed from 0xe21dc2e8 to 0x7fe37490 [C] 'function int spi_bus_unlock(spi_controller*)' at spi.c:3566:1 has some sub-type changes: CRC value (modversions) changed from 0xc54cb2ff to 0x9b60f03d [C] 'function spi_controller* spi_busnum_to_master(u16)' at spi.c:2660:1 has some sub-type changes: CRC value (modversions) changed from 0x83c33455 to 0x3a5b9778 [C] 'function int spi_controller_resume(spi_controller*)' at spi.c:2624:1 has some sub-type changes: CRC value (modversions) changed from 0x799e6489 to 0xcdedaf48 [C] 'function int spi_controller_suspend(spi_controller*)' at spi.c:2608:1 has some sub-type changes: CRC value (modversions) changed from 0x7da25d9d to 0x33e2211b [C] 'function void spi_finalize_current_message(spi_controller*)' at spi.c:1504:1 has some sub-type changes: CRC value (modversions) changed from 0xe47ef069 to 0x3147ae3a [C] 'function void spi_finalize_current_transfer(spi_controller*)' at spi.c:1247:1 has some sub-type changes: CRC value (modversions) changed from 0xa2bf4efe to 0x1b0852e0 [C] 'function spi_message* spi_get_next_queued_message(spi_controller*)' at spi.c:1482:1 has some sub-type changes: CRC value (modversions) changed from 0xd99e9a7d to 0xa594f222 [C] 'function int spi_register_controller(spi_controller*)' at spi.c:2382:1 has some sub-type changes: CRC value (modversions) changed from 0x54f69255 to 0x6379a4de [C] 'function int spi_setup(spi_device*)' at spi.c:3035:1 has some sub-type changes: CRC value (modversions) changed from 0x8fda8f20 to 0x3d8c0122 [C] 'function int spi_sync(spi_device*, spi_message*)' at spi.h:1098:1 has some sub-type changes: CRC value (modversions) changed from 0x2777aa7e to 0x6c0200ba [C] 'function int spi_sync_locked(spi_device*, spi_message*)' at spi.c:3516:1 has some sub-type changes: CRC value (modversions) changed from 0xdb9aaed4 to 0xfe14f100 [C] 'function void spi_unregister_controller(spi_controller*)' at spi.c:2580:1 has some sub-type changes: CRC value (modversions) changed from 0x6db42830 to 0xbc010902 [C] 'function void spi_unregister_device(spi_device*)' at spi.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0xf349bb12 to 0xd1a0ced5 [C] 'function void split_page(page*, unsigned int)' at mm.h:778:1 has some sub-type changes: CRC value (modversions) changed from 0x3ff7facf to 0xd6e54646 [C] 'function int spmi_controller_add(spmi_controller*)' at spmi.c:508:1 has some sub-type changes: CRC value (modversions) changed from 0xc5c92d32 to 0xd6346d2d [C] 'function spmi_controller* spmi_controller_alloc(device*, size_t)' at spmi.c:413:1 has some sub-type changes: CRC value (modversions) changed from 0xe3979cf to 0xaab7754a [C] 'function void spmi_controller_remove(spmi_controller*)' at spmi.c:546:1 has some sub-type changes: CRC value (modversions) changed from 0xc7ddb993 to 0x32f5d496 [C] 'function int spmi_ext_register_read(spmi_device*, u8, u8*, size_t)' at spmi.c:161:1 has some sub-type changes: CRC value (modversions) changed from 0xdb7e6bfc to 0x2dd75d81 [C] 'function int spmi_ext_register_readl(spmi_device*, u16, u8*, size_t)' at spmi.c:183:1 has some sub-type changes: CRC value (modversions) changed from 0x5d5750f2 to 0xc42ee78d [C] 'function int spmi_ext_register_write(spmi_device*, u8, const u8*, size_t)' at spmi.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x1eadcc8d to 0x8d5574bf [C] 'function int spmi_ext_register_writel(spmi_device*, u16, const u8*, size_t)' at spmi.c:260:1 has some sub-type changes: CRC value (modversions) changed from 0xbe421d06 to 0x2f6f17ba [C] 'function int spmi_register_read(spmi_device*, u8, u8*)' at spmi.c:140:1 has some sub-type changes: CRC value (modversions) changed from 0x2b13ee4a to 0x4e043a [C] 'function int spmi_register_write(spmi_device*, u8, u8)' at spmi.c:203:1 has some sub-type changes: CRC value (modversions) changed from 0x5349f21e to 0xbd71d537 [C] 'function int spmi_register_zero_write(spmi_device*, u8)' at spmi.c:221:1 has some sub-type changes: CRC value (modversions) changed from 0xb0d89df8 to 0x122b49f1 [C] 'function void start_tty(tty_struct*)' at tty_io.c:810:1 has some sub-type changes: CRC value (modversions) changed from 0xecaef992 to 0xf9911404 [C] 'function void stop_tty(tty_struct*)' at tty_io.c:778:1 has some sub-type changes: CRC value (modversions) changed from 0x2ae24e84 to 0x3fea544 [C] 'function int stream_open(inode*, file*)' at fs.h:3221:1 has some sub-type changes: CRC value (modversions) changed from 0xd4735bf4 to 0xbdd6543d [C] 'function int submit_bh(int, int, buffer_head*)' at buffer.c:3090:1 has some sub-type changes: CRC value (modversions) changed from 0x5a6b4f9 to 0x1372b747 [C] 'function unsigned int submit_bio(bio*)' at bio.h:414:1 has some sub-type changes: CRC value (modversions) changed from 0x468c92a9 to 0xccaa90a4 [C] 'function int submit_bio_wait(bio*)' at bio.h:432:1 has some sub-type changes: CRC value (modversions) changed from 0x5d0191d0 to 0x1078ff30 [C] 'function int subsys_system_register(bus_type*, const attribute_group**)' at bus.c:1156:1 has some sub-type changes: CRC value (modversions) changed from 0xa2c023a to 0xf5d64087 [C] 'function int sync_blockdev(block_device*)' at fs.h:2652:1 has some sub-type changes: CRC value (modversions) changed from 0x57200b24 to 0xd32e08f8 [C] 'function int sync_dirty_buffer(buffer_head*)' at buffer_head.h:202:1 has some sub-type changes: CRC value (modversions) changed from 0xda01ec50 to 0x824d9546 [C] 'function sync_file* sync_file_create(dma_fence*)' at sync_file.h:58:1 has some sub-type changes: CRC value (modversions) changed from 0xfaefc1a4 to 0xfaee732f [C] 'function int sync_filesystem(super_block*)' at fs.h:2696:1 has some sub-type changes: CRC value (modversions) changed from 0xe31f3780 to 0xdc559fe0 [C] 'function int sync_mapping_buffers(address_space*)' at buffer_head.h:174:1 has some sub-type changes: CRC value (modversions) changed from 0x28934cd3 to 0x3241a15e [C] 'function regmap* syscon_node_to_regmap(device_node*)' at syscon.h:21:1 has some sub-type changes: CRC value (modversions) changed from 0x992e9aa5 to 0x4847e6ab [C] 'function regmap* syscon_regmap_lookup_by_phandle(device_node*, const char*)' at syscon.h:23:1 has some sub-type changes: CRC value (modversions) changed from 0xc84d586b to 0x825cf17 [C] 'function regmap* syscon_regmap_lookup_by_phandle_args(device_node*, const char*, int, unsigned int*)' at syscon.c:228:1 has some sub-type changes: CRC value (modversions) changed from 0x55905866 to 0x769d36c3 [C] 'function int sysfs_add_file_to_group(kobject*, const attribute*, const char*)' at file.c:357:1 has some sub-type changes: CRC value (modversions) changed from 0x5656861f to 0x55291b78 [C] 'function int sysfs_create_bin_file(kobject*, const bin_attribute*)' at sysfs.h:257:1 has some sub-type changes: CRC value (modversions) changed from 0xcb52116c to 0xedcd9d5 [C] 'function int sysfs_create_file_ns(kobject*, const attribute*, void*)' at sysfs.h:242:1 has some sub-type changes: CRC value (modversions) changed from 0xaccc381b to 0x543eb2aa [C] 'function int sysfs_create_files(kobject*, const attribute* const*)' at file.c:337:1 has some sub-type changes: CRC value (modversions) changed from 0xbf2d01e2 to 0x384514bb [C] 'function int sysfs_create_group(kobject*, const attribute_group*)' at sysfs.h:276:1 has some sub-type changes: CRC value (modversions) changed from 0x701857f7 to 0x8b8511ae [C] 'function int sysfs_create_groups(kobject*, const attribute_group**)' at sysfs.h:278:1 has some sub-type changes: CRC value (modversions) changed from 0x5a0883b4 to 0xac1f7f75 [C] 'function int sysfs_create_link(kobject*, kobject*, const char*)' at sysfs.h:262:1 has some sub-type changes: CRC value (modversions) changed from 0xfb6d6985 to 0xca1144e2 [C] 'function void sysfs_notify(kobject*, const char*, const char*)' at sysfs.h:304:1 has some sub-type changes: CRC value (modversions) changed from 0x8a715c7b to 0x3d8aab99 [C] 'function void sysfs_remove_bin_file(kobject*, const bin_attribute*)' at sysfs.h:259:1 has some sub-type changes: CRC value (modversions) changed from 0x91e3de to 0xcb21cb11 [C] 'function void sysfs_remove_file_from_group(kobject*, const attribute*, const char*)' at file.c:511:1 has some sub-type changes: CRC value (modversions) changed from 0x400b337a to 0xa0345dfc [C] 'function void sysfs_remove_file_ns(kobject*, const attribute*, void*)' at sysfs.h:252:1 has some sub-type changes: CRC value (modversions) changed from 0xa4fc03a6 to 0x5d17c731 [C] 'function void sysfs_remove_files(kobject*, const attribute* const*)' at file.c:496:1 has some sub-type changes: CRC value (modversions) changed from 0x9a8910b0 to 0xa489ef00 [C] 'function void sysfs_remove_group(kobject*, const attribute_group*)' at sysfs.h:284:1 has some sub-type changes: CRC value (modversions) changed from 0xd35d5093 to 0x22271f46 [C] 'function void sysfs_remove_groups(kobject*, const attribute_group**)' at group.c:304:1 has some sub-type changes: CRC value (modversions) changed from 0x5c21c333 to 0xadb5118e [C] 'function void sysfs_remove_link(kobject*, const char*)' at sysfs.h:267:1 has some sub-type changes: CRC value (modversions) changed from 0x14eacfe5 to 0x6cde212b [C] 'function int tcf_action_exec(sk_buff*, tc_action**, int, tcf_result*)' at act_api.h:175:1 has some sub-type changes: CRC value (modversions) changed from 0x3bf7a80e to 0xf160b25c [C] 'function void tcf_exts_destroy(tcf_exts*)' at pkt_cls.h:309:1 has some sub-type changes: CRC value (modversions) changed from 0x48f10489 to 0x199cb2d4 [C] 'function int tcf_exts_dump(sk_buff*, tcf_exts*)' at pkt_cls.h:311:1 has some sub-type changes: CRC value (modversions) changed from 0xb378178e to 0xf27e2a1a [C] 'function int tcf_exts_dump_stats(sk_buff*, tcf_exts*)' at pkt_cls.h:312:1 has some sub-type changes: CRC value (modversions) changed from 0x823212b0 to 0xa469a692 [C] 'function int tcf_exts_validate(net*, tcf_proto*, nlattr**, nlattr*, tcf_exts*, bool, bool, netlink_ext_ack*)' at pkt_cls.h:305:1 has some sub-type changes: CRC value (modversions) changed from 0xe6e2211d to 0xaad4ad24 [C] 'function void thermal_cdev_update(thermal_cooling_device*)' at thermal.h:464:1 has some sub-type changes: CRC value (modversions) changed from 0x10ccdef2 to 0x7a325ed8 [C] 'function void thermal_cooling_device_unregister(thermal_cooling_device*)' at thermal.h:455:1 has some sub-type changes: CRC value (modversions) changed from 0xebdc987 to 0xf616636f [C] 'function thermal_cooling_device* thermal_of_cooling_device_register(device_node*, const char*, void*, const thermal_cooling_device_ops*)' at thermal_core.c:1047:1 has some sub-type changes: CRC value (modversions) changed from 0x6423110a to 0x2d2c0141 [C] 'function thermal_zone_device* thermal_zone_device_register(const char*, int, int, void*, thermal_zone_device_ops*, thermal_zone_params*, int, int)' at thermal.h:430:1 has some sub-type changes: CRC value (modversions) changed from 0x81d96860 to 0xfc5e5064 [C] 'function void thermal_zone_device_unregister(thermal_zone_device*)' at thermal.h:433:1 has some sub-type changes: CRC value (modversions) changed from 0x23c623a4 to 0xdc4b8813 [C] 'function void thermal_zone_device_update(thermal_zone_device*, thermal_notify_event)' at thermal.h:441:1 has some sub-type changes: CRC value (modversions) changed from 0x3e99a413 to 0xc923ee55 [C] 'function int thermal_zone_get_temp(thermal_zone_device*, int*)' at thermal.h:457:1 has some sub-type changes: CRC value (modversions) changed from 0x51d967c2 to 0x189e4b1e [C] 'function thermal_zone_device* thermal_zone_get_zone_by_name(const char*)' at thermal_core.c:1439:1 has some sub-type changes: CRC value (modversions) changed from 0x6819d115 to 0xc0dd2157 [C] 'function thermal_zone_device* thermal_zone_of_sensor_register(device*, int, void*, const thermal_zone_of_device_ops*)' at of-thermal.c:484:1 has some sub-type changes: CRC value (modversions) changed from 0xfc008aad to 0x4974601f [C] 'function void thermal_zone_of_sensor_unregister(device*, thermal_zone_device*)' at of-thermal.c:556:1 has some sub-type changes: CRC value (modversions) changed from 0x145b0080 to 0x2b387ccb [C] 'function int timer_of_init(device_node*, timer_of*)' at timer-of.c:168:1 has some sub-type changes: CRC value (modversions) changed from 0xcbc0dd05 to 0xc75c936c [C] 'function void touch_buffer(buffer_head*)' at buffer.c:58:1 has some sub-type changes: CRC value (modversions) changed from 0x9d5b6a0f to 0x4b45d403 [C] 'function int trace_define_field(trace_event_call*, const char*, const char*, int, int, int, int)' at trace_events.h:542:1 has some sub-type changes: CRC value (modversions) changed from 0xc060483a to 0x60846f98 [C] 'function void trace_event_buffer_commit(trace_event_buffer*)' at trace_events.h:220:1 has some sub-type changes: CRC value (modversions) changed from 0x358a4a2b to 0x4ac2e610 [C] 'function void* trace_event_buffer_reserve(trace_event_buffer*, trace_event_file*, unsigned long int)' at trace_events.h:216:1 has some sub-type changes: CRC value (modversions) changed from 0xab0db6ac to 0xdfeb3058 [C] 'function bool trace_event_ignore_this_pid(trace_event_file*)' at trace_events.h:449:1 has some sub-type changes: CRC value (modversions) changed from 0x58ddfa50 to 0xdd28a76f [C] 'function int trace_event_raw_init(trace_event_call*)' at trace_events.c:218:1 has some sub-type changes: CRC value (modversions) changed from 0x86377fbe to 0x727954eb [C] 'function int trace_event_reg(trace_event_call*, trace_reg, void*)' at trace_events.c:280:1 has some sub-type changes: CRC value (modversions) changed from 0xf8608013 to 0x6d201a61 [C] 'function int trace_output_call(trace_iterator*, char*, char*, ...)' at trace_output.c:311:1 has some sub-type changes: CRC value (modversions) changed from 0xcf2074b1 to 0x6f5b2371 [C] 'function int trace_raw_output_prep(trace_iterator*, trace_event*)' at trace_events.h:51:1 has some sub-type changes: CRC value (modversions) changed from 0x1461edf0 to 0x87dbebfb [C] 'function void truncate_inode_pages(address_space*, loff_t)' at truncate.c:474:1 has some sub-type changes: CRC value (modversions) changed from 0x8d7667e0 to 0x5f8ebbdb [C] 'function void truncate_inode_pages_final(address_space*)' at truncate.c:489:1 has some sub-type changes: CRC value (modversions) changed from 0xf0a70fba to 0x4f41571 [C] 'function void truncate_pagecache(inode*, loff_t)' at truncate.c:802:1 has some sub-type changes: CRC value (modversions) changed from 0xd54cb2ac to 0x4d167d02 [C] 'function bool try_module_get(module*)' at module.h:632:1 has some sub-type changes: CRC value (modversions) changed from 0x8aab366f to 0x91b39241 [C] 'function void ttm_bo_add_to_lru(ttm_buffer_object*)' at ttm_bo.c:196:1 has some sub-type changes: CRC value (modversions) changed from 0xf97463d8 to 0x356ed09b [C] 'function void ttm_bo_del_sub_from_lru(ttm_buffer_object*)' at ttm_bo.c:227:1 has some sub-type changes: CRC value (modversions) changed from 0xbdda731c to 0xd7e6ff4c [C] 'function int ttm_bo_device_init(ttm_bo_device*, ttm_bo_driver*, address_space*, bool)' at ttm_bo.c:1732:1 has some sub-type changes: CRC value (modversions) changed from 0xcce258c1 to 0xd50bc7d8 [C] 'function int ttm_bo_device_release(ttm_bo_device*)' at ttm_bo.c:1688:1 has some sub-type changes: CRC value (modversions) changed from 0x9d3a74ea to 0x715c3854 [C] 'function size_t ttm_bo_dma_acc_size(ttm_bo_device*, unsigned long int, unsigned int)' at ttm_bo.c:1446:1 has some sub-type changes: CRC value (modversions) changed from 0x9aa7fb91 to 0x2bf0c4f7 [C] 'function bool ttm_bo_eviction_valuable(ttm_buffer_object*, const ttm_place*)' at ttm_bo.c:758:1 has some sub-type changes: CRC value (modversions) changed from 0xc13201a7 to 0x97734ec4 [C] 'function int ttm_bo_init(ttm_bo_device*, ttm_buffer_object*, unsigned long int, ttm_bo_type, ttm_placement*, uint32_t, bool, size_t, sg_table*, dma_resv*, void (ttm_buffer_object*)*)' at ttm_bo.c:1404:1 has some sub-type changes: CRC value (modversions) changed from 0x38b26c2e to 0x32ef98b6 [C] 'function int ttm_bo_init_mm(ttm_bo_device*, unsigned int, unsigned long int)' at ttm_bo.c:1588:1 has some sub-type changes: CRC value (modversions) changed from 0xdab837e7 to 0x990a9baa [C] 'function int ttm_bo_kmap(ttm_buffer_object*, unsigned long int, unsigned long int, ttm_bo_kmap_obj*)' at ttm_bo_util.c:619:1 has some sub-type changes: CRC value (modversions) changed from 0x3b37d19 to 0x8a9e7d9f [C] 'function void ttm_bo_kunmap(ttm_bo_kmap_obj*)' at ttm_bo_util.c:650:1 has some sub-type changes: CRC value (modversions) changed from 0x3ba437de to 0x36987693 [C] 'function int ttm_bo_mmap(file*, vm_area_struct*, ttm_bo_device*)' at ttm_bo_vm.c:427:1 has some sub-type changes: CRC value (modversions) changed from 0xd95c8d07 to 0xe40ead [C] 'function void ttm_bo_move_to_lru_tail(ttm_buffer_object*, ttm_lru_bulk_move*)' at ttm_bo.c:245:1 has some sub-type changes: CRC value (modversions) changed from 0x3c6bf191 to 0x7a08d034 [C] 'function void ttm_bo_put(ttm_buffer_object*)' at ttm_bo.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0x73a34f7 to 0x5b8ed5de [C] 'function int ttm_bo_validate(ttm_buffer_object*, ttm_placement*, ttm_operation_ctx*)' at ttm_bo.c:1254:1 has some sub-type changes: CRC value (modversions) changed from 0xac2be7f1 to 0x7e43fb2e [C] 'function int ttm_bo_wait(ttm_buffer_object*, bool, bool)' at ttm_bo.c:1817:1 has some sub-type changes: CRC value (modversions) changed from 0xcdd13834 to 0x6a06cb0d [C] 'function void ttm_dma_tt_fini(ttm_dma_tt*)' at ttm_tt.c:295:1 has some sub-type changes: CRC value (modversions) changed from 0xaa7c71c8 to 0x5b4a894d [C] 'function int ttm_dma_tt_init(ttm_dma_tt*, ttm_buffer_object*, uint32_t)' at ttm_tt.c:258:1 has some sub-type changes: CRC value (modversions) changed from 0x79ac9da3 to 0x3f5e2d9b [C] 'function void ttm_eu_backoff_reservation(ww_acquire_ctx*, list_head*)' at ttm_execbuf_util.c:56:1 has some sub-type changes: CRC value (modversions) changed from 0xd63452ae to 0x28faf8e [C] 'function void ttm_eu_fence_buffer_objects(ww_acquire_ctx*, list_head*, dma_fence*)' at ttm_execbuf_util.c:185:1 has some sub-type changes: CRC value (modversions) changed from 0x3ec19264 to 0x845a8c47 [C] 'function int ttm_eu_reserve_buffers(ww_acquire_ctx*, list_head*, bool, list_head*, bool)' at ttm_execbuf_util.c:95:1 has some sub-type changes: CRC value (modversions) changed from 0x87295d24 to 0x4aa36520 [C] 'function int ttm_tt_init(ttm_tt*, ttm_buffer_object*, uint32_t)' at ttm_tt.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x6b2e5335 to 0x877e77a8 [C] 'function void tty_flip_buffer_push(tty_port*)' at tty_flip.h:14:1 has some sub-type changes: CRC value (modversions) changed from 0xf9516b08 to 0x7b26fa23 [C] 'function void tty_hangup(tty_struct*)' at tty_io.c:677:1 has some sub-type changes: CRC value (modversions) changed from 0x2d99c20b to 0xdb0df69e [C] 'function int tty_insert_flip_string_fixed_flag(tty_port*, const unsigned char*, char, unsigned long int)' at tty_flip.h:10:1 has some sub-type changes: CRC value (modversions) changed from 0x45e0ab27 to 0x7fc93c5c [C] 'function void tty_kref_put(tty_struct*)' at tty.h:406:1 has some sub-type changes: CRC value (modversions) changed from 0x468eb88c to 0xf28e40d5 [C] 'function void tty_ldisc_deref(tty_ldisc*)' at tty_ldisc.c:310:1 has some sub-type changes: CRC value (modversions) changed from 0x305763eb to 0x1aa891c4 [C] 'function tty_ldisc* tty_ldisc_ref(tty_struct*)' at tty.h:543:1 has some sub-type changes: CRC value (modversions) changed from 0x3cd8c758 to 0x50e970bb [C] 'function int tty_mode_ioctl(tty_struct*, file*, unsigned int, unsigned long int)' at tty_ioctl.c:708:1 has some sub-type changes: CRC value (modversions) changed from 0x8f3631a4 to 0xb155d58b [C] 'function void tty_port_close(tty_port*, tty_struct*, file*)' at tty_port.c:631:1 has some sub-type changes: CRC value (modversions) changed from 0x89b73f0 to 0x6b0d50bf [C] 'function void tty_port_destroy(tty_port*)' at tty_port.c:246:1 has some sub-type changes: CRC value (modversions) changed from 0x6e285f23 to 0x342b14e7 [C] 'function void tty_port_hangup(tty_port*)' at tty_port.c:345:1 has some sub-type changes: CRC value (modversions) changed from 0x15428ca6 to 0xf1d6a387 [C] 'function void tty_port_init(tty_port*)' at tty_port.c:61:1 has some sub-type changes: CRC value (modversions) changed from 0xdd31be4f to 0x32f81447 [C] 'function void tty_port_link_device(tty_port*, tty_driver*, unsigned int)' at tty_port.c:88:1 has some sub-type changes: CRC value (modversions) changed from 0xe0a81587 to 0xefcc4b0c [C] 'function int tty_port_open(tty_port*, tty_struct*, file*)' at tty_port.c:670:1 has some sub-type changes: CRC value (modversions) changed from 0x632c5ce2 to 0x33041eb3 [C] 'function void tty_port_put(tty_port*)' at tty_port.c:269:1 has some sub-type changes: CRC value (modversions) changed from 0xb4fe32c7 to 0x3c4a79c0 [C] 'function device* tty_port_register_device(tty_port*, tty_driver*, unsigned int, device*)' at tty_port.c:108:1 has some sub-type changes: CRC value (modversions) changed from 0xa268f482 to 0xba75e9a2 [C] 'function tty_struct* tty_port_tty_get(tty_port*)' at tty.h:686:1 has some sub-type changes: CRC value (modversions) changed from 0x164ef596 to 0xc2b01c31 [C] 'function void tty_port_tty_hangup(tty_port*, bool)' at tty_port.c:371:1 has some sub-type changes: CRC value (modversions) changed from 0x73a55e6d to 0xa96460a [C] 'function void tty_port_tty_wakeup(tty_port*)' at tty_port.c:386:1 has some sub-type changes: CRC value (modversions) changed from 0xefa33e52 to 0xcedbac53 [C] 'function int tty_register_driver(tty_driver*)' at tty_io.c:3312:1 has some sub-type changes: CRC value (modversions) changed from 0xf4e165cd to 0x826a6eb6 [C] 'function int tty_register_ldisc(int, tty_ldisc_ops*)' at tty.h:710:1 has some sub-type changes: CRC value (modversions) changed from 0xd8e8620 to 0x2917c23a [C] 'function void tty_schedule_flip(tty_port*)' at tty_buffer.c:405:1 has some sub-type changes: CRC value (modversions) changed from 0xd1c65b4f to 0x3961d4c8 [C] 'function void tty_set_operations(tty_driver*, const tty_operations*)' at tty_io.c:3296:1 has some sub-type changes: CRC value (modversions) changed from 0x3aacf57e to 0x66df55ba [C] 'function int tty_standard_install(tty_driver*, tty_struct*)' at tty_io.c:1202:1 has some sub-type changes: CRC value (modversions) changed from 0xf0cb1098 to 0x6a37a25a [C] 'function void tty_unregister_device(tty_driver*, unsigned int)' at tty_io.c:3185:1 has some sub-type changes: CRC value (modversions) changed from 0x9c6848d2 to 0x7c9739e3 [C] 'function int tty_unregister_driver(tty_driver*)' at tty_io.c:3374:1 has some sub-type changes: CRC value (modversions) changed from 0xc5085411 to 0xaee3cd43 [C] 'function void tty_unthrottle(tty_struct*)' at tty.h:495:1 has some sub-type changes: CRC value (modversions) changed from 0x972c9306 to 0xfe5ab84b [C] 'function void tty_vhangup(tty_struct*)' at tty_io.c:694:1 has some sub-type changes: CRC value (modversions) changed from 0x904a0435 to 0x635d7a25 [C] 'function void tty_wakeup(tty_struct*)' at tty_io.c:527:1 has some sub-type changes: CRC value (modversions) changed from 0xdd0cb814 to 0x75c3654e [C] 'function void typec_altmode_attention(typec_altmode*, u32)' at bus.c:149:1 has some sub-type changes: CRC value (modversions) changed from 0xcd118505 to 0x9c9bbb5e [C] 'function const typec_altmode* typec_altmode_get_partner(typec_altmode*)' at bus.c:193:1 has some sub-type changes: CRC value (modversions) changed from 0x63f3567c to 0xdff097f3 [C] 'function int typec_altmode_notify(typec_altmode*, unsigned long int, void*)' at bus.c:51:1 has some sub-type changes: CRC value (modversions) changed from 0xbd2beef7 to 0x9f28dcc5 [C] 'function void typec_altmode_update_active(typec_altmode*, bool)' at class.c:280:1 has some sub-type changes: CRC value (modversions) changed from 0x351808ef to 0x71346927 [C] 'function int typec_altmode_vdm(typec_altmode*, const u32, const u32*, int)' at bus.c:169:1 has some sub-type changes: CRC value (modversions) changed from 0x46436e16 to 0xbc09e115 [C] 'function typec_altmode* typec_match_altmode(typec_altmode**, size_t, u16, u8)' at bus.c:270:1 has some sub-type changes: CRC value (modversions) changed from 0xc7641493 to 0x7a6e3327 [C] 'function typec_altmode* typec_partner_register_altmode(typec_partner*, const typec_altmode_desc*)' at class.c:630:1 has some sub-type changes: CRC value (modversions) changed from 0x26fe4ab to 0x3917afa [C] 'function typec_altmode* typec_port_register_altmode(typec_port*, const typec_altmode_desc*)' at class.c:1513:1 has some sub-type changes: CRC value (modversions) changed from 0xccd4371e to 0xd897ae9 [C] 'function typec_port* typec_register_port(device*, const typec_capability*)' at class.c:1542:1 has some sub-type changes: CRC value (modversions) changed from 0x3cb0245f to 0xc21c8303 [C] 'function void typec_unregister_altmode(typec_altmode*)' at class.c:547:1 has some sub-type changes: CRC value (modversions) changed from 0x6009f484 to 0x1e485e67 [C] 'function int uart_add_one_port(uart_driver*, uart_port*)' at serial_core.h:412:1 has some sub-type changes: CRC value (modversions) changed from 0x81105879 to 0x57238543 [C] 'function tty_driver* uart_console_device(console*, int*)' at serial_core.c:2600:1 has some sub-type changes: CRC value (modversions) changed from 0xfec15d6b to 0x3d77e5f4 [C] 'function void uart_console_write(uart_port*, const char*, unsigned int, void (uart_port*, int)*)' at serial_core.h:403:1 has some sub-type changes: CRC value (modversions) changed from 0x86cf7d04 to 0x872451a1 [C] 'function unsigned int uart_get_baud_rate(uart_port*, ktermios*, ktermios*, unsigned int, unsigned int)' at serial_core.h:327:1 has some sub-type changes: CRC value (modversions) changed from 0x2ef62dd7 to 0x66eb01f8 [C] 'function unsigned int uart_get_divisor(uart_port*, unsigned int)' at serial_core.c:482:1 has some sub-type changes: CRC value (modversions) changed from 0xca22f797 to 0x756b477a [C] 'function void uart_handle_cts_change(uart_port*, unsigned int)' at serial_core.h:457:1 has some sub-type changes: CRC value (modversions) changed from 0xd5f41dd7 to 0x37d4005f [C] 'function void uart_handle_dcd_change(uart_port*, unsigned int)' at serial_core.h:455:1 has some sub-type changes: CRC value (modversions) changed from 0xf4bf3366 to 0x1de9d376 [C] 'function void uart_insert_char(uart_port*, unsigned int, unsigned int, unsigned int, unsigned int)' at serial_core.h:460:1 has some sub-type changes: CRC value (modversions) changed from 0x4b143c55 to 0xf2cc9546 [C] 'function int uart_register_driver(uart_driver*)' at serial_core.h:410:1 has some sub-type changes: CRC value (modversions) changed from 0x4abce9f6 to 0x196122da [C] 'function int uart_remove_one_port(uart_driver*, uart_port*)' at serial_core.h:413:1 has some sub-type changes: CRC value (modversions) changed from 0xdc696fb3 to 0x3065bd66 [C] 'function int uart_resume_port(uart_driver*, uart_port*)' at serial_core.h:420:1 has some sub-type changes: CRC value (modversions) changed from 0xff04d6ca to 0xc6d54597 [C] 'function int uart_set_options(uart_port*, console*, int, int, int, int)' at serial_core.h:400:1 has some sub-type changes: CRC value (modversions) changed from 0xe7cc9555 to 0xb9d8d0ee [C] 'function int uart_suspend_port(uart_driver*, uart_port*)' at serial_core.h:419:1 has some sub-type changes: CRC value (modversions) changed from 0x16f7452e to 0x20602016 [C] 'function void uart_unregister_driver(uart_driver*)' at serial_core.h:411:1 has some sub-type changes: CRC value (modversions) changed from 0xf9110ea8 to 0xa147264c [C] 'function void uart_update_timeout(uart_port*, unsigned int, unsigned int)' at serial_core.h:325:1 has some sub-type changes: CRC value (modversions) changed from 0x136e1979 to 0xc886c216 [C] 'function void uart_write_wakeup(uart_port*)' at serial_core.h:320:1 has some sub-type changes: CRC value (modversions) changed from 0x831b6957 to 0x88a61bcd [C] 'function int ufshcd_crypto_cap_find(ufs_hba*, blk_crypto_mode_num, unsigned int)' at ufshcd-crypto.c:40:1 has some sub-type changes: CRC value (modversions) changed from 0xdf5be4ed to 0x20d57c20 [C] 'function void ufshcd_crypto_disable_spec(ufs_hba*)' at ufshcd-crypto.c:250:1 has some sub-type changes: CRC value (modversions) changed from 0x2c937f4d to 0x6f7f72a3 [C] 'function void ufshcd_crypto_enable_spec(ufs_hba*)' at ufshcd-crypto.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x3e4398d8 to 0x20635d5c [C] 'function int ufshcd_dme_get_attr(ufs_hba*, unsigned int, unsigned int*, unsigned char)' at ufshcd.h:1005:1 has some sub-type changes: CRC value (modversions) changed from 0x91b23c09 to 0x1cb5f8a7 [C] 'function int ufshcd_dme_set_attr(ufs_hba*, unsigned int, unsigned char, unsigned int, unsigned char)' at ufshcd.h:1003:1 has some sub-type changes: CRC value (modversions) changed from 0xe521b7d4 to 0xf3ddc4c6 [C] 'function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)' at ufshcd.c:124:1 has some sub-type changes: CRC value (modversions) changed from 0xafacb437 to 0x5062d8da [C] 'function u32 ufshcd_get_local_unipro_ver(ufs_hba*)' at ufshcd.c:947:1 has some sub-type changes: CRC value (modversions) changed from 0x5ba29f1 to 0xbca1198c [C] 'function int ufshcd_hold(ufs_hba*, bool)' at ufshcd.c:1628:1 has some sub-type changes: CRC value (modversions) changed from 0x2c3b45af to 0xe0ffa5a8 [C] 'function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)' at ufshcd-pltfrm.h:31:1 has some sub-type changes: CRC value (modversions) changed from 0x6a553691 to 0x7d69dc6c [C] 'function int ufshcd_pltfrm_resume(device*)' at ufshcd-pltfrm.c:238:1 has some sub-type changes: CRC value (modversions) changed from 0x70822d07 to 0x5b9a92cb [C] 'function int ufshcd_pltfrm_runtime_idle(device*)' at ufshcd-pltfrm.c:256:1 has some sub-type changes: CRC value (modversions) changed from 0x584d0940 to 0x562a5ea6 [C] 'function int ufshcd_pltfrm_runtime_resume(device*)' at ufshcd-pltfrm.c:250:1 has some sub-type changes: CRC value (modversions) changed from 0x7390d6b0 to 0x716d556b [C] 'function int ufshcd_pltfrm_runtime_suspend(device*)' at ufshcd-pltfrm.c:244:1 has some sub-type changes: CRC value (modversions) changed from 0x2fc0332d to 0xa9a5bcf9 [C] 'function void ufshcd_pltfrm_shutdown(platform_device*)' at ufshcd-pltfrm.c:264:1 has some sub-type changes: CRC value (modversions) changed from 0x8ecfde51 to 0x9d0361b [C] 'function int ufshcd_pltfrm_suspend(device*)' at ufshcd-pltfrm.c:225:1 has some sub-type changes: CRC value (modversions) changed from 0x7ac607f9 to 0x7f59e8d6 [C] 'function int ufshcd_query_attr(ufs_hba*, query_opcode, attr_idn, u8, u8, u32*)' at ufshcd.c:3011:1 has some sub-type changes: CRC value (modversions) changed from 0xdb7ff407 to 0xd2edf402 [C] 'function int ufshcd_query_descriptor_retry(ufs_hba*, query_opcode, desc_idn, u8, u8, u8*, int*)' at ufshcd.c:3180:1 has some sub-type changes: CRC value (modversions) changed from 0xd93e04d3 to 0xd528e201 [C] 'function int ufshcd_query_flag(ufs_hba*, query_opcode, flag_idn, u8, bool*)' at ufshcd.c:2941:1 has some sub-type changes: CRC value (modversions) changed from 0xbfcc001a to 0x9fda9d4f [C] 'function void ufshcd_release(ufs_hba*)' at ufshcd.c:1804:1 has some sub-type changes: CRC value (modversions) changed from 0x8d3a4fd to 0xc96a8081 [C] 'function void ufshcd_remove(ufs_hba*)' at ufshcd.h:948:1 has some sub-type changes: CRC value (modversions) changed from 0x2c8e8662 to 0xec1a3288 [C] 'function int ufshcd_shutdown(ufs_hba*)' at ufshcd.h:1002:1 has some sub-type changes: CRC value (modversions) changed from 0x75c9a638 to 0x1c3ec073 [C] 'function int ufshcd_system_resume(ufs_hba*)' at ufshcd.h:1001:1 has some sub-type changes: CRC value (modversions) changed from 0xc0522ea to 0xa2505900 [C] 'function int ufshcd_system_suspend(ufs_hba*)' at ufshcd.h:1000:1 has some sub-type changes: CRC value (modversions) changed from 0xde7f1ce5 to 0x5f436750 [C] 'function int ufshcd_uic_hibern8_enter(ufs_hba*)' at ufshcd.c:4080:1 has some sub-type changes: CRC value (modversions) changed from 0xbc0c783f to 0xfb8dc762 [C] 'function int ufshcd_uic_hibern8_exit(ufs_hba*)' at ufshcd.c:4104:1 has some sub-type changes: CRC value (modversions) changed from 0x6e341295 to 0x46688040 [C] 'function void uio_unregister_device(uio_info*)' at uio.c:1004:1 has some sub-type changes: CRC value (modversions) changed from 0x463d2636 to 0x63c34861 [C] 'function void unload_nls(nls_table*)' at nls.h:51:1 has some sub-type changes: CRC value (modversions) changed from 0xe93ffcb7 to 0x5812a7b5 [C] 'function void unlock_buffer(buffer_head*)' at buffer_head.h:199:1 has some sub-type changes: CRC value (modversions) changed from 0x522d54e2 to 0xf9b95e66 [C] 'function void unlock_new_inode(inode*)' at inode.c:992:1 has some sub-type changes: CRC value (modversions) changed from 0xc5262207 to 0x497cc7f6 [C] 'function void unlock_page(page*)' at pagemap.h:462:1 has some sub-type changes: CRC value (modversions) changed from 0xc48d5064 to 0xc8fb470f [C] 'function void unlock_rename(dentry*, dentry*)' at namei.h:69:1 has some sub-type changes: CRC value (modversions) changed from 0x5bd02f7a to 0x99778846 [C] 'function void unmap_mapping_range(address_space*, long long int, long long int, int)' at mm.h:1506:1 has some sub-type changes: CRC value (modversions) changed from 0xc4c9e0f8 to 0x8d73f53 [C] 'function void unregister_binfmt(linux_binfmt*)' at binfmts.h:118:1 has some sub-type changes: CRC value (modversions) changed from 0x9364de6f to 0xafaf92d7 [C] 'function int unregister_console(console*)' at printk.c:2842:1 has some sub-type changes: CRC value (modversions) changed from 0xa10da8a8 to 0x7ce4976f [C] 'function int unregister_filesystem(file_system_type*)' at fs.h:2382:1 has some sub-type changes: CRC value (modversions) changed from 0x2e069e72 to 0x62bf23db [C] 'function void unregister_gadget_item(config_item*)' at configfs.c:1888:1 has some sub-type changes: CRC value (modversions) changed from 0x6986f688 to 0x1c251bd8 [C] 'function void unregister_netdev(net_device*)' at netdevice.h:4152:1 has some sub-type changes: CRC value (modversions) changed from 0x4993a58c to 0x39fe21c7 [C] 'function void unregister_netdevice_queue(net_device*, list_head*)' at netdevice.h:2688:1 has some sub-type changes: CRC value (modversions) changed from 0x46d45e8 to 0xd127af91 [C] 'function void unregister_pernet_device(pernet_operations*)' at net_namespace.h:404:1 has some sub-type changes: CRC value (modversions) changed from 0x7d24b531 to 0xc7579b0a [C] 'function void unregister_pernet_subsys(pernet_operations*)' at net_namespace.h:402:1 has some sub-type changes: CRC value (modversions) changed from 0xb2754c37 to 0xb4632184 [C] 'function void unregister_rpmsg_driver(rpmsg_driver*)' at rpmsg.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x72498c50 to 0x33271ecc [C] 'function void unregister_shrinker(shrinker*)' at vmscan.c:446:1 has some sub-type changes: CRC value (modversions) changed from 0xdb01b23a to 0x6481be32 [C] 'function int unregister_tcf_proto_ops(tcf_proto_ops*)' at pkt_cls.h:26:1 has some sub-type changes: CRC value (modversions) changed from 0x666a528c to 0x146badcf [C] 'function void unregister_virtio_device(virtio_device*)' at virtio.c:360:1 has some sub-type changes: CRC value (modversions) changed from 0xcf313873 to 0x53c09e53 [C] 'function void unregister_virtio_driver(virtio_driver*)' at virtio.c:303:1 has some sub-type changes: CRC value (modversions) changed from 0x1cd1349a to 0xc66c2259 [C] 'function void unuse_mm(mm_struct*)' at mmu_context.c:53:1 has some sub-type changes: CRC value (modversions) changed from 0xec0721ec to 0x9515caa3 [C] 'function int update_devfreq(devfreq*)' at devfreq.h:214:1 has some sub-type changes: CRC value (modversions) changed from 0x7b9cada0 to 0x14ccbab6 [C] 'function int usb_add_function(usb_configuration*, usb_function*)' at composite.c:300:1 has some sub-type changes: CRC value (modversions) changed from 0xf7f4b3a1 to 0x153eca6d [C] 'function int usb_add_gadget_udc(device*, usb_gadget*)' at gadget.h:742:1 has some sub-type changes: CRC value (modversions) changed from 0xf5ca69f2 to 0x76c72198 [C] 'function int usb_add_hcd(usb_hcd*, unsigned int, unsigned long int)' at hcd.h:479:1 has some sub-type changes: CRC value (modversions) changed from 0x8030a30b to 0xb33053ee [C] 'function int usb_add_phy_dev(usb_phy*)' at phy.c:661:1 has some sub-type changes: CRC value (modversions) changed from 0xd1821a89 to 0xa9d653e4 [C] 'function void* usb_alloc_coherent(usb_device*, unsigned long int, unsigned int, long long unsigned int*)' at usb.h:1788:1 has some sub-type changes: CRC value (modversions) changed from 0x2934ea0 to 0x9870f156 [C] 'function usb_device* usb_alloc_dev(usb_device*, usb_bus*, unsigned int)' at usb.c:575:1 has some sub-type changes: CRC value (modversions) changed from 0xecfef908 to 0x350ff32e [C] 'function urb* usb_alloc_urb(int, unsigned int)' at usb.h:1736:1 has some sub-type changes: CRC value (modversions) changed from 0xd5d4e769 to 0xdc6c8b6 [C] 'function usb_host_interface* usb_altnum_to_altsetting(const usb_interface*, unsigned int)' at usb.c:309:1 has some sub-type changes: CRC value (modversions) changed from 0x2271616f to 0x89b5f199 [C] 'function bool usb_amd_pt_check_port(device*, int)' at pci-quirks.c:547:1 has some sub-type changes: CRC value (modversions) changed from 0xa0b7eeed to 0xb2427f98 [C] 'function void usb_anchor_urb(urb*, usb_anchor*)' at usb.h:1752:1 has some sub-type changes: CRC value (modversions) changed from 0xda157a1b to 0x55417e7d [C] 'function void usb_asmedia_modifyflowcontrol(pci_dev*)' at pci-quirks.c:484:1 has some sub-type changes: CRC value (modversions) changed from 0x7964758 to 0xb00010e [C] 'function int usb_assign_descriptors(usb_function*, usb_descriptor_header**, usb_descriptor_header**, usb_descriptor_header**, usb_descriptor_header**)' at gadget.h:810:1 has some sub-type changes: CRC value (modversions) changed from 0x85870dd8 to 0x7e7dfa3f [C] 'function int usb_autopm_get_interface(usb_interface*)' at usb.h:785:1 has some sub-type changes: CRC value (modversions) changed from 0xa662242a to 0xb0f58500 [C] 'function int usb_autopm_get_interface_async(usb_interface*)' at usb.h:787:1 has some sub-type changes: CRC value (modversions) changed from 0x2a6ab3c4 to 0xb4bf8ffc [C] 'function void usb_autopm_get_interface_no_resume(usb_interface*)' at usb.h:789:1 has some sub-type changes: CRC value (modversions) changed from 0xeedc8819 to 0xb543f7f3 [C] 'function void usb_autopm_put_interface(usb_interface*)' at usb.h:786:1 has some sub-type changes: CRC value (modversions) changed from 0x7913409 to 0xec43be8d [C] 'function void usb_autopm_put_interface_async(usb_interface*)' at usb.h:788:1 has some sub-type changes: CRC value (modversions) changed from 0x87dbddc0 to 0x9ddfc7ff [C] 'function void usb_autopm_put_interface_no_suspend(usb_interface*)' at usb.h:790:1 has some sub-type changes: CRC value (modversions) changed from 0x836f843b to 0x39d501e2 [C] 'function int usb_bulk_msg(usb_device*, unsigned int, void*, int, int*, int)' at message.c:229:1 has some sub-type changes: CRC value (modversions) changed from 0x3b389d3f to 0x9e5967e0 [C] 'function int usb_choose_configuration(usb_device*)' at usb.h:52:1 has some sub-type changes: CRC value (modversions) changed from 0x1608625f to 0x8c08427b [C] 'function int usb_clear_halt(usb_device*, int)' at usb.h:1845:1 has some sub-type changes: CRC value (modversions) changed from 0xe8cb66f to 0xe5aecbac [C] 'function void usb_composite_setup_continue(usb_composite_dev*)' at composite.c:2447:1 has some sub-type changes: CRC value (modversions) changed from 0x11fabbbd to 0x98c8e74c [C] 'function int usb_control_msg(usb_device*, unsigned int, unsigned char, unsigned char, unsigned short int, unsigned short int, void*, unsigned short int, int)' at usb.h:1813:1 has some sub-type changes: CRC value (modversions) changed from 0x83eacec0 to 0xc8af1626 [C] 'function usb_hcd* usb_create_hcd(const hc_driver*, device*, const char*)' at hcd.h:471:1 has some sub-type changes: CRC value (modversions) changed from 0x71dc9846 to 0x1a24b20b [C] 'function usb_hcd* usb_create_shared_hcd(const hc_driver*, device*, const char*, usb_hcd*)' at hcd.h:473:1 has some sub-type changes: CRC value (modversions) changed from 0xe33bc76e to 0xfaa49b1b [C] 'function void usb_del_gadget_udc(usb_gadget*)' at gadget.h:743:1 has some sub-type changes: CRC value (modversions) changed from 0xbf1ce770 to 0xd376d34c [C] 'function void usb_deregister(usb_driver*)' at usb.h:1307:1 has some sub-type changes: CRC value (modversions) changed from 0x4c48a277 to 0x154a950b [C] 'function void usb_deregister_dev(usb_interface*, usb_class_driver*)' at file.c:230:1 has some sub-type changes: CRC value (modversions) changed from 0x1775708e to 0xbfbf188 [C] 'function void usb_disable_xhci_ports(pci_dev*)' at pci-quirks.c:1126:1 has some sub-type changes: CRC value (modversions) changed from 0xcc36d898 to 0xbe9adab3 [C] 'function int usb_driver_claim_interface(usb_driver*, usb_interface*, void*)' at usb.h:861:1 has some sub-type changes: CRC value (modversions) changed from 0xbf661cb5 to 0x354b3153 [C] 'function void usb_driver_release_interface(usb_driver*, usb_interface*)' at usb.h:882:1 has some sub-type changes: CRC value (modversions) changed from 0xa734ea3a to 0x4c02f8ba [C] 'function void usb_enable_autosuspend(usb_device*)' at driver.c:1529:1 has some sub-type changes: CRC value (modversions) changed from 0x46629673 to 0xe4f79e6a [C] 'function void usb_enable_intel_xhci_ports(pci_dev*)' at pci-quirks.c:1041:1 has some sub-type changes: CRC value (modversions) changed from 0x29201f34 to 0x3f06f4aa [C] 'function usb_ep* usb_ep_autoconfig(usb_gadget*, usb_endpoint_descriptor*)' at gadget.h:891:1 has some sub-type changes: CRC value (modversions) changed from 0x502bc3e4 to 0xc65e73e [C] 'function usb_interface* usb_find_interface(usb_driver*, int)' at usb.c:353:1 has some sub-type changes: CRC value (modversions) changed from 0xeac0caa7 to 0xdcb7b319 [C] 'function void usb_free_all_descriptors(usb_function*)' at gadget.h:815:1 has some sub-type changes: CRC value (modversions) changed from 0x6a28ab80 to 0x5bda444d [C] 'function void usb_free_coherent(usb_device*, unsigned long int, void*, long long unsigned int)' at usb.h:1790:1 has some sub-type changes: CRC value (modversions) changed from 0x97676103 to 0x667909fb [C] 'function void usb_free_urb(urb*)' at usb.h:1737:1 has some sub-type changes: CRC value (modversions) changed from 0x78a8d887 to 0xf2e4cb12 [C] 'function int usb_function_register(usb_function_driver*)' at composite.h:600:1 has some sub-type changes: CRC value (modversions) changed from 0x4ac0e999 to 0x55a94b40 [C] 'function void usb_function_unregister(usb_function_driver*)' at composite.h:599:1 has some sub-type changes: CRC value (modversions) changed from 0xa4986e43 to 0x9a66f829 [C] 'function int usb_gadget_map_request_by_dev(device*, usb_request*, int)' at core.c:814:1 has some sub-type changes: CRC value (modversions) changed from 0x130730f1 to 0xa1900244 [C] 'function int usb_gadget_probe_driver(usb_gadget_driver*)' at gadget.h:723:1 has some sub-type changes: CRC value (modversions) changed from 0x7817596d to 0x1f440b50 [C] 'function void usb_gadget_set_state(usb_gadget*, usb_device_state)' at gadget.h:851:1 has some sub-type changes: CRC value (modversions) changed from 0xdeb0f478 to 0xac633765 [C] 'function void usb_gadget_udc_reset(usb_gadget*, usb_gadget_driver*)' at gadget.h:857:1 has some sub-type changes: CRC value (modversions) changed from 0x22062aca to 0x642b1224 [C] 'function void usb_gadget_unmap_request_by_dev(device*, usb_request*, int)' at core.c:862:1 has some sub-type changes: CRC value (modversions) changed from 0x13c8c0d4 to 0x5570a552 [C] 'function int usb_gadget_unregister_driver(usb_gadget_driver*)' at gadget.h:738:1 has some sub-type changes: CRC value (modversions) changed from 0xb5c8b8b to 0x57d228b7 [C] 'function int usb_gadget_vbus_connect(usb_gadget*)' at core.c:577:1 has some sub-type changes: CRC value (modversions) changed from 0x7e32211f to 0x6914175f [C] 'function int usb_gadget_vbus_disconnect(usb_gadget*)' at core.c:638:1 has some sub-type changes: CRC value (modversions) changed from 0x9875222c to 0x9ab9ee3f [C] 'function int usb_gadget_vbus_draw(usb_gadget*, unsigned int)' at gadget.h:574:1 has some sub-type changes: CRC value (modversions) changed from 0x934d524e to 0x5b8c9b98 [C] 'function int usb_gadget_wakeup(usb_gadget*)' at core.c:491:1 has some sub-type changes: CRC value (modversions) changed from 0xc14ff9c8 to 0xbe7c1cff [C] 'function int usb_get_current_frame_number(usb_device*)' at usb.c:841:1 has some sub-type changes: CRC value (modversions) changed from 0xf2c4bf1b to 0x1e2b5bc [C] 'function usb_device* usb_get_dev(usb_device*)' at usb.h:740:1 has some sub-type changes: CRC value (modversions) changed from 0x70c3ec33 to 0x9d85fc37 [C] 'function usb_dr_mode usb_get_dr_mode(device*)' at common.c:131:1 has some sub-type changes: CRC value (modversions) changed from 0x36a17c85 to 0x48d03be3 [C] 'function urb* usb_get_from_anchor(usb_anchor*)' at usb.h:1756:1 has some sub-type changes: CRC value (modversions) changed from 0x21d38cb8 to 0x128ef86c [C] 'function usb_interface* usb_get_intf(usb_interface*)' at usb.c:741:1 has some sub-type changes: CRC value (modversions) changed from 0x1c722b24 to 0x1fe36c46 [C] 'function usb_device_speed usb_get_maximum_speed(device*)' at common.c:80:1 has some sub-type changes: CRC value (modversions) changed from 0xfd35ee95 to 0x148f8ec9 [C] 'function urb* usb_get_urb(urb*)' at usb.h:1739:1 has some sub-type changes: CRC value (modversions) changed from 0x90649dfe to 0x8f609856 [C] 'function usb_string* usb_gstrings_attach(usb_composite_dev*, usb_gadget_strings**, unsigned int)' at composite.h:522:1 has some sub-type changes: CRC value (modversions) changed from 0x98fee81e to 0xf8003cf7 [C] 'function void usb_hc_died(usb_hcd*)' at hcd.c:2360:1 has some sub-type changes: CRC value (modversions) changed from 0x69d58b61 to 0x87418c99 [C] 'function int usb_hcd_check_unlink_urb(usb_hcd*, urb*, int)' at hcd.h:443:1 has some sub-type changes: CRC value (modversions) changed from 0x6f9c985 to 0x982e109e [C] 'function void usb_hcd_end_port_resume(usb_bus*, int)' at hcd.c:1059:1 has some sub-type changes: CRC value (modversions) changed from 0xe69f758b to 0xd71e0c3c [C] 'function void usb_hcd_giveback_urb(usb_hcd*, urb*, int)' at hcd.h:449:1 has some sub-type changes: CRC value (modversions) changed from 0x56bba0a2 to 0x7dd56427 [C] 'function int usb_hcd_is_primary_hcd(usb_hcd*)' at hcd.h:478:1 has some sub-type changes: CRC value (modversions) changed from 0x3114e617 to 0x90bfcea1 [C] 'function int usb_hcd_link_urb_to_ep(usb_hcd*, urb*)' at hcd.h:442:1 has some sub-type changes: CRC value (modversions) changed from 0x1f197838 to 0xb5e86c10 [C] 'function int usb_hcd_map_urb_for_dma(usb_hcd*, urb*, gfp_t)' at hcd.c:1397:1 has some sub-type changes: CRC value (modversions) changed from 0x66145e45 to 0xcaeea9da [C] 'function int usb_hcd_pci_probe(pci_dev*, const pci_device_id*)' at hcd.h:492:1 has some sub-type changes: CRC value (modversions) changed from 0x959520f8 to 0xe049d5ed [C] 'function void usb_hcd_pci_remove(pci_dev*)' at hcd.h:494:1 has some sub-type changes: CRC value (modversions) changed from 0xaf34d18 to 0xf0325428 [C] 'function void usb_hcd_pci_shutdown(pci_dev*)' at hcd-pci.c:353:1 has some sub-type changes: CRC value (modversions) changed from 0x387669fc to 0x1fd412d8 [C] 'function void usb_hcd_platform_shutdown(platform_device*)' at hcd.c:2909:1 has some sub-type changes: CRC value (modversions) changed from 0xc17716a0 to 0x800f3657 [C] 'function void usb_hcd_poll_rh_status(usb_hcd*)' at hcd.h:518:1 has some sub-type changes: CRC value (modversions) changed from 0x89702a5c to 0x441f5df6 [C] 'function void usb_hcd_resume_root_hub(usb_hcd*)' at hcd.h:690:1 has some sub-type changes: CRC value (modversions) changed from 0xa5c89f81 to 0x7dbf2ff9 [C] 'function void usb_hcd_start_port_resume(usb_bus*, int)' at hcd.c:1037:1 has some sub-type changes: CRC value (modversions) changed from 0x26022233 to 0x3319601f [C] 'function void usb_hcd_unlink_urb_from_ep(usb_hcd*, urb*)' at hcd.h:445:1 has some sub-type changes: CRC value (modversions) changed from 0xb0ef1605 to 0x7e5dbf79 [C] 'function void usb_hcd_unmap_urb_for_dma(usb_hcd*, urb*)' at hcd.c:1350:1 has some sub-type changes: CRC value (modversions) changed from 0xe47207e to 0xca17d2b9 [C] 'function int usb_hub_clear_tt_buffer(urb*)' at hub.c:858:1 has some sub-type changes: CRC value (modversions) changed from 0x85069e81 to 0x5522e66c [C] 'function usb_device* usb_hub_find_child(usb_device*, int)' at hub.c:6010:1 has some sub-type changes: CRC value (modversions) changed from 0x615b45bf to 0x788451e8 [C] 'function usb_interface* usb_ifnum_to_if(const usb_device*, unsigned int)' at usb.h:892:1 has some sub-type changes: CRC value (modversions) changed from 0xbbf98891 to 0x4acb3a34 [C] 'function int usb_interface_id(usb_configuration*, usb_function*)' at composite.h:250:1 has some sub-type changes: CRC value (modversions) changed from 0x7d7cee39 to 0x267861a8 [C] 'function void usb_kill_urb(urb*)' at usb.h:1742:1 has some sub-type changes: CRC value (modversions) changed from 0xaa8a1cf6 to 0x8da06b2f [C] 'function int usb_lock_device_for_reset(usb_device*, const usb_interface*)' at usb.h:762:1 has some sub-type changes: CRC value (modversions) changed from 0xeb748129 to 0x4c4eadd0 [C] 'function const usb_device_id* usb_match_id(usb_interface*, const usb_device_id*)' at driver.c:771:1 has some sub-type changes: CRC value (modversions) changed from 0x64f7a493 to 0x439be4fb [C] 'function int usb_match_one_id(usb_interface*, const usb_device_id*)' at driver.c:678:1 has some sub-type changes: CRC value (modversions) changed from 0x58a28ccd to 0x9d19a5d0 [C] 'function config_group* usb_os_desc_prepare_interf_dir(config_group*, int, usb_os_desc**, char**, module*)' at configfs.h:9:1 has some sub-type changes: CRC value (modversions) changed from 0x54664753 to 0x2e19e5de [C] 'function void usb_phy_get_charger_current(usb_phy*, unsigned int*, unsigned int*)' at phy.c:231:1 has some sub-type changes: CRC value (modversions) changed from 0x4e9abebb to 0xdd122621 [C] 'function void usb_phy_set_charger_current(usb_phy*, unsigned int)' at phy.c:182:1 has some sub-type changes: CRC value (modversions) changed from 0x899145c4 to 0x6b263a40 [C] 'function void usb_phy_set_charger_state(usb_phy*, usb_charger_state)' at phy.c:268:1 has some sub-type changes: CRC value (modversions) changed from 0xb5c8ae85 to 0x94127c2 [C] 'function void usb_poison_urb(urb*)' at urb.c:729:1 has some sub-type changes: CRC value (modversions) changed from 0x40220c76 to 0x164e8df0 [C] 'function void usb_put_dev(usb_device*)' at usb.h:741:1 has some sub-type changes: CRC value (modversions) changed from 0xb6bbaefd to 0x8e1d41fe [C] 'function void usb_put_function_instance(usb_function_instance*)' at composite.h:601:1 has some sub-type changes: CRC value (modversions) changed from 0x662f4851 to 0x5121bfa5 [C] 'function void usb_put_hcd(usb_hcd*)' at hcd.h:477:1 has some sub-type changes: CRC value (modversions) changed from 0x5830e315 to 0x409f911b [C] 'function void usb_put_intf(usb_interface*)' at usb.c:757:1 has some sub-type changes: CRC value (modversions) changed from 0x10794c71 to 0xcd9aa565 [C] 'function int usb_register_dev(usb_interface*, usb_class_driver*)' at file.c:156:1 has some sub-type changes: CRC value (modversions) changed from 0x6a523d9c to 0x37dc18c9 [C] 'function int usb_register_driver(usb_driver*, module*, const char*)' at usb.h:1300:1 has some sub-type changes: CRC value (modversions) changed from 0x8a4fa67a to 0x6a8e92cb [C] 'function void usb_remove_hcd(usb_hcd*)' at hcd.h:481:1 has some sub-type changes: CRC value (modversions) changed from 0x55ad33e5 to 0x1ff4fb9f [C] 'function void usb_remove_phy(usb_phy*)' at phy.c:692:1 has some sub-type changes: CRC value (modversions) changed from 0xe5aef4b3 to 0xa8cf2903 [C] 'function int usb_reset_configuration(usb_device*)' at message.c:1525:1 has some sub-type changes: CRC value (modversions) changed from 0x27d99960 to 0xb19e0f95 [C] 'function int usb_reset_device(usb_device*)' at usb.h:766:1 has some sub-type changes: CRC value (modversions) changed from 0x87d0daa9 to 0x7fcf71d8 [C] 'function void usb_reset_endpoint(usb_device*, unsigned int)' at message.c:1170:1 has some sub-type changes: CRC value (modversions) changed from 0xefa79083 to 0x3da10e46 [C] 'function usb_role_switch* usb_role_switch_get(device*)' at role.h:49:1 has some sub-type changes: CRC value (modversions) changed from 0xe1093a16 to 0xb85d58b3 [C] 'function usb_role_switch* usb_role_switch_register(device*, const usb_role_switch_desc*)' at class.c:285:1 has some sub-type changes: CRC value (modversions) changed from 0x3d3c7911 to 0x9c5e07f9 [C] 'function void usb_root_hub_lost_power(usb_device*)' at hub.c:3822:1 has some sub-type changes: CRC value (modversions) changed from 0xcee55f7e to 0x934c8f50 [C] 'function void usb_set_device_state(usb_device*, usb_device_state)' at hub.c:2036:1 has some sub-type changes: CRC value (modversions) changed from 0x9b084100 to 0xf408dea [C] 'function int usb_set_interface(usb_device*, int, int)' at usb.h:1847:1 has some sub-type changes: CRC value (modversions) changed from 0xb3686831 to 0x8203cc9c [C] 'function void usb_sg_cancel(usb_sg_request*)' at message.c:585:1 has some sub-type changes: CRC value (modversions) changed from 0x36c1a26f to 0xcbefb565 [C] 'function int usb_sg_init(usb_sg_request*, usb_device*, unsigned int, unsigned int, scatterlist*, int, size_t, gfp_t)' at message.c:367:1 has some sub-type changes: CRC value (modversions) changed from 0xe36ed2bd to 0x7e87fe01 [C] 'function void usb_sg_wait(usb_sg_request*)' at message.c:515:1 has some sub-type changes: CRC value (modversions) changed from 0x81fa17b8 to 0xcdd3bf43 [C] 'function ssize_t usb_store_new_id(usb_dynids*, const usb_device_id*, device_driver*, const char*, size_t)' at driver.c:42:1 has some sub-type changes: CRC value (modversions) changed from 0x99c35402 to 0x3a3b6f6f [C] 'function int usb_string(usb_device*, int, char*, unsigned long int)' at usb.h:1841:1 has some sub-type changes: CRC value (modversions) changed from 0x89427169 to 0xe46a0af4 [C] 'function int usb_string_id(usb_composite_dev*)' at composite.h:519:1 has some sub-type changes: CRC value (modversions) changed from 0xaa588813 to 0xd869d478 [C] 'function int usb_submit_urb(urb*, unsigned int)' at usb.h:1740:1 has some sub-type changes: CRC value (modversions) changed from 0x7aeac796 to 0xcf11b759 [C] 'function void usb_unanchor_urb(urb*)' at usb.h:1753:1 has some sub-type changes: CRC value (modversions) changed from 0x6092d2ff to 0xc909b27a [C] 'function int usb_unlink_urb(urb*)' at usb.h:1741:1 has some sub-type changes: CRC value (modversions) changed from 0xc25fb5de to 0x86ce7732 [C] 'function void usb_unpoison_urb(urb*)' at urb.c:744:1 has some sub-type changes: CRC value (modversions) changed from 0x17bf4919 to 0xfeaf5a49 [C] 'function void usb_wakeup_notification(usb_device*, unsigned int)' at hub.c:689:1 has some sub-type changes: CRC value (modversions) changed from 0x5de51c4b to 0x70986368 [C] 'function int usbnet_change_mtu(net_device*, int)' at usbnet.c:378:1 has some sub-type changes: CRC value (modversions) changed from 0x1749e6aa to 0xbff30d35 [C] 'function void usbnet_disconnect(usb_interface*)' at usbnet.c:1592:1 has some sub-type changes: CRC value (modversions) changed from 0x759985e7 to 0xb4579c8c [C] 'function void usbnet_get_drvinfo(net_device*, ethtool_drvinfo*)' at usbnet.h:286:1 has some sub-type changes: CRC value (modversions) changed from 0xbf435e22 to 0x953f5d24 [C] 'function int usbnet_get_endpoints(usbnet*, usb_interface*)' at usbnet.h:269:1 has some sub-type changes: CRC value (modversions) changed from 0xc2412e87 to 0xbefd0c0 [C] 'function int usbnet_get_ethernet_addr(usbnet*, int)' at usbnet.h:270:1 has some sub-type changes: CRC value (modversions) changed from 0xacbf2848 to 0x50322ac3 [C] 'function u32 usbnet_get_link(net_device*)' at usbnet.c:1017:1 has some sub-type changes: CRC value (modversions) changed from 0x500e2e3a to 0xd38f2239 [C] 'function int usbnet_get_link_ksettings(net_device*, ethtool_link_ksettings*)' at usbnet.c:950:1 has some sub-type changes: CRC value (modversions) changed from 0xede925ed to 0x7a9900ec [C] 'function u32 usbnet_get_msglevel(net_device*)' at usbnet.c:1057:1 has some sub-type changes: CRC value (modversions) changed from 0x98eebc67 to 0x108b8b10 [C] 'function void usbnet_get_stats64(net_device*, rtnl_link_stats64*)' at usbnet.c:986:1 has some sub-type changes: CRC value (modversions) changed from 0x18d4c0d to 0x468e2236 [C] 'function void usbnet_link_change(usbnet*, bool, bool)' at usbnet.h:290:1 has some sub-type changes: CRC value (modversions) changed from 0xfee139c0 to 0x44dfd703 [C] 'function int usbnet_manage_power(usbnet*, int)' at usbnet.c:1958:1 has some sub-type changes: CRC value (modversions) changed from 0x6b202c7a to 0x838360a [C] 'function int usbnet_nway_reset(net_device*)' at usbnet.c:1034:1 has some sub-type changes: CRC value (modversions) changed from 0x59ff2f79 to 0x2d380817 [C] 'function int usbnet_open(net_device*)' at usbnet.c:861:1 has some sub-type changes: CRC value (modversions) changed from 0x9693dcc to 0x26173a63 [C] 'function int usbnet_probe(usb_interface*, const usb_device_id*)' at usbnet.c:1654:1 has some sub-type changes: CRC value (modversions) changed from 0x3b4a19ce to 0x1ee0617c [C] 'function int usbnet_read_cmd(usbnet*, u8, u8, u16, u16, void*, u16)' at usbnet.c:2048:1 has some sub-type changes: CRC value (modversions) changed from 0x406742a1 to 0xe42f0f05 [C] 'function int usbnet_read_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)' at usbnet.c:2084:1 has some sub-type changes: CRC value (modversions) changed from 0x5e05b578 to 0xc7a54f85 [C] 'function int usbnet_resume(usb_interface*)' at usbnet.h:193:1 has some sub-type changes: CRC value (modversions) changed from 0x3c7e54c9 to 0xb0b8a8b2 [C] 'function int usbnet_set_link_ksettings(net_device*, const ethtool_link_ksettings*)' at usbnet.c:964:1 has some sub-type changes: CRC value (modversions) changed from 0x540f0a21 to 0x391bd2d4 [C] 'function void usbnet_set_msglevel(net_device*, u32)' at usbnet.c:1065:1 has some sub-type changes: CRC value (modversions) changed from 0x69843d70 to 0xbeecc47b [C] 'function void usbnet_skb_return(usbnet*, sk_buff*)' at usbnet.h:272:1 has some sub-type changes: CRC value (modversions) changed from 0xb928a90e to 0xefb9b347 [C] 'function netdev_tx_t usbnet_start_xmit(sk_buff*, net_device*)' at usbnet.c:1346:1 has some sub-type changes: CRC value (modversions) changed from 0x7da14c32 to 0x50db30cc [C] 'function int usbnet_stop(net_device*)' at usbnet.c:799:1 has some sub-type changes: CRC value (modversions) changed from 0xebe7a16 to 0xf62dd0be [C] 'function int usbnet_suspend(usb_interface*, pm_message_t)' at usbnet.h:192:1 has some sub-type changes: CRC value (modversions) changed from 0xe5fbb030 to 0xf0dd1e83 [C] 'function void usbnet_tx_timeout(net_device*)' at usbnet.c:1296:1 has some sub-type changes: CRC value (modversions) changed from 0x1b076833 to 0xa1ca39fa [C] 'function void usbnet_unlink_rx_urbs(usbnet*)' at usbnet.h:273:1 has some sub-type changes: CRC value (modversions) changed from 0xeb95dc93 to 0xbb3657ce [C] 'function void usbnet_update_max_qlen(usbnet*)' at usbnet.h:295:1 has some sub-type changes: CRC value (modversions) changed from 0xfcd33724 to 0x3579dc18 [C] 'function int usbnet_write_cmd(usbnet*, u8, u8, u16, u16, void*, u16)' at usbnet.c:2066:1 has some sub-type changes: CRC value (modversions) changed from 0xa4ca085a to 0xaaf955ee [C] 'function int usbnet_write_cmd_async(usbnet*, u8, u8, u16, u16, void*, u16)' at usbnet.h:205:1 has some sub-type changes: CRC value (modversions) changed from 0x5fce0b0e to 0x5e4e82e6 [C] 'function int usbnet_write_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)' at usbnet.c:2096:1 has some sub-type changes: CRC value (modversions) changed from 0xc2962aae to 0xd394f0b0 [C] 'function void use_mm(mm_struct*)' at mmu_context.c:22:1 has some sub-type changes: CRC value (modversions) changed from 0xd62316c7 to 0x64b6827e [C] 'function void user_destroy(key*)' at user_defined.c:146:1 has some sub-type changes: CRC value (modversions) changed from 0x50114318 to 0x7bb2d521 [C] 'function int user_path_at_empty(int, const char*, unsigned int, path*, int*)' at namei.c:2680:1 has some sub-type changes: CRC value (modversions) changed from 0xe6334ebc to 0x645f7e13 [C] 'function long int user_read(const key*, char*, size_t)' at user_defined.c:171:1 has some sub-type changes: CRC value (modversions) changed from 0xd1f81b8e to 0x56d4a6b6 [C] 'function void user_revoke(key*)' at user_defined.c:128:1 has some sub-type changes: CRC value (modversions) changed from 0x43d2338a to 0x832a5e7b [C] 'function void v4l2_ctrl_cluster(unsigned int, v4l2_ctrl**)' at v4l2-ctrls.c:2739:1 has some sub-type changes: CRC value (modversions) changed from 0x3e11200e to 0xe2c91ece [C] 'function v4l2_ctrl* v4l2_ctrl_find(v4l2_ctrl_handler*, u32)' at v4l2-ctrls.c:2261:1 has some sub-type changes: CRC value (modversions) changed from 0x38f3a0b0 to 0x2bfe9946 [C] 'function s32 v4l2_ctrl_g_ctrl(v4l2_ctrl*)' at v4l2-ctrls.c:3639:1 has some sub-type changes: CRC value (modversions) changed from 0x686a86e0 to 0xcbcd646c [C] 'function void v4l2_ctrl_handler_free(v4l2_ctrl_handler*)' at v4l2-ctrls.c:2153:1 has some sub-type changes: CRC value (modversions) changed from 0x8f93ff6c to 0x6f33cd1 [C] 'function int v4l2_ctrl_handler_init_class(v4l2_ctrl_handler*, unsigned int, lock_class_key*, const char*)' at v4l2-ctrls.c:2130:1 has some sub-type changes: CRC value (modversions) changed from 0x385e97f6 to 0x23c312e6 [C] 'function int v4l2_ctrl_handler_setup(v4l2_ctrl_handler*)' at v4l2-ctrls.c:2923:1 has some sub-type changes: CRC value (modversions) changed from 0x7d196e8b to 0x697424a5 [C] 'function int v4l2_ctrl_log_status(file*, void*)' at v4l2-ctrls.c:4388:1 has some sub-type changes: CRC value (modversions) changed from 0xb97ace4a to 0xf1908071 [C] 'function v4l2_ctrl* v4l2_ctrl_new_custom(v4l2_ctrl_handler*, const v4l2_ctrl_config*, void*)' at v4l2-ctrls.c:2526:1 has some sub-type changes: CRC value (modversions) changed from 0x7b734046 to 0x50e2400 [C] 'function v4l2_ctrl* v4l2_ctrl_new_int_menu(v4l2_ctrl_handler*, const v4l2_ctrl_ops*, u32, u8, u8, const s64*)' at v4l2-ctrls.c:2658:1 has some sub-type changes: CRC value (modversions) changed from 0x9ea84515 to 0x483d3585 [C] 'function v4l2_ctrl* v4l2_ctrl_new_std(v4l2_ctrl_handler*, const v4l2_ctrl_ops*, u32, s64, s64, u64, s64)' at v4l2-ctrls.c:2570:1 has some sub-type changes: CRC value (modversions) changed from 0x2362b55a to 0x56587787 [C] 'function v4l2_ctrl* v4l2_ctrl_new_std_menu(v4l2_ctrl_handler*, const v4l2_ctrl_ops*, u32, u8, u64, u8)' at v4l2-ctrls.c:2592:1 has some sub-type changes: CRC value (modversions) changed from 0x9c88bd05 to 0xc7de0d1c [C] 'function int v4l2_ctrl_subdev_subscribe_event(v4l2_subdev*, v4l2_fh*, v4l2_event_subscription*)' at v4l2-ctrls.c:4409:1 has some sub-type changes: CRC value (modversions) changed from 0xe9e73a79 to 0x3f72e778 [C] 'function int v4l2_ctrl_subscribe_event(v4l2_fh*, const v4l2_event_subscription*)' at v4l2-ctrls.c:4400:1 has some sub-type changes: CRC value (modversions) changed from 0xe7f7928f to 0xd466a907 [C] 'function void v4l2_device_disconnect(v4l2_device*)' at v4l2-device.c:76:1 has some sub-type changes: CRC value (modversions) changed from 0x94ed981f to 0x21f6b9fa [C] 'function int v4l2_device_put(v4l2_device*)' at v4l2-device.h:82:1 has some sub-type changes: CRC value (modversions) changed from 0x20653540 to 0xace50483 [C] 'function int v4l2_device_register(device*, v4l2_device*)' at v4l2-device.c:17:1 has some sub-type changes: CRC value (modversions) changed from 0x6da301de to 0x197782ae [C] 'function int v4l2_device_register_subdev(v4l2_device*, v4l2_subdev*)' at v4l2-device.c:111:1 has some sub-type changes: CRC value (modversions) changed from 0xdfe3e3f6 to 0xb4082d76 [C] 'function int v4l2_device_register_subdev_nodes(v4l2_device*)' at v4l2-device.c:192:1 has some sub-type changes: CRC value (modversions) changed from 0xff43d006 to 0x4ab284dc [C] 'function int v4l2_device_set_name(v4l2_device*, const char*, atomic_t*)' at v4l2-device.c:60:1 has some sub-type changes: CRC value (modversions) changed from 0xeaa35d54 to 0xddca2d82 [C] 'function void v4l2_device_unregister(v4l2_device*)' at v4l2-device.c:88:1 has some sub-type changes: CRC value (modversions) changed from 0xd4c97d65 to 0xc75ede56 [C] 'function void v4l2_device_unregister_subdev(v4l2_subdev*)' at v4l2-device.c:260:1 has some sub-type changes: CRC value (modversions) changed from 0xd44c1843 to 0x1b69f5be [C] 'function int v4l2_event_dequeue(v4l2_fh*, v4l2_event*, int)' at v4l2-event.h:91:1 has some sub-type changes: CRC value (modversions) changed from 0x9a7461d5 to 0x272a4fa3 [C] 'function int v4l2_event_pending(v4l2_fh*)' at v4l2-event.c:181:1 has some sub-type changes: CRC value (modversions) changed from 0x680f2f23 to 0x88005694 [C] 'function void v4l2_event_queue(video_device*, const v4l2_event*)' at v4l2-event.c:150:1 has some sub-type changes: CRC value (modversions) changed from 0x125a8278 to 0x712d37f1 [C] 'function void v4l2_event_queue_fh(v4l2_fh*, const v4l2_event*)' at v4l2-event.c:170:1 has some sub-type changes: CRC value (modversions) changed from 0x7ca80ea7 to 0xe0c6163e [C] 'function int v4l2_event_subdev_unsubscribe(v4l2_subdev*, v4l2_fh*, v4l2_event_subscription*)' at v4l2-event.c:312:1 has some sub-type changes: CRC value (modversions) changed from 0xe18d9643 to 0xdaa45436 [C] 'function int v4l2_event_subscribe(v4l2_fh*, const v4l2_event_subscription*, unsigned int, const v4l2_subscribed_event_ops*)' at v4l2-event.c:203:1 has some sub-type changes: CRC value (modversions) changed from 0xb25c5549 to 0x35101329 [C] 'function int v4l2_event_unsubscribe(v4l2_fh*, const v4l2_event_subscription*)' at v4l2-event.c:280:1 has some sub-type changes: CRC value (modversions) changed from 0x85377ec2 to 0x4bdf85c2 [C] 'function void v4l2_fh_add(v4l2_fh*)' at v4l2-fh.c:44:1 has some sub-type changes: CRC value (modversions) changed from 0x88eab7f2 to 0xd2401750 [C] 'function void v4l2_fh_del(v4l2_fh*)' at v4l2-fh.c:69:1 has some sub-type changes: CRC value (modversions) changed from 0x1c288392 to 0x1eac0fe7 [C] 'function void v4l2_fh_exit(v4l2_fh*)' at v4l2-fh.c:80:1 has some sub-type changes: CRC value (modversions) changed from 0x664e5881 to 0xa4f08fa9 [C] 'function void v4l2_fh_init(v4l2_fh*, video_device*)' at v4l2-fh.c:21:1 has some sub-type changes: CRC value (modversions) changed from 0xe5bc581 to 0xbd87d3e1 [C] 'function int v4l2_fh_open(file*)' at v4l2-fh.c:55:1 has some sub-type changes: CRC value (modversions) changed from 0x2b3a00 to 0x5115c927 [C] 'function int v4l2_fh_release(file*)' at v4l2-fh.c:91:1 has some sub-type changes: CRC value (modversions) changed from 0x5882ae0e to 0xe2f3822b [C] 'function int v4l2_g_ctrl(v4l2_ctrl_handler*, v4l2_control*)' at v4l2-ctrls.h:1250:1 has some sub-type changes: CRC value (modversions) changed from 0x20b0c8b6 to 0x9a5a6cc4 [C] 'function v4l2_subdev* v4l2_i2c_new_subdev(v4l2_device*, i2c_adapter*, const char*, u8, const unsigned short int*)' at v4l2-i2c.c:119:1 has some sub-type changes: CRC value (modversions) changed from 0x93e0dd8d to 0x1fc99012 [C] 'function void v4l2_i2c_subdev_init(v4l2_subdev*, i2c_client*, const v4l2_subdev_ops*)' at v4l2-i2c.c:45:1 has some sub-type changes: CRC value (modversions) changed from 0x163829ca to 0x948682da [C] 'function int v4l2_s_ctrl(v4l2_fh*, v4l2_ctrl_handler*, v4l2_control*)' at v4l2-ctrls.h:1263:1 has some sub-type changes: CRC value (modversions) changed from 0xf8e556c7 to 0xea8be02f [C] 'function v4l2_subdev* v4l2_spi_new_subdev(v4l2_device*, spi_controller*, spi_board_info*)' at v4l2-spi.c:36:1 has some sub-type changes: CRC value (modversions) changed from 0xfcafd8c1 to 0x5133f750 [C] 'function void v4l2_subdev_init(v4l2_subdev*, const v4l2_subdev_ops*)' at v4l2-subdev.c:777:1 has some sub-type changes: CRC value (modversions) changed from 0xc89ebb48 to 0xd8a3ff7b [C] 'function void vb2_buffer_done(vb2_buffer*, vb2_buffer_state)' at videobuf2-core.c:921:1 has some sub-type changes: CRC value (modversions) changed from 0xf3bf9299 to 0xa048626d [C] 'function int vb2_create_bufs(vb2_queue*, v4l2_create_buffers*)' at videobuf2-v4l2.c:691:1 has some sub-type changes: CRC value (modversions) changed from 0x7168026a to 0x2bbbcf86 [C] 'function int vb2_dqbuf(vb2_queue*, v4l2_buffer*, bool)' at videobuf2-v4l2.c:768:1 has some sub-type changes: CRC value (modversions) changed from 0x8d74a824 to 0xec31ae4b [C] 'function int vb2_expbuf(vb2_queue*, v4l2_exportbuffer*)' at videobuf2-v4l2.c:819:1 has some sub-type changes: CRC value (modversions) changed from 0xbdd181f to 0x7edc7ea2 [C] 'function int vb2_fop_mmap(file*, vm_area_struct*)' at videobuf2-v4l2.c:1026:1 has some sub-type changes: CRC value (modversions) changed from 0xd19f4cb to 0x7c66cbaa [C] 'function __poll_t vb2_fop_poll(file*, poll_table*)' at videobuf2-v4l2.c:1107:1 has some sub-type changes: CRC value (modversions) changed from 0x820b132f to 0x722bbca1 [C] 'function ssize_t vb2_fop_read(file*, char*, size_t, loff_t*)' at videobuf2-v4l2.c:1083:1 has some sub-type changes: CRC value (modversions) changed from 0x5498cc55 to 0x62796a49 [C] 'function int vb2_fop_release(file*)' at videobuf2-v4l2.c:1050:1 has some sub-type changes: CRC value (modversions) changed from 0x6fe28350 to 0x7f5de857 [C] 'function int vb2_ioctl_create_bufs(file*, void*, v4l2_create_buffers*)' at videobuf2-v4l2.c:927:1 has some sub-type changes: CRC value (modversions) changed from 0x6d5859f4 to 0xa980edc3 [C] 'function int vb2_ioctl_dqbuf(file*, void*, v4l2_buffer*)' at videobuf2-v4l2.c:984:1 has some sub-type changes: CRC value (modversions) changed from 0x9057cc75 to 0x1d656b15 [C] 'function int vb2_ioctl_expbuf(file*, void*, v4l2_exportbuffer*)' at videobuf2-v4l2.c:1014:1 has some sub-type changes: CRC value (modversions) changed from 0x832a9283 to 0xbf42e230 [C] 'function int vb2_ioctl_prepare_buf(file*, void*, v4l2_buffer*)' at videobuf2-v4l2.c:954:1 has some sub-type changes: CRC value (modversions) changed from 0x3bd04db to 0xf2df1602 [C] 'function int vb2_ioctl_qbuf(file*, void*, v4l2_buffer*)' at videobuf2-v4l2.c:974:1 has some sub-type changes: CRC value (modversions) changed from 0xd6b3a27f to 0xe872aa0a [C] 'function int vb2_ioctl_querybuf(file*, void*, v4l2_buffer*)' at videobuf2-v4l2.c:965:1 has some sub-type changes: CRC value (modversions) changed from 0x4d360184 to 0x23f6360b [C] 'function int vb2_ioctl_reqbufs(file*, void*, v4l2_requestbuffers*)' at videobuf2-v4l2.c:907:1 has some sub-type changes: CRC value (modversions) changed from 0xdb10f4b7 to 0xe96deca2 [C] 'function int vb2_ioctl_streamoff(file*, void*, v4l2_buf_type)' at videobuf2-v4l2.c:1004:1 has some sub-type changes: CRC value (modversions) changed from 0xdf1c3cb6 to 0xaeba3c7c [C] 'function int vb2_ioctl_streamon(file*, void*, v4l2_buf_type)' at videobuf2-v4l2.c:994:1 has some sub-type changes: CRC value (modversions) changed from 0x168e66b8 to 0xa39c8b7f [C] 'function int vb2_mmap(vb2_queue*, vm_area_struct*)' at videobuf2-core.c:2147:1 has some sub-type changes: CRC value (modversions) changed from 0xe6fd5781 to 0x5e23e69e [C] 'function void vb2_ops_wait_finish(vb2_queue*)' at videobuf2-v4l2.c:1156:1 has some sub-type changes: CRC value (modversions) changed from 0x3bba6198 to 0x1a91b756 [C] 'function void vb2_ops_wait_prepare(vb2_queue*)' at videobuf2-v4l2.c:1150:1 has some sub-type changes: CRC value (modversions) changed from 0xec7bf7b4 to 0x54686f2c [C] 'function void* vb2_plane_cookie(vb2_buffer*, unsigned int)' at videobuf2-core.c:912:1 has some sub-type changes: CRC value (modversions) changed from 0x3daa599c to 0xc49f40ba [C] 'function void* vb2_plane_vaddr(vb2_buffer*, unsigned int)' at videobuf2-core.c:902:1 has some sub-type changes: CRC value (modversions) changed from 0x5ba8f74f to 0x5a5cc52b [C] 'function __poll_t vb2_poll(vb2_queue*, file*, poll_table*)' at videobuf2-v4l2.c:872:1 has some sub-type changes: CRC value (modversions) changed from 0xc38c0f15 to 0xfa25d0a1 [C] 'function int vb2_prepare_buf(vb2_queue*, media_device*, v4l2_buffer*)' at videobuf2-v4l2.c:672:1 has some sub-type changes: CRC value (modversions) changed from 0x88756c1e to 0x19f06cc7 [C] 'function int vb2_qbuf(vb2_queue*, media_device*, v4l2_buffer*)' at videobuf2-v4l2.c:747:1 has some sub-type changes: CRC value (modversions) changed from 0xda5060c3 to 0xa777fcae [C] 'function int vb2_querybuf(vb2_queue*, v4l2_buffer*)' at videobuf2-v4l2.c:626:1 has some sub-type changes: CRC value (modversions) changed from 0x63dfde61 to 0x1222dde [C] 'function void vb2_queue_error(vb2_queue*)' at videobuf2-core.c:2014:1 has some sub-type changes: CRC value (modversions) changed from 0xff16ef4f to 0xcfbfa2e7 [C] 'function int vb2_queue_init(vb2_queue*)' at videobuf2-v4l2.c:826:1 has some sub-type changes: CRC value (modversions) changed from 0xf2a2e78 to 0xce5b22fe [C] 'function void vb2_queue_release(vb2_queue*)' at videobuf2-v4l2.c:866:1 has some sub-type changes: CRC value (modversions) changed from 0x3e7ca1eb to 0xeadb5ecf [C] 'function int vb2_reqbufs(vb2_queue*, v4l2_requestbuffers*)' at videobuf2-v4l2.c:663:1 has some sub-type changes: CRC value (modversions) changed from 0xf03e5616 to 0x89d6c2ac [C] 'function bool vb2_request_object_is_buffer(media_request_object*)' at videobuf2-core.c:1397:1 has some sub-type changes: CRC value (modversions) changed from 0x8926c5d2 to 0x8caac54e [C] 'function int vb2_streamoff(vb2_queue*, v4l2_buf_type)' at videobuf2-v4l2.c:809:1 has some sub-type changes: CRC value (modversions) changed from 0x481f71c2 to 0x730fa48e [C] 'function int vb2_streamon(vb2_queue*, v4l2_buf_type)' at videobuf2-v4l2.c:799:1 has some sub-type changes: CRC value (modversions) changed from 0x499f745d to 0x429cab61 [C] 'function int vb2_wait_for_all_buffers(vb2_queue*)' at videobuf2-core.c:1773:1 has some sub-type changes: CRC value (modversions) changed from 0xf3c2b9b2 to 0x8308863c [C] 'function void vchan_dma_desc_free_list(virt_dma_chan*, list_head*)' at virt-dma.c:112:1 has some sub-type changes: CRC value (modversions) changed from 0x2fbb492c to 0x63230573 [C] 'function virt_dma_desc* vchan_find_desc(virt_dma_chan*, dma_cookie_t)' at virt-dma.c:66:1 has some sub-type changes: CRC value (modversions) changed from 0xb0ac72d9 to 0x116a5513 [C] 'function void vchan_init(virt_dma_chan*, dma_device*)' at virt-dma.c:128:1 has some sub-type changes: CRC value (modversions) changed from 0xb59dfab9 to 0xf54ec9cd [C] 'function int vchan_tx_desc_free(dma_async_tx_descriptor*)' at virt-dma.c:49:1 has some sub-type changes: CRC value (modversions) changed from 0x1c42c30c to 0x7ad306aa [C] 'function dma_cookie_t vchan_tx_submit(dma_async_tx_descriptor*)' at virt-dma.c:19:1 has some sub-type changes: CRC value (modversions) changed from 0x8082dfdb to 0x80d672e1 [C] 'function int vfs_create(inode*, dentry*, umode_t, bool)' at namei.c:2973:1 has some sub-type changes: CRC value (modversions) changed from 0x69fca267 to 0x35b69877 [C] 'function int vfs_fallocate(file*, int, long long int, long long int)' at fs.h:2602:1 has some sub-type changes: CRC value (modversions) changed from 0xc70d9226 to 0xfcf3852c [C] 'function int vfs_fsync(file*, int)' at sync.c:209:1 has some sub-type changes: CRC value (modversions) changed from 0x548e5aa8 to 0x9c6b1e95 [C] 'function int vfs_getattr(const path*, kstat*, u32, unsigned int)' at stat.c:110:1 has some sub-type changes: CRC value (modversions) changed from 0x377709a3 to 0xaaddef55 [C] 'function ssize_t vfs_getxattr(dentry*, const char*, void*, size_t)' at xattr.c:377:1 has some sub-type changes: CRC value (modversions) changed from 0x724e4419 to 0xbcdc0b47 [C] 'function int vfs_link(dentry*, inode*, dentry*, inode**)' at namei.c:4274:1 has some sub-type changes: CRC value (modversions) changed from 0x5bd7656f to 0x220717c5 [C] 'function ssize_t vfs_listxattr(dentry*, char*, size_t)' at xattr.c:384:1 has some sub-type changes: CRC value (modversions) changed from 0x96c07447 to 0x6db5691f [C] 'function long long int vfs_llseek(file*, long long int, int)' at fs.h:3092:1 has some sub-type changes: CRC value (modversions) changed from 0x4d6fc6e8 to 0x16a6f9b9 [C] 'function int vfs_mkdir(inode*, dentry*, umode_t)' at namei.c:3875:1 has some sub-type changes: CRC value (modversions) changed from 0xed09e3bc to 0x147cf530 [C] 'function int vfs_rename(inode*, dentry*, inode*, dentry*, inode**, unsigned int)' at namei.c:4470:1 has some sub-type changes: CRC value (modversions) changed from 0xcb08cf6a to 0xb48ea90b [C] 'function int vfs_rmdir(inode*, dentry*)' at namei.c:3936:1 has some sub-type changes: CRC value (modversions) changed from 0xe2dbb1f9 to 0x1499d18 [C] 'function int vfs_setxattr(dentry*, const char*, void*, unsigned long int, int)' at xattr.h:56:1 has some sub-type changes: CRC value (modversions) changed from 0x25d287f4 to 0x95113dc6 [C] 'function int vfs_unlink(inode*, dentry*, inode**)' at namei.c:4058:1 has some sub-type changes: CRC value (modversions) changed from 0x3c89734f to 0x6332ca57 [C] 'function video_device* video_devdata(file*)' at v4l2-dev.c:234:1 has some sub-type changes: CRC value (modversions) changed from 0x5cebc873 to 0xaaf26ab2 [C] 'function video_device* video_device_alloc()' at v4l2-dev.c:144:1 has some sub-type changes: CRC value (modversions) changed from 0xcf372ad8 to 0x81f705e2 [C] 'function void video_device_release(video_device*)' at v4l2-dev.c:150:1 has some sub-type changes: CRC value (modversions) changed from 0x1f18eb74 to 0x65b73b85 [C] 'function void video_device_release_empty(video_device*)' at v4l2-dev.c:156:1 has some sub-type changes: CRC value (modversions) changed from 0x366d07e4 to 0x635eeb11 [C] 'function long int video_ioctl2(file*, unsigned int, unsigned long int)' at v4l2-ioctl.c:3136:1 has some sub-type changes: CRC value (modversions) changed from 0x111fa4bb to 0xfee5b4c4 [C] 'function void video_unregister_device(video_device*)' at v4l2-dev.c:1042:1 has some sub-type changes: CRC value (modversions) changed from 0x8ebb5331 to 0x71acc8aa [C] 'function void virtio_break_device(virtio_device*)' at virtio_ring.c:2270:1 has some sub-type changes: CRC value (modversions) changed from 0x4baef303 to 0x534a30cf [C] 'function void virtio_check_driver_offered_feature(const virtio_device*, unsigned int)' at virtio.c:104:1 has some sub-type changes: CRC value (modversions) changed from 0x994d3cb6 to 0x2bca7580 [C] 'function void virtio_config_changed(virtio_device*)' at virtio.c:134:1 has some sub-type changes: CRC value (modversions) changed from 0x5bc1fe49 to 0xa2ec26c1 [C] 'function int virtio_device_freeze(virtio_device*)' at virtio.c:370:1 has some sub-type changes: CRC value (modversions) changed from 0x8140451a to 0x2a0ac926 [C] 'function int virtio_device_restore(virtio_device*)' at virtio.c:385:1 has some sub-type changes: CRC value (modversions) changed from 0xb4849078 to 0x9cb85c80 [C] 'function size_t virtio_max_dma_size(virtio_device*)' at virtio_ring.c:261:1 has some sub-type changes: CRC value (modversions) changed from 0x62503f2c to 0x2467925 [C] 'function int virtqueue_add_inbuf(virtqueue*, scatterlist*, unsigned int, void*, gfp_t)' at virtio_ring.c:1780:1 has some sub-type changes: CRC value (modversions) changed from 0xcea9276c to 0xa8d50446 [C] 'function int virtqueue_add_inbuf_ctx(virtqueue*, scatterlist*, unsigned int, void*, void*, gfp_t)' at virtio_ring.c:1803:1 has some sub-type changes: CRC value (modversions) changed from 0x20bc65fa to 0xd8add66 [C] 'function int virtqueue_add_outbuf(virtqueue*, scatterlist*, unsigned int, void*, gfp_t)' at virtio_ring.c:1758:1 has some sub-type changes: CRC value (modversions) changed from 0x1e2e5719 to 0x710f13bb [C] 'function int virtqueue_add_sgs(virtqueue*, scatterlist**, unsigned int, unsigned int, void*, gfp_t)' at virtio_ring.c:1724:1 has some sub-type changes: CRC value (modversions) changed from 0x46743696 to 0xd7d459bf [C] 'function void* virtqueue_detach_unused_buf(virtqueue*)' at virtio_ring.c:2018:1 has some sub-type changes: CRC value (modversions) changed from 0x3cddad6b to 0x7d3434f7 [C] 'function void virtqueue_disable_cb(virtqueue*)' at virtio_ring.c:1918:1 has some sub-type changes: CRC value (modversions) changed from 0x196745d5 to 0xdc2cc8ee [C] 'function bool virtqueue_enable_cb(virtqueue*)' at virtio_ring.c:1980:1 has some sub-type changes: CRC value (modversions) changed from 0x5175046c to 0x13eeae3d [C] 'function bool virtqueue_enable_cb_delayed(virtqueue*)' at virtio_ring.c:2001:1 has some sub-type changes: CRC value (modversions) changed from 0x2efd59aa to 0xa05ffb15 [C] 'function unsigned int virtqueue_enable_cb_prepare(virtqueue*)' at virtio_ring.c:1941:1 has some sub-type changes: CRC value (modversions) changed from 0x68ce5bde to 0xdf5ffad1 [C] 'function dma_addr_t virtqueue_get_avail_addr(virtqueue*)' at virtio_ring.c:2294:1 has some sub-type changes: CRC value (modversions) changed from 0xec0c1e83 to 0x454aec57 [C] 'function void* virtqueue_get_buf(virtqueue*, unsigned int*)' at virtio_ring.c:1904:1 has some sub-type changes: CRC value (modversions) changed from 0x56787cd4 to 0x8a984c92 [C] 'function void* virtqueue_get_buf_ctx(virtqueue*, unsigned int*, void**)' at virtio_ring.c:1894:1 has some sub-type changes: CRC value (modversions) changed from 0x75d0f315 to 0x22b8d1a5 [C] 'function dma_addr_t virtqueue_get_desc_addr(virtqueue*)' at virtio_ring.c:2281:1 has some sub-type changes: CRC value (modversions) changed from 0x8df1627d to 0xae55bd41 [C] 'function dma_addr_t virtqueue_get_used_addr(virtqueue*)' at virtio_ring.c:2308:1 has some sub-type changes: CRC value (modversions) changed from 0xa387b245 to 0x162e6c11 [C] 'function unsigned int virtqueue_get_vring_size(virtqueue*)' at virtio_ring.c:2249:1 has some sub-type changes: CRC value (modversions) changed from 0x87bc7a17 to 0x92d8f438 [C] 'function bool virtqueue_is_broken(virtqueue*)' at virtio_ring.c:2258:1 has some sub-type changes: CRC value (modversions) changed from 0x4fd1ebb4 to 0xdc4f45d4 [C] 'function bool virtqueue_kick(virtqueue*)' at virtio_ring.c:1869:1 has some sub-type changes: CRC value (modversions) changed from 0xab98ef37 to 0x15615918 [C] 'function bool virtqueue_kick_prepare(virtqueue*)' at virtio_ring.c:1824:1 has some sub-type changes: CRC value (modversions) changed from 0xb9bbe1a9 to 0xe29c92db [C] 'function bool virtqueue_notify(virtqueue*)' at virtio_ring.c:1841:1 has some sub-type changes: CRC value (modversions) changed from 0x54e1f803 to 0x37759b5f [C] 'function bool virtqueue_poll(virtqueue*, unsigned int)' at virtio_ring.c:1959:1 has some sub-type changes: CRC value (modversions) changed from 0xdfa87191 to 0x9501e518 [C] 'function int vm_insert_page(vm_area_struct*, unsigned long int, page*)' at memory.c:1503:1 has some sub-type changes: CRC value (modversions) changed from 0xbfa15751 to 0x842f99f6 [C] 'function int vm_iomap_memory(vm_area_struct*, phys_addr_t, unsigned long int)' at memory.c:1989:1 has some sub-type changes: CRC value (modversions) changed from 0xa1a67c8f to 0xd8f7c5e3 [C] 'function int vm_map_pages(vm_area_struct*, page**, unsigned long int)' at memory.c:1573:1 has some sub-type changes: CRC value (modversions) changed from 0x207b55b5 to 0xe9244e0d [C] 'function void* vm_map_ram(page**, unsigned int, int, pgprot_t)' at vmalloc.c:1778:1 has some sub-type changes: CRC value (modversions) changed from 0xc3eacd22 to 0x815b2861 [C] 'function unsigned long int vm_mmap(file*, unsigned long int, unsigned long int, unsigned long int, unsigned long int, unsigned long int)' at mm.h:2399:1 has some sub-type changes: CRC value (modversions) changed from 0x12c0ad00 to 0xc77d2729 [C] 'function page* vmalloc_to_page(void*)' at mm.h:645:1 has some sub-type changes: CRC value (modversions) changed from 0x25138dbe to 0xd30af32b [C] 'function void* vmap(page**, unsigned int, unsigned long int, pgprot_t)' at vmalloc.c:2370:1 has some sub-type changes: CRC value (modversions) changed from 0xbc54a3a5 to 0x32a7985a [C] 'function vm_fault_t vmf_insert_mixed(vm_area_struct*, unsigned long int, pfn_t)' at memory.c:1786:1 has some sub-type changes: CRC value (modversions) changed from 0x81a11f6b to 0x9420cbe1 [C] 'function vm_fault_t vmf_insert_pfn(vm_area_struct*, unsigned long int, unsigned long int)' at memory.c:1719:1 has some sub-type changes: CRC value (modversions) changed from 0xd62eaaae to 0x79411af9 [C] 'function vm_fault_t vmf_insert_pfn_prot(vm_area_struct*, unsigned long int, unsigned long int, pgprot_t)' at memory.c:1671:1 has some sub-type changes: CRC value (modversions) changed from 0xa0c45eeb to 0xdc302ab4 [C] 'function virtqueue* vring_create_virtqueue(unsigned int, unsigned int, unsigned int, virtio_device*, bool, bool, bool, typedef bool (virtqueue*)*, void (virtqueue*)*, const char*)' at virtio_ring.c:2131:1 has some sub-type changes: CRC value (modversions) changed from 0xfef20201 to 0x5f32e9cf [C] 'function void vring_del_virtqueue(virtqueue*)' at virtio_ring.c:2178:1 has some sub-type changes: CRC value (modversions) changed from 0x983fc22d to 0x490d14a9 [C] 'function virtqueue* vring_new_virtqueue(unsigned int, unsigned int, unsigned int, virtio_device*, bool, bool, void*, typedef bool (virtqueue*)*, void (virtqueue*)*, const char*)' at virtio_ring.c:2156:1 has some sub-type changes: CRC value (modversions) changed from 0x2663025d to 0x371bb2fc [C] 'function void vring_transport_features(virtio_device*)' at virtio_ring.c:2216:1 has some sub-type changes: CRC value (modversions) changed from 0xba308727 to 0x9c3b1567 [C] 'function int wake_up_process(task_struct*)' at sched.h:1709:1 has some sub-type changes: CRC value (modversions) changed from 0x58c2c8b3 to 0x2db79f54 [C] 'function void wakeup_source_add(wakeup_source*)' at wakeup.c:171:1 has some sub-type changes: CRC value (modversions) changed from 0xeedaad64 to 0x3c209c8e [C] 'function wakeup_source* wakeup_source_create(const char*)' at wakeup.c:84:1 has some sub-type changes: CRC value (modversions) changed from 0x53a187dd to 0xa25ecc7f [C] 'function void wakeup_source_destroy(wakeup_source*)' at wakeup.c:156:1 has some sub-type changes: CRC value (modversions) changed from 0x6449b80 to 0x321748b0 [C] 'function wakeup_source* wakeup_source_register(device*, const char*)' at pm_wakeup.h:92:1 has some sub-type changes: CRC value (modversions) changed from 0x85976605 to 0x11496fd3 [C] 'function void wakeup_source_remove(wakeup_source*)' at wakeup.c:192:1 has some sub-type changes: CRC value (modversions) changed from 0xa3e48dc0 to 0x4370ea6b [C] 'function void wakeup_source_unregister(wakeup_source*)' at pm_wakeup.h:94:1 has some sub-type changes: CRC value (modversions) changed from 0xe685ad4f to 0x22b3de5b [C] 'function int watchdog_init_timeout(watchdog_device*, unsigned int, device*)' at watchdog_core.c:110:1 has some sub-type changes: CRC value (modversions) changed from 0x8f2fd44 to 0xf66d87c [C] 'function int watchdog_register_device(watchdog_device*)' at watchdog_core.c:293:1 has some sub-type changes: CRC value (modversions) changed from 0x7b06d559 to 0xf5375c00 [C] 'function void watchdog_set_restart_priority(watchdog_device*, int)' at watchdog_core.c:198:1 has some sub-type changes: CRC value (modversions) changed from 0x8a99c049 to 0x612d80a8 [C] 'function void watchdog_unregister_device(watchdog_device*)' at watchdog_core.c:339:1 has some sub-type changes: CRC value (modversions) changed from 0x6c0974c9 to 0xa3505e4a [C] 'function void wiphy_apply_custom_regulatory(wiphy*, const ieee80211_regdomain*)' at reg.c:2340:1 has some sub-type changes: CRC value (modversions) changed from 0x41480241 to 0x403e5d81 [C] 'function void wiphy_free(wiphy*)' at core.c:1069:1 has some sub-type changes: CRC value (modversions) changed from 0xe0a7d501 to 0x6105e1da [C] 'function wiphy* wiphy_new_nm(const cfg80211_ops*, int, const char*)' at core.c:398:1 has some sub-type changes: CRC value (modversions) changed from 0xa20be18c to 0x9964f797 [C] 'function int wiphy_register(wiphy*)' at core.c:646:1 has some sub-type changes: CRC value (modversions) changed from 0x5451182d to 0x4077fd42 [C] 'function ieee80211_hw* wiphy_to_ieee80211_hw(wiphy*)' at util.c:39:1 has some sub-type changes: CRC value (modversions) changed from 0x1be93102 to 0x4cdf27ca [C] 'function void wiphy_unregister(wiphy*)' at core.c:997:1 has some sub-type changes: CRC value (modversions) changed from 0xd48119d7 to 0x6551c512 [C] 'function void would_dump(linux_binprm*, file*)' at binfmts.h:126:1 has some sub-type changes: CRC value (modversions) changed from 0x637af8fb to 0xcd30debd [C] 'function int write_inode_now(inode*, int)' at fs.h:2805:1 has some sub-type changes: CRC value (modversions) changed from 0xaa6f5722 to 0x11700006 [C] 'function int ww_mutex_lock(ww_mutex*, ww_acquire_ctx*)' at mutex.c:1433:1 has some sub-type changes: CRC value (modversions) changed from 0xc8292819 to 0xb6a10e86 [C] 'function int ww_mutex_lock_interruptible(ww_mutex*, ww_acquire_ctx*)' at mutex.c:1448:1 has some sub-type changes: CRC value (modversions) changed from 0xe18946a4 to 0x9647fa8f [C] 'function void ww_mutex_unlock(ww_mutex*)' at mutex.c:757:1 has some sub-type changes: CRC value (modversions) changed from 0x467d76a3 to 0xa80a3b0a [C] 'function xdp_frame* xdp_convert_zc_to_xdp_frame(xdp_buff*)' at xdp.h:94:1 has some sub-type changes: CRC value (modversions) changed from 0x65929a3f to 0x3eadc0c1 [C] 'function int xdp_do_redirect(net_device*, xdp_buff*, bpf_prog*)' at filter.h:974:1 has some sub-type changes: CRC value (modversions) changed from 0xbaab2a23 to 0xa1025cf3 [C] 'function void xdp_return_frame(xdp_frame*)' at xdp.h:128:1 has some sub-type changes: CRC value (modversions) changed from 0x48ede4a0 to 0xe0773e3e [C] 'function void xdp_return_frame_rx_napi(xdp_frame*)' at xdp.h:129:1 has some sub-type changes: CRC value (modversions) changed from 0x67296544 to 0x44eb833d [C] 'function int xdp_rxq_info_reg(xdp_rxq_info*, net_device*, unsigned int)' at xdp.h:147:1 has some sub-type changes: CRC value (modversions) changed from 0x6a757433 to 0x60e3840f [C] 'function int xdp_rxq_info_reg_mem_model(xdp_rxq_info*, xdp_mem_type, void*)' at xdp.h:152:1 has some sub-type changes: CRC value (modversions) changed from 0x361c388f to 0x506a3550 [C] 'function void xdp_rxq_info_unreg(xdp_rxq_info*)' at xdp.h:149:1 has some sub-type changes: CRC value (modversions) changed from 0x66046053 to 0x72b40595 [C] 'function int xfrm4_protocol_deregister(xfrm4_protocol*, unsigned char)' at xfrm.h:1582:1 has some sub-type changes: CRC value (modversions) changed from 0xa8aba372 to 0xbbfad3d3 [C] 'function int xfrm4_protocol_register(xfrm4_protocol*, unsigned char)' at xfrm.h:1581:1 has some sub-type changes: CRC value (modversions) changed from 0xf974c666 to 0x7690f68c [C] 'function int xfrm4_rcv(sk_buff*)' at xfrm4_input.c:173:1 has some sub-type changes: CRC value (modversions) changed from 0x2cd60571 to 0x9a418b69 [C] 'function int xfrm4_tunnel_deregister(xfrm_tunnel*, unsigned short int)' at xfrm.h:1584:1 has some sub-type changes: CRC value (modversions) changed from 0x6200d8a2 to 0x3a1598e2 [C] 'function int xfrm4_tunnel_register(xfrm_tunnel*, unsigned short int)' at xfrm.h:1583:1 has some sub-type changes: CRC value (modversions) changed from 0xb49c3969 to 0xff9ccf4 [C] 'function int xfrm6_find_1stfragopt(xfrm_state*, sk_buff*, u8**)' at xfrm6_output.c:19:1 has some sub-type changes: CRC value (modversions) changed from 0x124f201a to 0x1a1374ad [C] 'function int xfrm6_protocol_deregister(xfrm6_protocol*, unsigned char)' at xfrm.h:1597:1 has some sub-type changes: CRC value (modversions) changed from 0x62e1256d to 0x7334a1f3 [C] 'function int xfrm6_protocol_register(xfrm6_protocol*, unsigned char)' at xfrm.h:1596:1 has some sub-type changes: CRC value (modversions) changed from 0x8b388bfa to 0xd74fb251 [C] 'function int xfrm6_rcv(sk_buff*)' at xfrm6_input.c:79:1 has some sub-type changes: CRC value (modversions) changed from 0x921fa20f to 0xc6c8d888 [C] 'function int xfrm_init_state(xfrm_state*)' at xfrm.h:1548:1 has some sub-type changes: CRC value (modversions) changed from 0x42837073 to 0xf5d714c1 [C] 'function int xfrm_input(sk_buff*, int, unsigned int, int)' at xfrm.h:1549:1 has some sub-type changes: CRC value (modversions) changed from 0xb9267dc5 to 0xdf363c86 [C] 'function int xfrm_input_resume(sk_buff*, int)' at xfrm_input.c:753:1 has some sub-type changes: CRC value (modversions) changed from 0x8986f0d6 to 0xbf1adbff [C] 'function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int)' at dst.h:501:1 has some sub-type changes: CRC value (modversions) changed from 0x3488a692 to 0x461545a7 [C] 'function int xfrm_output_resume(sk_buff*, int)' at xfrm.h:1554:1 has some sub-type changes: CRC value (modversions) changed from 0x9726fc15 to 0x3b53e933 [C] 'function int xfrm_register_type(const xfrm_type*, unsigned short int)' at xfrm.h:409:1 has some sub-type changes: CRC value (modversions) changed from 0x4988fdb2 to 0x1ec789b5 [C] 'function xfrm_state* xfrm_state_alloc(net*)' at xfrm.h:1477:1 has some sub-type changes: CRC value (modversions) changed from 0xb6270568 to 0x50e8bb44 [C] 'function void xfrm_state_insert(xfrm_state*)' at xfrm.h:1493:1 has some sub-type changes: CRC value (modversions) changed from 0x53446ac3 to 0x4554c806 [C] 'function xfrm_state* xfrm_state_lookup(net*, unsigned int, const __anonymous_union__8*, unsigned int, unsigned char, unsigned short int)' at xfrm.h:1496:1 has some sub-type changes: CRC value (modversions) changed from 0x442e5067 to 0xd4d16160 [C] 'function void xfrm_unregister_type(const xfrm_type*, unsigned short int)' at xfrm.h:410:1 has some sub-type changes: CRC value (modversions) changed from 0xfe4d7124 to 0xfa896fcc [C] 'function nf_hook_ops* xt_hook_ops_alloc(const xt_table*, unsigned int (void*, sk_buff*, const nf_hook_state*)*)' at x_tables.h:449:1 has some sub-type changes: CRC value (modversions) changed from 0xc8bf0bb6 to 0x27265d76 [C] 'function int xt_register_match(xt_match*)' at x_tables.h:275:1 has some sub-type changes: CRC value (modversions) changed from 0xc180486 to 0xe79829a2 [C] 'function int xt_register_matches(xt_match*, unsigned int)' at x_tables.h:277:1 has some sub-type changes: CRC value (modversions) changed from 0x15ef843b to 0x79876bda [C] 'function int xt_register_target(xt_target*)' at x_tables.h:270:1 has some sub-type changes: CRC value (modversions) changed from 0x4c214a08 to 0xe588b18f [C] 'function int xt_register_targets(xt_target*, unsigned int)' at x_tables.h:272:1 has some sub-type changes: CRC value (modversions) changed from 0x8f757d8c to 0xe14bf81a [C] 'function void xt_unregister_match(xt_match*)' at x_tables.h:276:1 has some sub-type changes: CRC value (modversions) changed from 0x8935128e to 0xd71f706d [C] 'function void xt_unregister_matches(xt_match*, unsigned int)' at x_tables.h:278:1 has some sub-type changes: CRC value (modversions) changed from 0x355251c2 to 0x33bd8bbc [C] 'function void xt_unregister_target(xt_target*)' at x_tables.h:271:1 has some sub-type changes: CRC value (modversions) changed from 0x702cf07c to 0xbb5da3d9 [C] 'function void xt_unregister_targets(xt_target*, unsigned int)' at x_tables.h:273:1 has some sub-type changes: CRC value (modversions) changed from 0x4b348ae1 to 0x45d00697 46 Changed variables: [C] 'bus_type amba_bustype' was changed at bus.c:215:1: CRC value (modversions) changed from 0x172ce002 to 0x8d25b681 [C] 'neigh_table arp_tbl' was changed at arp.c:151:1: CRC value (modversions) changed from 0x8240aa21 to 0xb96157a8 [C] 'pglist_data contig_page_data' was changed at memblock.c:99:1: CRC value (modversions) changed from 0x2fc262a0 to 0xd03ce93a [C] 'bus_type cpu_subsys' was changed at cpu.c:128:1: CRC value (modversions) changed from 0xf96b2f7a to 0x835a2bf7 [C] 'freq_attr cpufreq_freq_attr_scaling_available_freqs' was changed at freq_table.c:272:1: CRC value (modversions) changed from 0x46949f29 to 0x2b289cfc [C] 'freq_attr cpufreq_freq_attr_scaling_boost_freqs' was changed at freq_table.c:284:1: CRC value (modversions) changed from 0xddf44c27 to 0xd030427e [C] 'freq_attr* cpufreq_generic_attr[2]' was changed at freq_table.c:287:1: CRC value (modversions) changed from 0xa957cd0a to 0xd9834618 [C] 'const crypto_type crypto_ablkcipher_type' was changed at ablkcipher.c:399:1: CRC value (modversions) changed from 0xff0d83b1 to 0x4cf3a9be [C] 'const vm_operations_struct drm_gem_cma_vm_ops' was changed at drm_gem_cma_helper.c:263:1: CRC value (modversions) changed from 0xe0b8e632 to 0x527e41c4 [C] 'bio_set fs_bio_set' was changed at bio.c:47:1: CRC value (modversions) changed from 0xef8ceca9 to 0xb7078948 [C] 'kobject* fs_kobj' was changed at namespace.c:77:1: CRC value (modversions) changed from 0xe645a506 to 0xe9043a21 [C] 'kobject* hypervisor_kobj' was changed at hypervisor.c:15:1: CRC value (modversions) changed from 0xdd27eca9 to 0xa73639f3 [C] 'device_type i2c_adapter_type' was changed at i2c-core-base.c:1181:1: CRC value (modversions) changed from 0xd55bfee9 to 0xba856263 [C] 'bus_type i2c_bus_type' was changed at i2c-core-base.c:502:1: CRC value (modversions) changed from 0x2fea1dcc to 0x7f72ac15 [C] 'net init_net' was changed at net_namespace.c:46:1: CRC value (modversions) changed from 0x39eb7d00 to 0x2f380940 [C] 'task_struct init_task' was changed at init_task.c:57:1: CRC value (modversions) changed from 0x141826d3 to 0x91fa4ff2 type of variable changed: type size hasn't changed there are data member changes: type 'struct thread_struct' of 'task_struct::thread' changed: type size hasn't changed 1 data member insertion: 'u64 thread_struct::android_vendor_data1', at offset 5248 (in bits) at processor.h:142:1 there are data member changes: 'unsigned int thread_struct::fpsimd_cpu' offset changed from 5248 to 5312 (in bits) (by +64 bits) 'void* thread_struct::sve_state' offset changed from 5312 to 5376 (in bits) (by +64 bits) 'unsigned int thread_struct::sve_vl' offset changed from 5376 to 5440 (in bits) (by +64 bits) 'unsigned int thread_struct::sve_vl_onexec' offset changed from 5408 to 5472 (in bits) (by +64 bits) 'unsigned long int thread_struct::fault_address' offset changed from 5440 to 5504 (in bits) (by +64 bits) 'unsigned long int thread_struct::fault_code' offset changed from 5504 to 5568 (in bits) (by +64 bits) 'debug_info thread_struct::debug' offset changed from 5568 to 5632 (in bits) (by +64 bits) 'ptrauth_keys thread_struct::keys_user' offset changed from 7744 to 7808 (in bits) (by +64 bits) 2888 impacted interfaces 2888 impacted interfaces [C] 'uts_namespace init_uts_ns' was changed at version.c:27:1: CRC value (modversions) changed from 0x25c367f0 to 0x2b87f688 [C] 'kobject* kernel_kobj' was changed at ksysfs.c:208:1: CRC value (modversions) changed from 0xfacd77dd to 0xab406b87 [C] 'kmem_cache* kmalloc_caches[2][14]' was changed at slab_common.c:1112:1: CRC value (modversions) changed from 0x7712ea95 to 0x2d898598 [C] 'neigh_table nd_tbl' was changed at ndisc.c:108:1: CRC value (modversions) changed from 0xb523ad5f to 0x6cffd2cb [C] 'const fwnode_operations of_fwnode_ops' was changed at property.c:1336:1: CRC value (modversions) changed from 0x371dda35 to 0xdfa31f7a [C] 'device_node* of_root' was changed at base.c:36:1: CRC value (modversions) changed from 0x73804f37 to 0xc22fa430 [C] 'const kernel_param_ops param_array_ops' was changed at params.c:484:1: CRC value (modversions) changed from 0x624b4683 to 0x65f2ed77 [C] 'const kernel_param_ops param_ops_bint' was changed at params.c:386:1: CRC value (modversions) changed from 0xde6d334f to 0xa02de4b [C] 'const kernel_param_ops param_ops_bool' was changed at params.c:305:1: CRC value (modversions) changed from 0x78df9efd to 0xacb073f9 [C] 'const kernel_param_ops param_ops_byte' was changed at params.c:236:1: CRC value (modversions) changed from 0xcc1c6166 to 0x18738c62 [C] 'const kernel_param_ops param_ops_charp' was changed at params.c:280:1: CRC value (modversions) changed from 0x1fb835d2 to 0x18019e26 [C] 'const kernel_param_ops param_ops_int' was changed at params.c:239:1: CRC value (modversions) changed from 0xd7a20459 to 0x37fe23a [C] 'const kernel_param_ops param_ops_long' was changed at params.c:241:1: CRC value (modversions) changed from 0x25d99360 to 0xf1b67e64 [C] 'const kernel_param_ops param_ops_string' was changed at params.c:512:1: CRC value (modversions) changed from 0x9bbcf0d2 to 0x216b7f7c [C] 'const kernel_param_ops param_ops_uint' was changed at params.c:240:1: CRC value (modversions) changed from 0xcad78dd to 0xd8c295d9 [C] 'const kernel_param_ops param_ops_ullong' was changed at params.c:243:1: CRC value (modversions) changed from 0xed523321 to 0x5785bc8f [C] 'const kernel_param_ops param_ops_ulong' was changed at params.c:242:1: CRC value (modversions) changed from 0xcfd7db25 to 0xc86e70d1 [C] 'const kernel_param_ops param_ops_ushort' was changed at params.c:238:1: CRC value (modversions) changed from 0x9e813e29 to 0x2456b187 [C] 'bus_type pci_bus_type' was changed at pci-driver.c:1655:1: CRC value (modversions) changed from 0xa4911049 to 0xc98cd171 [C] 'bus_type platform_bus_type' was changed at platform.c:1262:1: CRC value (modversions) changed from 0xa223b3b8 to 0x3130168c [C] 'const inode_operations simple_dir_inode_operations' was changed at libfs.c:239:1: CRC value (modversions) changed from 0x564775c6 to 0x937b82ac [C] 'const file_operations simple_dir_operations' was changed at libfs.c:229:1: CRC value (modversions) changed from 0x5d99be8d to 0x38f33915 [C] 'const dev_pm_ops snd_soc_pm_ops' was changed at soc-core.c:2231:1: CRC value (modversions) changed from 0xd09f34ce to 0x1a6f6c05 [C] 'softnet_data softnet_data' was changed at dev.c:278:1: CRC value (modversions) changed from 0x55cca502 to 0x146f8750 [C] 'bus_type spi_bus_type' was changed at spi.c:377:1: CRC value (modversions) changed from 0x884f2f2e to 0xe930209e [C] 'const ttm_mem_type_manager_func ttm_bo_manager_func' was changed at ttm_bo_manager.c:149:1: CRC value (modversions) changed from 0xb331b7f1 to 0xa2f152a3 [C] 'const dev_pm_ops usb_hcd_pci_pm_ops' was changed at hcd-pci.c:602:1: CRC value (modversions) changed from 0x46cf20fb to 0xca4b925f [C] 'const v4l2_subdev_ops v4l2_subdev_call_wrappers' was changed at v4l2-subdev.c:321:1: CRC value (modversions) changed from 0x28933f13 to 0x68d1846c [C] 'const vm_operations_struct vb2_common_vm_ops' was changed at videobuf2-memops.c:122:1: CRC value (modversions) changed from 0x94da822c to 0xd6a3c37e [C] 'page* vmemmap' was changed at init.c:56:1: CRC value (modversions) changed from 0x7a869894 to 0x5e1d328d 'struct task_struct at sched.h:636:1' changed (indirectly): details were reported earlier 'struct thread_struct at processor.h:127:1' changed: details were reported earlier 'struct ufs_hba_variant_ops at ufshcd.h:336:1' changed: type size changed from 1664 to 1728 (in bits) 1 data member insertion: 'void (ufs_hba*, int, typedef bool)* ufs_hba_variant_ops::compl_xfer_req', at offset 704 (in bits) at ufshcd.h:355:1 there are data member changes: 'void (ufs_hba*, int, typedef u8)* ufs_hba_variant_ops::setup_task_mgmt' offset changed from 704 to 768 (in bits) (by +64 bits) 'void (ufs_hba*, enum uic_cmd_dme, enum ufs_notify_change_status)* ufs_hba_variant_ops::hibern8_notify' offset changed from 768 to 832 (in bits) (by +64 bits) 'int (ufs_hba*)* ufs_hba_variant_ops::apply_dev_quirks' offset changed from 832 to 896 (in bits) (by +64 bits) 'void (ufs_hba*)* ufs_hba_variant_ops::fixup_dev_quirks' offset changed from 896 to 960 (in bits) (by +64 bits) 'int (ufs_hba*, enum ufs_pm_op)* ufs_hba_variant_ops::suspend' offset changed from 960 to 1024 (in bits) (by +64 bits) 'int (ufs_hba*, enum ufs_pm_op)* ufs_hba_variant_ops::resume' offset changed from 1024 to 1088 (in bits) (by +64 bits) 'void (ufs_hba*)* ufs_hba_variant_ops::dbg_register_dump' offset changed from 1088 to 1152 (in bits) (by +64 bits) 'int (ufs_hba*)* ufs_hba_variant_ops::phy_initialization' offset changed from 1152 to 1216 (in bits) (by +64 bits) 'void (ufs_hba*)* ufs_hba_variant_ops::device_reset' offset changed from 1216 to 1280 (in bits) (by +64 bits) 'int (ufs_hba*, const ufs_crypto_cfg_entry*, int)* ufs_hba_variant_ops::program_key' offset changed from 1280 to 1344 (in bits) (by +64 bits) 'void (ufs_hba*, devfreq_dev_profile*, void*)* ufs_hba_variant_ops::config_scaling_param' offset changed from 1344 to 1408 (in bits) (by +64 bits) 'u64 ufs_hba_variant_ops::android_kabi_reserved1' offset changed from 1408 to 1472 (in bits) (by +64 bits) 'u64 ufs_hba_variant_ops::android_kabi_reserved2' offset changed from 1472 to 1536 (in bits) (by +64 bits) 'u64 ufs_hba_variant_ops::android_kabi_reserved3' offset changed from 1536 to 1600 (in bits) (by +64 bits) 'u64 ufs_hba_variant_ops::android_kabi_reserved4' offset changed from 1600 to 1664 (in bits) (by +64 bits) 19 impacted interfaces Bug: 149632552 Signed-off-by: Todd Kjos Change-Id: I72428c5519a70c84e8f7b381a964803fcb875c06 --- android/abi_gki_aarch64.xml | 10362 +++++++++++++++++----------------- 1 file changed, 5210 insertions(+), 5152 deletions(-) diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index bacba8717576..928cd2b66ce4 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -2,13 +2,13 @@ - - + + - - + + - + @@ -23,32 +23,32 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - - - + + + + + - + @@ -56,66 +56,66 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - + - - - - + + + + - - + + - + - - - - - + + + + + - - + + - + - - + + @@ -125,137 +125,137 @@ - + - - - - - - - - + + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - - - + + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - + + + + + - - - - + + + + - + - + - - + + - + - + - - - + + + - + - + - - - - - - - - - + + + + + + + + + @@ -282,15 +282,15 @@ - - - + + + - + @@ -298,291 +298,291 @@ - + - - - - + + + + - + - - - - - - + + + + + + - + - + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - + - - - - - - - + + + + + + + - - + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - - - - - - - - + + + + + + + + + - + - - - + + + @@ -590,73 +590,73 @@ - + - - + + - + - - + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - + + - + - - - - + + + + - - + + - - + + - - + + - - - + + + @@ -668,358 +668,358 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1034,38 +1034,38 @@ - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -1074,408 +1074,408 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - - - - - - + + + + + + - - - - + + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - + + + + - + - + - + - + - + - - - + + + - - - - - - - - + + + + + + + + @@ -1490,130 +1490,130 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - + + + + - + @@ -1629,58 +1629,58 @@ - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + @@ -1693,10 +1693,10 @@ - - - - + + + + @@ -1705,328 +1705,328 @@ - + - - + + - - - + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - + + + - + - + - - - + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - + @@ -2044,25 +2044,25 @@ - - - - - + + + + + - - - + + + - - + + - - + + - - + + @@ -2078,80 +2078,80 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2173,97 +2173,97 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - + + + + + + @@ -2272,411 +2272,411 @@ - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - - - + + + - - - - + + + + - - - - + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2684,97 +2684,97 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - + @@ -2796,9 +2796,9 @@ - - - + + + @@ -2806,126 +2806,126 @@ - - - - - - + + + + + + - + - + - - - + + + - - + + - + - + - - - + + + - - - - + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - + - - + + @@ -2936,287 +2936,287 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - - + + - + - - - - + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - + - - - - + + + + - + - + - - - - - + + + + + - - - - - - - - + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3228,229 +3228,229 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3459,10 +3459,10 @@ - + - + @@ -3470,7 +3470,7 @@ - + @@ -3492,294 +3492,294 @@ - - - - + + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - + - + - - - - - - + + + + + + - + - + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - + - + - + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - + - - + + - - + + - - - + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - + @@ -3792,295 +3792,295 @@ - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - + - + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + - - - - + + + + - - + + - - + + @@ -4095,72 +4095,72 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -4189,85 +4189,85 @@ - + - + - + - + - - - + + + - + - + - - + + - - - + + + - - - + + + - + - + - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -4277,13 +4277,13 @@ - - + + - - - + + + @@ -4295,17 +4295,17 @@ - + - - + + - + - - + + @@ -4897,6 +4897,12 @@ + + + + + + @@ -4905,12 +4911,6 @@ - - - - - - @@ -9989,88 +9989,91 @@ - + - + - + - + - + - - - - + - + + + + - + - + - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -10088,21 +10091,21 @@ - + - + - + - + - + - + @@ -14435,8 +14438,8 @@ - - + + @@ -15136,14 +15139,6 @@ - - - - - - - - @@ -15163,20 +15158,6 @@ - - - - - - - - - - - - - - @@ -15952,7 +15933,7 @@ - + @@ -16321,7 +16302,7 @@ - + @@ -16423,7 +16404,7 @@ - + @@ -16892,7 +16873,7 @@ - + @@ -16905,10 +16886,10 @@ - + - + @@ -17284,7 +17265,7 @@ - + @@ -17649,7 +17630,7 @@ - + @@ -17968,10 +17949,10 @@ - + - + @@ -22738,10 +22719,10 @@ - + - + @@ -23119,7 +23100,7 @@ - + @@ -24105,7 +24086,7 @@ - + @@ -24724,7 +24705,7 @@ - + @@ -31830,7 +31811,7 @@ - + @@ -31851,7 +31832,7 @@ - + @@ -32251,7 +32232,7 @@ - + @@ -33235,7 +33216,7 @@ - + @@ -33493,10 +33474,10 @@ - + - + @@ -34502,7 +34483,7 @@ - + @@ -34528,7 +34509,7 @@ - + @@ -36169,7 +36150,7 @@ - + @@ -36691,6 +36672,14 @@ + + + + + + + + @@ -36767,7 +36756,7 @@ - + @@ -36780,7 +36769,7 @@ - + @@ -36794,7 +36783,7 @@ - + @@ -37028,10 +37017,10 @@ - + - + @@ -37100,10 +37089,10 @@ - + - + @@ -37145,18 +37134,18 @@ - + - + - + - + @@ -38639,6 +38628,7 @@ + @@ -38908,11 +38898,11 @@ - + - + @@ -38920,12 +38910,12 @@ - + - + @@ -38936,7 +38926,7 @@ - + @@ -38951,13 +38941,13 @@ - + - + @@ -38967,7 +38957,7 @@ - + @@ -38975,10 +38965,10 @@ - + - + @@ -38993,7 +38983,7 @@ - + @@ -39241,7 +39231,7 @@ - + @@ -39333,7 +39323,7 @@ - + @@ -41632,7 +41622,7 @@ - + @@ -41644,7 +41634,7 @@ - + @@ -41773,7 +41763,7 @@ - + @@ -42151,7 +42141,7 @@ - + @@ -42241,7 +42231,7 @@ - + @@ -42253,7 +42243,7 @@ - + @@ -42261,7 +42251,7 @@ - + @@ -42290,7 +42280,7 @@ - + @@ -42316,7 +42306,7 @@ - + @@ -44422,7 +44412,7 @@ - + @@ -44626,7 +44616,7 @@ - + @@ -44737,7 +44727,7 @@ - + @@ -44772,7 +44762,7 @@ - + @@ -44827,7 +44817,7 @@ - + @@ -44893,7 +44883,7 @@ - + @@ -44930,7 +44920,7 @@ - + @@ -45076,7 +45066,7 @@ - + @@ -45134,14 +45124,14 @@ - + - + @@ -45152,7 +45142,7 @@ - + @@ -46106,10 +46096,10 @@ - + - + @@ -46619,10 +46609,10 @@ - + - + @@ -46730,7 +46720,7 @@ - + @@ -46746,7 +46736,7 @@ - + @@ -46754,13 +46744,13 @@ - + - + @@ -47252,10 +47242,10 @@ - + - + @@ -47310,7 +47300,7 @@ - + @@ -47319,7 +47309,7 @@ - + @@ -47353,7 +47343,7 @@ - + @@ -47376,7 +47366,7 @@ - + @@ -47480,7 +47470,7 @@ - + @@ -47489,7 +47479,7 @@ - + @@ -47515,7 +47505,7 @@ - + @@ -47537,7 +47527,7 @@ - + @@ -47546,7 +47536,7 @@ - + @@ -47557,7 +47547,7 @@ - + @@ -47798,7 +47788,7 @@ - + @@ -47816,7 +47806,7 @@ - + @@ -47832,10 +47822,10 @@ - + - + @@ -49541,10 +49531,10 @@ - + - + @@ -49556,7 +49546,7 @@ - + @@ -50204,7 +50194,7 @@ - + @@ -50212,7 +50202,7 @@ - + @@ -50220,7 +50210,7 @@ - + @@ -50518,7 +50508,7 @@ - + @@ -50610,7 +50600,7 @@ - + @@ -50628,7 +50618,7 @@ - + @@ -50661,7 +50651,7 @@ - + @@ -50679,7 +50669,7 @@ - + @@ -50905,7 +50895,7 @@ - + @@ -51164,11 +51154,11 @@ - + - + @@ -51177,7 +51167,7 @@ - + @@ -51193,7 +51183,7 @@ - + @@ -51201,13 +51191,13 @@ - + - + @@ -51221,7 +51211,7 @@ - + @@ -51375,6 +51365,7 @@ + @@ -51475,7 +51466,7 @@ - + @@ -51483,7 +51474,7 @@ - + @@ -51717,31 +51708,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -51970,7 +51936,7 @@ - + @@ -51979,7 +51945,7 @@ - + @@ -51995,7 +51961,7 @@ - + @@ -52003,13 +51969,13 @@ - + - + @@ -52017,7 +51983,7 @@ - + @@ -52028,7 +51994,7 @@ - + @@ -52197,7 +52163,7 @@ - + @@ -52771,15 +52737,15 @@ - + - + - + @@ -52788,7 +52754,7 @@ - + @@ -52946,104 +52912,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -54244,6 +54112,14 @@ + + + + + + + + @@ -54271,7 +54147,7 @@ - + @@ -54602,6 +54478,799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -55546,6 +56215,17 @@ + + + + + + + + + + + @@ -56016,229 +56696,22 @@ - - - - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - @@ -56246,24 +56719,11 @@ - - - - - - - - - - - - - @@ -56299,11 +56759,6 @@ - - - - - @@ -56335,21 +56790,6 @@ - - - - - - - - - - - - - - - @@ -56403,61 +56843,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -57020,7 +57405,7 @@ - + @@ -57050,7 +57435,7 @@ - + @@ -57297,7 +57682,7 @@ - + @@ -59114,14 +59499,6 @@ - - - - - - - - @@ -59435,6 +59812,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -60779,6 +61179,7 @@ + @@ -61799,7 +62200,7 @@ - + @@ -61850,7 +62251,7 @@ - + @@ -61942,6 +62343,14 @@ + + + + + + + + @@ -62139,7 +62548,7 @@ - + @@ -65526,7 +65935,7 @@ - + @@ -65538,7 +65947,7 @@ - + @@ -67038,10 +67447,10 @@ - + - + @@ -67436,7 +67845,7 @@ - + @@ -68165,41 +68574,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -68232,38 +68606,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -68306,10 +68648,8 @@ - - @@ -68420,7 +68760,7 @@ - + @@ -68437,28 +68777,18 @@ - + - + - - - - - - + - - - - - - + - + @@ -68521,9 +68851,9 @@ - + - + @@ -68551,7 +68881,7 @@ - + @@ -68586,330 +68916,333 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69039,7 +69372,7 @@ - + @@ -69200,7 +69533,7 @@ - + @@ -69683,7 +70016,7 @@ - + @@ -70099,10 +70432,10 @@ - + - + @@ -70155,10 +70488,10 @@ - + - + @@ -70194,18 +70527,18 @@ - + - + - + - + - + @@ -70256,57 +70589,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70346,68 +70679,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70565,39 +70898,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -70689,50 +71022,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70766,7 +71099,7 @@ - + @@ -70898,11 +71231,11 @@ - + - + @@ -70937,7 +71270,7 @@ - + @@ -71240,26 +71573,26 @@ - + - + - + - + - + @@ -71517,7 +71850,7 @@ - + @@ -71529,7 +71862,7 @@ - + @@ -72489,13 +72822,6 @@ - - - - - - - @@ -72504,14 +72830,13 @@ - - - - - - - - + + + + + + + @@ -72660,14 +72985,14 @@ - + - + - + @@ -72677,7 +73002,7 @@ - + @@ -72706,7 +73031,7 @@ - + @@ -72715,7 +73040,7 @@ - + @@ -72724,12 +73049,12 @@ - + - + @@ -73069,7 +73394,7 @@ - + @@ -73079,20 +73404,20 @@ - + - + - + @@ -73108,72 +73433,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73186,7 +73511,7 @@ - + @@ -73202,7 +73527,7 @@ - + @@ -73246,7 +73571,7 @@ - + @@ -76767,17 +77092,6 @@ - - - - - - - - - - - @@ -76808,7 +77122,7 @@ - + @@ -76819,7 +77133,7 @@ - + @@ -76966,328 +77280,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -77326,13 +77319,6 @@ - - - - - - - @@ -77359,8 +77345,6 @@ - - @@ -77370,11 +77354,6 @@ - - - - - @@ -77614,6 +77593,23 @@ + + + + + + + + + + + + + + + + + @@ -81316,7 +81312,7 @@ - + @@ -82135,7 +82131,7 @@ - + @@ -82864,7 +82860,7 @@ - + @@ -83186,13 +83182,13 @@ - + - + @@ -84096,7 +84092,7 @@ - + @@ -84496,7 +84492,7 @@ - + @@ -84783,6 +84779,17 @@ + + + + + + + + + + + @@ -84803,6 +84810,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -85065,7 +85108,7 @@ - + @@ -85137,12 +85180,15 @@ - + - + - + + + + @@ -85181,7 +85227,7 @@ - + @@ -85333,23 +85379,22 @@ - + + + + + + + - + - - - - - - - - - - + + + @@ -85502,7 +85547,7 @@ - + @@ -85518,10 +85563,10 @@ - + - + @@ -85529,7 +85574,7 @@ - + @@ -85548,10 +85593,10 @@ - + - + @@ -85596,9 +85641,9 @@ - + - + @@ -85795,11 +85840,11 @@ - + - + @@ -85808,7 +85853,7 @@ - + @@ -85842,13 +85887,13 @@ - + - + @@ -85862,7 +85907,7 @@ - + @@ -85910,7 +85955,7 @@ - + @@ -86057,7 +86102,7 @@ - + @@ -86105,7 +86150,7 @@ - + @@ -86284,7 +86329,7 @@ - + @@ -86296,15 +86341,15 @@ - + - + - + - + @@ -86321,7 +86366,7 @@ - + @@ -86452,7 +86497,7 @@ - + @@ -86466,14 +86511,6 @@ - - - - - - - - @@ -86574,7 +86611,7 @@ - + @@ -86589,7 +86626,7 @@ - + @@ -86641,34 +86678,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -86717,47 +86727,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -87342,7 +87316,7 @@ - + @@ -87359,6 +87333,17 @@ + + + + + + + + + + + @@ -88163,7 +88148,7 @@ - + @@ -88772,7 +88757,7 @@ - + @@ -88781,69 +88766,69 @@ - - - + + + - - - - + + + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + @@ -89225,7 +89210,7 @@ - + @@ -89234,7 +89219,7 @@ - + @@ -89250,7 +89235,7 @@ - + @@ -89258,7 +89243,7 @@ - + @@ -89286,7 +89271,7 @@ - + @@ -89294,7 +89279,7 @@ - + @@ -89925,7 +89910,7 @@ - + @@ -89947,7 +89932,7 @@ - + @@ -89959,7 +89944,7 @@ - + @@ -89967,7 +89952,7 @@ - + @@ -90830,7 +90815,7 @@ - + @@ -91056,7 +91041,7 @@ - + @@ -91074,7 +91059,7 @@ - + @@ -91788,10 +91773,10 @@ - + - + @@ -92209,10 +92194,10 @@ - + - + @@ -92257,7 +92242,7 @@ - + @@ -92281,7 +92266,7 @@ - + @@ -92388,7 +92373,7 @@ - + @@ -92409,7 +92394,7 @@ - + @@ -93561,7 +93546,7 @@ - + @@ -94354,7 +94339,7 @@ - + @@ -94401,7 +94386,7 @@ - + @@ -94618,7 +94603,7 @@ - + @@ -94651,7 +94636,7 @@ - + @@ -98860,7 +98845,7 @@ - + @@ -99995,7 +99980,7 @@ - + @@ -100103,7 +100088,7 @@ - + @@ -100120,7 +100105,7 @@ - + @@ -102487,7 +102472,6 @@ - @@ -102726,7 +102710,7 @@ - + @@ -102743,7 +102727,7 @@ - + @@ -103210,10 +103194,10 @@ - + - + @@ -103237,10 +103221,10 @@ - + - + @@ -103352,7 +103336,7 @@ - + @@ -103520,20 +103504,6 @@ - - - - - - - - - - - - - - @@ -103638,13 +103608,13 @@ - + - + @@ -103774,7 +103744,7 @@ - + @@ -103799,17 +103769,6 @@ - - - - - - - - - - - @@ -104068,6 +104027,20 @@ + + + + + + + + + + + + + + @@ -104112,6 +104085,14 @@ + + + + + + + + @@ -104158,6 +104139,17 @@ + + + + + + + + + + + @@ -104300,14 +104292,6 @@ - - - - - - - - @@ -104490,11 +104474,6 @@ - - - - - @@ -104560,7 +104539,7 @@ - + @@ -104571,7 +104550,7 @@ - + @@ -104720,7 +104699,7 @@ - + @@ -104761,6 +104740,17 @@ + + + + + + + + + + + @@ -105161,7 +105151,7 @@ - + @@ -105241,15 +105231,15 @@ - + - + - + @@ -105378,7 +105368,7 @@ - + @@ -105441,7 +105431,7 @@ - + @@ -106016,7 +106006,7 @@ - + @@ -106035,6 +106025,22 @@ + + + + + + + + + + + + + + + + @@ -106184,7 +106190,7 @@ - + @@ -106199,43 +106205,35 @@ - + - + - + - + - + + + + - + - + - - - - - - - - - - - - + @@ -106263,42 +106261,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -106336,11 +106299,6 @@ - - - - - @@ -106918,7 +106876,7 @@ - + @@ -106988,7 +106946,7 @@ - + @@ -106996,7 +106954,7 @@ - + @@ -107010,7 +106968,7 @@ - + @@ -107018,7 +106976,7 @@ - + @@ -107026,7 +106984,7 @@ - + @@ -107034,7 +106992,7 @@ - + @@ -107051,7 +107009,7 @@ - + @@ -107059,7 +107017,7 @@ - + @@ -107070,7 +107028,7 @@ - + @@ -107918,10 +107876,10 @@ - + - + @@ -108090,7 +108048,7 @@ - + @@ -108100,7 +108058,7 @@ - + @@ -108798,7 +108756,7 @@ - + @@ -108806,7 +108764,7 @@ - + @@ -108814,7 +108772,7 @@ - + @@ -108822,7 +108780,7 @@ - + @@ -108830,7 +108788,7 @@ - + @@ -108838,7 +108796,7 @@ - + @@ -108906,7 +108864,7 @@ - + @@ -109075,6 +109033,9 @@ + + + @@ -109135,7 +109096,7 @@ - + @@ -109153,7 +109114,7 @@ - + @@ -109189,7 +109150,7 @@ - + @@ -109198,7 +109159,7 @@ - + @@ -109254,6 +109215,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -109675,6 +109668,8 @@ + + @@ -109694,6 +109689,7 @@ + @@ -109828,9 +109824,6 @@ - - - @@ -109864,39 +109857,40 @@ - + + + + + + + + + - - - - - - - - - - - - - - - - + - + - + - + - + + + + + + + + + + - @@ -109923,6 +109917,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -110019,10 +110070,10 @@ - + - + @@ -110044,10 +110095,10 @@ - + - + @@ -110174,41 +110225,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -110284,11 +110311,6 @@ - - - - - @@ -110401,15 +110423,9 @@ - - - - - - @@ -110463,36 +110479,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -110500,39 +110487,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -110541,12 +110496,8 @@ - - - - @@ -110557,7 +110508,7 @@ - + @@ -110565,7 +110516,7 @@ - + @@ -110654,6 +110605,12 @@ + + + + + + @@ -110704,12 +110661,73 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -110724,7 +110742,7 @@ - + @@ -110822,7 +110840,7 @@ - + @@ -110870,6 +110888,8 @@ + + @@ -110884,14 +110904,19 @@ + + + + + @@ -111018,17 +111043,6 @@ - - - - - - - - - - - @@ -111062,17 +111076,6 @@ - - - - - - - - - - - @@ -111081,7 +111084,7 @@ - + @@ -111438,17 +111441,6 @@ - - - - - - - - - - - @@ -111463,11 +111455,6 @@ - - - - - @@ -111484,15 +111471,39 @@ - + - + - + + + + + + - + + + + + + + + + + + + + + + + + + + + @@ -113090,7 +113101,7 @@ - + @@ -113109,10 +113120,10 @@ - + - + @@ -113120,7 +113131,7 @@ - + @@ -114711,7 +114722,7 @@ - + @@ -114723,7 +114734,7 @@ - + @@ -116239,7 +116250,7 @@ - + @@ -116247,7 +116258,7 @@ - + @@ -116255,7 +116266,7 @@ - + @@ -116263,7 +116274,7 @@ - + @@ -116271,7 +116282,7 @@ - + @@ -116279,18 +116290,21 @@ - + - + - + - + + + + - + @@ -116298,7 +116312,7 @@ - + @@ -116309,7 +116323,7 @@ - + @@ -116320,7 +116334,7 @@ - + @@ -116328,7 +116342,7 @@ - + @@ -117142,10 +117156,10 @@ - + - + @@ -117281,10 +117295,10 @@ - + - + @@ -117778,6 +117792,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -117860,17 +117929,6 @@ - - - - - - - - - - - @@ -118012,7 +118070,7 @@ - + @@ -118037,13 +118095,13 @@ - + - + @@ -118167,7 +118225,7 @@ - + @@ -118227,13 +118285,13 @@ - + - + @@ -118268,7 +118326,7 @@ - + @@ -118969,17 +119027,17 @@ - + - + - + @@ -119032,7 +119090,7 @@ - + @@ -119060,22 +119118,22 @@ - + - + - + - + - + @@ -119083,7 +119141,7 @@ - + @@ -119091,7 +119149,7 @@ - + @@ -119099,7 +119157,7 @@ - + @@ -119122,7 +119180,7 @@ - + @@ -120075,7 +120133,7 @@ - + @@ -120243,7 +120301,7 @@ - + @@ -120927,7 +120985,7 @@ - + @@ -121044,10 +121102,10 @@ - + - + @@ -121132,10 +121190,10 @@ - + - + @@ -122005,7 +122063,7 @@ - + @@ -123219,7 +123277,7 @@ - + @@ -123915,7 +123973,7 @@ - + From 582ee2cb6f905d5d3eaccfeda7adbbd4d782397b Mon Sep 17 00:00:00 2001 From: Steve French Date: Thu, 16 Jul 2020 00:34:21 -0500 Subject: [PATCH 298/448] smb3: warn on confusing error scenario with sec=krb5 commit 0a018944eee913962bce8ffebbb121960d5125d9 upstream. When mounting with Kerberos, users have been confused about the default error returned in scenarios in which either keyutils is not installed or the user did not properly acquire a krb5 ticket. Log a warning message in the case that "ENOKEY" is returned from the get_spnego_key upcall so that users can better understand why mount failed in those two cases. CC: Stable Signed-off-by: Steve French Signed-off-by: Greg Kroah-Hartman --- fs/cifs/smb2pdu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 06b1a86d76b1..7ff05c06f2a4 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c @@ -1323,6 +1323,8 @@ SMB2_auth_kerberos(struct SMB2_sess_data *sess_data) spnego_key = cifs_get_spnego_key(ses); if (IS_ERR(spnego_key)) { rc = PTR_ERR(spnego_key); + if (rc == -ENOKEY) + cifs_dbg(VFS, "Verify user has a krb5 ticket and keyutils is installed\n"); spnego_key = NULL; goto out; } From a11f42496ac80813d94b30d51868d4610bb5e5d9 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Fri, 24 Jul 2020 22:44:41 +0200 Subject: [PATCH 299/448] genirq/affinity: Make affinity setting if activated opt-in commit f0c7baca180046824e07fc5f1326e83a8fd150c7 upstream. John reported that on a RK3288 system the perf per CPU interrupts are all affine to CPU0 and provided the analysis: "It looks like what happens is that because the interrupts are not per-CPU in the hardware, armpmu_request_irq() calls irq_force_affinity() while the interrupt is deactivated and then request_irq() with IRQF_PERCPU | IRQF_NOBALANCING. Now when irq_startup() runs with IRQ_STARTUP_NORMAL, it calls irq_setup_affinity() which returns early because IRQF_PERCPU and IRQF_NOBALANCING are set, leaving the interrupt on its original CPU." This was broken by the recent commit which blocked interrupt affinity setting in hardware before activation of the interrupt. While this works in general, it does not work for this particular case. As contrary to the initial analysis not all interrupt chip drivers implement an activate callback, the safe cure is to make the deferred interrupt affinity setting at activation time opt-in. Implement the necessary core logic and make the two irqchip implementations for which this is required opt-in. In hindsight this would have been the right thing to do, but ... Fixes: baedb87d1b53 ("genirq/affinity: Handle affinity setting on inactive interrupts correctly") Reported-by: John Keeping Signed-off-by: Thomas Gleixner Tested-by: Marc Zyngier Acked-by: Marc Zyngier Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/87blk4tzgm.fsf@nanos.tec.linutronix.de Signed-off-by: Greg Kroah-Hartman --- arch/x86/kernel/apic/vector.c | 4 ++++ drivers/irqchip/irq-gic-v3-its.c | 5 ++++- include/linux/irq.h | 13 +++++++++++++ kernel/irq/manage.c | 6 +++++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c index df4d5385e6dd..c8203694d9ce 100644 --- a/arch/x86/kernel/apic/vector.c +++ b/arch/x86/kernel/apic/vector.c @@ -554,6 +554,10 @@ static int x86_vector_alloc_irqs(struct irq_domain *domain, unsigned int virq, irqd->chip_data = apicd; irqd->hwirq = virq + i; irqd_set_single_target(irqd); + + /* Don't invoke affinity setter on deactivated interrupts */ + irqd_set_affinity_on_activate(irqd); + /* * Legacy vectors are already assigned when the IOAPIC * takes them over. They stay on the same vector. This is diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 263cf9240b16..7966b19ceba7 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -2581,6 +2581,7 @@ static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, msi_alloc_info_t *info = args; struct its_device *its_dev = info->scratchpad[0].ptr; struct its_node *its = its_dev->its; + struct irq_data *irqd; irq_hw_number_t hwirq; int err; int i; @@ -2600,7 +2601,9 @@ static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i, &its_irq_chip, its_dev); - irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq + i))); + irqd = irq_get_irq_data(virq + i); + irqd_set_single_target(irqd); + irqd_set_affinity_on_activate(irqd); pr_debug("ID:%d pID:%d vID:%d\n", (int)(hwirq + i - its_dev->event_map.lpi_base), (int)(hwirq + i), virq + i); diff --git a/include/linux/irq.h b/include/linux/irq.h index f8755e5fcd74..e9e69c511ea9 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -211,6 +211,8 @@ struct irq_data { * IRQD_CAN_RESERVE - Can use reservation mode * IRQD_MSI_NOMASK_QUIRK - Non-maskable MSI quirk for affinity change * required + * IRQD_AFFINITY_ON_ACTIVATE - Affinity is set on activation. Don't call + * irq_chip::irq_set_affinity() when deactivated. */ enum { IRQD_TRIGGER_MASK = 0xf, @@ -234,6 +236,7 @@ enum { IRQD_DEFAULT_TRIGGER_SET = (1 << 25), IRQD_CAN_RESERVE = (1 << 26), IRQD_MSI_NOMASK_QUIRK = (1 << 27), + IRQD_AFFINITY_ON_ACTIVATE = (1 << 29), }; #define __irqd_to_state(d) ACCESS_PRIVATE((d)->common, state_use_accessors) @@ -408,6 +411,16 @@ static inline bool irqd_msi_nomask_quirk(struct irq_data *d) return __irqd_to_state(d) & IRQD_MSI_NOMASK_QUIRK; } +static inline void irqd_set_affinity_on_activate(struct irq_data *d) +{ + __irqd_to_state(d) |= IRQD_AFFINITY_ON_ACTIVATE; +} + +static inline bool irqd_affinity_on_activate(struct irq_data *d) +{ + return __irqd_to_state(d) & IRQD_AFFINITY_ON_ACTIVATE; +} + #undef __irqd_to_state static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index df73685de114..3b1d0a4725a4 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -281,12 +281,16 @@ static bool irq_set_affinity_deactivated(struct irq_data *data, struct irq_desc *desc = irq_data_to_desc(data); /* + * Handle irq chips which can handle affinity only in activated + * state correctly + * * If the interrupt is not yet activated, just store the affinity * mask and do not call the chip driver at all. On activation the * driver has to make sure anyway that the interrupt is in a * useable state so startup works. */ - if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) || irqd_is_activated(data)) + if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) || + irqd_is_activated(data) || !irqd_affinity_on_activate(data)) return false; cpumask_copy(desc->irq_common_data.affinity, mask); From 72ba9d544e60ac25b89525924f3ec1ebb0791cb7 Mon Sep 17 00:00:00 2001 From: Guenter Roeck Date: Tue, 11 Aug 2020 11:00:01 -0700 Subject: [PATCH 300/448] genirq/PM: Always unlock IRQ descriptor in rearm_wake_irq() commit e27b1636e9337d1a1d174b191e53d0f86421a822 upstream. rearm_wake_irq() does not unlock the irq descriptor if the interrupt is not suspended or if wakeup is not enabled on it. Restucture the exit conditions so the unlock is always ensured. Fixes: 3a79bc63d9075 ("PCI: irq: Introduce rearm_wake_irq()") Signed-off-by: Guenter Roeck Signed-off-by: Thomas Gleixner Acked-by: Rafael J. Wysocki Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200811180001.80203-1-linux@roeck-us.net Signed-off-by: Greg Kroah-Hartman --- kernel/irq/pm.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 8f557fa1f4fe..c6c7e187ae74 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -185,14 +185,18 @@ void rearm_wake_irq(unsigned int irq) unsigned long flags; struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); - if (!desc || !(desc->istate & IRQS_SUSPENDED) || - !irqd_is_wakeup_set(&desc->irq_data)) + if (!desc) return; + if (!(desc->istate & IRQS_SUSPENDED) || + !irqd_is_wakeup_set(&desc->irq_data)) + goto unlock; + desc->istate &= ~IRQS_SUSPENDED; irqd_set(&desc->irq_data, IRQD_WAKEUP_ARMED); __enable_irq(desc); +unlock: irq_put_desc_busunlock(desc, flags); } From ae86233204bab50945c1c18b8664ddae00517748 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Fri, 26 Jun 2020 19:42:34 +0200 Subject: [PATCH 301/448] PCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context() commit dae68d7fd4930315389117e9da35b763f12238f9 upstream. If context is not NULL in acpiphp_grab_context(), but the is_going_away flag is set for the device's parent, the reference counter of the context needs to be decremented before returning NULL or the context will never be freed, so make that happen. Fixes: edf5bf34d408 ("ACPI / dock: Use callback pointers from devices' ACPI hotplug contexts") Reported-by: Vasily Averin Cc: 3.15+ # 3.15+ Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- drivers/pci/hotplug/acpiphp_glue.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index b3869951c0eb..6e60b4b1bf53 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@ -122,13 +122,21 @@ static struct acpiphp_context *acpiphp_grab_context(struct acpi_device *adev) struct acpiphp_context *context; acpi_lock_hp_context(); + context = acpiphp_get_context(adev); - if (!context || context->func.parent->is_going_away) { - acpi_unlock_hp_context(); - return NULL; + if (!context) + goto unlock; + + if (context->func.parent->is_going_away) { + acpiphp_put_context(context); + context = NULL; + goto unlock; } + get_bridge(context->func.parent); acpiphp_put_context(context); + +unlock: acpi_unlock_hp_context(); return context; } From d7caf80700f2a1865aa28a2a5966e04f777263f3 Mon Sep 17 00:00:00 2001 From: Kai-Heng Feng Date: Tue, 28 Jul 2020 18:45:53 +0800 Subject: [PATCH 302/448] PCI: Mark AMD Navi10 GPU rev 0x00 ATS as broken commit 45beb31d3afb651bb5c41897e46bd4fa9980c51c upstream. We are seeing AMD Radeon Pro W5700 doesn't work when IOMMU is enabled: iommu ivhd0: AMD-Vi: Event logged [IOTLB_INV_TIMEOUT device=63:00.0 address=0x42b5b01a0] iommu ivhd0: AMD-Vi: Event logged [IOTLB_INV_TIMEOUT device=63:00.0 address=0x42b5b01c0] The error also makes graphics driver fail to probe the device. It appears to be the same issue as commit 5e89cd303e3a ("PCI: Mark AMD Navi14 GPU rev 0xc5 ATS as broken") addresses, and indeed the same ATS quirk can workaround the issue. See-also: 5e89cd303e3a ("PCI: Mark AMD Navi14 GPU rev 0xc5 ATS as broken") See-also: d28ca864c493 ("PCI: Mark AMD Stoney Radeon R7 GPU ATS as broken") See-also: 9b44b0b09dec ("PCI: Mark AMD Stoney GPU ATS as broken") Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=208725 Link: https://lore.kernel.org/r/20200728104554.28927-1-kai.heng.feng@canonical.com Signed-off-by: Kai-Heng Feng Signed-off-by: Bjorn Helgaas Acked-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/pci/quirks.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 9bc0f321aaf0..c98067579e9f 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -5208,7 +5208,8 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0422, quirk_no_ext_tags); */ static void quirk_amd_harvest_no_ats(struct pci_dev *pdev) { - if (pdev->device == 0x7340 && pdev->revision != 0xc5) + if ((pdev->device == 0x7312 && pdev->revision != 0x00) || + (pdev->device == 0x7340 && pdev->revision != 0xc5)) return; pci_info(pdev, "disabling ATS\n"); @@ -5219,6 +5220,8 @@ static void quirk_amd_harvest_no_ats(struct pci_dev *pdev) DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_amd_harvest_no_ats); /* AMD Iceland dGPU */ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x6900, quirk_amd_harvest_no_ats); +/* AMD Navi10 dGPU */ +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x7312, quirk_amd_harvest_no_ats); /* AMD Navi14 dGPU */ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x7340, quirk_amd_harvest_no_ats); #endif /* CONFIG_PCI_ATS */ From 588d5cbf4de7a17ad0b99777256fe69436f1cad2 Mon Sep 17 00:00:00 2001 From: Rajat Jain Date: Mon, 6 Jul 2020 16:32:40 -0700 Subject: [PATCH 303/448] PCI: Add device even if driver attach failed commit 2194bc7c39610be7cabe7456c5f63a570604f015 upstream. device_attach() returning failure indicates a driver error while trying to probe the device. In such a scenario, the PCI device should still be added in the system and be visible to the user. When device_attach() fails, merely warn about it and keep the PCI device in the system. This partially reverts ab1a187bba5c ("PCI: Check device_attach() return value always"). Link: https://lore.kernel.org/r/20200706233240.3245512-1-rajatja@google.com Signed-off-by: Rajat Jain Signed-off-by: Bjorn Helgaas Reviewed-by: Greg Kroah-Hartman Cc: stable@vger.kernel.org # v4.6+ Signed-off-by: Greg Kroah-Hartman --- drivers/pci/bus.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 8e40b3e6da77..3cef835b375f 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -322,12 +322,8 @@ void pci_bus_add_device(struct pci_dev *dev) dev->match_driver = true; retval = device_attach(&dev->dev); - if (retval < 0 && retval != -EPROBE_DEFER) { + if (retval < 0 && retval != -EPROBE_DEFER) pci_warn(dev, "device attach failed (%d)\n", retval); - pci_proc_detach_device(dev); - pci_remove_sysfs_dev_files(dev); - return; - } pci_dev_assign_added(dev, true); } From 5956d3847502b7d50fdae170a077443b0078b88f Mon Sep 17 00:00:00 2001 From: Ansuel Smith Date: Mon, 15 Jun 2020 23:06:03 +0200 Subject: [PATCH 304/448] PCI: qcom: Define some PARF params needed for ipq8064 SoC commit 5149901e9e6deca487c01cc434a3ac4125c7b00b upstream. Set some specific value for Tx De-Emphasis, Tx Swing and Rx equalization needed on some ipq8064 based device (Netgear R7800 for example). Without this the system locks on kernel load. Link: https://lore.kernel.org/r/20200615210608.21469-8-ansuelsmth@gmail.com Fixes: 82a823833f4e ("PCI: qcom: Add Qualcomm PCIe controller driver") Signed-off-by: Ansuel Smith Signed-off-by: Lorenzo Pieralisi Reviewed-by: Rob Herring Acked-by: Stanimir Varbanov Cc: stable@vger.kernel.org # v4.5+ Signed-off-by: Greg Kroah-Hartman --- drivers/pci/controller/dwc/pcie-qcom.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index 70ded8900e28..aa88548a7057 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -76,6 +76,18 @@ #define DBI_RO_WR_EN 1 #define PERST_DELAY_US 1000 +/* PARF registers */ +#define PCIE20_PARF_PCS_DEEMPH 0x34 +#define PCS_DEEMPH_TX_DEEMPH_GEN1(x) ((x) << 16) +#define PCS_DEEMPH_TX_DEEMPH_GEN2_3_5DB(x) ((x) << 8) +#define PCS_DEEMPH_TX_DEEMPH_GEN2_6DB(x) ((x) << 0) + +#define PCIE20_PARF_PCS_SWING 0x38 +#define PCS_SWING_TX_SWING_FULL(x) ((x) << 8) +#define PCS_SWING_TX_SWING_LOW(x) ((x) << 0) + +#define PCIE20_PARF_CONFIG_BITS 0x50 +#define PHY_RX0_EQ(x) ((x) << 24) #define PCIE20_v3_PARF_SLV_ADDR_SPACE_SIZE 0x358 #define SLV_ADDR_SPACE_SZ 0x10000000 @@ -275,6 +287,7 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie) struct qcom_pcie_resources_2_1_0 *res = &pcie->res.v2_1_0; struct dw_pcie *pci = pcie->pci; struct device *dev = pci->dev; + struct device_node *node = dev->of_node; u32 val; int ret; @@ -319,6 +332,17 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie) val &= ~BIT(0); writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL); + if (of_device_is_compatible(node, "qcom,pcie-ipq8064")) { + writel(PCS_DEEMPH_TX_DEEMPH_GEN1(24) | + PCS_DEEMPH_TX_DEEMPH_GEN2_3_5DB(24) | + PCS_DEEMPH_TX_DEEMPH_GEN2_6DB(34), + pcie->parf + PCIE20_PARF_PCS_DEEMPH); + writel(PCS_SWING_TX_SWING_FULL(120) | + PCS_SWING_TX_SWING_LOW(120), + pcie->parf + PCIE20_PARF_PCS_SWING); + writel(PHY_RX0_EQ(4), pcie->parf + PCIE20_PARF_CONFIG_BITS); + } + /* enable external reference clock */ val = readl(pcie->parf + PCIE20_PARF_PHY_REFCLK); val |= BIT(16); From 7a6fc7c21962ce1e20f49f5370470ada75cc9701 Mon Sep 17 00:00:00 2001 From: Ansuel Smith Date: Mon, 15 Jun 2020 23:06:04 +0200 Subject: [PATCH 305/448] PCI: qcom: Add support for tx term offset for rev 2.1.0 commit de3c4bf648975ea0b1d344d811e9b0748907b47c upstream. Add tx term offset support to pcie qcom driver need in some revision of the ipq806x SoC. Ipq8064 needs tx term offset set to 7. Link: https://lore.kernel.org/r/20200615210608.21469-9-ansuelsmth@gmail.com Fixes: 82a823833f4e ("PCI: qcom: Add Qualcomm PCIe controller driver") Signed-off-by: Sham Muthayyan Signed-off-by: Ansuel Smith Signed-off-by: Lorenzo Pieralisi Acked-by: Stanimir Varbanov Cc: stable@vger.kernel.org # v4.5+ Signed-off-by: Greg Kroah-Hartman --- drivers/pci/controller/dwc/pcie-qcom.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index aa88548a7057..270d502b8cd5 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -45,7 +45,13 @@ #define PCIE_CAP_CPL_TIMEOUT_DISABLE 0x10 #define PCIE20_PARF_PHY_CTRL 0x40 +#define PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK GENMASK(20, 16) +#define PHY_CTRL_PHY_TX0_TERM_OFFSET(x) ((x) << 16) + #define PCIE20_PARF_PHY_REFCLK 0x4C +#define PHY_REFCLK_SSP_EN BIT(16) +#define PHY_REFCLK_USE_PAD BIT(12) + #define PCIE20_PARF_DBI_BASE_ADDR 0x168 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C #define PCIE20_PARF_MHI_CLOCK_RESET_CTRL 0x174 @@ -343,9 +349,18 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie) writel(PHY_RX0_EQ(4), pcie->parf + PCIE20_PARF_CONFIG_BITS); } + if (of_device_is_compatible(node, "qcom,pcie-ipq8064")) { + /* set TX termination offset */ + val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL); + val &= ~PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK; + val |= PHY_CTRL_PHY_TX0_TERM_OFFSET(7); + writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL); + } + /* enable external reference clock */ val = readl(pcie->parf + PCIE20_PARF_PHY_REFCLK); - val |= BIT(16); + val &= ~PHY_REFCLK_USE_PAD; + val |= PHY_REFCLK_SSP_EN; writel(val, pcie->parf + PCIE20_PARF_PHY_REFCLK); ret = reset_control_deassert(res->phy_reset); From 207659ef151c023c58226bafea5ebcd849638e2c Mon Sep 17 00:00:00 2001 From: David Sterba Date: Thu, 25 Jun 2020 12:35:28 +0200 Subject: [PATCH 306/448] btrfs: allow use of global block reserve for balance item deletion commit 3502a8c0dc1bd4b4970b59b06e348f22a1c05581 upstream. On a filesystem with exhausted metadata, but still enough to start balance, it's possible to hit this error: [324402.053842] BTRFS info (device loop0): 1 enospc errors during balance [324402.060769] BTRFS info (device loop0): balance: ended with status: -28 [324402.172295] BTRFS: error (device loop0) in reset_balance_state:3321: errno=-28 No space left It fails inside reset_balance_state and turns the filesystem to read-only, which is unnecessary and should be fixed too, but the problem is caused by lack for space when the balance item is deleted. This is a one-time operation and from the same rank as unlink that is allowed to use the global block reserve. So do the same for the balance item. Status of the filesystem (100GiB) just after the balance fails: $ btrfs fi df mnt Data, single: total=80.01GiB, used=38.58GiB System, single: total=4.00MiB, used=16.00KiB Metadata, single: total=19.99GiB, used=19.48GiB GlobalReserve, single: total=512.00MiB, used=50.11MiB CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Johannes Thumshirn Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/volumes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 1e6e3c1d97df..a9c84595fb24 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -3283,7 +3283,7 @@ static int insert_balance_item(struct btrfs_fs_info *fs_info, if (!path) return -ENOMEM; - trans = btrfs_start_transaction(root, 0); + trans = btrfs_start_transaction_fallback_global_rsv(root, 0); if (IS_ERR(trans)) { btrfs_free_path(path); return PTR_ERR(trans); From d2731ac13ca5a7addd4cd4fa65d3fae5463b795f Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Tue, 16 Jun 2020 10:17:37 +0800 Subject: [PATCH 307/448] btrfs: free anon block device right after subvolume deletion commit 082b6c970f02fefd278c7833880cda29691a5f34 upstream. [BUG] When a lot of subvolumes are created, there is a user report about transaction aborted caused by slow anonymous block device reclaim: BTRFS: Transaction aborted (error -24) WARNING: CPU: 17 PID: 17041 at fs/btrfs/transaction.c:1576 create_pending_snapshot+0xbc4/0xd10 [btrfs] RIP: 0010:create_pending_snapshot+0xbc4/0xd10 [btrfs] Call Trace: create_pending_snapshots+0x82/0xa0 [btrfs] btrfs_commit_transaction+0x275/0x8c0 [btrfs] btrfs_mksubvol+0x4b9/0x500 [btrfs] btrfs_ioctl_snap_create_transid+0x174/0x180 [btrfs] btrfs_ioctl_snap_create_v2+0x11c/0x180 [btrfs] btrfs_ioctl+0x11a4/0x2da0 [btrfs] do_vfs_ioctl+0xa9/0x640 ksys_ioctl+0x67/0x90 __x64_sys_ioctl+0x1a/0x20 do_syscall_64+0x5a/0x110 entry_SYSCALL_64_after_hwframe+0x44/0xa9 ---[ end trace 33f2f83f3d5250e9 ]--- BTRFS: error (device sda1) in create_pending_snapshot:1576: errno=-24 unknown BTRFS info (device sda1): forced readonly BTRFS warning (device sda1): Skipping commit of aborted transaction. BTRFS: error (device sda1) in cleanup_transaction:1831: errno=-24 unknown [CAUSE] The anonymous device pool is shared and its size is 1M. It's possible to hit that limit if the subvolume deletion is not fast enough and the subvolumes to be cleaned keep the ids allocated. [WORKAROUND] We can't avoid the anon device pool exhaustion but we can shorten the time the id is attached to the subvolume root once the subvolume becomes invisible to the user. Reported-by: Greed Rong Link: https://lore.kernel.org/linux-btrfs/CA+UqX+NTrZ6boGnWHhSeZmEY5J76CTqmYjO2S+=tHJX7nb9DPw@mail.gmail.com/ CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Josef Bacik Signed-off-by: Qu Wenruo Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index e408181a5eba..f265b746dc94 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4681,6 +4681,8 @@ int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry) } } + free_anon_bdev(dest->anon_dev); + dest->anon_dev = 0; out_end_trans: trans->block_rsv = NULL; trans->bytes_reserved = 0; From c16ba06f52040640ebb0be1a95f341bc41ebb9de Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Tue, 16 Jun 2020 10:17:34 +0800 Subject: [PATCH 308/448] btrfs: don't allocate anonymous block device for user invisible roots commit 851fd730a743e072badaf67caf39883e32439431 upstream. [BUG] When a lot of subvolumes are created, there is a user report about transaction aborted: BTRFS: Transaction aborted (error -24) WARNING: CPU: 17 PID: 17041 at fs/btrfs/transaction.c:1576 create_pending_snapshot+0xbc4/0xd10 [btrfs] RIP: 0010:create_pending_snapshot+0xbc4/0xd10 [btrfs] Call Trace: create_pending_snapshots+0x82/0xa0 [btrfs] btrfs_commit_transaction+0x275/0x8c0 [btrfs] btrfs_mksubvol+0x4b9/0x500 [btrfs] btrfs_ioctl_snap_create_transid+0x174/0x180 [btrfs] btrfs_ioctl_snap_create_v2+0x11c/0x180 [btrfs] btrfs_ioctl+0x11a4/0x2da0 [btrfs] do_vfs_ioctl+0xa9/0x640 ksys_ioctl+0x67/0x90 __x64_sys_ioctl+0x1a/0x20 do_syscall_64+0x5a/0x110 entry_SYSCALL_64_after_hwframe+0x44/0xa9 ---[ end trace 33f2f83f3d5250e9 ]--- BTRFS: error (device sda1) in create_pending_snapshot:1576: errno=-24 unknown BTRFS info (device sda1): forced readonly BTRFS warning (device sda1): Skipping commit of aborted transaction. BTRFS: error (device sda1) in cleanup_transaction:1831: errno=-24 unknown [CAUSE] The error is EMFILE (Too many files open) and comes from the anonymous block device allocation. The ids are in a shared pool of size 1<<20. The ids are assigned to live subvolumes, ie. the root structure exists in memory (eg. after creation or after the root appears in some path). The pool could be exhausted if the numbers are not reclaimed fast enough, after subvolume deletion or if other system component uses the anon block devices. [WORKAROUND] Since it's not possible to completely solve the problem, we can only minimize the time the id is allocated to a subvolume root. Firstly, we can reduce the use of anon_dev by trees that are not subvolume roots, like data reloc tree. This patch will do extra check on root objectid, to skip roots that don't need anon_dev. Currently it's only data reloc tree and orphan roots. Reported-by: Greed Rong Link: https://lore.kernel.org/linux-btrfs/CA+UqX+NTrZ6boGnWHhSeZmEY5J76CTqmYjO2S+=tHJX7nb9DPw@mail.gmail.com/ CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Josef Bacik Signed-off-by: Qu Wenruo Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/disk-io.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 273d1ccdd45d..ad1c8e3b8133 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1475,9 +1475,16 @@ int btrfs_init_fs_root(struct btrfs_root *root) spin_lock_init(&root->ino_cache_lock); init_waitqueue_head(&root->ino_cache_wait); - ret = get_anon_bdev(&root->anon_dev); - if (ret) - goto fail; + /* + * Don't assign anonymous block device to roots that are not exposed to + * userspace, the id pool is limited to 1M + */ + if (is_fstree(root->root_key.objectid) && + btrfs_root_refs(&root->root_item) > 0) { + ret = get_anon_bdev(&root->anon_dev); + if (ret) + goto fail; + } mutex_lock(&root->objectid_mutex); ret = btrfs_find_highest_objectid(root, From 0ddf373adb42f06dbe86c3dfc8b687a2f75af89e Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Tue, 7 Jul 2020 06:29:08 -0700 Subject: [PATCH 309/448] btrfs: ref-verify: fix memory leak in add_block_entry commit d60ba8de1164e1b42e296ff270c622a070ef8fe7 upstream. clang static analysis flags this error fs/btrfs/ref-verify.c:290:3: warning: Potential leak of memory pointed to by 're' [unix.Malloc] kfree(be); ^~~~~ The problem is in this block of code: if (root_objectid) { struct root_entry *exist_re; exist_re = insert_root_entry(&exist->roots, re); if (exist_re) kfree(re); } There is no 'else' block freeing when root_objectid is 0. Add the missing kfree to the else branch. Fixes: fd708b81d972 ("Btrfs: add a extent ref verify tool") CC: stable@vger.kernel.org # 4.19+ Signed-off-by: Tom Rix Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ref-verify.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c index 454a1015d026..9a2f15f4c80e 100644 --- a/fs/btrfs/ref-verify.c +++ b/fs/btrfs/ref-verify.c @@ -286,6 +286,8 @@ static struct block_entry *add_block_entry(struct btrfs_fs_info *fs_info, exist_re = insert_root_entry(&exist->roots, re); if (exist_re) kfree(re); + } else { + kfree(re); } kfree(be); return exist; From 938051408905dcd69fb65a84f0648b58e8851f1b Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Thu, 2 Jul 2020 12:32:31 +0100 Subject: [PATCH 310/448] btrfs: stop incremening log_batch for the log root tree when syncing log commit 28a9579561bcb9082715e720eac93012e708ab94 upstream. We are incrementing the log_batch atomic counter of the root log tree but we never use that counter, it's used only for the log trees of subvolume roots. We started doing it when we moved the log_batch and log_write counters from the global, per fs, btrfs_fs_info structure, into the btrfs_root structure in commit 7237f1833601dc ("Btrfs: fix tree logs parallel sync"). So just stop doing it for the log root tree and add a comment over the field declaration so inform it's used only for log trees of subvolume roots. This patch is part of a series that has the following patches: 1/4 btrfs: only commit the delayed inode when doing a full fsync 2/4 btrfs: only commit delayed items at fsync if we are logging a directory 3/4 btrfs: stop incremening log_batch for the log root tree when syncing log 4/4 btrfs: remove no longer needed use of log_writers for the log root tree After the entire patchset applied I saw about 12% decrease on max latency reported by dbench. The test was done on a qemu vm, with 8 cores, 16Gb of ram, using kvm and using a raw NVMe device directly (no intermediary fs on the host). The test was invoked like the following: mkfs.btrfs -f /dev/sdk mount -o ssd -o nospace_cache /dev/sdk /mnt/sdk dbench -D /mnt/sdk -t 300 8 umount /mnt/dsk CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Josef Bacik Signed-off-by: Filipe Manana Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ctree.h | 1 + fs/btrfs/tree-log.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 36cd210ee2ef..a29c2d0ec96e 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -992,6 +992,7 @@ struct btrfs_root { struct list_head log_ctxs[2]; atomic_t log_writers; atomic_t log_commit[2]; + /* Used only for log trees of subvolumes, not for the log root tree */ atomic_t log_batch; int log_transid; /* No matter the commit succeeds or not*/ diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index f46afbff668e..cca31f7f6c01 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3140,7 +3140,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, btrfs_init_log_ctx(&root_log_ctx, NULL); mutex_lock(&log_root_tree->log_mutex); - atomic_inc(&log_root_tree->log_batch); atomic_inc(&log_root_tree->log_writers); index2 = log_root_tree->log_transid % 2; From 8bc3a5d8c2aea303fde96d5f46b0dc7a8a36060f Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Thu, 2 Jul 2020 12:32:40 +0100 Subject: [PATCH 311/448] btrfs: remove no longer needed use of log_writers for the log root tree commit a93e01682e283f6de09d6ce8f805dc52a2e942fb upstream. When syncing the log, we used to update the log root tree without holding neither the log_mutex of the subvolume root nor the log_mutex of log root tree. We used to have two critical sections delimited by the log_mutex of the log root tree, so in the first one we incremented the log_writers of the log root tree and on the second one we decremented it and waited for the log_writers counter to go down to zero. This was because the update of the log root tree happened between the two critical sections. The use of two critical sections allowed a little bit more of parallelism and required the use of the log_writers counter, necessary to make sure we didn't miss any log root tree update when we have multiple tasks trying to sync the log in parallel. However after commit 06989c799f0481 ("Btrfs: fix race updating log root item during fsync") the log root tree update was moved into a critical section delimited by the subvolume's log_mutex. Later another commit moved the log tree update from that critical section into the second critical section delimited by the log_mutex of the log root tree. Both commits addressed different bugs. The end result is that the first critical section delimited by the log_mutex of the log root tree became pointless, since there's nothing done between it and the second critical section, we just have an unlock of the log_mutex followed by a lock operation. This means we can merge both critical sections, as the first one does almost nothing now, and we can stop using the log_writers counter of the log root tree, which was incremented in the first critical section and decremented in the second criticial section, used to make sure no one in the second critical section started writeback of the log root tree before some other task updated it. So just remove the mutex_unlock() followed by mutex_lock() of the log root tree, as well as the use of the log_writers counter for the log root tree. This patch is part of a series that has the following patches: 1/4 btrfs: only commit the delayed inode when doing a full fsync 2/4 btrfs: only commit delayed items at fsync if we are logging a directory 3/4 btrfs: stop incremening log_batch for the log root tree when syncing log 4/4 btrfs: remove no longer needed use of log_writers for the log root tree After the entire patchset applied I saw about 12% decrease on max latency reported by dbench. The test was done on a qemu vm, with 8 cores, 16Gb of ram, using kvm and using a raw NVMe device directly (no intermediary fs on the host). The test was invoked like the following: mkfs.btrfs -f /dev/sdk mount -o ssd -o nospace_cache /dev/sdk /mnt/sdk dbench -D /mnt/sdk -t 300 8 umount /mnt/dsk CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Josef Bacik Signed-off-by: Filipe Manana Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ctree.h | 1 + fs/btrfs/tree-log.c | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index a29c2d0ec96e..42db9479eb43 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -990,6 +990,7 @@ struct btrfs_root { wait_queue_head_t log_writer_wait; wait_queue_head_t log_commit_wait[2]; struct list_head log_ctxs[2]; + /* Used only for log trees of subvolumes, not for the log root tree */ atomic_t log_writers; atomic_t log_commit[2]; /* Used only for log trees of subvolumes, not for the log root tree */ diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index cca31f7f6c01..92e38ed19aa1 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3140,28 +3140,17 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, btrfs_init_log_ctx(&root_log_ctx, NULL); mutex_lock(&log_root_tree->log_mutex); - atomic_inc(&log_root_tree->log_writers); index2 = log_root_tree->log_transid % 2; list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]); root_log_ctx.log_transid = log_root_tree->log_transid; - mutex_unlock(&log_root_tree->log_mutex); - - mutex_lock(&log_root_tree->log_mutex); - /* * Now we are safe to update the log_root_tree because we're under the * log_mutex, and we're a current writer so we're holding the commit * open until we drop the log_mutex. */ ret = update_log_root(trans, log, &new_root_item); - - if (atomic_dec_and_test(&log_root_tree->log_writers)) { - /* atomic_dec_and_test implies a barrier */ - cond_wake_up_nomb(&log_root_tree->log_writer_wait); - } - if (ret) { if (!list_empty(&root_log_ctx.list)) list_del_init(&root_log_ctx.list); @@ -3207,8 +3196,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, root_log_ctx.log_transid - 1); } - wait_for_writer(log_root_tree); - /* * now that we've moved on to the tree of log tree roots, * check the full commit flag again From 3d3452920cacc3a46444ecca26af5d181410ff19 Mon Sep 17 00:00:00 2001 From: Anand Jain Date: Fri, 10 Jul 2020 14:37:38 +0800 Subject: [PATCH 312/448] btrfs: don't traverse into the seed devices in show_devname commit 4faf55b03823e96c44dc4e364520000ed3b12fdb upstream. ->show_devname currently shows the lowest devid in the list. As the seed devices have the lowest devid in the sprouted filesystem, the userland tool such as findmnt end up seeing seed device instead of the device from the read-writable sprouted filesystem. As shown below. mount /dev/sda /btrfs mount: /btrfs: WARNING: device write-protected, mounted read-only. findmnt --output SOURCE,TARGET,UUID /btrfs SOURCE TARGET UUID /dev/sda /btrfs 899f7027-3e46-4626-93e7-7d4c9ad19111 btrfs dev add -f /dev/sdb /btrfs umount /btrfs mount /dev/sdb /btrfs findmnt --output SOURCE,TARGET,UUID /btrfs SOURCE TARGET UUID /dev/sda /btrfs 899f7027-3e46-4626-93e7-7d4c9ad19111 All sprouts from a single seed will show the same seed device and the same fsid. That's confusing. This is causing problems in our prototype as there isn't any reference to the sprout file-system(s) which is being used for actual read and write. This was added in the patch which implemented the show_devname in btrfs commit 9c5085c14798 ("Btrfs: implement ->show_devname"). I tried to look for any particular reason that we need to show the seed device, there isn't any. So instead, do not traverse through the seed devices, just show the lowest devid in the sprouted fsid. After the patch: mount /dev/sda /btrfs mount: /btrfs: WARNING: device write-protected, mounted read-only. findmnt --output SOURCE,TARGET,UUID /btrfs SOURCE TARGET UUID /dev/sda /btrfs 899f7027-3e46-4626-93e7-7d4c9ad19111 btrfs dev add -f /dev/sdb /btrfs mount -o rw,remount /dev/sdb /btrfs findmnt --output SOURCE,TARGET,UUID /btrfs SOURCE TARGET UUID /dev/sdb /btrfs 595ca0e6-b82e-46b5-b9e2-c72a6928be48 mount /dev/sda /btrfs1 mount: /btrfs1: WARNING: device write-protected, mounted read-only. btrfs dev add -f /dev/sdc /btrfs1 findmnt --output SOURCE,TARGET,UUID /btrfs1 SOURCE TARGET UUID /dev/sdc /btrfs1 ca1dbb7a-8446-4f95-853c-a20f3f82bdbb cat /proc/self/mounts | grep btrfs /dev/sdb /btrfs btrfs rw,relatime,noacl,space_cache,subvolid=5,subvol=/ 0 0 /dev/sdc /btrfs1 btrfs ro,relatime,noacl,space_cache,subvolid=5,subvol=/ 0 0 Reported-by: Martin K. Petersen CC: stable@vger.kernel.org # 4.19+ Tested-by: Martin K. Petersen Signed-off-by: Anand Jain Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/super.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index aea24202cd35..542656429b94 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -2254,9 +2254,7 @@ static int btrfs_unfreeze(struct super_block *sb) static int btrfs_show_devname(struct seq_file *m, struct dentry *root) { struct btrfs_fs_info *fs_info = btrfs_sb(root->d_sb); - struct btrfs_fs_devices *cur_devices; struct btrfs_device *dev, *first_dev = NULL; - struct list_head *head; /* * Lightweight locking of the devices. We should not need @@ -2266,18 +2264,13 @@ static int btrfs_show_devname(struct seq_file *m, struct dentry *root) * least until the rcu_read_unlock. */ rcu_read_lock(); - cur_devices = fs_info->fs_devices; - while (cur_devices) { - head = &cur_devices->devices; - list_for_each_entry_rcu(dev, head, dev_list) { - if (test_bit(BTRFS_DEV_STATE_MISSING, &dev->dev_state)) - continue; - if (!dev->name) - continue; - if (!first_dev || dev->devid < first_dev->devid) - first_dev = dev; - } - cur_devices = cur_devices->seed; + list_for_each_entry_rcu(dev, &fs_info->fs_devices->devices, dev_list) { + if (test_bit(BTRFS_DEV_STATE_MISSING, &dev->dev_state)) + continue; + if (!dev->name) + continue; + if (!first_dev || dev->devid < first_dev->devid) + first_dev = dev; } if (first_dev) From 98f55cd496712478129705f00829e67705b79802 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 17 Jul 2020 15:12:27 -0400 Subject: [PATCH 313/448] btrfs: open device without device_list_mutex commit 18c850fdc5a801bad4977b0f1723761d42267e45 upstream. There's long existed a lockdep splat because we open our bdev's under the ->device_list_mutex at mount time, which acquires the bd_mutex. Usually this goes unnoticed, but if you do loopback devices at all suddenly the bd_mutex comes with a whole host of other dependencies, which results in the splat when you mount a btrfs file system. ====================================================== WARNING: possible circular locking dependency detected 5.8.0-0.rc3.1.fc33.x86_64+debug #1 Not tainted ------------------------------------------------------ systemd-journal/509 is trying to acquire lock: ffff970831f84db0 (&fs_info->reloc_mutex){+.+.}-{3:3}, at: btrfs_record_root_in_trans+0x44/0x70 [btrfs] but task is already holding lock: ffff97083144d598 (sb_pagefaults){.+.+}-{0:0}, at: btrfs_page_mkwrite+0x59/0x560 [btrfs] which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #6 (sb_pagefaults){.+.+}-{0:0}: __sb_start_write+0x13e/0x220 btrfs_page_mkwrite+0x59/0x560 [btrfs] do_page_mkwrite+0x4f/0x130 do_wp_page+0x3b0/0x4f0 handle_mm_fault+0xf47/0x1850 do_user_addr_fault+0x1fc/0x4b0 exc_page_fault+0x88/0x300 asm_exc_page_fault+0x1e/0x30 -> #5 (&mm->mmap_lock#2){++++}-{3:3}: __might_fault+0x60/0x80 _copy_from_user+0x20/0xb0 get_sg_io_hdr+0x9a/0xb0 scsi_cmd_ioctl+0x1ea/0x2f0 cdrom_ioctl+0x3c/0x12b4 sr_block_ioctl+0xa4/0xd0 block_ioctl+0x3f/0x50 ksys_ioctl+0x82/0xc0 __x64_sys_ioctl+0x16/0x20 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #4 (&cd->lock){+.+.}-{3:3}: __mutex_lock+0x7b/0x820 sr_block_open+0xa2/0x180 __blkdev_get+0xdd/0x550 blkdev_get+0x38/0x150 do_dentry_open+0x16b/0x3e0 path_openat+0x3c9/0xa00 do_filp_open+0x75/0x100 do_sys_openat2+0x8a/0x140 __x64_sys_openat+0x46/0x70 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #3 (&bdev->bd_mutex){+.+.}-{3:3}: __mutex_lock+0x7b/0x820 __blkdev_get+0x6a/0x550 blkdev_get+0x85/0x150 blkdev_get_by_path+0x2c/0x70 btrfs_get_bdev_and_sb+0x1b/0xb0 [btrfs] open_fs_devices+0x88/0x240 [btrfs] btrfs_open_devices+0x92/0xa0 [btrfs] btrfs_mount_root+0x250/0x490 [btrfs] legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 vfs_kern_mount.part.0+0x71/0xb0 btrfs_mount+0x119/0x380 [btrfs] legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 do_mount+0x8c6/0xca0 __x64_sys_mount+0x8e/0xd0 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #2 (&fs_devs->device_list_mutex){+.+.}-{3:3}: __mutex_lock+0x7b/0x820 btrfs_run_dev_stats+0x36/0x420 [btrfs] commit_cowonly_roots+0x91/0x2d0 [btrfs] btrfs_commit_transaction+0x4e6/0x9f0 [btrfs] btrfs_sync_file+0x38a/0x480 [btrfs] __x64_sys_fdatasync+0x47/0x80 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #1 (&fs_info->tree_log_mutex){+.+.}-{3:3}: __mutex_lock+0x7b/0x820 btrfs_commit_transaction+0x48e/0x9f0 [btrfs] btrfs_sync_file+0x38a/0x480 [btrfs] __x64_sys_fdatasync+0x47/0x80 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #0 (&fs_info->reloc_mutex){+.+.}-{3:3}: __lock_acquire+0x1241/0x20c0 lock_acquire+0xb0/0x400 __mutex_lock+0x7b/0x820 btrfs_record_root_in_trans+0x44/0x70 [btrfs] start_transaction+0xd2/0x500 [btrfs] btrfs_dirty_inode+0x44/0xd0 [btrfs] file_update_time+0xc6/0x120 btrfs_page_mkwrite+0xda/0x560 [btrfs] do_page_mkwrite+0x4f/0x130 do_wp_page+0x3b0/0x4f0 handle_mm_fault+0xf47/0x1850 do_user_addr_fault+0x1fc/0x4b0 exc_page_fault+0x88/0x300 asm_exc_page_fault+0x1e/0x30 other info that might help us debug this: Chain exists of: &fs_info->reloc_mutex --> &mm->mmap_lock#2 --> sb_pagefaults Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(sb_pagefaults); lock(&mm->mmap_lock#2); lock(sb_pagefaults); lock(&fs_info->reloc_mutex); *** DEADLOCK *** 3 locks held by systemd-journal/509: #0: ffff97083bdec8b8 (&mm->mmap_lock#2){++++}-{3:3}, at: do_user_addr_fault+0x12e/0x4b0 #1: ffff97083144d598 (sb_pagefaults){.+.+}-{0:0}, at: btrfs_page_mkwrite+0x59/0x560 [btrfs] #2: ffff97083144d6a8 (sb_internal){.+.+}-{0:0}, at: start_transaction+0x3f8/0x500 [btrfs] stack backtrace: CPU: 0 PID: 509 Comm: systemd-journal Not tainted 5.8.0-0.rc3.1.fc33.x86_64+debug #1 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 Call Trace: dump_stack+0x92/0xc8 check_noncircular+0x134/0x150 __lock_acquire+0x1241/0x20c0 lock_acquire+0xb0/0x400 ? btrfs_record_root_in_trans+0x44/0x70 [btrfs] ? lock_acquire+0xb0/0x400 ? btrfs_record_root_in_trans+0x44/0x70 [btrfs] __mutex_lock+0x7b/0x820 ? btrfs_record_root_in_trans+0x44/0x70 [btrfs] ? kvm_sched_clock_read+0x14/0x30 ? sched_clock+0x5/0x10 ? sched_clock_cpu+0xc/0xb0 btrfs_record_root_in_trans+0x44/0x70 [btrfs] start_transaction+0xd2/0x500 [btrfs] btrfs_dirty_inode+0x44/0xd0 [btrfs] file_update_time+0xc6/0x120 btrfs_page_mkwrite+0xda/0x560 [btrfs] ? sched_clock+0x5/0x10 do_page_mkwrite+0x4f/0x130 do_wp_page+0x3b0/0x4f0 handle_mm_fault+0xf47/0x1850 do_user_addr_fault+0x1fc/0x4b0 exc_page_fault+0x88/0x300 ? asm_exc_page_fault+0x8/0x30 asm_exc_page_fault+0x1e/0x30 RIP: 0033:0x7fa3972fdbfe Code: Bad RIP value. Fix this by not holding the ->device_list_mutex at this point. The device_list_mutex exists to protect us from modifying the device list while the file system is running. However it can also be modified by doing a scan on a device. But this action is specifically protected by the uuid_mutex, which we are holding here. We cannot race with opening at this point because we have the ->s_mount lock held during the mount. Not having the ->device_list_mutex here is perfectly safe as we're not going to change the devices at this point. CC: stable@vger.kernel.org # 4.19+ Signed-off-by: Josef Bacik Reviewed-by: David Sterba [ add some comments ] Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/volumes.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index a9c84595fb24..bfa169a3fbc1 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -219,7 +219,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, * * global::fs_devs - add, remove, updates to the global list * - * does not protect: manipulation of the fs_devices::devices list! + * does not protect: manipulation of the fs_devices::devices list in general + * but in mount context it could be used to exclude list modifications by eg. + * scan ioctl * * btrfs_device::name - renames (write side), read is RCU * @@ -232,6 +234,9 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, * may be used to exclude some operations from running concurrently without any * modifications to the list (see write_all_supers) * + * Is not required at mount and close times, because our device list is + * protected by the uuid_mutex at that point. + * * balance_mutex * ------------- * protects balance structures (status, state) and context accessed from @@ -778,6 +783,11 @@ static int btrfs_free_stale_devices(const char *path, return ret; } +/* + * This is only used on mount, and we are protected from competing things + * messing with our fs_devices by the uuid_mutex, thus we do not need the + * fs_devices->device_list_mutex here. + */ static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices, struct btrfs_device *device, fmode_t flags, void *holder) @@ -1418,8 +1428,14 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int ret; lockdep_assert_held(&uuid_mutex); + /* + * The device_list_mutex cannot be taken here in case opening the + * underlying device takes further locks like bd_mutex. + * + * We also don't need the lock here as this is called during mount and + * exclusion is provided by uuid_mutex + */ - mutex_lock(&fs_devices->device_list_mutex); if (fs_devices->opened) { fs_devices->opened++; ret = 0; @@ -1427,7 +1443,6 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, list_sort(NULL, &fs_devices->devices, devid_cmp); ret = open_fs_devices(fs_devices, flags, holder); } - mutex_unlock(&fs_devices->device_list_mutex); return ret; } From ae3f93cafd6f2246ea5e2a59e4029f23718d71ae Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 17 Jul 2020 15:12:28 -0400 Subject: [PATCH 314/448] btrfs: move the chunk_mutex in btrfs_read_chunk_tree commit 01d01caf19ff7c537527d352d169c4368375c0a1 upstream. We are currently getting this lockdep splat in btrfs/161: ====================================================== WARNING: possible circular locking dependency detected 5.8.0-rc5+ #20 Tainted: G E ------------------------------------------------------ mount/678048 is trying to acquire lock: ffff9b769f15b6e0 (&fs_devs->device_list_mutex){+.+.}-{3:3}, at: clone_fs_devices+0x4d/0x170 [btrfs] but task is already holding lock: ffff9b76abdb08d0 (&fs_info->chunk_mutex){+.+.}-{3:3}, at: btrfs_read_chunk_tree+0x6a/0x800 [btrfs] which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (&fs_info->chunk_mutex){+.+.}-{3:3}: __mutex_lock+0x8b/0x8f0 btrfs_init_new_device+0x2d2/0x1240 [btrfs] btrfs_ioctl+0x1de/0x2d20 [btrfs] ksys_ioctl+0x87/0xc0 __x64_sys_ioctl+0x16/0x20 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #0 (&fs_devs->device_list_mutex){+.+.}-{3:3}: __lock_acquire+0x1240/0x2460 lock_acquire+0xab/0x360 __mutex_lock+0x8b/0x8f0 clone_fs_devices+0x4d/0x170 [btrfs] btrfs_read_chunk_tree+0x330/0x800 [btrfs] open_ctree+0xb7c/0x18ce [btrfs] btrfs_mount_root.cold+0x13/0xfa [btrfs] legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 fc_mount+0xe/0x40 vfs_kern_mount.part.0+0x71/0x90 btrfs_mount+0x13b/0x3e0 [btrfs] legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 do_mount+0x7de/0xb30 __x64_sys_mount+0x8e/0xd0 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 other info that might help us debug this: Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&fs_info->chunk_mutex); lock(&fs_devs->device_list_mutex); lock(&fs_info->chunk_mutex); lock(&fs_devs->device_list_mutex); *** DEADLOCK *** 3 locks held by mount/678048: #0: ffff9b75ff5fb0e0 (&type->s_umount_key#63/1){+.+.}-{3:3}, at: alloc_super+0xb5/0x380 #1: ffffffffc0c2fbc8 (uuid_mutex){+.+.}-{3:3}, at: btrfs_read_chunk_tree+0x54/0x800 [btrfs] #2: ffff9b76abdb08d0 (&fs_info->chunk_mutex){+.+.}-{3:3}, at: btrfs_read_chunk_tree+0x6a/0x800 [btrfs] stack backtrace: CPU: 2 PID: 678048 Comm: mount Tainted: G E 5.8.0-rc5+ #20 Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./890FX Deluxe5, BIOS P1.40 05/03/2011 Call Trace: dump_stack+0x96/0xd0 check_noncircular+0x162/0x180 __lock_acquire+0x1240/0x2460 ? asm_sysvec_apic_timer_interrupt+0x12/0x20 lock_acquire+0xab/0x360 ? clone_fs_devices+0x4d/0x170 [btrfs] __mutex_lock+0x8b/0x8f0 ? clone_fs_devices+0x4d/0x170 [btrfs] ? rcu_read_lock_sched_held+0x52/0x60 ? cpumask_next+0x16/0x20 ? module_assert_mutex_or_preempt+0x14/0x40 ? __module_address+0x28/0xf0 ? clone_fs_devices+0x4d/0x170 [btrfs] ? static_obj+0x4f/0x60 ? lockdep_init_map_waits+0x43/0x200 ? clone_fs_devices+0x4d/0x170 [btrfs] clone_fs_devices+0x4d/0x170 [btrfs] btrfs_read_chunk_tree+0x330/0x800 [btrfs] open_ctree+0xb7c/0x18ce [btrfs] ? super_setup_bdi_name+0x79/0xd0 btrfs_mount_root.cold+0x13/0xfa [btrfs] ? vfs_parse_fs_string+0x84/0xb0 ? rcu_read_lock_sched_held+0x52/0x60 ? kfree+0x2b5/0x310 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 fc_mount+0xe/0x40 vfs_kern_mount.part.0+0x71/0x90 btrfs_mount+0x13b/0x3e0 [btrfs] ? cred_has_capability+0x7c/0x120 ? rcu_read_lock_sched_held+0x52/0x60 ? legacy_get_tree+0x30/0x50 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 do_mount+0x7de/0xb30 ? memdup_user+0x4e/0x90 __x64_sys_mount+0x8e/0xd0 do_syscall_64+0x52/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 This is because btrfs_read_chunk_tree() can come upon DEV_EXTENT's and then read the device, which takes the device_list_mutex. The device_list_mutex needs to be taken before the chunk_mutex, so this is a problem. We only really need the chunk mutex around adding the chunk, so move the mutex around read_one_chunk. An argument could be made that we don't even need the chunk_mutex here as it's during mount, and we are protected by various other locks. However we already have special rules for ->device_list_mutex, and I'd rather not have another special case for ->chunk_mutex. CC: stable@vger.kernel.org # 4.19+ Reviewed-by: Anand Jain Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/volumes.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index bfa169a3fbc1..1f2d99118c8e 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -7282,7 +7282,6 @@ int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) * otherwise we don't need it. */ mutex_lock(&uuid_mutex); - mutex_lock(&fs_info->chunk_mutex); /* * It is possible for mount and umount to race in such a way that @@ -7327,7 +7326,9 @@ int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) } else if (found_key.type == BTRFS_CHUNK_ITEM_KEY) { struct btrfs_chunk *chunk; chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk); + mutex_lock(&fs_info->chunk_mutex); ret = read_one_chunk(&found_key, leaf, chunk); + mutex_unlock(&fs_info->chunk_mutex); if (ret) goto error; } @@ -7357,7 +7358,6 @@ int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) } ret = 0; error: - mutex_unlock(&fs_info->chunk_mutex); mutex_unlock(&uuid_mutex); btrfs_free_path(path); From 38ab14b1e27c16961b0c34145f76336c45ff7ace Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Mon, 13 Jul 2020 09:03:21 +0800 Subject: [PATCH 315/448] btrfs: relocation: review the call sites which can be interrupted by signal commit 44d354abf33e92a5e73b965c84caf5a5d5e58a0b upstream. Since most metadata reservation calls can return -EINTR when get interrupted by fatal signal, we need to review the all the metadata reservation call sites. In relocation code, the metadata reservation happens in the following sites: - btrfs_block_rsv_refill() in merge_reloc_root() merge_reloc_root() is a pretty critical section, we don't want to be interrupted by signal, so change the flush status to BTRFS_RESERVE_FLUSH_LIMIT, so it won't get interrupted by signal. Since such change can be ENPSPC-prone, also shrink the amount of metadata to reserve least amount avoid deadly ENOSPC there. - btrfs_block_rsv_refill() in reserve_metadata_space() It calls with BTRFS_RESERVE_FLUSH_LIMIT, which won't get interrupted by signal. - btrfs_block_rsv_refill() in prepare_to_relocate() - btrfs_block_rsv_add() in prepare_to_relocate() - btrfs_block_rsv_refill() in relocate_block_group() - btrfs_delalloc_reserve_metadata() in relocate_file_extent_cluster() - btrfs_start_transaction() in relocate_block_group() - btrfs_start_transaction() in create_reloc_inode() Can be interrupted by fatal signal and we can handle it easily. For these call sites, just catch the -EINTR value in btrfs_balance() and count them as canceled. CC: stable@vger.kernel.org # 5.4+ Signed-off-by: Qu Wenruo Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/relocation.c | 12 ++++++++++-- fs/btrfs/volumes.c | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 1b087ee338cc..af3605a0bf2e 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2312,12 +2312,20 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, btrfs_unlock_up_safe(path, 0); } - min_reserved = fs_info->nodesize * (BTRFS_MAX_LEVEL - 1) * 2; + /* + * In merge_reloc_root(), we modify the upper level pointer to swap the + * tree blocks between reloc tree and subvolume tree. Thus for tree + * block COW, we COW at most from level 1 to root level for each tree. + * + * Thus the needed metadata size is at most root_level * nodesize, + * and * 2 since we have two trees to COW. + */ + min_reserved = fs_info->nodesize * btrfs_root_level(root_item) * 2; memset(&next_key, 0, sizeof(next_key)); while (1) { ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved, - BTRFS_RESERVE_FLUSH_ALL); + BTRFS_RESERVE_FLUSH_LIMIT); if (ret) { err = ret; goto out; diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 1f2d99118c8e..196ddbcd2936 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4261,7 +4261,22 @@ int btrfs_balance(struct btrfs_fs_info *fs_info, mutex_lock(&fs_info->balance_mutex); if (ret == -ECANCELED && atomic_read(&fs_info->balance_pause_req)) btrfs_info(fs_info, "balance: paused"); - else if (ret == -ECANCELED && atomic_read(&fs_info->balance_cancel_req)) + /* + * Balance can be canceled by: + * + * - Regular cancel request + * Then ret == -ECANCELED and balance_cancel_req > 0 + * + * - Fatal signal to "btrfs" process + * Either the signal caught by wait_reserve_ticket() and callers + * got -EINTR, or caught by btrfs_should_cancel_balance() and + * got -ECANCELED. + * Either way, in this case balance_cancel_req = 0, and + * ret == -EINTR or ret == -ECANCELED. + * + * So here we only check the return value to catch canceled balance. + */ + else if (ret == -ECANCELED || ret == -EINTR) btrfs_info(fs_info, "balance: canceled"); else btrfs_info(fs_info, "balance: ended with status: %d", ret); From 2f29a31f394ef9cffebbcafcd03db0c8c07f2cd3 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Fri, 10 Jul 2020 09:49:56 +0200 Subject: [PATCH 316/448] btrfs: add missing check for nocow and compression inode flags commit f37c563bab4297024c300b05c8f48430e323809d upstream. User Forza reported on IRC that some invalid combinations of file attributes are accepted by chattr. The NODATACOW and compression file flags/attributes are mutually exclusive, but they could be set by 'chattr +c +C' on an empty file. The nodatacow will be in effect because it's checked first in btrfs_run_delalloc_range. Extend the flag validation to catch the following cases: - input flags are conflicting - old and new flags are conflicting - initialize the local variable with inode flags after inode ls locked Inode attributes take precedence over mount options and are an independent setting. Nocompress would be a no-op with nodatacow, but we don't want to mix any compression-related options with nodatacow. CC: stable@vger.kernel.org # 4.4+ Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ioctl.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d88b8d8897cc..88745b518212 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -167,8 +167,11 @@ static int btrfs_ioctl_getflags(struct file *file, void __user *arg) return 0; } -/* Check if @flags are a supported and valid set of FS_*_FL flags */ -static int check_fsflags(unsigned int flags) +/* + * Check if @flags are a supported and valid set of FS_*_FL flags and that + * the old and new flags are not conflicting + */ +static int check_fsflags(unsigned int old_flags, unsigned int flags) { if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \ FS_NOATIME_FL | FS_NODUMP_FL | \ @@ -177,9 +180,19 @@ static int check_fsflags(unsigned int flags) FS_NOCOW_FL)) return -EOPNOTSUPP; + /* COMPR and NOCOMP on new/old are valid */ if ((flags & FS_NOCOMP_FL) && (flags & FS_COMPR_FL)) return -EINVAL; + if ((flags & FS_COMPR_FL) && (flags & FS_NOCOW_FL)) + return -EINVAL; + + /* NOCOW and compression options are mutually exclusive */ + if ((old_flags & FS_NOCOW_FL) && (flags & (FS_COMPR_FL | FS_NOCOMP_FL))) + return -EINVAL; + if ((flags & FS_NOCOW_FL) && (old_flags & (FS_COMPR_FL | FS_NOCOMP_FL))) + return -EINVAL; + return 0; } @@ -193,7 +206,7 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg) unsigned int fsflags, old_fsflags; int ret; const char *comp = NULL; - u32 binode_flags = binode->flags; + u32 binode_flags; if (!inode_owner_or_capable(inode)) return -EPERM; @@ -204,22 +217,23 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg) if (copy_from_user(&fsflags, arg, sizeof(fsflags))) return -EFAULT; - ret = check_fsflags(fsflags); - if (ret) - return ret; - ret = mnt_want_write_file(file); if (ret) return ret; inode_lock(inode); - fsflags = btrfs_mask_fsflags_for_type(inode, fsflags); old_fsflags = btrfs_inode_flags_to_fsflags(binode->flags); + ret = vfs_ioc_setflags_prepare(inode, old_fsflags, fsflags); if (ret) goto out_unlock; + ret = check_fsflags(old_fsflags, fsflags); + if (ret) + goto out_unlock; + + binode_flags = binode->flags; if (fsflags & FS_SYNC_FL) binode_flags |= BTRFS_INODE_SYNC; else From e0e51f4fc48853c4f5df996bffe5900f86a1e0ca Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Mon, 13 Jul 2020 09:03:20 +0800 Subject: [PATCH 317/448] btrfs: avoid possible signal interruption of btrfs_drop_snapshot() on relocation tree commit f3e3d9cc35252a70a2fd698762c9687718268ec6 upstream. [BUG] There is a bug report about bad signal timing could lead to read-only fs during balance: BTRFS info (device xvdb): balance: start -d -m -s BTRFS info (device xvdb): relocating block group 73001861120 flags metadata BTRFS info (device xvdb): found 12236 extents, stage: move data extents BTRFS info (device xvdb): relocating block group 71928119296 flags data BTRFS info (device xvdb): found 3 extents, stage: move data extents BTRFS info (device xvdb): found 3 extents, stage: update data pointers BTRFS info (device xvdb): relocating block group 60922265600 flags metadata BTRFS: error (device xvdb) in btrfs_drop_snapshot:5505: errno=-4 unknown BTRFS info (device xvdb): forced readonly BTRFS info (device xvdb): balance: ended with status: -4 [CAUSE] The direct cause is the -EINTR from the following call chain when a fatal signal is pending: relocate_block_group() |- clean_dirty_subvols() |- btrfs_drop_snapshot() |- btrfs_start_transaction() |- btrfs_delayed_refs_rsv_refill() |- btrfs_reserve_metadata_bytes() |- __reserve_metadata_bytes() |- wait_reserve_ticket() |- prepare_to_wait_event(); |- ticket->error = -EINTR; Normally this behavior is fine for most btrfs_start_transaction() callers, as they need to catch any other error, same for the signal, and exit ASAP. However for balance, especially for the clean_dirty_subvols() case, we're already doing cleanup works, getting -EINTR from btrfs_drop_snapshot() could cause a lot of unexpected problems. From the mentioned forced read-only report, to later balance error due to half dropped reloc trees. [FIX] Fix this problem by using btrfs_join_transaction() if btrfs_drop_snapshot() is called from relocation context. Since btrfs_join_transaction() won't get interrupted by signal, we can continue the cleanup. CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Josef Bacik Signed-off-by: Qu Wenruo Reviewed-by: David Sterba 3 Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/extent-tree.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 47ecf7216b3e..739332b46205 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5221,7 +5221,14 @@ int btrfs_drop_snapshot(struct btrfs_root *root, goto out; } - trans = btrfs_start_transaction(tree_root, 0); + /* + * Use join to avoid potential EINTR from transaction start. See + * wait_reserve_ticket and the whole reservation callchain. + */ + if (for_reloc) + trans = btrfs_join_transaction(tree_root); + else + trans = btrfs_start_transaction(tree_root, 0); if (IS_ERR(trans)) { err = PTR_ERR(trans); goto out_free; From d8848f4c2555f913be179e6929e62f0a22fea94e Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Tue, 21 Jul 2020 10:17:50 -0400 Subject: [PATCH 318/448] btrfs: sysfs: use NOFS for device creation commit a47bd78d0c44621efb98b525d04d60dc4d1a79b0 upstream. Dave hit this splat during testing btrfs/078: ====================================================== WARNING: possible circular locking dependency detected 5.8.0-rc6-default+ #1191 Not tainted ------------------------------------------------------ kswapd0/75 is trying to acquire lock: ffffa040e9d04ff8 (&delayed_node->mutex){+.+.}-{3:3}, at: __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] but task is already holding lock: ffffffff8b0c8040 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x5/0x30 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (fs_reclaim){+.+.}-{0:0}: __lock_acquire+0x56f/0xaa0 lock_acquire+0xa3/0x440 fs_reclaim_acquire.part.0+0x25/0x30 __kmalloc_track_caller+0x49/0x330 kstrdup+0x2e/0x60 __kernfs_new_node.constprop.0+0x44/0x250 kernfs_new_node+0x25/0x50 kernfs_create_link+0x34/0xa0 sysfs_do_create_link_sd+0x5e/0xd0 btrfs_sysfs_add_devices_dir+0x65/0x100 [btrfs] btrfs_init_new_device+0x44c/0x12b0 [btrfs] btrfs_ioctl+0xc3c/0x25c0 [btrfs] ksys_ioctl+0x68/0xa0 __x64_sys_ioctl+0x16/0x20 do_syscall_64+0x50/0xe0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #1 (&fs_info->chunk_mutex){+.+.}-{3:3}: __lock_acquire+0x56f/0xaa0 lock_acquire+0xa3/0x440 __mutex_lock+0xa0/0xaf0 btrfs_chunk_alloc+0x137/0x3e0 [btrfs] find_free_extent+0xb44/0xfb0 [btrfs] btrfs_reserve_extent+0x9b/0x180 [btrfs] btrfs_alloc_tree_block+0xc1/0x350 [btrfs] alloc_tree_block_no_bg_flush+0x4a/0x60 [btrfs] __btrfs_cow_block+0x143/0x7a0 [btrfs] btrfs_cow_block+0x15f/0x310 [btrfs] push_leaf_right+0x150/0x240 [btrfs] split_leaf+0x3cd/0x6d0 [btrfs] btrfs_search_slot+0xd14/0xf70 [btrfs] btrfs_insert_empty_items+0x64/0xc0 [btrfs] __btrfs_commit_inode_delayed_items+0xb2/0x840 [btrfs] btrfs_async_run_delayed_root+0x10e/0x1d0 [btrfs] btrfs_work_helper+0x2f9/0x650 [btrfs] process_one_work+0x22c/0x600 worker_thread+0x50/0x3b0 kthread+0x137/0x150 ret_from_fork+0x1f/0x30 -> #0 (&delayed_node->mutex){+.+.}-{3:3}: check_prev_add+0x98/0xa20 validate_chain+0xa8c/0x2a00 __lock_acquire+0x56f/0xaa0 lock_acquire+0xa3/0x440 __mutex_lock+0xa0/0xaf0 __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] btrfs_evict_inode+0x3bf/0x560 [btrfs] evict+0xd6/0x1c0 dispose_list+0x48/0x70 prune_icache_sb+0x54/0x80 super_cache_scan+0x121/0x1a0 do_shrink_slab+0x175/0x420 shrink_slab+0xb1/0x2e0 shrink_node+0x192/0x600 balance_pgdat+0x31f/0x750 kswapd+0x206/0x510 kthread+0x137/0x150 ret_from_fork+0x1f/0x30 other info that might help us debug this: Chain exists of: &delayed_node->mutex --> &fs_info->chunk_mutex --> fs_reclaim Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(fs_reclaim); lock(&fs_info->chunk_mutex); lock(fs_reclaim); lock(&delayed_node->mutex); *** DEADLOCK *** 3 locks held by kswapd0/75: #0: ffffffff8b0c8040 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x5/0x30 #1: ffffffff8b0b50b8 (shrinker_rwsem){++++}-{3:3}, at: shrink_slab+0x54/0x2e0 #2: ffffa040e057c0e8 (&type->s_umount_key#26){++++}-{3:3}, at: trylock_super+0x16/0x50 stack backtrace: CPU: 2 PID: 75 Comm: kswapd0 Not tainted 5.8.0-rc6-default+ #1191 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba527-rebuilt.opensuse.org 04/01/2014 Call Trace: dump_stack+0x78/0xa0 check_noncircular+0x16f/0x190 check_prev_add+0x98/0xa20 validate_chain+0xa8c/0x2a00 __lock_acquire+0x56f/0xaa0 lock_acquire+0xa3/0x440 ? __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] __mutex_lock+0xa0/0xaf0 ? __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] ? __lock_acquire+0x56f/0xaa0 ? __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] ? lock_acquire+0xa3/0x440 ? btrfs_evict_inode+0x138/0x560 [btrfs] ? btrfs_evict_inode+0x2fe/0x560 [btrfs] ? __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] __btrfs_release_delayed_node.part.0+0x3f/0x310 [btrfs] btrfs_evict_inode+0x3bf/0x560 [btrfs] evict+0xd6/0x1c0 dispose_list+0x48/0x70 prune_icache_sb+0x54/0x80 super_cache_scan+0x121/0x1a0 do_shrink_slab+0x175/0x420 shrink_slab+0xb1/0x2e0 shrink_node+0x192/0x600 balance_pgdat+0x31f/0x750 kswapd+0x206/0x510 ? _raw_spin_unlock_irqrestore+0x3e/0x50 ? finish_wait+0x90/0x90 ? balance_pgdat+0x750/0x750 kthread+0x137/0x150 ? kthread_stop+0x2a0/0x2a0 ret_from_fork+0x1f/0x30 This is because we're holding the chunk_mutex while adding this device and adding its sysfs entries. We actually hold different locks in different places when calling this function, the dev_replace semaphore for instance in dev replace, so instead of moving this call around simply wrap it's operations in NOFS. CC: stable@vger.kernel.org # 4.14+ Reported-by: David Sterba Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/sysfs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index f6d3c80f2e28..5c299e1f2297 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c @@ -975,7 +975,9 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices, { int error = 0; struct btrfs_device *dev; + unsigned int nofs_flag; + nofs_flag = memalloc_nofs_save(); list_for_each_entry(dev, &fs_devices->devices, dev_list) { struct hd_struct *disk; struct kobject *disk_kobj; @@ -994,6 +996,7 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices, if (error) break; } + memalloc_nofs_restore(nofs_flag); return error; } From ee6373070108cab313ddcb4ab6a6415cf11c69b0 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Tue, 21 Jul 2020 11:24:27 -0400 Subject: [PATCH 319/448] btrfs: don't WARN if we abort a transaction with EROFS commit f95ebdbed46a4d8b9fdb7bff109fdbb6fc9a6dc8 upstream. If we got some sort of corruption via a read and call btrfs_handle_fs_error() we'll set BTRFS_FS_STATE_ERROR on the fs and complain. If a subsequent trans handle trips over this it'll get EROFS and then abort. However at that point we're not aborting for the original reason, we're aborting because we've been flipped read only. We do not need to WARN_ON() here. CC: stable@vger.kernel.org # 5.4+ Signed-off-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ctree.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 42db9479eb43..2374f3f6f3b7 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -3166,7 +3166,7 @@ do { \ /* Report first abort since mount */ \ if (!test_and_set_bit(BTRFS_FS_STATE_TRANS_ABORTED, \ &((trans)->fs_info->fs_state))) { \ - if ((errno) != -EIO) { \ + if ((errno) != -EIO && (errno) != -EROFS) { \ WARN(1, KERN_DEBUG \ "BTRFS: Transaction aborted (error %d)\n", \ (errno)); \ From 242747612209637f6e8499da852d0ace929407e3 Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Wed, 22 Jul 2020 12:28:37 +0100 Subject: [PATCH 320/448] btrfs: fix race between page release and a fast fsync commit 3d6448e631591756da36efb3ea6355ff6f383c3a upstream. When releasing an extent map, done through the page release callback, we can race with an ongoing fast fsync and cause the fsync to miss a new extent and not log it. The steps for this to happen are the following: 1) A page is dirtied for some inode I; 2) Writeback for that page is triggered by a path other than fsync, for example by the system due to memory pressure; 3) When the ordered extent for the extent (a single 4K page) finishes, we unpin the corresponding extent map and set its generation to N, the current transaction's generation; 4) The btrfs_releasepage() callback is invoked by the system due to memory pressure for that no longer dirty page of inode I; 5) At the same time, some task calls fsync on inode I, joins transaction N, and at btrfs_log_inode() it sees that the inode does not have the full sync flag set, so we proceed with a fast fsync. But before we get into btrfs_log_changed_extents() and lock the inode's extent map tree: 6) Through btrfs_releasepage() we end up at try_release_extent_mapping() and we remove the extent map for the new 4Kb extent, because it is neither pinned anymore nor locked. By calling remove_extent_mapping(), we remove the extent map from the list of modified extents, since the extent map does not have the logging flag set. We unlock the inode's extent map tree; 7) The task doing the fast fsync now enters btrfs_log_changed_extents(), locks the inode's extent map tree and iterates its list of modified extents, which no longer has the 4Kb extent in it, so it does not log the extent; 8) The fsync finishes; 9) Before transaction N is committed, a power failure happens. After replaying the log, the 4K extent of inode I will be missing, since it was not logged due to the race with try_release_extent_mapping(). So fix this by teaching try_release_extent_mapping() to not remove an extent map if it's still in the list of modified extents. Fixes: ff44c6e36dc9dc ("Btrfs: do not hold the write_lock on the extent tree while logging") CC: stable@vger.kernel.org # 5.4+ Signed-off-by: Filipe Manana Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/extent_io.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 99dcb3897659..035ea5bc692a 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4467,15 +4467,25 @@ int try_release_extent_mapping(struct page *page, gfp_t mask) free_extent_map(em); break; } - if (!test_range_bit(tree, em->start, - extent_map_end(em) - 1, - EXTENT_LOCKED, 0, NULL)) { + if (test_range_bit(tree, em->start, + extent_map_end(em) - 1, + EXTENT_LOCKED, 0, NULL)) + goto next; + /* + * If it's not in the list of modified extents, used + * by a fast fsync, we can remove it. If it's being + * logged we can safely remove it since fsync took an + * extra reference on the em. + */ + if (list_empty(&em->list) || + test_bit(EXTENT_FLAG_LOGGING, &em->flags)) { set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &btrfs_inode->runtime_flags); remove_extent_mapping(map, em); /* once for the rb tree */ free_extent_map(em); } +next: start = extent_map_end(em); write_unlock(&map->lock); From 38c8255af7d79783d51060087e672b559ad3d14d Mon Sep 17 00:00:00 2001 From: David Sterba Date: Thu, 23 Jul 2020 19:08:55 +0200 Subject: [PATCH 321/448] btrfs: fix messages after changing compression level by remount commit 27942c9971cc405c60432eca9395e514a2ae9f5e upstream. Reported by Forza on IRC that remounting with compression options does not reflect the change in level, or at least it does not appear to do so according to the messages: mount -o compress=zstd:1 /dev/sda /mnt mount -o remount,compress=zstd:15 /mnt does not print the change to the level to syslog: [ 41.366060] BTRFS info (device vda): use zstd compression, level 1 [ 41.368254] BTRFS info (device vda): disk space caching is enabled [ 41.390429] BTRFS info (device vda): disk space caching is enabled What really happens is that the message is lost but the level is actualy changed. There's another weird output, if compression is reset to 'no': [ 45.413776] BTRFS info (device vda): use no compression, level 4 To fix that, save the previous compression level and print the message in that case too and use separate message for 'no' compression. CC: stable@vger.kernel.org # 4.19+ Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/super.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 542656429b94..6bf45941b49d 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -435,6 +435,7 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options, char *compress_type; bool compress_force = false; enum btrfs_compression_type saved_compress_type; + int saved_compress_level; bool saved_compress_force; int no_compress = 0; @@ -517,6 +518,7 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options, info->compress_type : BTRFS_COMPRESS_NONE; saved_compress_force = btrfs_test_opt(info, FORCE_COMPRESS); + saved_compress_level = info->compress_level; if (token == Opt_compress || token == Opt_compress_force || strncmp(args[0].from, "zlib", 4) == 0) { @@ -561,6 +563,8 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options, no_compress = 0; } else if (strncmp(args[0].from, "no", 2) == 0) { compress_type = "no"; + info->compress_level = 0; + info->compress_type = 0; btrfs_clear_opt(info->mount_opt, COMPRESS); btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS); compress_force = false; @@ -581,11 +585,11 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options, */ btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS); } - if ((btrfs_test_opt(info, COMPRESS) && - (info->compress_type != saved_compress_type || - compress_force != saved_compress_force)) || - (!btrfs_test_opt(info, COMPRESS) && - no_compress == 1)) { + if (no_compress == 1) { + btrfs_info(info, "use no compression"); + } else if ((info->compress_type != saved_compress_type) || + (compress_force != saved_compress_force) || + (info->compress_level != saved_compress_level)) { btrfs_info(info, "%s %s compression, level %d", (compress_force) ? "force" : "use", compress_type, info->compress_level); From 7bbf647dbb5a28e754633512065146763a35ff77 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Mon, 27 Jul 2020 10:28:05 -0400 Subject: [PATCH 322/448] btrfs: only search for left_info if there is no right_info in try_merge_free_space commit bf53d4687b8f3f6b752f091eb85f62369a515dfd upstream. In try_to_merge_free_space we attempt to find entries to the left and right of the entry we are adding to see if they can be merged. We search for an entry past our current info (saved into right_info), and then if right_info exists and it has a rb_prev() we save the rb_prev() into left_info. However there's a slight problem in the case that we have a right_info, but no entry previous to that entry. At that point we will search for an entry just before the info we're attempting to insert. This will simply find right_info again, and assign it to left_info, making them both the same pointer. Now if right_info _can_ be merged with the range we're inserting, we'll add it to the info and free right_info. However further down we'll access left_info, which was right_info, and thus get a use-after-free. Fix this by only searching for the left entry if we don't find a right entry at all. The CVE referenced had a specially crafted file system that could trigger this use-after-free. However with the tree checker improvements we no longer trigger the conditions for the UAF. But the original conditions still apply, hence this fix. Reference: CVE-2019-19448 Fixes: 963030817060 ("Btrfs: use hybrid extents+bitmap rb tree for free space") CC: stable@vger.kernel.org # 4.4+ Signed-off-by: Josef Bacik Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/free-space-cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index d86ada9c3c54..8bfc0f348ad5 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -2166,7 +2166,7 @@ out: static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl, struct btrfs_free_space *info, bool update_stat) { - struct btrfs_free_space *left_info; + struct btrfs_free_space *left_info = NULL; struct btrfs_free_space *right_info; bool merged = false; u64 offset = info->offset; @@ -2181,7 +2181,7 @@ static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl, if (right_info && rb_prev(&right_info->offset_index)) left_info = rb_entry(rb_prev(&right_info->offset_index), struct btrfs_free_space, offset_index); - else + else if (!right_info) left_info = tree_search_offset(ctl, offset - 1, 0, 0); if (right_info && !right_info->bitmap) { From f1d21b2688d91c43a6d77bd2f2441886e21f835d Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Tue, 28 Jul 2020 16:39:26 +0800 Subject: [PATCH 323/448] btrfs: inode: fix NULL pointer dereference if inode doesn't need compression commit 1e6e238c3002ea3611465ce5f32777ddd6a40126 upstream. [BUG] There is a bug report of NULL pointer dereference caused in compress_file_extent(): Oops: Kernel access of bad area, sig: 11 [#1] LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries Workqueue: btrfs-delalloc btrfs_delalloc_helper [btrfs] NIP [c008000006dd4d34] compress_file_range.constprop.41+0x75c/0x8a0 [btrfs] LR [c008000006dd4d1c] compress_file_range.constprop.41+0x744/0x8a0 [btrfs] Call Trace: [c000000c69093b00] [c008000006dd4d1c] compress_file_range.constprop.41+0x744/0x8a0 [btrfs] (unreliable) [c000000c69093bd0] [c008000006dd4ebc] async_cow_start+0x44/0xa0 [btrfs] [c000000c69093c10] [c008000006e14824] normal_work_helper+0xdc/0x598 [btrfs] [c000000c69093c80] [c0000000001608c0] process_one_work+0x2c0/0x5b0 [c000000c69093d10] [c000000000160c38] worker_thread+0x88/0x660 [c000000c69093db0] [c00000000016b55c] kthread+0x1ac/0x1c0 [c000000c69093e20] [c00000000000b660] ret_from_kernel_thread+0x5c/0x7c ---[ end trace f16954aa20d822f6 ]--- [CAUSE] For the following execution route of compress_file_range(), it's possible to hit NULL pointer dereference: compress_file_extent() |- pages = NULL; |- start = async_chunk->start = 0; |- end = async_chunk = 4095; |- nr_pages = 1; |- inode_need_compress() == false; <<< Possible, see later explanation | Now, we have nr_pages = 1, pages = NULL |- cont: |- ret = cow_file_range_inline(); |- if (ret <= 0) { |- for (i = 0; i < nr_pages; i++) { |- WARN_ON(pages[i]->mapping); <<< Crash To enter above call execution branch, we need the following race: Thread 1 (chattr) | Thread 2 (writeback) --------------------------+------------------------------ | btrfs_run_delalloc_range | |- inode_need_compress = true | |- cow_file_range_async() btrfs_ioctl_set_flag() | |- binode_flags |= | BTRFS_INODE_NOCOMPRESS | | compress_file_range() | |- inode_need_compress = false | |- nr_page = 1 while pages = NULL | | Then hit the crash [FIX] This patch will fix it by checking @pages before doing accessing it. This patch is only designed as a hot fix and easy to backport. More elegant fix may make btrfs only check inode_need_compress() once to avoid such race, but that would be another story. Reported-by: Luciano Chavez Fixes: 4d3a800ebb12 ("btrfs: merge nr_pages input and output parameter in compress_pages") CC: stable@vger.kernel.org # 4.14.x: cecc8d9038d16: btrfs: Move free_pages_out label in inline extent handling branch in compress_file_range CC: stable@vger.kernel.org # 4.14+ Signed-off-by: Qu Wenruo Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index f265b746dc94..6ec937d06d41 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -641,12 +641,18 @@ cont: page_error_op | PAGE_END_WRITEBACK); - for (i = 0; i < nr_pages; i++) { - WARN_ON(pages[i]->mapping); - put_page(pages[i]); + /* + * Ensure we only free the compressed pages if we have + * them allocated, as we can still reach here with + * inode_need_compress() == false. + */ + if (pages) { + for (i = 0; i < nr_pages; i++) { + WARN_ON(pages[i]->mapping); + put_page(pages[i]); + } + kfree(pages); } - kfree(pages); - return 0; } } From 5bed3387c8a166590057770f6f7b60f1c46bec52 Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Wed, 29 Jul 2020 10:17:50 +0100 Subject: [PATCH 324/448] btrfs: fix memory leaks after failure to lookup checksums during inode logging commit 4f26433e9b3eb7a55ed70d8f882ae9cd48ba448b upstream. While logging an inode, at copy_items(), if we fail to lookup the checksums for an extent we release the destination path, free the ins_data array and then return immediately. However a previous iteration of the for loop may have added checksums to the ordered_sums list, in which case we leak the memory used by them. So fix this by making sure we iterate the ordered_sums list and free all its checksums before returning. Fixes: 3650860b90cc2a ("Btrfs: remove almost all of the BUG()'s from tree-log.c") CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Johannes Thumshirn Signed-off-by: Filipe Manana Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/tree-log.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 92e38ed19aa1..3c090549ed07 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -4040,11 +4040,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans, fs_info->csum_root, ds + cs, ds + cs + cl - 1, &ordered_sums, 0); - if (ret) { - btrfs_release_path(dst_path); - kfree(ins_data); - return ret; - } + if (ret) + break; } } } @@ -4057,7 +4054,6 @@ static noinline int copy_items(struct btrfs_trans_handle *trans, * we have to do this after the loop above to avoid changing the * log tree while trying to change the log tree. */ - ret = 0; while (!list_empty(&ordered_sums)) { struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next, struct btrfs_ordered_sum, From d256992d5105d9d9882f9815a32ff181205e83ff Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Thu, 30 Jul 2020 11:18:09 -0400 Subject: [PATCH 325/448] btrfs: make sure SB_I_VERSION doesn't get unset by remount commit faa008899a4db21a2df99833cb4ff6fa67009a20 upstream. There's some inconsistency around SB_I_VERSION handling with mount and remount. Since we don't really want it to be off ever just work around this by making sure we don't get the flag cleared on remount. There's a tiny cpu cost of setting the bit, otherwise all changes to i_version also change some of the times (ctime/mtime) so the inode needs to be synced. We wouldn't save anything by disabling it. Reported-by: Eric Sandeen CC: stable@vger.kernel.org # 5.4+ Signed-off-by: Josef Bacik Reviewed-by: David Sterba [ add perf impact analysis ] Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/super.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 6bf45941b49d..4b0ee34aa65d 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1852,6 +1852,12 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data) set_bit(BTRFS_FS_OPEN, &fs_info->flags); } out: + /* + * We need to set SB_I_VERSION here otherwise it'll get cleared by VFS, + * since the absence of the flag means it can be toggled off by remount. + */ + *flags |= SB_I_VERSION; + wake_up_process(fs_info->transaction_kthread); btrfs_remount_cleanup(fs_info, old_opts); return 0; From 8c143122137487e3456e662bb1cd44f8b6236622 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Mon, 3 Aug 2020 11:35:06 +0200 Subject: [PATCH 326/448] btrfs: fix return value mixup in btrfs_get_extent commit 881a3a11c2b858fe9b69ef79ac5ee9978a266dc9 upstream. btrfs_get_extent() sets variable ret, but out: error path expect error to be in variable err so the error code is lost. Fixes: 6bf9e4bd6a27 ("btrfs: inode: Verify inode mode to avoid NULL pointer dereference") CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Nikolay Borisov Signed-off-by: Pavel Machek (CIP) Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 6ec937d06d41..fa7f3a59813e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -7194,7 +7194,7 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode, extent_type == BTRFS_FILE_EXTENT_PREALLOC) { /* Only regular file could have regular/prealloc extent */ if (!S_ISREG(inode->vfs_inode.i_mode)) { - ret = -EUCLEAN; + err = -EUCLEAN; btrfs_crit(fs_info, "regular/prealloc extent found for non-regular inode %llu", btrfs_ino(inode)); From ab58cc0331245bdca22b882f8e6ece7597cefdf4 Mon Sep 17 00:00:00 2001 From: Shaokun Zhang Date: Thu, 18 Jun 2020 21:35:44 +0800 Subject: [PATCH 327/448] arm64: perf: Correct the event index in sysfs commit 539707caa1a89ee4efc57b4e4231c20c46575ccc upstream. When PMU event ID is equal or greater than 0x4000, it will be reduced by 0x4000 and it is not the raw number in the sysfs. Let's correct it and obtain the raw event ID. Before this patch: cat /sys/bus/event_source/devices/armv8_pmuv3_0/events/sample_feed event=0x001 After this patch: cat /sys/bus/event_source/devices/armv8_pmuv3_0/events/sample_feed event=0x4001 Signed-off-by: Shaokun Zhang Cc: Will Deacon Cc: Mark Rutland Cc: Link: https://lore.kernel.org/r/1592487344-30555-3-git-send-email-zhangshaokun@hisilicon.com [will: fixed formatting of 'if' condition] Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- arch/arm64/kernel/perf_event.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c index a0b4f1bca491..19128d994ee9 100644 --- a/arch/arm64/kernel/perf_event.c +++ b/arch/arm64/kernel/perf_event.c @@ -155,7 +155,7 @@ armv8pmu_events_sysfs_show(struct device *dev, pmu_attr = container_of(attr, struct perf_pmu_events_attr, attr); - return sprintf(page, "event=0x%03llx\n", pmu_attr->id); + return sprintf(page, "event=0x%04llx\n", pmu_attr->id); } #define ARMV8_EVENT_ATTR(name, config) \ @@ -303,10 +303,13 @@ armv8pmu_event_attr_is_visible(struct kobject *kobj, test_bit(pmu_attr->id, cpu_pmu->pmceid_bitmap)) return attr->mode; - pmu_attr->id -= ARMV8_PMUV3_EXT_COMMON_EVENT_BASE; - if (pmu_attr->id < ARMV8_PMUV3_MAX_COMMON_EVENTS && - test_bit(pmu_attr->id, cpu_pmu->pmceid_ext_bitmap)) - return attr->mode; + if (pmu_attr->id >= ARMV8_PMUV3_EXT_COMMON_EVENT_BASE) { + u64 id = pmu_attr->id - ARMV8_PMUV3_EXT_COMMON_EVENT_BASE; + + if (id < ARMV8_PMUV3_MAX_COMMON_EVENTS && + test_bit(id, cpu_pmu->pmceid_ext_bitmap)) + return attr->mode; + } return 0; } From 1a5e5b3b7571c67978ed5988bb5c6643844d4f00 Mon Sep 17 00:00:00 2001 From: Christian Eggers Date: Mon, 27 Jul 2020 12:16:05 +0200 Subject: [PATCH 328/448] dt-bindings: iio: io-channel-mux: Fix compatible string in example code commit add48ba425192c6e04ce70549129cacd01e2a09e upstream. The correct compatible string is "gpio-mux" (see bindings/mux/gpio-mux.txt). Cc: stable@vger.kernel.org # v4.13+ Reviewed-by: Peter Rosin Signed-off-by: Christian Eggers Link: https://lore.kernel.org/r/20200727101605.24384-1-ceggers@arri.de Signed-off-by: Rob Herring Signed-off-by: Greg Kroah-Hartman --- .../devicetree/bindings/iio/multiplexer/io-channel-mux.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt index c82794002595..89647d714387 100644 --- a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt +++ b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt @@ -21,7 +21,7 @@ controller state. The mux controller state is described in Example: mux: mux-controller { - compatible = "mux-gpio"; + compatible = "gpio-mux"; #mux-control-cells = <0>; mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>, From 5efb3f91403c7b9339291e4c437e114403471fb7 Mon Sep 17 00:00:00 2001 From: Alexandru Ardelean Date: Mon, 6 Jul 2020 14:02:57 +0300 Subject: [PATCH 329/448] iio: dac: ad5592r: fix unbalanced mutex unlocks in ad5592r_read_raw() commit 65afb0932a81c1de719ceee0db0b276094b10ac8 upstream. There are 2 exit paths where the lock isn't held, but try to unlock the mutex when exiting. In these places we should just return from the function. A neater approach would be to cleanup the ad5592r_read_raw(), but that would make this patch more difficult to backport to stable versions. Fixes 56ca9db862bf3: ("iio: dac: Add support for the AD5592R/AD5593R ADCs/DACs") Reported-by: Charles Stanhope Signed-off-by: Alexandru Ardelean Cc: Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- drivers/iio/dac/ad5592r-base.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/iio/dac/ad5592r-base.c b/drivers/iio/dac/ad5592r-base.c index 2d897e64c6a9..424922cad1e3 100644 --- a/drivers/iio/dac/ad5592r-base.c +++ b/drivers/iio/dac/ad5592r-base.c @@ -416,7 +416,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, s64 tmp = *val * (3767897513LL / 25LL); *val = div_s64_rem(tmp, 1000000000LL, val2); - ret = IIO_VAL_INT_PLUS_MICRO; + return IIO_VAL_INT_PLUS_MICRO; } else { int mult; @@ -447,7 +447,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, ret = IIO_VAL_INT; break; default: - ret = -EINVAL; + return -EINVAL; } unlock: From d1e2ec2e0b7d4e8dc960bca3ad4e1c33decba13f Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Fri, 31 Jul 2020 12:38:05 -0700 Subject: [PATCH 330/448] xtensa: add missing exclusive access state management commit a0fc1436f1f4f84e93144480bf30e0c958d135b6 upstream. The result of the s32ex opcode is recorded in the ATOMCTL special register and must be retrieved with the getex opcode. Context switch between s32ex and getex may trash the ATOMCTL register and result in duplicate update or missing update of the atomic variable. Add atomctl8 field to the struct thread_info and use getex to swap ATOMCTL bit 8 as a part of context switch. Clear exclusive access monitor on kernel entry. Cc: stable@vger.kernel.org Fixes: f7c34874f04a ("xtensa: add exclusive atomics support") Signed-off-by: Max Filippov Signed-off-by: Greg Kroah-Hartman --- arch/xtensa/include/asm/thread_info.h | 4 ++++ arch/xtensa/kernel/asm-offsets.c | 3 +++ arch/xtensa/kernel/entry.S | 11 +++++++++++ 3 files changed, 18 insertions(+) diff --git a/arch/xtensa/include/asm/thread_info.h b/arch/xtensa/include/asm/thread_info.h index f092cc3f4e66..956d4d47c6cd 100644 --- a/arch/xtensa/include/asm/thread_info.h +++ b/arch/xtensa/include/asm/thread_info.h @@ -55,6 +55,10 @@ struct thread_info { mm_segment_t addr_limit; /* thread address space */ unsigned long cpenable; +#if XCHAL_HAVE_EXCLUSIVE + /* result of the most recent exclusive store */ + unsigned long atomctl8; +#endif /* Allocate storage for extra user states and coprocessor states. */ #if XTENSA_HAVE_COPROCESSORS diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c index 33a257b33723..dc5c83cad9be 100644 --- a/arch/xtensa/kernel/asm-offsets.c +++ b/arch/xtensa/kernel/asm-offsets.c @@ -93,6 +93,9 @@ int main(void) DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra)); DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp)); DEFINE(THREAD_CPENABLE, offsetof (struct thread_info, cpenable)); +#if XCHAL_HAVE_EXCLUSIVE + DEFINE(THREAD_ATOMCTL8, offsetof (struct thread_info, atomctl8)); +#endif #if XTENSA_HAVE_COPROCESSORS DEFINE(THREAD_XTREGS_CP0, offsetof(struct thread_info, xtregs_cp.cp0)); DEFINE(THREAD_XTREGS_CP1, offsetof(struct thread_info, xtregs_cp.cp1)); diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S index 9e3676879168..59671603c9c6 100644 --- a/arch/xtensa/kernel/entry.S +++ b/arch/xtensa/kernel/entry.S @@ -374,6 +374,11 @@ common_exception: s32i a2, a1, PT_LCOUNT #endif +#if XCHAL_HAVE_EXCLUSIVE + /* Clear exclusive access monitor set by interrupted code */ + clrex +#endif + /* It is now save to restore the EXC_TABLE_FIXUP variable. */ rsr a2, exccause @@ -2024,6 +2029,12 @@ ENTRY(_switch_to) s32i a3, a4, THREAD_CPENABLE #endif +#if XCHAL_HAVE_EXCLUSIVE + l32i a3, a5, THREAD_ATOMCTL8 + getex a3 + s32i a3, a4, THREAD_ATOMCTL8 +#endif + /* Flush register file. */ spill_registers_kernel From 545771537ec4dca6ae123ad95c0b0ea5191b9e98 Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Fri, 31 Jul 2020 12:37:32 -0700 Subject: [PATCH 331/448] xtensa: fix xtensa_pmu_setup prototype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 6d65d3769d1910379e1cfa61ebf387efc6bfb22c upstream. Fix the following build error in configurations with CONFIG_XTENSA_VARIANT_HAVE_PERF_EVENTS=y: arch/xtensa/kernel/perf_event.c:420:29: error: passing argument 3 of ‘cpuhp_setup_state’ from incompatible pointer type Cc: stable@vger.kernel.org Fixes: 25a77b55e74c ("xtensa/perf: Convert the hotplug notifier to state machine callbacks") Signed-off-by: Max Filippov Signed-off-by: Greg Kroah-Hartman --- arch/xtensa/kernel/perf_event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/xtensa/kernel/perf_event.c b/arch/xtensa/kernel/perf_event.c index 9bae79f70301..86c9ba963155 100644 --- a/arch/xtensa/kernel/perf_event.c +++ b/arch/xtensa/kernel/perf_event.c @@ -401,7 +401,7 @@ static struct pmu xtensa_pmu = { .read = xtensa_pmu_read, }; -static int xtensa_pmu_setup(int cpu) +static int xtensa_pmu_setup(unsigned int cpu) { unsigned i; From 7a991df9e5cb9d84a6be98f4a56c639431c726c3 Mon Sep 17 00:00:00 2001 From: Paul Aurich Date: Thu, 9 Jul 2020 22:01:16 -0700 Subject: [PATCH 332/448] cifs: Fix leak when handling lease break for cached root fid commit baf57b56d3604880ccb3956ec6c62ea894f5de99 upstream. Handling a lease break for the cached root didn't free the smb2_lease_break_work allocation, resulting in a leak: unreferenced object 0xffff98383a5af480 (size 128): comm "cifsd", pid 684, jiffies 4294936606 (age 534.868s) hex dump (first 32 bytes): c0 ff ff ff 1f 00 00 00 88 f4 5a 3a 38 98 ff ff ..........Z:8... 88 f4 5a 3a 38 98 ff ff 80 88 d6 8a ff ff ff ff ..Z:8........... backtrace: [<0000000068957336>] smb2_is_valid_oplock_break+0x1fa/0x8c0 [<0000000073b70b9e>] cifs_demultiplex_thread+0x73d/0xcc0 [<00000000905fa372>] kthread+0x11c/0x150 [<0000000079378e4e>] ret_from_fork+0x22/0x30 Avoid this leak by only allocating when necessary. Fixes: a93864d93977 ("cifs: add lease tracking to the cached root fid") Signed-off-by: Paul Aurich CC: Stable # v4.18+ Reviewed-by: Aurelien Aptel Signed-off-by: Steve French Signed-off-by: Greg Kroah-Hartman --- fs/cifs/smb2misc.c | 75 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c index 14265b4bbcc0..2fc96f7923ee 100644 --- a/fs/cifs/smb2misc.c +++ b/fs/cifs/smb2misc.c @@ -509,15 +509,31 @@ cifs_ses_oplock_break(struct work_struct *work) kfree(lw); } -static bool -smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp, - struct smb2_lease_break_work *lw) +static void +smb2_queue_pending_open_break(struct tcon_link *tlink, __u8 *lease_key, + __le32 new_lease_state) +{ + struct smb2_lease_break_work *lw; + + lw = kmalloc(sizeof(struct smb2_lease_break_work), GFP_KERNEL); + if (!lw) { + cifs_put_tlink(tlink); + return; + } + + INIT_WORK(&lw->lease_break, cifs_ses_oplock_break); + lw->tlink = tlink; + lw->lease_state = new_lease_state; + memcpy(lw->lease_key, lease_key, SMB2_LEASE_KEY_SIZE); + queue_work(cifsiod_wq, &lw->lease_break); +} + +static bool +smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp) { - bool found; __u8 lease_state; struct list_head *tmp; struct cifsFileInfo *cfile; - struct cifs_pending_open *open; struct cifsInodeInfo *cinode; int ack_req = le32_to_cpu(rsp->Flags & SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED); @@ -556,22 +572,29 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp, &cinode->flags); cifs_queue_oplock_break(cfile); - kfree(lw); return true; } - found = false; + return false; +} + +static struct cifs_pending_open * +smb2_tcon_find_pending_open_lease(struct cifs_tcon *tcon, + struct smb2_lease_break *rsp) +{ + __u8 lease_state = le32_to_cpu(rsp->NewLeaseState); + int ack_req = le32_to_cpu(rsp->Flags & + SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED); + struct cifs_pending_open *open; + struct cifs_pending_open *found = NULL; + list_for_each_entry(open, &tcon->pending_opens, olist) { if (memcmp(open->lease_key, rsp->LeaseKey, SMB2_LEASE_KEY_SIZE)) continue; if (!found && ack_req) { - found = true; - memcpy(lw->lease_key, open->lease_key, - SMB2_LEASE_KEY_SIZE); - lw->tlink = cifs_get_tlink(open->tlink); - queue_work(cifsiod_wq, &lw->lease_break); + found = open; } cifs_dbg(FYI, "found in the pending open list\n"); @@ -592,14 +615,7 @@ smb2_is_valid_lease_break(char *buffer) struct TCP_Server_Info *server; struct cifs_ses *ses; struct cifs_tcon *tcon; - struct smb2_lease_break_work *lw; - - lw = kmalloc(sizeof(struct smb2_lease_break_work), GFP_KERNEL); - if (!lw) - return false; - - INIT_WORK(&lw->lease_break, cifs_ses_oplock_break); - lw->lease_state = rsp->NewLeaseState; + struct cifs_pending_open *open; cifs_dbg(FYI, "Checking for lease break\n"); @@ -617,11 +633,27 @@ smb2_is_valid_lease_break(char *buffer) spin_lock(&tcon->open_file_lock); cifs_stats_inc( &tcon->stats.cifs_stats.num_oplock_brks); - if (smb2_tcon_has_lease(tcon, rsp, lw)) { + if (smb2_tcon_has_lease(tcon, rsp)) { spin_unlock(&tcon->open_file_lock); spin_unlock(&cifs_tcp_ses_lock); return true; } + open = smb2_tcon_find_pending_open_lease(tcon, + rsp); + if (open) { + __u8 lease_key[SMB2_LEASE_KEY_SIZE]; + struct tcon_link *tlink; + + tlink = cifs_get_tlink(open->tlink); + memcpy(lease_key, open->lease_key, + SMB2_LEASE_KEY_SIZE); + spin_unlock(&tcon->open_file_lock); + spin_unlock(&cifs_tcp_ses_lock); + smb2_queue_pending_open_break(tlink, + lease_key, + rsp->NewLeaseState); + return true; + } spin_unlock(&tcon->open_file_lock); if (tcon->crfid.is_valid && @@ -639,7 +671,6 @@ smb2_is_valid_lease_break(char *buffer) } } spin_unlock(&cifs_tcp_ses_lock); - kfree(lw); cifs_dbg(FYI, "Can not process lease break - no lease matched\n"); return false; } From 2150c25b76fbd9cb8f9ad74d7e43e58210b6e36e Mon Sep 17 00:00:00 2001 From: Christophe Leroy Date: Mon, 15 Jun 2020 13:18:39 +0000 Subject: [PATCH 333/448] powerpc/ptdump: Fix build failure in hashpagetable.c commit 7c466b0807960edc13e4b855be85ea765df9a6cd upstream. H_SUCCESS is only defined when CONFIG_PPC_PSERIES is defined. != H_SUCCESS means != 0. Modify the test accordingly. Fixes: 65e701b2d2a8 ("powerpc/ptdump: drop non vital #ifdefs") Cc: stable@vger.kernel.org Reported-by: kernel test robot Signed-off-by: Christophe Leroy Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/795158fc1d2b3dff3bf7347881947a887ea9391a.1592227105.git.christophe.leroy@csgroup.eu Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/mm/ptdump/hashpagetable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/mm/ptdump/hashpagetable.c b/arch/powerpc/mm/ptdump/hashpagetable.c index a07278027c6f..a2e8c3b2cf35 100644 --- a/arch/powerpc/mm/ptdump/hashpagetable.c +++ b/arch/powerpc/mm/ptdump/hashpagetable.c @@ -259,7 +259,7 @@ static int pseries_find(unsigned long ea, int psize, bool primary, u64 *v, u64 * for (i = 0; i < HPTES_PER_GROUP; i += 4, hpte_group += 4) { lpar_rc = plpar_pte_read_4(0, hpte_group, (void *)ptes); - if (lpar_rc != H_SUCCESS) + if (lpar_rc) continue; for (j = 0; j < 4; j++) { if (HPTE_V_COMPARE(ptes[j].v, want_v) && From 9de20a6c4dd67c2b0c3062f88d5740dfaf98fe2e Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Fri, 24 Jul 2020 19:25:25 +1000 Subject: [PATCH 334/448] powerpc: Allow 4224 bytes of stack expansion for the signal frame commit 63dee5df43a31f3844efabc58972f0a206ca4534 upstream. We have powerpc specific logic in our page fault handling to decide if an access to an unmapped address below the stack pointer should expand the stack VMA. The code was originally added in 2004 "ported from 2.4". The rough logic is that the stack is allowed to grow to 1MB with no extra checking. Over 1MB the access must be within 2048 bytes of the stack pointer, or be from a user instruction that updates the stack pointer. The 2048 byte allowance below the stack pointer is there to cover the 288 byte "red zone" as well as the "about 1.5kB" needed by the signal delivery code. Unfortunately since then the signal frame has expanded, and is now 4224 bytes on 64-bit kernels with transactional memory enabled. This means if a process has consumed more than 1MB of stack, and its stack pointer lies less than 4224 bytes from the next page boundary, signal delivery will fault when trying to expand the stack and the process will see a SEGV. The total size of the signal frame is the size of struct rt_sigframe (which includes the red zone) plus __SIGNAL_FRAMESIZE (128 bytes on 64-bit). The 2048 byte allowance was correct until 2008 as the signal frame was: struct rt_sigframe { struct ucontext uc; /* 0 1440 */ /* --- cacheline 11 boundary (1408 bytes) was 32 bytes ago --- */ long unsigned int _unused[2]; /* 1440 16 */ unsigned int tramp[6]; /* 1456 24 */ struct siginfo * pinfo; /* 1480 8 */ void * puc; /* 1488 8 */ struct siginfo info; /* 1496 128 */ /* --- cacheline 12 boundary (1536 bytes) was 88 bytes ago --- */ char abigap[288]; /* 1624 288 */ /* size: 1920, cachelines: 15, members: 7 */ /* padding: 8 */ }; 1920 + 128 = 2048 Then in commit ce48b2100785 ("powerpc: Add VSX context save/restore, ptrace and signal support") (Jul 2008) the signal frame expanded to 2304 bytes: struct rt_sigframe { struct ucontext uc; /* 0 1696 */ <-- /* --- cacheline 13 boundary (1664 bytes) was 32 bytes ago --- */ long unsigned int _unused[2]; /* 1696 16 */ unsigned int tramp[6]; /* 1712 24 */ struct siginfo * pinfo; /* 1736 8 */ void * puc; /* 1744 8 */ struct siginfo info; /* 1752 128 */ /* --- cacheline 14 boundary (1792 bytes) was 88 bytes ago --- */ char abigap[288]; /* 1880 288 */ /* size: 2176, cachelines: 17, members: 7 */ /* padding: 8 */ }; 2176 + 128 = 2304 At this point we should have been exposed to the bug, though as far as I know it was never reported. I no longer have a system old enough to easily test on. Then in 2010 commit 320b2b8de126 ("mm: keep a guard page below a grow-down stack segment") caused our stack expansion code to never trigger, as there was always a VMA found for a write up to PAGE_SIZE below r1. That meant the bug was hidden as we continued to expand the signal frame in commit 2b0a576d15e0 ("powerpc: Add new transactional memory state to the signal context") (Feb 2013): struct rt_sigframe { struct ucontext uc; /* 0 1696 */ /* --- cacheline 13 boundary (1664 bytes) was 32 bytes ago --- */ struct ucontext uc_transact; /* 1696 1696 */ <-- /* --- cacheline 26 boundary (3328 bytes) was 64 bytes ago --- */ long unsigned int _unused[2]; /* 3392 16 */ unsigned int tramp[6]; /* 3408 24 */ struct siginfo * pinfo; /* 3432 8 */ void * puc; /* 3440 8 */ struct siginfo info; /* 3448 128 */ /* --- cacheline 27 boundary (3456 bytes) was 120 bytes ago --- */ char abigap[288]; /* 3576 288 */ /* size: 3872, cachelines: 31, members: 8 */ /* padding: 8 */ /* last cacheline: 32 bytes */ }; 3872 + 128 = 4000 And commit 573ebfa6601f ("powerpc: Increase stack redzone for 64-bit userspace to 512 bytes") (Feb 2014): struct rt_sigframe { struct ucontext uc; /* 0 1696 */ /* --- cacheline 13 boundary (1664 bytes) was 32 bytes ago --- */ struct ucontext uc_transact; /* 1696 1696 */ /* --- cacheline 26 boundary (3328 bytes) was 64 bytes ago --- */ long unsigned int _unused[2]; /* 3392 16 */ unsigned int tramp[6]; /* 3408 24 */ struct siginfo * pinfo; /* 3432 8 */ void * puc; /* 3440 8 */ struct siginfo info; /* 3448 128 */ /* --- cacheline 27 boundary (3456 bytes) was 120 bytes ago --- */ char abigap[512]; /* 3576 512 */ <-- /* size: 4096, cachelines: 32, members: 8 */ /* padding: 8 */ }; 4096 + 128 = 4224 Then finally in 2017, commit 1be7107fbe18 ("mm: larger stack guard gap, between vmas") exposed us to the existing bug, because it changed the stack VMA to be the correct/real size, meaning our stack expansion code is now triggered. Fix it by increasing the allowance to 4224 bytes. Hard-coding 4224 is obviously unsafe against future expansions of the signal frame in the same way as the existing code. We can't easily use sizeof() because the signal frame structure is not in a header. We will either fix that, or rip out all the custom stack expansion checking logic entirely. Fixes: ce48b2100785 ("powerpc: Add VSX context save/restore, ptrace and signal support") Cc: stable@vger.kernel.org # v2.6.27+ Reported-by: Tom Lane Tested-by: Daniel Axtens Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200724092528.1578671-2-mpe@ellerman.id.au Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/mm/fault.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 881a026a603a..187047592d53 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -241,6 +241,9 @@ static bool bad_kernel_fault(struct pt_regs *regs, unsigned long error_code, return false; } +// This comes from 64-bit struct rt_sigframe + __SIGNAL_FRAMESIZE +#define SIGFRAME_MAX_SIZE (4096 + 128) + static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address, struct vm_area_struct *vma, unsigned int flags, bool *must_retry) @@ -248,7 +251,7 @@ static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address, /* * N.B. The POWER/Open ABI allows programs to access up to * 288 bytes below the stack pointer. - * The kernel signal delivery code writes up to about 1.5kB + * The kernel signal delivery code writes a bit over 4KB * below the stack pointer (r1) before decrementing it. * The exec code can write slightly over 640kB to the stack * before setting the user r1. Thus we allow the stack to @@ -273,7 +276,7 @@ static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address, * between the last mapped region and the stack will * expand the stack rather than segfaulting. */ - if (address + 2048 >= uregs->gpr[1]) + if (address + SIGFRAME_MAX_SIZE >= uregs->gpr[1]) return false; if ((flags & FAULT_FLAG_WRITE) && (flags & FAULT_FLAG_USER) && From 9ba5f37fa353666c114653aa6d9888dcea421a0c Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Tue, 4 Aug 2020 22:44:06 +1000 Subject: [PATCH 335/448] powerpc: Fix circular dependency between percpu.h and mmu.h commit 0c83b277ada72b585e6a3e52b067669df15bcedb upstream. Recently random.h started including percpu.h (see commit f227e3ec3b5c ("random32: update the net random state on interrupt and activity")), which broke corenet64_smp_defconfig: In file included from /linux/arch/powerpc/include/asm/paca.h:18, from /linux/arch/powerpc/include/asm/percpu.h:13, from /linux/include/linux/random.h:14, from /linux/lib/uuid.c:14: /linux/arch/powerpc/include/asm/mmu.h:139:22: error: unknown type name 'next_tlbcam_idx' 139 | DECLARE_PER_CPU(int, next_tlbcam_idx); This is due to a circular header dependency: asm/mmu.h includes asm/percpu.h, which includes asm/paca.h, which includes asm/mmu.h Which means DECLARE_PER_CPU() isn't defined when mmu.h needs it. We can fix it by moving the include of paca.h below the include of asm-generic/percpu.h. This moves the include of paca.h out of the #ifdef __powerpc64__, but that is OK because paca.h is almost entirely inside #ifdef CONFIG_PPC64 anyway. It also moves the include of paca.h out of the #ifdef CONFIG_SMP, which could possibly break something, but seems to have no ill effects. Fixes: f227e3ec3b5c ("random32: update the net random state on interrupt and activity") Cc: stable@vger.kernel.org # v5.8 Reported-by: Stephen Rothwell Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200804130558.292328-1-mpe@ellerman.id.au Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/include/asm/percpu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/include/asm/percpu.h b/arch/powerpc/include/asm/percpu.h index dce863a7635c..8e5b7d0b851c 100644 --- a/arch/powerpc/include/asm/percpu.h +++ b/arch/powerpc/include/asm/percpu.h @@ -10,8 +10,6 @@ #ifdef CONFIG_SMP -#include - #define __my_cpu_offset local_paca->data_offset #endif /* CONFIG_SMP */ @@ -19,4 +17,6 @@ #include +#include + #endif /* _ASM_POWERPC_PERCPU_H_ */ From 28bbbc45054cc650a1cb2e4d50e77571bc6c7484 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Mon, 22 Jun 2020 23:45:47 +0200 Subject: [PATCH 336/448] pinctrl: ingenic: Enhance support for IRQ_TYPE_EDGE_BOTH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 1c95348ba327fe8621d3680890c2341523d3524a upstream. Ingenic SoCs don't natively support registering an interrupt for both rising and falling edges. This has to be emulated in software. Until now, this was emulated by switching back and forth between IRQ_TYPE_EDGE_RISING and IRQ_TYPE_EDGE_FALLING according to the level of the GPIO. While this worked most of the time, when used with GPIOs that need debouncing, some events would be lost. For instance, between the time a falling-edge interrupt happens and the interrupt handler configures the hardware for rising-edge, the level of the pin may have already risen, and the rising-edge event is lost. To address that issue, instead of switching back and forth between IRQ_TYPE_EDGE_RISING and IRQ_TYPE_EDGE_FALLING, we now switch back and forth between IRQ_TYPE_LEVEL_LOW and IRQ_TYPE_LEVEL_HIGH. Since we always switch in the interrupt handler, they actually permit to detect level changes. In the example above, if the pin level rises before switching the IRQ type from IRQ_TYPE_LEVEL_LOW to IRQ_TYPE_LEVEL_HIGH, a new interrupt will raise as soon as the handler exits, and the rising-edge event will be properly detected. Fixes: e72394e2ea19 ("pinctrl: ingenic: Merge GPIO functionality") Reported-by: João Henrique Signed-off-by: Paul Cercueil Tested-by: João Henrique Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200622214548.265417-1-paul@crapouillou.net Signed-off-by: Linus Walleij Signed-off-by: Greg Kroah-Hartman --- drivers/pinctrl/pinctrl-ingenic.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/pinctrl/pinctrl-ingenic.c b/drivers/pinctrl/pinctrl-ingenic.c index 6e2683016c1f..e5600f65709b 100644 --- a/drivers/pinctrl/pinctrl-ingenic.c +++ b/drivers/pinctrl/pinctrl-ingenic.c @@ -1500,9 +1500,9 @@ static void ingenic_gpio_irq_ack(struct irq_data *irqd) */ high = ingenic_gpio_get_value(jzgc, irq); if (high) - irq_set_type(jzgc, irq, IRQ_TYPE_EDGE_FALLING); + irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_LOW); else - irq_set_type(jzgc, irq, IRQ_TYPE_EDGE_RISING); + irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_HIGH); } if (jzgc->jzpc->version >= ID_JZ4760) @@ -1538,7 +1538,7 @@ static int ingenic_gpio_irq_set_type(struct irq_data *irqd, unsigned int type) */ bool high = ingenic_gpio_get_value(jzgc, irqd->hwirq); - type = high ? IRQ_TYPE_EDGE_FALLING : IRQ_TYPE_EDGE_RISING; + type = high ? IRQ_TYPE_LEVEL_LOW : IRQ_TYPE_LEVEL_HIGH; } irq_set_type(jzgc, irqd->hwirq, type); From eca5084aabdfa4b087b6e41892ef9fe54b95f06d Mon Sep 17 00:00:00 2001 From: Eugeniu Rosca Date: Tue, 2 Jun 2020 21:50:16 +0200 Subject: [PATCH 337/448] media: vsp1: dl: Fix NULL pointer dereference on unbind commit c92d30e4b78dc331909f8c6056c2792aa14e2166 upstream. In commit f3b98e3c4d2e16 ("media: vsp1: Provide support for extended command pools"), the vsp pointer used for referencing the VSP1 device structure from a command pool during vsp1_dl_ext_cmd_pool_destroy() was not populated. Correctly assign the pointer to prevent the following null-pointer-dereference when removing the device: [*] h3ulcb-kf #> echo fea28000.vsp > /sys/bus/platform/devices/fea28000.vsp/driver/unbind Unable to handle kernel NULL pointer dereference at virtual address 0000000000000028 Mem abort info: ESR = 0x96000006 EC = 0x25: DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 Data abort info: ISV = 0, ISS = 0x00000006 CM = 0, WnR = 0 user pgtable: 4k pages, 48-bit VAs, pgdp=00000007318be000 [0000000000000028] pgd=00000007333a1003, pud=00000007333a6003, pmd=0000000000000000 Internal error: Oops: 96000006 [#1] PREEMPT SMP Modules linked in: CPU: 1 PID: 486 Comm: sh Not tainted 5.7.0-rc6-arm64-renesas-00118-ge644645abf47 #185 Hardware name: Renesas H3ULCB Kingfisher board based on r8a77951 (DT) pstate: 40000005 (nZcv daif -PAN -UAO) pc : vsp1_dlm_destroy+0xe4/0x11c lr : vsp1_dlm_destroy+0xc8/0x11c sp : ffff800012963b60 x29: ffff800012963b60 x28: ffff0006f83fc440 x27: 0000000000000000 x26: ffff0006f5e13e80 x25: ffff0006f5e13ed0 x24: ffff0006f5e13ed0 x23: ffff0006f5e13ed0 x22: dead000000000122 x21: ffff0006f5e3a080 x20: ffff0006f5df2938 x19: ffff0006f5df2980 x18: 0000000000000003 x17: 0000000000000000 x16: 0000000000000016 x15: 0000000000000003 x14: 00000000000393c0 x13: ffff800011a5ec18 x12: ffff800011d8d000 x11: ffff0006f83fcc68 x10: ffff800011a53d70 x9 : ffff8000111f3000 x8 : 0000000000000000 x7 : 0000000000210d00 x6 : 0000000000000000 x5 : ffff800010872e60 x4 : 0000000000000004 x3 : 0000000078068000 x2 : ffff800012781000 x1 : 0000000000002c00 x0 : 0000000000000000 Call trace: vsp1_dlm_destroy+0xe4/0x11c vsp1_wpf_destroy+0x10/0x20 vsp1_entity_destroy+0x24/0x4c vsp1_destroy_entities+0x54/0x130 vsp1_remove+0x1c/0x40 platform_drv_remove+0x28/0x50 __device_release_driver+0x178/0x220 device_driver_detach+0x44/0xc0 unbind_store+0xe0/0x104 drv_attr_store+0x20/0x30 sysfs_kf_write+0x48/0x70 kernfs_fop_write+0x148/0x230 __vfs_write+0x18/0x40 vfs_write+0xdc/0x1c4 ksys_write+0x68/0xf0 __arm64_sys_write+0x18/0x20 el0_svc_common.constprop.0+0x70/0x170 do_el0_svc+0x20/0x80 el0_sync_handler+0x134/0x1b0 el0_sync+0x140/0x180 Code: b40000c2 f9403a60 d2800084 a9400663 (f9401400) ---[ end trace 3875369841fb288a ]--- Fixes: f3b98e3c4d2e16 ("media: vsp1: Provide support for extended command pools") Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Eugeniu Rosca Reviewed-by: Kieran Bingham Tested-by: Kieran Bingham Reviewed-by: Laurent Pinchart Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Greg Kroah-Hartman --- drivers/media/platform/vsp1/vsp1_dl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/platform/vsp1/vsp1_dl.c b/drivers/media/platform/vsp1/vsp1_dl.c index d7b43037e500..e07b135613eb 100644 --- a/drivers/media/platform/vsp1/vsp1_dl.c +++ b/drivers/media/platform/vsp1/vsp1_dl.c @@ -431,6 +431,8 @@ vsp1_dl_cmd_pool_create(struct vsp1_device *vsp1, enum vsp1_extcmd_type type, if (!pool) return NULL; + pool->vsp1 = vsp1; + spin_lock_init(&pool->lock); INIT_LIST_HEAD(&pool->free); From e92a02e47e16d11fd6c8f970269a489e20c8849b Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Wed, 12 Aug 2020 20:37:23 +0100 Subject: [PATCH 338/448] net: ethernet: stmmac: Disable hardware multicast filter commit df43dd526e6609769ae513a81443c7aa727c8ca3 upstream. The IPQ806x does not appear to have a functional multicast ethernet address filter. This was observed as a failure to correctly receive IPv6 packets on a LAN to the all stations address. Checking the vendor driver shows that it does not attempt to enable the multicast filter and instead falls back to receiving all multicast packets, internally setting ALLMULTI. Use the new fallback support in the dwmac1000 driver to correctly achieve the same with the mainline IPQ806x driver. Confirmed to fix IPv6 functionality on an RB3011 router. Cc: stable@vger.kernel.org Signed-off-by: Jonathan McDowell Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c index 4d75158c64b2..826626e870d5 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c @@ -350,6 +350,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev) plat_dat->has_gmac = true; plat_dat->bsp_priv = gmac; plat_dat->fix_mac_speed = ipq806x_gmac_fix_mac_speed; + plat_dat->multicast_filter_bins = 0; err = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); if (err) From 6ea125ec644b1af4b1704b0a35d42ad4820dca5b Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Wed, 12 Aug 2020 20:37:01 +0100 Subject: [PATCH 339/448] net: stmmac: dwmac1000: provide multicast filter fallback commit 592d751c1e174df5ff219946908b005eb48934b3 upstream. If we don't have a hardware multicast filter available then instead of silently failing to listen for the requested ethernet broadcast addresses fall back to receiving all multicast packets, in a similar fashion to other drivers with no multicast filter. Cc: stable@vger.kernel.org Signed-off-by: Jonathan McDowell Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c index bc9b01376e80..1d0b64bd1e1a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c @@ -166,6 +166,9 @@ static void dwmac1000_set_filter(struct mac_device_info *hw, value = GMAC_FRAME_FILTER_PR | GMAC_FRAME_FILTER_PCF; } else if (dev->flags & IFF_ALLMULTI) { value = GMAC_FRAME_FILTER_PM; /* pass all multi */ + } else if (!netdev_mc_empty(dev) && (mcbitslog2 == 0)) { + /* Fall back to all multicast if we've no filter */ + value = GMAC_FRAME_FILTER_PM; } else if (!netdev_mc_empty(dev)) { struct netdev_hw_addr *ha; From 28163868530bf419de6332d5f4c71eac9451dc72 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Tue, 9 Jun 2020 16:11:29 -0700 Subject: [PATCH 340/448] net/compat: Add missing sock updates for SCM_RIGHTS commit d9539752d23283db4692384a634034f451261e29 upstream. Add missed sock updates to compat path via a new helper, which will be used more in coming patches. (The net/core/scm.c code is left as-is here to assist with -stable backports for the compat path.) Cc: Christoph Hellwig Cc: Sargun Dhillon Cc: Jakub Kicinski Cc: stable@vger.kernel.org Fixes: 48a87cc26c13 ("net: netprio: fd passed in SCM_RIGHTS datagram not set correctly") Fixes: d84295067fc7 ("net: net_cls: fd passed in SCM_RIGHTS datagram not set correctly") Acked-by: Christian Brauner Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- include/net/sock.h | 4 ++++ net/compat.c | 1 + net/core/sock.c | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/include/net/sock.h b/include/net/sock.h index 8263bbf756a2..6d9c1131fe5c 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -849,6 +849,8 @@ static inline int sk_memalloc_socks(void) { return static_branch_unlikely(&memalloc_socks_key); } + +void __receive_sock(struct file *file); #else static inline int sk_memalloc_socks(void) @@ -856,6 +858,8 @@ static inline int sk_memalloc_socks(void) return 0; } +static inline void __receive_sock(struct file *file) +{ } #endif static inline gfp_t sk_gfp_mask(const struct sock *sk, gfp_t gfp_mask) diff --git a/net/compat.c b/net/compat.c index 0f7ded26059e..c848bcb517f3 100644 --- a/net/compat.c +++ b/net/compat.c @@ -291,6 +291,7 @@ void scm_detach_fds_compat(struct msghdr *kmsg, struct scm_cookie *scm) break; } /* Bump the usage count and install the file. */ + __receive_sock(fp[i]); fd_install(new_fd, get_file(fp[i])); } diff --git a/net/core/sock.c b/net/core/sock.c index 991ab80234ce..919f1a1739e9 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2736,6 +2736,27 @@ int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct * } EXPORT_SYMBOL(sock_no_mmap); +/* + * When a file is received (via SCM_RIGHTS, etc), we must bump the + * various sock-based usage counts. + */ +void __receive_sock(struct file *file) +{ + struct socket *sock; + int error; + + /* + * The resulting value of "error" is ignored here since we only + * need to take action when the file is a socket and testing + * "sock" for NULL is sufficient. + */ + sock = sock_from_file(file, &error); + if (sock) { + sock_update_netprioidx(&sock->sk->sk_cgrp_data); + sock_update_classid(&sock->sk->sk_cgrp_data); + } +} + ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags) { ssize_t res; From 391b5d39faea113e8727485f300619eebe85bddc Mon Sep 17 00:00:00 2001 From: ChangSyun Peng Date: Fri, 31 Jul 2020 17:50:17 +0800 Subject: [PATCH 341/448] md/raid5: Fix Force reconstruct-write io stuck in degraded raid5 commit a1c6ae3d9f3dd6aa5981a332a6f700cf1c25edef upstream. In degraded raid5, we need to read parity to do reconstruct-write when data disks fail. However, we can not read parity from handle_stripe_dirtying() in force reconstruct-write mode. Reproducible Steps: 1. Create degraded raid5 mdadm -C /dev/md2 --assume-clean -l5 -n3 /dev/sda2 /dev/sdb2 missing 2. Set rmw_level to 0 echo 0 > /sys/block/md2/md/rmw_level 3. IO to raid5 Now some io may be stuck in raid5. We can use handle_stripe_fill() to read the parity in this situation. Cc: # v4.4+ Reviewed-by: Alex Wu Reviewed-by: BingJing Chang Reviewed-by: Danny Shih Signed-off-by: ChangSyun Peng Signed-off-by: Song Liu Signed-off-by: Greg Kroah-Hartman --- drivers/md/raid5.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index a3cbc9f4fec1..02acd5d5a848 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -3604,6 +3604,7 @@ static int need_this_block(struct stripe_head *sh, struct stripe_head_state *s, * is missing/faulty, then we need to read everything we can. */ if (sh->raid_conf->level != 6 && + sh->raid_conf->rmw_level != PARITY_DISABLE_RMW && sh->sector < sh->raid_conf->mddev->recovery_cp) /* reconstruct-write isn't being forced */ return 0; @@ -4839,7 +4840,7 @@ static void handle_stripe(struct stripe_head *sh) * or to load a block that is being partially written. */ if (s.to_read || s.non_overwrite - || (conf->level == 6 && s.to_write && s.failed) + || (s.to_write && s.failed) || (s.syncing && (s.uptodate + s.compute < disks)) || s.replacing || s.expanding) From 42dd8cc9e499a41537a8228523362d3f8ce649c1 Mon Sep 17 00:00:00 2001 From: Coly Li Date: Sat, 25 Jul 2020 20:00:16 +0800 Subject: [PATCH 342/448] bcache: allocate meta data pages as compound pages commit 5fe48867856367142d91a82f2cbf7a57a24cbb70 upstream. There are some meta data of bcache are allocated by multiple pages, and they are used as bio bv_page for I/Os to the cache device. for example cache_set->uuids, cache->disk_buckets, journal_write->data, bset_tree->data. For such meta data memory, all the allocated pages should be treated as a single memory block. Then the memory management and underlying I/O code can treat them more clearly. This patch adds __GFP_COMP flag to all the location allocating >0 order pages for the above mentioned meta data. Then their pages are treated as compound pages now. Signed-off-by: Coly Li Cc: stable@vger.kernel.org Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- drivers/md/bcache/bset.c | 2 +- drivers/md/bcache/btree.c | 2 +- drivers/md/bcache/journal.c | 4 ++-- drivers/md/bcache/super.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c index 08768796b543..fda68c00ddd5 100644 --- a/drivers/md/bcache/bset.c +++ b/drivers/md/bcache/bset.c @@ -321,7 +321,7 @@ int bch_btree_keys_alloc(struct btree_keys *b, b->page_order = page_order; - t->data = (void *) __get_free_pages(gfp, b->page_order); + t->data = (void *) __get_free_pages(__GFP_COMP|gfp, b->page_order); if (!t->data) goto err; diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 3c1109fceb2f..46556bde032e 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -840,7 +840,7 @@ int bch_btree_cache_alloc(struct cache_set *c) mutex_init(&c->verify_lock); c->verify_ondisk = (void *) - __get_free_pages(GFP_KERNEL, ilog2(bucket_pages(c))); + __get_free_pages(GFP_KERNEL|__GFP_COMP, ilog2(bucket_pages(c))); c->verify_data = mca_bucket_alloc(c, &ZERO_KEY, GFP_KERNEL); diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c index 6730820780b0..8250d2d1d780 100644 --- a/drivers/md/bcache/journal.c +++ b/drivers/md/bcache/journal.c @@ -1002,8 +1002,8 @@ int bch_journal_alloc(struct cache_set *c) j->w[1].c = c; if (!(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) || - !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)) || - !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS))) + !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS)) || + !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS))) return -ENOMEM; return 0; diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 168d64707859..25ad64a3919f 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -1754,7 +1754,7 @@ void bch_cache_set_unregister(struct cache_set *c) } #define alloc_bucket_pages(gfp, c) \ - ((void *) __get_free_pages(__GFP_ZERO|gfp, ilog2(bucket_pages(c)))) + ((void *) __get_free_pages(__GFP_ZERO|__GFP_COMP|gfp, ilog2(bucket_pages(c)))) struct cache_set *bch_cache_set_alloc(struct cache_sb *sb) { From c573e8673dc1fb89012e95e793e783f7d5267f2f Mon Sep 17 00:00:00 2001 From: Coly Li Date: Sat, 25 Jul 2020 20:00:22 +0800 Subject: [PATCH 343/448] bcache: fix overflow in offset_to_stripe() commit 7a1481267999c02abf4a624515c1b5c7c1fccbd6 upstream. offset_to_stripe() returns the stripe number (in type unsigned int) from an offset (in type uint64_t) by the following calculation, do_div(offset, d->stripe_size); For large capacity backing device (e.g. 18TB) with small stripe size (e.g. 4KB), the result is 4831838208 and exceeds UINT_MAX. The actual returned value which caller receives is 536870912, due to the overflow. Indeed in bcache_device_init(), bcache_device->nr_stripes is limited in range [1, INT_MAX]. Therefore all valid stripe numbers in bcache are in range [0, bcache_dev->nr_stripes - 1]. This patch adds a upper limition check in offset_to_stripe(): the max valid stripe number should be less than bcache_device->nr_stripes. If the calculated stripe number from do_div() is equal to or larger than bcache_device->nr_stripe, -EINVAL will be returned. (Normally nr_stripes is less than INT_MAX, exceeding upper limitation doesn't mean overflow, therefore -EOVERFLOW is not used as error code.) This patch also changes nr_stripes' type of struct bcache_device from 'unsigned int' to 'int', and return value type of offset_to_stripe() from 'unsigned int' to 'int', to match their exact data ranges. All locations where bcache_device->nr_stripes and offset_to_stripe() are referenced also get updated for the above type change. Reported-and-tested-by: Ken Raeburn Signed-off-by: Coly Li Cc: stable@vger.kernel.org Link: https://bugzilla.redhat.com/show_bug.cgi?id=1783075 Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- drivers/md/bcache/bcache.h | 2 +- drivers/md/bcache/writeback.c | 14 +++++++++----- drivers/md/bcache/writeback.h | 19 +++++++++++++++++-- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index 3d2b63585da9..217c838a1b40 100644 --- a/drivers/md/bcache/bcache.h +++ b/drivers/md/bcache/bcache.h @@ -264,7 +264,7 @@ struct bcache_device { #define BCACHE_DEV_UNLINK_DONE 2 #define BCACHE_DEV_WB_RUNNING 3 #define BCACHE_DEV_RATE_DW_RUNNING 4 - unsigned int nr_stripes; + int nr_stripes; unsigned int stripe_size; atomic_t *stripe_sectors_dirty; unsigned long *full_dirty_stripes; diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index d60268fe49e1..0b02210ab435 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c @@ -519,15 +519,19 @@ void bcache_dev_sectors_dirty_add(struct cache_set *c, unsigned int inode, uint64_t offset, int nr_sectors) { struct bcache_device *d = c->devices[inode]; - unsigned int stripe_offset, stripe, sectors_dirty; + unsigned int stripe_offset, sectors_dirty; + int stripe; if (!d) return; + stripe = offset_to_stripe(d, offset); + if (stripe < 0) + return; + if (UUID_FLASH_ONLY(&c->uuids[inode])) atomic_long_add(nr_sectors, &c->flash_dev_dirty_sectors); - stripe = offset_to_stripe(d, offset); stripe_offset = offset & (d->stripe_size - 1); while (nr_sectors) { @@ -567,12 +571,12 @@ static bool dirty_pred(struct keybuf *buf, struct bkey *k) static void refill_full_stripes(struct cached_dev *dc) { struct keybuf *buf = &dc->writeback_keys; - unsigned int start_stripe, stripe, next_stripe; + unsigned int start_stripe, next_stripe; + int stripe; bool wrapped = false; stripe = offset_to_stripe(&dc->disk, KEY_OFFSET(&buf->last_scanned)); - - if (stripe >= dc->disk.nr_stripes) + if (stripe < 0) stripe = 0; start_stripe = stripe; diff --git a/drivers/md/bcache/writeback.h b/drivers/md/bcache/writeback.h index 4e4c6810dc3c..c4ff76037227 100644 --- a/drivers/md/bcache/writeback.h +++ b/drivers/md/bcache/writeback.h @@ -33,10 +33,22 @@ static inline uint64_t bcache_dev_sectors_dirty(struct bcache_device *d) return ret; } -static inline unsigned int offset_to_stripe(struct bcache_device *d, +static inline int offset_to_stripe(struct bcache_device *d, uint64_t offset) { do_div(offset, d->stripe_size); + + /* d->nr_stripes is in range [1, INT_MAX] */ + if (unlikely(offset >= d->nr_stripes)) { + pr_err("Invalid stripe %llu (>= nr_stripes %d).\n", + offset, d->nr_stripes); + return -EINVAL; + } + + /* + * Here offset is definitly smaller than INT_MAX, + * return it as int will never overflow. + */ return offset; } @@ -44,7 +56,10 @@ static inline bool bcache_dev_stripe_dirty(struct cached_dev *dc, uint64_t offset, unsigned int nr_sectors) { - unsigned int stripe = offset_to_stripe(&dc->disk, offset); + int stripe = offset_to_stripe(&dc->disk, offset); + + if (stripe < 0) + return false; while (1) { if (atomic_read(dc->disk.stripe_sectors_dirty + stripe)) From 0cf746d8b052d3f34f386f2d59f2be8bc8fa2f08 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Mon, 3 Aug 2020 11:02:10 +0200 Subject: [PATCH 344/448] mac80211: fix misplaced while instead of if commit 5981fe5b0529ba25d95f37d7faa434183ad618c5 upstream. This never was intended to be a 'while' loop, it should've just been an 'if' instead of 'while'. Fix this. I noticed this while applying another patch from Ben that intended to fix a busy loop at this spot. Cc: stable@vger.kernel.org Fixes: b16798f5b907 ("mac80211: mark station unauthorized before key removal") Reported-by: Ben Greear Link: https://lore.kernel.org/r/20200803110209.253009ae41ff.I3522aad099392b31d5cf2dcca34cbac7e5832dde@changeid Signed-off-by: Johannes Berg Signed-off-by: Greg Kroah-Hartman --- net/mac80211/sta_info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index b1669f024470..f5d96107af6d 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1033,7 +1033,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta) might_sleep(); lockdep_assert_held(&local->sta_mtx); - while (sta->sta_state == IEEE80211_STA_AUTHORIZED) { + if (sta->sta_state == IEEE80211_STA_AUTHORIZED) { ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC); WARN_ON_ONCE(ret); } From d3c9e815006efa2cde24cdad5b04dc8d79c4c88f Mon Sep 17 00:00:00 2001 From: Lukas Wunner Date: Wed, 8 Jul 2020 15:27:01 +0200 Subject: [PATCH 345/448] driver core: Avoid binding drivers to dead devices commit 654888327e9f655a9d55ad477a9583e90e8c9b5c upstream. Commit 3451a495ef24 ("driver core: Establish order of operations for device_add and device_del via bitflag") sought to prevent asynchronous driver binding to a device which is being removed. It added a per-device "dead" flag which is checked in the following code paths: * asynchronous binding in __driver_attach_async_helper() * synchronous binding in device_driver_attach() * asynchronous binding in __device_attach_async_helper() It did *not* check the flag upon: * synchronous binding in __device_attach() However __device_attach() may also be called asynchronously from: deferred_probe_work_func() bus_probe_device() device_initial_probe() __device_attach() So if the commit's intention was to check the "dead" flag in all asynchronous code paths, then a check is also necessary in __device_attach(). Add the missing check. Fixes: 3451a495ef24 ("driver core: Establish order of operations for device_add and device_del via bitflag") Signed-off-by: Lukas Wunner Cc: stable@vger.kernel.org # v5.1+ Cc: Alexander Duyck Link: https://lore.kernel.org/r/de88a23a6fe0ef70f7cfd13c8aea9ab51b4edab6.1594214103.git.lukas@wunner.de Signed-off-by: Greg Kroah-Hartman --- drivers/base/dd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/base/dd.c b/drivers/base/dd.c index b25bcab2a26b..1d5dd37f3abe 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -872,7 +872,9 @@ static int __device_attach(struct device *dev, bool allow_async) int ret = 0; device_lock(dev); - if (dev->driver) { + if (dev->p->dead) { + goto out_unlock; + } else if (dev->driver) { if (device_is_bound(dev)) { ret = 1; goto out_unlock; From 59909e23020f49582f0ba1e28120f9fc0cede99b Mon Sep 17 00:00:00 2001 From: Huacai Chen Date: Thu, 16 Jul 2020 18:40:23 +0800 Subject: [PATCH 346/448] MIPS: CPU#0 is not hotpluggable commit 9cce844abf07b683cff5f0273977d5f8d0af94c7 upstream. Now CPU#0 is not hotpluggable on MIPS, so prevent to create /sys/devices /system/cpu/cpu0/online which confuses some user-space tools. Cc: stable@vger.kernel.org Signed-off-by: Huacai Chen Signed-off-by: Thomas Bogendoerfer Signed-off-by: Greg Kroah-Hartman --- arch/mips/kernel/topology.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/mips/kernel/topology.c b/arch/mips/kernel/topology.c index cd3e1f82e1a5..08ad6371fbe0 100644 --- a/arch/mips/kernel/topology.c +++ b/arch/mips/kernel/topology.c @@ -20,7 +20,7 @@ static int __init topology_init(void) for_each_present_cpu(i) { struct cpu *c = &per_cpu(cpu_devices, i); - c->hotpluggable = 1; + c->hotpluggable = !!i; ret = register_cpu(c, i); if (ret) printk(KERN_WARNING "topology_init: register_cpu %d " From 6c7b42c8f01d1068ed88805f4f3e8a1329f90910 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Mon, 27 Jul 2020 20:11:28 +0200 Subject: [PATCH 347/448] MIPS: qi_lb60: Fix routing to audio amplifier commit 0889a67a9e7a56ba39af223d536630b20b877fda upstream. The ROUT (right channel output of audio codec) was connected to INL (left channel of audio amplifier) instead of INR (right channel of audio amplifier). Fixes: 8ddebad15e9b ("MIPS: qi_lb60: Migrate to devicetree") Cc: stable@vger.kernel.org # v5.3 Signed-off-by: Paul Cercueil Signed-off-by: Thomas Bogendoerfer Signed-off-by: Greg Kroah-Hartman --- arch/mips/boot/dts/ingenic/qi_lb60.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/mips/boot/dts/ingenic/qi_lb60.dts b/arch/mips/boot/dts/ingenic/qi_lb60.dts index 7a371d9c5a33..eda37fb516f0 100644 --- a/arch/mips/boot/dts/ingenic/qi_lb60.dts +++ b/arch/mips/boot/dts/ingenic/qi_lb60.dts @@ -69,7 +69,7 @@ "Speaker", "OUTL", "Speaker", "OUTR", "INL", "LOUT", - "INL", "ROUT"; + "INR", "ROUT"; simple-audio-card,aux-devs = <&>; From 8cdf68355312fe1d2522595e640ebd80bfa23611 Mon Sep 17 00:00:00 2001 From: Mikulas Patocka Date: Mon, 20 Apr 2020 16:02:21 -0400 Subject: [PATCH 348/448] ext2: fix missing percpu_counter_inc commit bc2fbaa4d3808aef82dd1064a8e61c16549fe956 upstream. sbi->s_freeinodes_counter is only decreased by the ext2 code, it is never increased. This patch fixes it. Note that sbi->s_freeinodes_counter is only used in the algorithm that tries to find the group for new allocations, so this bug is not easily visible (the only visibility is that the group finding algorithm selects inoptinal result). Link: https://lore.kernel.org/r/alpine.LRH.2.02.2004201538300.19436@file01.intranet.prod.int.rdu2.redhat.com Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org Signed-off-by: Jan Kara Signed-off-by: Greg Kroah-Hartman --- fs/ext2/ialloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index fda7d3f5b4be..432c3febea6d 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c @@ -80,6 +80,7 @@ static void ext2_release_inode(struct super_block *sb, int group, int dir) if (dir) le16_add_cpu(&desc->bg_used_dirs_count, -1); spin_unlock(sb_bgl_lock(EXT2_SB(sb), group)); + percpu_counter_inc(&EXT2_SB(sb)->s_freeinodes_counter); if (dir) percpu_counter_dec(&EXT2_SB(sb)->s_dirs_counter); mark_buffer_dirty(bh); @@ -528,7 +529,7 @@ got: goto fail; } - percpu_counter_add(&sbi->s_freeinodes_counter, -1); + percpu_counter_dec(&sbi->s_freeinodes_counter); if (S_ISDIR(mode)) percpu_counter_inc(&sbi->s_dirs_counter); From 687d366d0db14a09ef57bbf87dcbefe57926a31d Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Thu, 6 Aug 2020 23:26:15 -0700 Subject: [PATCH 349/448] khugepaged: collapse_pte_mapped_thp() flush the right range commit 723a80dafed5c95889d48baab9aa433a6ffa0b4e upstream. pmdp_collapse_flush() should be given the start address at which the huge page is mapped, haddr: it was given addr, which at that point has been used as a local variable, incremented to the end address of the extent. Found by source inspection while chasing a hugepage locking bug, which I then could not explain by this. At first I thought this was very bad; then saw that all of the page translations that were not flushed would actually still point to the right pages afterwards, so harmless; then realized that I know nothing of how different architectures and models cache intermediate paging structures, so maybe it matters after all - particularly since the page table concerned is immediately freed. Much easier to fix than to think about. Fixes: 27e1f8273113 ("khugepaged: enable collapse pmd for pte-mapped THP") Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton Acked-by: Kirill A. Shutemov Cc: Andrea Arcangeli Cc: Mike Kravetz Cc: Song Liu Cc: [5.4+] Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021204390.27773@eggly.anvils Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/khugepaged.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 5977f7824a9a..e98937c8bed0 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1384,7 +1384,7 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) /* step 4: collapse pmd */ ptl = pmd_lock(vma->vm_mm, pmd); - _pmd = pmdp_collapse_flush(vma, addr, pmd); + _pmd = pmdp_collapse_flush(vma, haddr, pmd); spin_unlock(ptl); mm_dec_nr_ptes(mm); pte_free(mm, pmd_pgtable(_pmd)); From a6b238cac6d30ae6821912466ec225569873d2a4 Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Thu, 6 Aug 2020 23:26:18 -0700 Subject: [PATCH 350/448] khugepaged: collapse_pte_mapped_thp() protect the pmd lock commit 119a5fc16105b2b9383a6e2a7800b2ef861b2975 upstream. When retract_page_tables() removes a page table to make way for a huge pmd, it holds huge page lock, i_mmap_lock_write, mmap_write_trylock and pmd lock; but when collapse_pte_mapped_thp() does the same (to handle the case when the original mmap_write_trylock had failed), only mmap_write_trylock and pmd lock are held. That's not enough. One machine has twice crashed under load, with "BUG: spinlock bad magic" and GPF on 6b6b6b6b6b6b6b6b. Examining the second crash, page_vma_mapped_walk_done()'s spin_unlock of pvmw->ptl (serving page_referenced() on a file THP, that had found a page table at *pmd) discovers that the page table page and its lock have already been freed by the time it comes to unlock. Follow the example of retract_page_tables(), but we only need one of huge page lock or i_mmap_lock_write to secure against this: because it's the narrower lock, and because it simplifies collapse_pte_mapped_thp() to know the hpage earlier, choose to rely on huge page lock here. Fixes: 27e1f8273113 ("khugepaged: enable collapse pmd for pte-mapped THP") Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton Acked-by: Kirill A. Shutemov Cc: Andrea Arcangeli Cc: Mike Kravetz Cc: Song Liu Cc: [5.4+] Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021213070.27773@eggly.anvils Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/khugepaged.c | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index e98937c8bed0..e328a5ea9a56 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1294,7 +1294,7 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) { unsigned long haddr = addr & HPAGE_PMD_MASK; struct vm_area_struct *vma = find_vma(mm, haddr); - struct page *hpage = NULL; + struct page *hpage; pte_t *start_pte, *pte; pmd_t *pmd, _pmd; spinlock_t *ptl; @@ -1314,9 +1314,17 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) if (!hugepage_vma_check(vma, vma->vm_flags | VM_HUGEPAGE)) return; + hpage = find_lock_page(vma->vm_file->f_mapping, + linear_page_index(vma, haddr)); + if (!hpage) + return; + + if (!PageHead(hpage)) + goto drop_hpage; + pmd = mm_find_pmd(mm, haddr); if (!pmd) - return; + goto drop_hpage; start_pte = pte_offset_map_lock(mm, pmd, haddr, &ptl); @@ -1335,30 +1343,11 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) page = vm_normal_page(vma, addr, *pte); - if (!page || !PageCompound(page)) - goto abort; - - if (!hpage) { - hpage = compound_head(page); - /* - * The mapping of the THP should not change. - * - * Note that uprobe, debugger, or MAP_PRIVATE may - * change the page table, but the new page will - * not pass PageCompound() check. - */ - if (WARN_ON(hpage->mapping != vma->vm_file->f_mapping)) - goto abort; - } - /* - * Confirm the page maps to the correct subpage. - * - * Note that uprobe, debugger, or MAP_PRIVATE may change - * the page table, but the new page will not pass - * PageCompound() check. + * Note that uprobe, debugger, or MAP_PRIVATE may change the + * page table, but the new page will not be a subpage of hpage. */ - if (WARN_ON(hpage + i != page)) + if (hpage + i != page) goto abort; count++; } @@ -1377,7 +1366,7 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) pte_unmap_unlock(start_pte, ptl); /* step 3: set proper refcount and mm_counters. */ - if (hpage) { + if (count) { page_ref_sub(hpage, count); add_mm_counter(vma->vm_mm, mm_counter_file(hpage), -count); } @@ -1388,10 +1377,15 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) spin_unlock(ptl); mm_dec_nr_ptes(mm); pte_free(mm, pmd_pgtable(_pmd)); + +drop_hpage: + unlock_page(hpage); + put_page(hpage); return; abort: pte_unmap_unlock(start_pte, ptl); + goto drop_hpage; } static int khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot) From bd99ff4dc92be802bb52fac71e753ea60720cd9f Mon Sep 17 00:00:00 2001 From: Junxiao Bi Date: Thu, 6 Aug 2020 23:18:02 -0700 Subject: [PATCH 351/448] ocfs2: change slot number type s16 to u16 commit 38d51b2dd171ad973afc1f5faab825ed05a2d5e9 upstream. Dan Carpenter reported the following static checker warning. fs/ocfs2/super.c:1269 ocfs2_parse_options() warn: '(-1)' 65535 can't fit into 32767 'mopt->slot' fs/ocfs2/suballoc.c:859 ocfs2_init_inode_steal_slot() warn: '(-1)' 65535 can't fit into 32767 'osb->s_inode_steal_slot' fs/ocfs2/suballoc.c:867 ocfs2_init_meta_steal_slot() warn: '(-1)' 65535 can't fit into 32767 'osb->s_meta_steal_slot' That's because OCFS2_INVALID_SLOT is (u16)-1. Slot number in ocfs2 can be never negative, so change s16 to u16. Fixes: 9277f8334ffc ("ocfs2: fix value of OCFS2_INVALID_SLOT") Reported-by: Dan Carpenter Signed-off-by: Junxiao Bi Signed-off-by: Andrew Morton Reviewed-by: Joseph Qi Reviewed-by: Gang He Cc: Mark Fasheh Cc: Joel Becker Cc: Junxiao Bi Cc: Changwei Ge Cc: Jun Piao Cc: Link: http://lkml.kernel.org/r/20200627001259.19757-1-junxiao.bi@oracle.com Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/ocfs2/ocfs2.h | 4 ++-- fs/ocfs2/suballoc.c | 4 ++-- fs/ocfs2/super.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 9461bd3e1c0c..0a8cd8e59a92 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h @@ -326,8 +326,8 @@ struct ocfs2_super spinlock_t osb_lock; u32 s_next_generation; unsigned long osb_flags; - s16 s_inode_steal_slot; - s16 s_meta_steal_slot; + u16 s_inode_steal_slot; + u16 s_meta_steal_slot; atomic_t s_num_inodes_stolen; atomic_t s_num_meta_stolen; diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index 503e724d39f5..5e0eaea47405 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c @@ -879,9 +879,9 @@ static void __ocfs2_set_steal_slot(struct ocfs2_super *osb, int slot, int type) { spin_lock(&osb->osb_lock); if (type == INODE_ALLOC_SYSTEM_INODE) - osb->s_inode_steal_slot = slot; + osb->s_inode_steal_slot = (u16)slot; else if (type == EXTENT_ALLOC_SYSTEM_INODE) - osb->s_meta_steal_slot = slot; + osb->s_meta_steal_slot = (u16)slot; spin_unlock(&osb->osb_lock); } diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index c81e86c62380..70d8857b161d 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -78,7 +78,7 @@ struct mount_options unsigned long commit_interval; unsigned long mount_opt; unsigned int atime_quantum; - signed short slot; + unsigned short slot; int localalloc_opt; unsigned int resv_level; int dir_resv_level; @@ -1334,7 +1334,7 @@ static int ocfs2_parse_options(struct super_block *sb, goto bail; } if (option) - mopt->slot = (s16)option; + mopt->slot = (u16)option; break; case Opt_commit: if (match_int(&args[0], &option)) { From aeeddba9b498dd8e3dad6f21c20824c6170ddbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Koutn=C3=BD?= Date: Thu, 6 Aug 2020 23:22:18 -0700 Subject: [PATCH 352/448] mm/page_counter.c: fix protection usage propagation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a6f23d14ec7d7d02220ad8bb2774be3322b9aeec upstream. When workload runs in cgroups that aren't directly below root cgroup and their parent specifies reclaim protection, it may end up ineffective. The reason is that propagate_protected_usage() is not called in all hierarchy up. All the protected usage is incorrectly accumulated in the workload's parent. This means that siblings_low_usage is overestimated and effective protection underestimated. Even though it is transitional phenomenon (uncharge path does correct propagation and fixes the wrong children_low_usage), it can undermine the intended protection unexpectedly. We have noticed this problem while seeing a swap out in a descendant of a protected memcg (intermediate node) while the parent was conveniently under its protection limit and the memory pressure was external to that hierarchy. Michal has pinpointed this down to the wrong siblings_low_usage which led to the unwanted reclaim. The fix is simply updating children_low_usage in respective ancestors also in the charging path. Fixes: 230671533d64 ("mm: memory.low hierarchical behavior") Signed-off-by: Michal Koutný Signed-off-by: Michal Hocko Signed-off-by: Andrew Morton Acked-by: Michal Hocko Acked-by: Roman Gushchin Cc: Johannes Weiner Cc: Tejun Heo Cc: [4.18+] Link: http://lkml.kernel.org/r/20200803153231.15477-1-mhocko@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/page_counter.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/page_counter.c b/mm/page_counter.c index de31470655f6..147ff99187b8 100644 --- a/mm/page_counter.c +++ b/mm/page_counter.c @@ -77,7 +77,7 @@ void page_counter_charge(struct page_counter *counter, unsigned long nr_pages) long new; new = atomic_long_add_return(nr_pages, &c->usage); - propagate_protected_usage(counter, new); + propagate_protected_usage(c, new); /* * This is indeed racy, but we can live with some * inaccuracy in the watermark. @@ -121,7 +121,7 @@ bool page_counter_try_charge(struct page_counter *counter, new = atomic_long_add_return(nr_pages, &c->usage); if (new > c->max) { atomic_long_sub(nr_pages, &c->usage); - propagate_protected_usage(counter, new); + propagate_protected_usage(c, new); /* * This is racy, but we can live with some * inaccuracy in the failcnt. @@ -130,7 +130,7 @@ bool page_counter_try_charge(struct page_counter *counter, *fail = c; goto failed; } - propagate_protected_usage(counter, new); + propagate_protected_usage(c, new); /* * Just like with failcnt, we can live with some * inaccuracy in the watermark. From b47215b3749a25fde4018adfc65c9bf4205b9b52 Mon Sep 17 00:00:00 2001 From: Jia He Date: Tue, 11 Aug 2020 18:32:20 -0700 Subject: [PATCH 353/448] mm/memory_hotplug: fix unpaired mem_hotplug_begin/done commit b4223a510e2ab1bf0f971d50af7c1431014b25ad upstream. When check_memblock_offlined_cb() returns failed rc(e.g. the memblock is online at that time), mem_hotplug_begin/done is unpaired in such case. Therefore a warning: Call Trace: percpu_up_write+0x33/0x40 try_remove_memory+0x66/0x120 ? _cond_resched+0x19/0x30 remove_memory+0x2b/0x40 dev_dax_kmem_remove+0x36/0x72 [kmem] device_release_driver_internal+0xf0/0x1c0 device_release_driver+0x12/0x20 bus_remove_device+0xe1/0x150 device_del+0x17b/0x3e0 unregister_dev_dax+0x29/0x60 devm_action_release+0x15/0x20 release_nodes+0x19a/0x1e0 devres_release_all+0x3f/0x50 device_release_driver_internal+0x100/0x1c0 driver_detach+0x4c/0x8f bus_remove_driver+0x5c/0xd0 driver_unregister+0x31/0x50 dax_pmem_exit+0x10/0xfe0 [dax_pmem] Fixes: f1037ec0cc8a ("mm/memory_hotplug: fix remove_memory() lockdep splat") Signed-off-by: Jia He Signed-off-by: Andrew Morton Reviewed-by: David Hildenbrand Acked-by: Michal Hocko Acked-by: Dan Williams Cc: [5.6+] Cc: Andy Lutomirski Cc: Baoquan He Cc: Borislav Petkov Cc: Catalin Marinas Cc: Chuhong Yuan Cc: Dave Hansen Cc: Dave Jiang Cc: Fenghua Yu Cc: "H. Peter Anvin" Cc: Ingo Molnar Cc: Jonathan Cameron Cc: Kaly Xin Cc: Logan Gunthorpe Cc: Masahiro Yamada Cc: Mike Rapoport Cc: Peter Zijlstra Cc: Rich Felker Cc: Thomas Gleixner Cc: Tony Luck Cc: Vishal Verma Cc: Will Deacon Cc: Yoshinori Sato Link: http://lkml.kernel.org/r/20200710031619.18762-3-justin.he@arm.com Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/memory_hotplug.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index c054945a9a74..3128d9584712 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1751,7 +1751,7 @@ static int __ref try_remove_memory(int nid, u64 start, u64 size) */ rc = walk_memory_blocks(start, size, NULL, check_memblock_offlined_cb); if (rc) - goto done; + return rc; /* remove memmap entry */ firmware_map_remove(start, start + size, "System RAM"); @@ -1771,9 +1771,8 @@ static int __ref try_remove_memory(int nid, u64 start, u64 size) try_offline_node(nid); -done: mem_hotplug_done(); - return rc; + return 0; } /** From 3a1208574658b6126a566f296344a3472b8dfc08 Mon Sep 17 00:00:00 2001 From: Chengming Zhou Date: Wed, 29 Jul 2020 02:05:53 +0800 Subject: [PATCH 354/448] ftrace: Setup correct FTRACE_FL_REGS flags for module commit 8a224ffb3f52b0027f6b7279854c71a31c48fc97 upstream. When module loaded and enabled, we will use __ftrace_replace_code for module if any ftrace_ops referenced it found. But we will get wrong ftrace_addr for module rec in ftrace_get_addr_new, because rec->flags has not been setup correctly. It can cause the callback function of a ftrace_ops has FTRACE_OPS_FL_SAVE_REGS to be called with pt_regs set to NULL. So setup correct FTRACE_FL_REGS flags for rec when we call referenced_filters to find ftrace_ops references it. Link: https://lkml.kernel.org/r/20200728180554.65203-1-zhouchengming@bytedance.com Cc: stable@vger.kernel.org Fixes: 8c4f3c3fa9681 ("ftrace: Check module functions being traced on reload") Signed-off-by: Chengming Zhou Signed-off-by: Muchun Song Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- kernel/trace/ftrace.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 15160d707da4..700903d0a8b7 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -5699,8 +5699,11 @@ static int referenced_filters(struct dyn_ftrace *rec) int cnt = 0; for (ops = ftrace_ops_list; ops != &ftrace_list_end; ops = ops->next) { - if (ops_references_rec(ops, rec)) - cnt++; + if (ops_references_rec(ops, rec)) { + cnt++; + if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) + rec->flags |= FTRACE_FL_REGS; + } } return cnt; @@ -5877,8 +5880,8 @@ void ftrace_module_enable(struct module *mod) if (ftrace_start_up) cnt += referenced_filters(rec); - /* This clears FTRACE_FL_DISABLED */ - rec->flags = cnt; + rec->flags &= ~FTRACE_FL_DISABLED; + rec->flags += cnt; if (ftrace_start_up && cnt) { int failed = __ftrace_replace_code(rec, 1); From 1424f0aa18dcad1473e160cd4f5cfeb6cd33e07e Mon Sep 17 00:00:00 2001 From: Muchun Song Date: Tue, 28 Jul 2020 14:45:36 +0800 Subject: [PATCH 355/448] kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler commit 0cb2f1372baa60af8456388a574af6133edd7d80 upstream. We found a case of kernel panic on our server. The stack trace is as follows(omit some irrelevant information): BUG: kernel NULL pointer dereference, address: 0000000000000080 RIP: 0010:kprobe_ftrace_handler+0x5e/0xe0 RSP: 0018:ffffb512c6550998 EFLAGS: 00010282 RAX: 0000000000000000 RBX: ffff8e9d16eea018 RCX: 0000000000000000 RDX: ffffffffbe1179c0 RSI: ffffffffc0535564 RDI: ffffffffc0534ec0 RBP: ffffffffc0534ec1 R08: ffff8e9d1bbb0f00 R09: 0000000000000004 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 R13: ffff8e9d1f797060 R14: 000000000000bacc R15: ffff8e9ce13eca00 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000080 CR3: 00000008453d0005 CR4: 00000000003606e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ftrace_ops_assist_func+0x56/0xe0 ftrace_call+0x5/0x34 tcpa_statistic_send+0x5/0x130 [ttcp_engine] The tcpa_statistic_send is the function being kprobed. After analysis, the root cause is that the fourth parameter regs of kprobe_ftrace_handler is NULL. Why regs is NULL? We use the crash tool to analyze the kdump. crash> dis tcpa_statistic_send -r : callq 0xffffffffbd8018c0 The tcpa_statistic_send calls ftrace_caller instead of ftrace_regs_caller. So it is reasonable that the fourth parameter regs of kprobe_ftrace_handler is NULL. In theory, we should call the ftrace_regs_caller instead of the ftrace_caller. After in-depth analysis, we found a reproducible path. Writing a simple kernel module which starts a periodic timer. The timer's handler is named 'kprobe_test_timer_handler'. The module name is kprobe_test.ko. 1) insmod kprobe_test.ko 2) bpftrace -e 'kretprobe:kprobe_test_timer_handler {}' 3) echo 0 > /proc/sys/kernel/ftrace_enabled 4) rmmod kprobe_test 5) stop step 2) kprobe 6) insmod kprobe_test.ko 7) bpftrace -e 'kretprobe:kprobe_test_timer_handler {}' We mark the kprobe as GONE but not disarm the kprobe in the step 4). The step 5) also do not disarm the kprobe when unregister kprobe. So we do not remove the ip from the filter. In this case, when the module loads again in the step 6), we will replace the code to ftrace_caller via the ftrace_module_enable(). When we register kprobe again, we will not replace ftrace_caller to ftrace_regs_caller because the ftrace is disabled in the step 3). So the step 7) will trigger kernel panic. Fix this problem by disarming the kprobe when the module is going away. Link: https://lkml.kernel.org/r/20200728064536.24405-1-songmuchun@bytedance.com Cc: stable@vger.kernel.org Fixes: ae6aa16fdc16 ("kprobes: introduce ftrace based optimization") Acked-by: Masami Hiramatsu Signed-off-by: Muchun Song Co-developed-by: Chengming Zhou Signed-off-by: Chengming Zhou Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- kernel/kprobes.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 0a967db226d8..bbff4bccb885 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -2104,6 +2104,13 @@ static void kill_kprobe(struct kprobe *p) * the original probed function (which will be freed soon) any more. */ arch_remove_kprobe(p); + + /* + * The module is going away. We should disarm the kprobe which + * is using ftrace. + */ + if (kprobe_ftrace(p)) + disarm_kprobe_ftrace(p); } /* Disable one kprobe */ From bd23940da2d171f659bc952b85f3844e185dd99c Mon Sep 17 00:00:00 2001 From: Kevin Hao Date: Thu, 30 Jul 2020 16:23:18 +0800 Subject: [PATCH 356/448] tracing/hwlat: Honor the tracing_cpumask commit 96b4833b6827a62c295b149213c68b559514c929 upstream. In calculation of the cpu mask for the hwlat kernel thread, the wrong cpu mask is used instead of the tracing_cpumask, this causes the tracing/tracing_cpumask useless for hwlat tracer. Fixes it. Link: https://lkml.kernel.org/r/20200730082318.42584-2-haokexin@gmail.com Cc: Ingo Molnar Cc: stable@vger.kernel.org Fixes: 0330f7aa8ee6 ("tracing: Have hwlat trace migrate across tracing_cpumask CPUs") Signed-off-by: Kevin Hao Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- kernel/trace/trace_hwlat.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c index 862f4b0139fc..35512ed26d9f 100644 --- a/kernel/trace/trace_hwlat.c +++ b/kernel/trace/trace_hwlat.c @@ -270,6 +270,7 @@ static bool disable_migrate; static void move_to_next_cpu(void) { struct cpumask *current_mask = &save_cpumask; + struct trace_array *tr = hwlat_trace; int next_cpu; if (disable_migrate) @@ -283,7 +284,7 @@ static void move_to_next_cpu(void) goto disable; get_online_cpus(); - cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask); + cpumask_and(current_mask, cpu_online_mask, tr->tracing_cpumask); next_cpu = cpumask_next(smp_processor_id(), current_mask); put_online_cpus(); @@ -360,7 +361,7 @@ static int start_kthread(struct trace_array *tr) /* Just pick the first CPU on first iteration */ current_mask = &save_cpumask; get_online_cpus(); - cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask); + cpumask_and(current_mask, cpu_online_mask, tr->tracing_cpumask); put_online_cpus(); next_cpu = cpumask_first(current_mask); From 9aab8b2b0f8f77c0a14548c90ec88ede1d5fe8d7 Mon Sep 17 00:00:00 2001 From: "Steven Rostedt (VMware)" Date: Tue, 4 Aug 2020 20:00:02 -0400 Subject: [PATCH 357/448] tracing: Use trace_sched_process_free() instead of exit() for pid tracing commit afcab636657421f7ebfa0783a91f90256bba0091 upstream. On exit, if a process is preempted after the trace_sched_process_exit() tracepoint but before the process is done exiting, then when it gets scheduled in, the function tracers will not filter it properly against the function tracing pid filters. That is because the function tracing pid filters hooks to the sched_process_exit() tracepoint to remove the exiting task's pid from the filter list. Because the filtering happens at the sched_switch tracepoint, when the exiting task schedules back in to finish up the exit, it will no longer be in the function pid filtering tables. This was noticeable in the notrace self tests on a preemptable kernel, as the tests would fail as it exits and preempted after being taken off the notrace filter table and on scheduling back in it would not be in the notrace list, and then the ending of the exit function would trace. The test detected this and would fail. Cc: stable@vger.kernel.org Cc: Namhyung Kim Fixes: 1e10486ffee0a ("ftrace: Add 'function-fork' trace option") Fixes: c37775d57830a ("tracing: Add infrastructure to allow set_event_pid to follow children" Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- kernel/trace/ftrace.c | 4 ++-- kernel/trace/trace_events.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 700903d0a8b7..705852c1724a 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -6462,12 +6462,12 @@ void ftrace_pid_follow_fork(struct trace_array *tr, bool enable) if (enable) { register_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork, tr); - register_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit, + register_trace_sched_process_free(ftrace_pid_follow_sched_process_exit, tr); } else { unregister_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork, tr); - unregister_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit, + unregister_trace_sched_process_free(ftrace_pid_follow_sched_process_exit, tr); } } diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 995061bb2dec..ed9eb97b64b4 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -527,12 +527,12 @@ void trace_event_follow_fork(struct trace_array *tr, bool enable) if (enable) { register_trace_prio_sched_process_fork(event_filter_pid_sched_process_fork, tr, INT_MIN); - register_trace_prio_sched_process_exit(event_filter_pid_sched_process_exit, + register_trace_prio_sched_process_free(event_filter_pid_sched_process_exit, tr, INT_MAX); } else { unregister_trace_sched_process_fork(event_filter_pid_sched_process_fork, tr); - unregister_trace_sched_process_exit(event_filter_pid_sched_process_exit, + unregister_trace_sched_process_free(event_filter_pid_sched_process_exit, tr); } } From 43e172e31badc6155314b14ce73d41571aecff2c Mon Sep 17 00:00:00 2001 From: "Steven Rostedt (VMware)" Date: Mon, 29 Jun 2020 23:45:56 -0400 Subject: [PATCH 358/448] tracing: Move pipe reference to trace array instead of current_tracer commit 7ef282e05132d56b6f6b71e3873f317664bea78b upstream. If a process has the trace_pipe open on a trace_array, the current tracer for that trace array should not be changed. This was original enforced by a global lock, but when instances were introduced, it was moved to the current_trace. But this structure is shared by all instances, and a trace_pipe is for a single instance. There's no reason that a process that has trace_pipe open on one instance should prevent another instance from changing its current tracer. Move the reference counter to the trace_array instead. This is marked as "Fixes" but is more of a clean up than a true fix. Backport if you want, but its not critical. Fixes: cf6ab6d9143b1 ("tracing: Add ref count to tracer for when they are being read by pipe") Signed-off-by: Steven Rostedt (VMware) [Resolved conflict in __remove_instance()] Signed-off-by: dann frazier Signed-off-by: Greg Kroah-Hartman --- kernel/trace/trace.c | 12 ++++++------ kernel/trace/trace.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 721947b9962d..f9c2bdbbd893 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5686,7 +5686,7 @@ static int tracing_set_tracer(struct trace_array *tr, const char *buf) } /* If trace pipe files are being read, we can't change the tracer */ - if (tr->current_trace->ref) { + if (tr->trace_ref) { ret = -EBUSY; goto out; } @@ -5902,7 +5902,7 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp) nonseekable_open(inode, filp); - tr->current_trace->ref++; + tr->trace_ref++; out: mutex_unlock(&trace_types_lock); return ret; @@ -5921,7 +5921,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file) mutex_lock(&trace_types_lock); - tr->current_trace->ref--; + tr->trace_ref--; if (iter->trace->pipe_close) iter->trace->pipe_close(iter); @@ -7230,7 +7230,7 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp) filp->private_data = info; - tr->current_trace->ref++; + tr->trace_ref++; mutex_unlock(&trace_types_lock); @@ -7331,7 +7331,7 @@ static int tracing_buffers_release(struct inode *inode, struct file *file) mutex_lock(&trace_types_lock); - iter->tr->current_trace->ref--; + iter->tr->trace_ref--; __trace_array_put(iter->tr); @@ -8470,7 +8470,7 @@ static int __remove_instance(struct trace_array *tr) { int i; - if (tr->ref || (tr->current_trace && tr->current_trace->ref)) + if (tr->ref || (tr->current_trace && tr->trace_ref)) return -EBUSY; list_del(&tr->list); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index a3c29d5fcc61..4055158c1dd2 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -309,6 +309,7 @@ struct trace_array { struct trace_event_file *trace_marker_file; cpumask_var_t tracing_cpumask; /* only trace on set CPUs */ int ref; + int trace_ref; #ifdef CONFIG_FUNCTION_TRACER struct ftrace_ops *ops; struct trace_pid_list __rcu *function_pids; @@ -498,7 +499,6 @@ struct tracer { struct tracer *next; struct tracer_flags *flags; int enabled; - int ref; bool print_max; bool allow_instances; #ifdef CONFIG_TRACER_MAX_TRACE From 4699d95a715b37cbc45434502d6bb16b441715c5 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Thu, 11 Jun 2020 21:17:43 +0200 Subject: [PATCH 359/448] watchdog: f71808e_wdt: indicate WDIOF_CARDRESET support in watchdog_info.options commit e871e93fb08a619dfc015974a05768ed6880fd82 upstream. The driver supports populating bootstatus with WDIOF_CARDRESET, but so far userspace couldn't portably determine whether absence of this flag meant no watchdog reset or no driver support. Or-in the bit to fix this. Fixes: b97cb21a4634 ("watchdog: f71808e_wdt: Fix WDTMOUT_STS register read") Cc: stable@vger.kernel.org Signed-off-by: Ahmad Fatoum Reviewed-by: Guenter Roeck Link: https://lore.kernel.org/r/20200611191750.28096-3-a.fatoum@pengutronix.de Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/f71808e_wdt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c index e46104c2fd94..42752ea3cdef 100644 --- a/drivers/watchdog/f71808e_wdt.c +++ b/drivers/watchdog/f71808e_wdt.c @@ -691,7 +691,8 @@ static int __init watchdog_init(int sioaddr) watchdog.sioaddr = sioaddr; watchdog.ident.options = WDIOC_SETTIMEOUT | WDIOF_MAGICCLOSE - | WDIOF_KEEPALIVEPING; + | WDIOF_KEEPALIVEPING + | WDIOF_CARDRESET; snprintf(watchdog.ident.identity, sizeof(watchdog.ident.identity), "%s watchdog", From 0f35915a0febf122116d650e058e81499c341197 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Thu, 11 Jun 2020 21:17:44 +0200 Subject: [PATCH 360/448] watchdog: f71808e_wdt: remove use of wrong watchdog_info option commit 802141462d844f2e6a4d63a12260d79b7afc4c34 upstream. The flags that should be or-ed into the watchdog_info.options by drivers all start with WDIOF_, e.g. WDIOF_SETTIMEOUT, which indicates that the driver's watchdog_ops has a usable set_timeout. WDIOC_SETTIMEOUT was used instead, which expands to 0xc0045706, which equals: WDIOF_FANFAULT | WDIOF_EXTERN1 | WDIOF_PRETIMEOUT | WDIOF_ALARMONLY | WDIOF_MAGICCLOSE | 0xc0045000 These were so far indicated to userspace on WDIOC_GETSUPPORT. As the driver has not yet been migrated to the new watchdog kernel API, the constant can just be dropped without substitute. Fixes: 96cb4eb019ce ("watchdog: f71808e_wdt: new watchdog driver for Fintek F71808E and F71882FG") Cc: stable@vger.kernel.org Signed-off-by: Ahmad Fatoum Reviewed-by: Guenter Roeck Link: https://lore.kernel.org/r/20200611191750.28096-4-a.fatoum@pengutronix.de Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/f71808e_wdt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c index 42752ea3cdef..3165d62efa1b 100644 --- a/drivers/watchdog/f71808e_wdt.c +++ b/drivers/watchdog/f71808e_wdt.c @@ -689,8 +689,7 @@ static int __init watchdog_init(int sioaddr) * into the module have been registered yet. */ watchdog.sioaddr = sioaddr; - watchdog.ident.options = WDIOC_SETTIMEOUT - | WDIOF_MAGICCLOSE + watchdog.ident.options = WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING | WDIOF_CARDRESET; From 12badd3824535c7266d3f31a7b6cc4fd7e913df4 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Thu, 11 Jun 2020 21:17:45 +0200 Subject: [PATCH 361/448] watchdog: f71808e_wdt: clear watchdog timeout occurred flag commit 4f39d575844148fbf3081571a1f3b4ae04150958 upstream. The flag indicating a watchdog timeout having occurred normally persists till Power-On Reset of the Fintek Super I/O chip. The user can clear it by writing a `1' to the bit. The driver doesn't offer a restart method, so regular system reboot might not reset the Super I/O and if the watchdog isn't enabled, we won't touch the register containing the bit on the next boot. In this case all subsequent regular reboots will be wrongly flagged by the driver as being caused by the watchdog. Fix this by having the flag cleared after read. This is also done by other drivers like those for the i6300esb and mpc8xxx_wdt. Fixes: b97cb21a4634 ("watchdog: f71808e_wdt: Fix WDTMOUT_STS register read") Cc: stable@vger.kernel.org Signed-off-by: Ahmad Fatoum Reviewed-by: Guenter Roeck Link: https://lore.kernel.org/r/20200611191750.28096-5-a.fatoum@pengutronix.de Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/f71808e_wdt.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c index 3165d62efa1b..893cef70c159 100644 --- a/drivers/watchdog/f71808e_wdt.c +++ b/drivers/watchdog/f71808e_wdt.c @@ -705,6 +705,13 @@ static int __init watchdog_init(int sioaddr) wdt_conf = superio_inb(sioaddr, F71808FG_REG_WDT_CONF); watchdog.caused_reboot = wdt_conf & BIT(F71808FG_FLAG_WDTMOUT_STS); + /* + * We don't want WDTMOUT_STS to stick around till regular reboot. + * Write 1 to the bit to clear it to zero. + */ + superio_outb(sioaddr, F71808FG_REG_WDT_CONF, + wdt_conf | BIT(F71808FG_FLAG_WDTMOUT_STS)); + superio_exit(sioaddr); err = watchdog_set_timeout(timeout); From 8953e8cb0d6a53f3d8877d1dd79b8db706651698 Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Tue, 28 Jul 2020 10:34:20 -0400 Subject: [PATCH 362/448] ceph: set sec_context xattr on symlink creation commit b748fc7a8763a5b3f8149f12c45711cd73ef8176 upstream. Symlink inodes should have the security context set in their xattrs on creation. We already set the context on creation, but we don't attach the pagelist. The effect is that symlink inodes don't get an SELinux context set on them at creation, so they end up unlabeled instead of inheriting the proper context. Make it do so. Cc: stable@vger.kernel.org Signed-off-by: Jeff Layton Reviewed-by: Ilya Dryomov Signed-off-by: Ilya Dryomov Signed-off-by: Greg Kroah-Hartman --- fs/ceph/dir.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 2e4764fd1872..3367a8194f24 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -920,6 +920,10 @@ static int ceph_symlink(struct inode *dir, struct dentry *dentry, req->r_num_caps = 2; req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL; req->r_dentry_unless = CEPH_CAP_FILE_EXCL; + if (as_ctx.pagelist) { + req->r_pagelist = as_ctx.pagelist; + as_ctx.pagelist = NULL; + } err = ceph_mdsc_do_request(mdsc, dir, req); if (!err && !req->r_reply_info.head->is_dentry) err = ceph_handle_notrace_create(dir, dentry); From 37e3a1c08e2dc7f08b609c8d07522aedf9ac96dd Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Tue, 4 Aug 2020 12:31:56 -0400 Subject: [PATCH 363/448] ceph: handle zero-length feature mask in session messages commit 02e37571f9e79022498fd0525c073b07e9d9ac69 upstream. Most session messages contain a feature mask, but the MDS will routinely send a REJECT message with one that is zero-length. Commit 0fa8263367db ("ceph: fix endianness bug when handling MDS session feature bits") fixed the decoding of the feature mask, but failed to account for the MDS sending a zero-length feature mask. This causes REJECT message decoding to fail. Skip trying to decode a feature mask if the word count is zero. Cc: stable@vger.kernel.org URL: https://tracker.ceph.com/issues/46823 Fixes: 0fa8263367db ("ceph: fix endianness bug when handling MDS session feature bits") Signed-off-by: Jeff Layton Reviewed-by: Ilya Dryomov Tested-by: Patrick Donnelly Signed-off-by: Ilya Dryomov Signed-off-by: Greg Kroah-Hartman --- fs/ceph/mds_client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index b79fe6549df6..701bc3f4d4ba 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -3091,8 +3091,10 @@ static void handle_session(struct ceph_mds_session *session, goto bad; /* version >= 3, feature bits */ ceph_decode_32_safe(&p, end, len, bad); - ceph_decode_64_safe(&p, end, features, bad); - p += len - sizeof(features); + if (len) { + ceph_decode_64_safe(&p, end, features, bad); + p += len - sizeof(features); + } } mutex_lock(&mdsc->mutex); From 54f44e3af24b4c6312e98342576ba68f6fa8c934 Mon Sep 17 00:00:00 2001 From: Anton Blanchard Date: Wed, 15 Jul 2020 10:08:20 +1000 Subject: [PATCH 364/448] pseries: Fix 64 bit logical memory block panic commit 89c140bbaeee7a55ed0360a88f294ead2b95201b upstream. Booting with a 4GB LMB size causes us to panic: qemu-system-ppc64: OS terminated: OS panic: Memory block size not suitable: 0x0 Fix pseries_memory_block_size() to handle 64 bit LMBs. Cc: stable@vger.kernel.org Signed-off-by: Anton Blanchard Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200715000820.1255764-1-anton@ozlabs.org Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/platforms/pseries/hotplug-memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index f1888352b4e0..e7d23a933a0d 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -27,7 +27,7 @@ static bool rtas_hp_event; unsigned long pseries_memory_block_size(void) { struct device_node *np; - unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE; + u64 memblock_size = MIN_MEMORY_BLOCK_SIZE; struct resource r; np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory"); From 169015f464d0f605c27bb4406240940a43135450 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Thu, 6 Aug 2020 14:15:23 -0700 Subject: [PATCH 365/448] module: Correctly truncate sysfs sections output commit 11990a5bd7e558e9203c1070fc52fb6f0488e75b upstream. The only-root-readable /sys/module/$module/sections/$section files did not truncate their output to the available buffer size. While most paths into the kernfs read handlers end up using PAGE_SIZE buffers, it's possible to get there through other paths (e.g. splice, sendfile). Actually limit the output to the "count" passed into the read function, and report it back correctly. *sigh* Reported-by: kernel test robot Link: https://lore.kernel.org/lkml/20200805002015.GE23458@shao2-debian Fixes: ed66f991bb19 ("module: Refactor section attr into bin attribute") Cc: stable@vger.kernel.org Reviewed-by: Greg Kroah-Hartman Acked-by: Jessica Yu Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- kernel/module.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/kernel/module.c b/kernel/module.c index 6baa1080cdb7..819c5d3b4c29 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -1517,18 +1517,34 @@ struct module_sect_attrs { struct module_sect_attr attrs[0]; }; +#define MODULE_SECT_READ_SIZE (3 /* "0x", "\n" */ + (BITS_PER_LONG / 4)) static ssize_t module_sect_read(struct file *file, struct kobject *kobj, struct bin_attribute *battr, char *buf, loff_t pos, size_t count) { struct module_sect_attr *sattr = container_of(battr, struct module_sect_attr, battr); + char bounce[MODULE_SECT_READ_SIZE + 1]; + size_t wrote; if (pos != 0) return -EINVAL; - return sprintf(buf, "0x%px\n", - kallsyms_show_value(file->f_cred) ? (void *)sattr->address : NULL); + /* + * Since we're a binary read handler, we must account for the + * trailing NUL byte that sprintf will write: if "buf" is + * too small to hold the NUL, or the NUL is exactly the last + * byte, the read will look like it got truncated by one byte. + * Since there is no way to ask sprintf nicely to not write + * the NUL, we have to use a bounce buffer. + */ + wrote = scnprintf(bounce, sizeof(bounce), "0x%px\n", + kallsyms_show_value(file->f_cred) + ? (void *)sattr->address : NULL); + count = min(count, wrote); + memcpy(buf, bounce, count); + + return count; } static void free_sect_attrs(struct module_sect_attrs *sect_attrs) @@ -1577,7 +1593,7 @@ static void add_sect_attrs(struct module *mod, const struct load_info *info) goto out; sect_attrs->nsections++; sattr->battr.read = module_sect_read; - sattr->battr.size = 3 /* "0x", "\n" */ + (BITS_PER_LONG / 4); + sattr->battr.size = MODULE_SECT_READ_SIZE; sattr->battr.attr.mode = 0400; *(gattr++) = &(sattr++)->battr; } From 8214e74b662ddcea43c2e481fbec76aa2d5fdf95 Mon Sep 17 00:00:00 2001 From: Adrian Hunter Date: Fri, 10 Jul 2020 18:10:53 +0300 Subject: [PATCH 366/448] perf intel-pt: Fix FUP packet state commit 401136bb084fd021acd9f8c51b52fe0a25e326b2 upstream. While walking code towards a FUP ip, the packet state is INTEL_PT_STATE_FUP or INTEL_PT_STATE_FUP_NO_TIP. That was mishandled resulting in the state becoming INTEL_PT_STATE_IN_SYNC prematurely. The result was an occasional lost EXSTOP event. Signed-off-by: Adrian Hunter Reviewed-by: Andi Kleen Cc: Jiri Olsa Cc: stable@vger.kernel.org Link: http://lore.kernel.org/lkml/20200710151104.15137-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Greg Kroah-Hartman --- .../util/intel-pt-decoder/intel-pt-decoder.c | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c index f8ccfd6be0ee..75c4bd74d521 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -1164,6 +1164,7 @@ static int intel_pt_walk_fup(struct intel_pt_decoder *decoder) return 0; if (err == -EAGAIN || intel_pt_fup_with_nlip(decoder, &intel_pt_insn, ip, err)) { + decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; if (intel_pt_fup_event(decoder)) return 0; return -EAGAIN; @@ -1942,17 +1943,13 @@ next: } if (decoder->set_fup_mwait) no_tip = true; + if (no_tip) + decoder->pkt_state = INTEL_PT_STATE_FUP_NO_TIP; + else + decoder->pkt_state = INTEL_PT_STATE_FUP; err = intel_pt_walk_fup(decoder); - if (err != -EAGAIN) { - if (err) - return err; - if (no_tip) - decoder->pkt_state = - INTEL_PT_STATE_FUP_NO_TIP; - else - decoder->pkt_state = INTEL_PT_STATE_FUP; - return 0; - } + if (err != -EAGAIN) + return err; if (no_tip) { no_tip = false; break; @@ -2599,15 +2596,11 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder) err = intel_pt_walk_tip(decoder); break; case INTEL_PT_STATE_FUP: - decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; err = intel_pt_walk_fup(decoder); if (err == -EAGAIN) err = intel_pt_walk_fup_tip(decoder); - else if (!err) - decoder->pkt_state = INTEL_PT_STATE_FUP; break; case INTEL_PT_STATE_FUP_NO_TIP: - decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; err = intel_pt_walk_fup(decoder); if (err == -EAGAIN) err = intel_pt_walk_trace(decoder); From 55052ac61cb8283ddc9427af8ac31693f1d02baa Mon Sep 17 00:00:00 2001 From: Adrian Hunter Date: Fri, 10 Jul 2020 18:10:54 +0300 Subject: [PATCH 367/448] perf intel-pt: Fix duplicate branch after CBR commit a58a057ce65b52125dd355b7d8b0d540ea267a5f upstream. CBR events can result in a duplicate branch event, because the state type defaults to a branch. Fix by clearing the state type. Example: trace 'sleep' and hope for a frequency change Before: $ perf record -e intel_pt//u sleep 0.1 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.034 MB perf.data ] $ perf script --itrace=bpe > before.txt After: $ perf script --itrace=bpe > after.txt $ diff -u before.txt after.txt # --- before.txt 2020-07-07 14:42:18.191508098 +0300 # +++ after.txt 2020-07-07 14:42:36.587891753 +0300 @@ -29673,7 +29673,6 @@ sleep 93431 [007] 15411.619905: 1 branches:u: 0 [unknown] ([unknown]) => 7f0818abb2e0 clock_nanosleep@@GLIBC_2.17+0x0 (/usr/lib/x86_64-linux-gnu/libc-2.31.so) sleep 93431 [007] 15411.619905: 1 branches:u: 7f0818abb30c clock_nanosleep@@GLIBC_2.17+0x2c (/usr/lib/x86_64-linux-gnu/libc-2.31.so) => 0 [unknown] ([unknown]) sleep 93431 [007] 15411.720069: cbr: cbr: 15 freq: 1507 MHz ( 56%) 7f0818abb30c clock_nanosleep@@GLIBC_2.17+0x2c (/usr/lib/x86_64-linux-gnu/libc-2.31.so) - sleep 93431 [007] 15411.720069: 1 branches:u: 7f0818abb30c clock_nanosleep@@GLIBC_2.17+0x2c (/usr/lib/x86_64-linux-gnu/libc-2.31.so) => 0 [unknown] ([unknown]) sleep 93431 [007] 15411.720076: 1 branches:u: 0 [unknown] ([unknown]) => 7f0818abb30e clock_nanosleep@@GLIBC_2.17+0x2e (/usr/lib/x86_64-linux-gnu/libc-2.31.so) sleep 93431 [007] 15411.720077: 1 branches:u: 7f0818abb323 clock_nanosleep@@GLIBC_2.17+0x43 (/usr/lib/x86_64-linux-gnu/libc-2.31.so) => 7f0818ac0eb7 __nanosleep+0x17 (/usr/lib/x86_64-linux-gnu/libc-2.31.so) sleep 93431 [007] 15411.720077: 1 branches:u: 7f0818ac0ebf __nanosleep+0x1f (/usr/lib/x86_64-linux-gnu/libc-2.31.so) => 55cb7e4c2827 rpl_nanosleep+0x97 (/usr/bin/sleep) Fixes: 91de8684f1cff ("perf intel-pt: Cater for CBR change in PSB+") Fixes: abe5a1d3e4bee ("perf intel-pt: Decoder to output CBR changes immediately") Signed-off-by: Adrian Hunter Reviewed-by: Andi Kleen Tested-by: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: stable@vger.kernel.org Link: http://lore.kernel.org/lkml/20200710151104.15137-3-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Greg Kroah-Hartman --- tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c index 75c4bd74d521..7ffcbd6fcd1a 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -1977,8 +1977,10 @@ next: * possibility of another CBR change that gets caught up * in the PSB+. */ - if (decoder->cbr != decoder->cbr_seen) + if (decoder->cbr != decoder->cbr_seen) { + decoder->state.type = 0; return 0; + } break; case INTEL_PT_PIP: @@ -2019,8 +2021,10 @@ next: case INTEL_PT_CBR: intel_pt_calc_cbr(decoder); - if (decoder->cbr != decoder->cbr_seen) + if (decoder->cbr != decoder->cbr_seen) { + decoder->state.type = 0; return 0; + } break; case INTEL_PT_MODE_EXEC: From 73ba6991e981d160a2968882b2da9649bc279e13 Mon Sep 17 00:00:00 2001 From: Sibi Sankar Date: Tue, 2 Jun 2020 22:02:56 +0530 Subject: [PATCH 368/448] remoteproc: qcom: q6v5: Update running state before requesting stop commit 5b7be880074c73540948f8fc597e0407b98fabfa upstream. Sometimes the stop triggers a watchdog rather than a stop-ack. Update the running state to false on requesting stop to skip the watchdog instead. Error Logs: $ echo stop > /sys/class/remoteproc/remoteproc0/state ipa 1e40000.ipa: received modem stopping event remoteproc-modem: watchdog received: sys_m_smsm_mpss.c:291:APPS force stop qcom-q6v5-mss 4080000.remoteproc-modem: port failed halt ipa 1e40000.ipa: received modem offline event remoteproc0: stopped remote processor 4080000.remoteproc-modem Reviewed-by: Evan Green Fixes: 3b415c8fb263 ("remoteproc: q6v5: Extract common resource handling") Cc: stable@vger.kernel.org Signed-off-by: Sibi Sankar Link: https://lore.kernel.org/r/20200602163257.26978-1-sibis@codeaurora.org Signed-off-by: Bjorn Andersson Signed-off-by: Greg Kroah-Hartman --- drivers/remoteproc/qcom_q6v5.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5.c b/drivers/remoteproc/qcom_q6v5.c index cb0f4a0be032..eaeb6aee6da5 100644 --- a/drivers/remoteproc/qcom_q6v5.c +++ b/drivers/remoteproc/qcom_q6v5.c @@ -151,6 +151,8 @@ int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5) { int ret; + q6v5->running = false; + qcom_smem_state_update_bits(q6v5->state, BIT(q6v5->stop_bit), BIT(q6v5->stop_bit)); From babd6a4c333699389d257a4724b7516b9cebf6ae Mon Sep 17 00:00:00 2001 From: Sibi Sankar Date: Thu, 23 Jul 2020 01:40:45 +0530 Subject: [PATCH 369/448] remoteproc: qcom_q6v5_mss: Validate MBA firmware size before load commit e013f455d95add874f310dc47c608e8c70692ae5 upstream. The following mem abort is observed when the mba firmware size exceeds the allocated mba region. MBA firmware size is restricted to a maximum size of 1M and remaining memory region is used by modem debug policy firmware when available. Hence verify whether the MBA firmware size lies within the allocated memory region and is not greater than 1M before loading. Err Logs: Unable to handle kernel paging request at virtual address Mem abort info: ... Call trace: __memcpy+0x110/0x180 rproc_start+0x40/0x218 rproc_boot+0x5b4/0x608 state_store+0x54/0xf8 dev_attr_store+0x44/0x60 sysfs_kf_write+0x58/0x80 kernfs_fop_write+0x140/0x230 vfs_write+0xc4/0x208 ksys_write+0x74/0xf8 __arm64_sys_write+0x24/0x30 ... Reviewed-by: Bjorn Andersson Fixes: 051fb70fd4ea4 ("remoteproc: qcom: Driver for the self-authenticating Hexagon v5") Cc: stable@vger.kernel.org Signed-off-by: Sibi Sankar Link: https://lore.kernel.org/r/20200722201047.12975-2-sibis@codeaurora.org Signed-off-by: Bjorn Andersson Signed-off-by: Greg Kroah-Hartman --- drivers/remoteproc/qcom_q6v5_mss.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index d84e9f306086..6140bebb2a26 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -381,6 +381,12 @@ static int q6v5_load(struct rproc *rproc, const struct firmware *fw) { struct q6v5 *qproc = rproc->priv; + /* MBA is restricted to a maximum size of 1M */ + if (fw->size > qproc->mba_size || fw->size > SZ_1M) { + dev_err(qproc->dev, "MBA firmware load failed\n"); + return -EINVAL; + } + memcpy(qproc->mba_region, fw->data, fw->size); return 0; From 988fcef346a3387c711d2831e3a07749e49b28f3 Mon Sep 17 00:00:00 2001 From: Sibi Sankar Date: Thu, 23 Jul 2020 01:40:46 +0530 Subject: [PATCH 370/448] remoteproc: qcom_q6v5_mss: Validate modem blob firmware size before load commit 135b9e8d1cd8ba5ac9ad9bcf24b464b7b052e5b8 upstream. The following mem abort is observed when one of the modem blob firmware size exceeds the allocated mpss region. Fix this by restricting the copy size to segment size using request_firmware_into_buf before load. Err Logs: Unable to handle kernel paging request at virtual address Mem abort info: ... Call trace: __memcpy+0x110/0x180 rproc_start+0xd0/0x190 rproc_boot+0x404/0x550 state_store+0x54/0xf8 dev_attr_store+0x44/0x60 sysfs_kf_write+0x58/0x80 kernfs_fop_write+0x140/0x230 vfs_write+0xc4/0x208 ksys_write+0x74/0xf8 ... Reviewed-by: Bjorn Andersson Fixes: 051fb70fd4ea4 ("remoteproc: qcom: Driver for the self-authenticating Hexagon v5") Cc: stable@vger.kernel.org Signed-off-by: Sibi Sankar Link: https://lore.kernel.org/r/20200722201047.12975-3-sibis@codeaurora.org Signed-off-by: Bjorn Andersson Signed-off-by: Greg Kroah-Hartman --- drivers/remoteproc/qcom_q6v5_mss.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index 6140bebb2a26..a67c55785b4d 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -1034,15 +1034,14 @@ static int q6v5_mpss_load(struct q6v5 *qproc) } else if (phdr->p_filesz) { /* Replace "xxx.xxx" with "xxx.bxx" */ sprintf(fw_name + fw_name_len - 3, "b%02d", i); - ret = request_firmware(&seg_fw, fw_name, qproc->dev); + ret = request_firmware_into_buf(&seg_fw, fw_name, qproc->dev, + ptr, phdr->p_filesz); if (ret) { dev_err(qproc->dev, "failed to load %s\n", fw_name); iounmap(ptr); goto release_firmware; } - memcpy(ptr, seg_fw->data, seg_fw->size); - release_firmware(seg_fw); } From 1752ab50e82568e313bc6f8ddf76dc9db8e70ef8 Mon Sep 17 00:00:00 2001 From: Liu Ying Date: Thu, 9 Jul 2020 10:28:52 +0800 Subject: [PATCH 371/448] drm/imx: imx-ldb: Disable both channels for split mode in enc->disable() commit 3b2a999582c467d1883716b37ffcc00178a13713 upstream. Both of the two LVDS channels should be disabled for split mode in the encoder's ->disable() callback, because they are enabled in the encoder's ->enable() callback. Fixes: 6556f7f82b9c ("drm: imx: Move imx-drm driver out of staging") Cc: Philipp Zabel Cc: Sascha Hauer Cc: Pengutronix Kernel Team Cc: NXP Linux Team Cc: Signed-off-by: Liu Ying Signed-off-by: Philipp Zabel Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/imx/imx-ldb.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index 9af5a08d5490..d6629fc869f3 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -302,18 +302,19 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder) { struct imx_ldb_channel *imx_ldb_ch = enc_to_imx_ldb_ch(encoder); struct imx_ldb *ldb = imx_ldb_ch->ldb; + int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; int mux, ret; drm_panel_disable(imx_ldb_ch->panel); - if (imx_ldb_ch == &ldb->channel[0]) + if (imx_ldb_ch == &ldb->channel[0] || dual) ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK; - else if (imx_ldb_ch == &ldb->channel[1]) + if (imx_ldb_ch == &ldb->channel[1] || dual) ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK; regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl); - if (ldb->ldb_ctrl & LDB_SPLIT_MODE_EN) { + if (dual) { clk_disable_unprepare(ldb->clk[0]); clk_disable_unprepare(ldb->clk[1]); } From 974ca069d53182dbb441a83b0274716830d667ff Mon Sep 17 00:00:00 2001 From: Mike Marshall Date: Wed, 8 Apr 2020 08:52:40 -0400 Subject: [PATCH 372/448] orangefs: get rid of knob code... commit ec95f1dedc9c64ac5a8b0bdb7c276936c70fdedd upstream. Christoph Hellwig sent in a reversion of "orangefs: remember count when reading." because: ->read_iter calls can race with each other and one or more ->flush calls. Remove the the scheme to store the read count in the file private data as is is completely racy and can cause use after free or double free conditions Christoph's reversion caused Orangefs not to work or to compile. I added a patch that fixed that, but intel's kbuild test robot pointed out that sending Christoph's patch followed by my patch upstream, it would break bisection because of the failure to compile. So I have combined the reversion plus my patch... here's the commit message that was in my patch: Logically, optimal Orangefs "pages" are 4 megabytes. Reading large Orangefs files 4096 bytes at a time is like trying to kick a dead whale down the beach. Before Christoph's "Revert orangefs: remember count when reading." I tried to give users a knob whereby they could, for example, use "count" in read(2) or bs with dd(1) to get whatever they considered an appropriate amount of bytes at a time from Orangefs and fill as many page cache pages as they could at once. Without the racy code that Christoph reverted Orangefs won't even compile, much less work. So this replaces the logic that used the private file data that Christoph reverted with a static number of bytes to read from Orangefs. I ran tests like the following to determine what a reasonable static number of bytes might be: dd if=/pvfsmnt/asdf of=/dev/null count=128 bs=4194304 dd if=/pvfsmnt/asdf of=/dev/null count=256 bs=2097152 dd if=/pvfsmnt/asdf of=/dev/null count=512 bs=1048576 . . . dd if=/pvfsmnt/asdf of=/dev/null count=4194304 bs=128 Reads seem faster using the static number, so my "knob code" wasn't just racy, it wasn't even a good idea... Signed-off-by: Mike Marshall Reported-by: kbuild test robot Signed-off-by: Greg Kroah-Hartman --- fs/orangefs/file.c | 26 +---------------------- fs/orangefs/inode.c | 39 ++++++----------------------------- fs/orangefs/orangefs-kernel.h | 4 ---- 3 files changed, 7 insertions(+), 62 deletions(-) diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c index a5612abc0936..bcd4fd5ad175 100644 --- a/fs/orangefs/file.c +++ b/fs/orangefs/file.c @@ -311,23 +311,8 @@ static ssize_t orangefs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) { int ret; - struct orangefs_read_options *ro; - orangefs_stats.reads++; - /* - * Remember how they set "count" in read(2) or pread(2) or whatever - - * users can use count as a knob to control orangefs io size and later - * we can try to help them fill as many pages as possible in readpage. - */ - if (!iocb->ki_filp->private_data) { - iocb->ki_filp->private_data = kmalloc(sizeof *ro, GFP_KERNEL); - if (!iocb->ki_filp->private_data) - return(ENOMEM); - ro = iocb->ki_filp->private_data; - ro->blksiz = iter->count; - } - down_read(&file_inode(iocb->ki_filp)->i_rwsem); ret = orangefs_revalidate_mapping(file_inode(iocb->ki_filp)); if (ret) @@ -615,12 +600,6 @@ static int orangefs_lock(struct file *filp, int cmd, struct file_lock *fl) return rc; } -static int orangefs_file_open(struct inode * inode, struct file *file) -{ - file->private_data = NULL; - return generic_file_open(inode, file); -} - static int orangefs_flush(struct file *file, fl_owner_t id) { /* @@ -634,9 +613,6 @@ static int orangefs_flush(struct file *file, fl_owner_t id) struct inode *inode = file->f_mapping->host; int r; - kfree(file->private_data); - file->private_data = NULL; - if (inode->i_state & I_DIRTY_TIME) { spin_lock(&inode->i_lock); inode->i_state &= ~I_DIRTY_TIME; @@ -659,7 +635,7 @@ const struct file_operations orangefs_file_operations = { .lock = orangefs_lock, .unlocked_ioctl = orangefs_ioctl, .mmap = orangefs_file_mmap, - .open = orangefs_file_open, + .open = generic_file_open, .flush = orangefs_flush, .release = orangefs_file_release, .fsync = orangefs_fsync, diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index efb12197da18..636892ffec0b 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -259,46 +259,19 @@ static int orangefs_readpage(struct file *file, struct page *page) pgoff_t index; /* which page */ struct page *next_page; char *kaddr; - struct orangefs_read_options *ro = file->private_data; loff_t read_size; - loff_t roundedup; int buffer_index = -1; /* orangefs shared memory slot */ int slot_index; /* index into slot */ int remaining; /* - * If they set some miniscule size for "count" in read(2) - * (for example) then let's try to read a page, or the whole file - * if it is smaller than a page. Once "count" goes over a page - * then lets round up to the highest page size multiple that is - * less than or equal to "count" and do that much orangefs IO and - * try to fill as many pages as we can from it. - * - * "count" should be represented in ro->blksiz. - * - * inode->i_size = file size. + * Get up to this many bytes from Orangefs at a time and try + * to fill them into the page cache at once. Tests with dd made + * this seem like a reasonable static number, if there was + * interest perhaps this number could be made setable through + * sysfs... */ - if (ro) { - if (ro->blksiz < PAGE_SIZE) { - if (inode->i_size < PAGE_SIZE) - read_size = inode->i_size; - else - read_size = PAGE_SIZE; - } else { - roundedup = ((PAGE_SIZE - 1) & ro->blksiz) ? - ((ro->blksiz + PAGE_SIZE) & ~(PAGE_SIZE -1)) : - ro->blksiz; - if (roundedup > inode->i_size) - read_size = inode->i_size; - else - read_size = roundedup; - - } - } else { - read_size = PAGE_SIZE; - } - if (!read_size) - read_size = PAGE_SIZE; + read_size = 524288; if (PageDirty(page)) orangefs_launder_page(page); diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h index 34a6c99fa29b..3003007681a0 100644 --- a/fs/orangefs/orangefs-kernel.h +++ b/fs/orangefs/orangefs-kernel.h @@ -239,10 +239,6 @@ struct orangefs_write_range { kgid_t gid; }; -struct orangefs_read_options { - ssize_t blksiz; -}; - extern struct orangefs_stats orangefs_stats; /* From bb0bba78d365ef504cbb5f0947e4851ec402707f Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Mon, 22 Jun 2020 23:45:48 +0200 Subject: [PATCH 373/448] pinctrl: ingenic: Properly detect GPIO direction when configured for IRQ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 84e7a946da71f678affacea301f6d5cb4d9784e8 upstream. The PAT1 register contains information about the IRQ type (edge/level) for input GPIOs with IRQ enabled, and the direction for non-IRQ GPIOs. So it makes sense to read it only if the GPIO has no interrupt configured, otherwise input GPIOs configured for level IRQs are misdetected as output GPIOs. Fixes: ebd6651418b6 ("pinctrl: ingenic: Implement .get_direction for GPIO chips") Reported-by: João Henrique Signed-off-by: Paul Cercueil Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200622214548.265417-2-paul@crapouillou.net Signed-off-by: Linus Walleij Signed-off-by: Greg Kroah-Hartman --- drivers/pinctrl/pinctrl-ingenic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-ingenic.c b/drivers/pinctrl/pinctrl-ingenic.c index e5600f65709b..8bd0a078bfc4 100644 --- a/drivers/pinctrl/pinctrl-ingenic.c +++ b/drivers/pinctrl/pinctrl-ingenic.c @@ -1644,7 +1644,8 @@ static int ingenic_gpio_get_direction(struct gpio_chip *gc, unsigned int offset) unsigned int pin = gc->base + offset; if (jzpc->version >= ID_JZ4760) - return ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_PAT1); + return ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_INT) || + ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_PAT1); if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_SELECT)) return true; From cf368b876f44c984bf417bb6e2f8bdf1e441bd3b Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Sat, 30 May 2020 00:23:49 +1000 Subject: [PATCH 374/448] crypto: algif_aead - Only wake up when ctx->more is zero [ Upstream commit f3c802a1f30013f8f723b62d7fa49eb9e991da23 ] AEAD does not support partial requests so we must not wake up while ctx->more is set. In order to distinguish between the case of no data sent yet and a zero-length request, a new init flag has been added to ctx. SKCIPHER has also been modified to ensure that at least a block of data is available if there is more data to come. Fixes: 2d97591ef43d ("crypto: af_alg - consolidation of...") Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- crypto/af_alg.c | 11 ++++++++--- crypto/algif_aead.c | 4 ++-- crypto/algif_skcipher.c | 4 ++-- include/crypto/if_alg.h | 4 +++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/crypto/af_alg.c b/crypto/af_alg.c index a3b9df99af6d..ed8ace8675b7 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -635,6 +635,7 @@ void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst, if (!ctx->used) ctx->merge = 0; + ctx->init = ctx->more; } EXPORT_SYMBOL_GPL(af_alg_pull_tsgl); @@ -734,9 +735,10 @@ EXPORT_SYMBOL_GPL(af_alg_wmem_wakeup); * * @sk socket of connection to user space * @flags If MSG_DONTWAIT is set, then only report if function would sleep + * @min Set to minimum request size if partial requests are allowed. * @return 0 when writable memory is available, < 0 upon error */ -int af_alg_wait_for_data(struct sock *sk, unsigned flags) +int af_alg_wait_for_data(struct sock *sk, unsigned flags, unsigned min) { DEFINE_WAIT_FUNC(wait, woken_wake_function); struct alg_sock *ask = alg_sk(sk); @@ -754,7 +756,9 @@ int af_alg_wait_for_data(struct sock *sk, unsigned flags) if (signal_pending(current)) break; timeout = MAX_SCHEDULE_TIMEOUT; - if (sk_wait_event(sk, &timeout, (ctx->used || !ctx->more), + if (sk_wait_event(sk, &timeout, + ctx->init && (!ctx->more || + (min && ctx->used >= min)), &wait)) { err = 0; break; @@ -843,7 +847,7 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, } lock_sock(sk); - if (!ctx->more && ctx->used) { + if (ctx->init && (init || !ctx->more)) { err = -EINVAL; goto unlock; } @@ -854,6 +858,7 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, memcpy(ctx->iv, con.iv->iv, ivsize); ctx->aead_assoclen = con.aead_assoclen; + ctx->init = true; } while (size) { diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c index 0ae000a61c7f..d48d2156e621 100644 --- a/crypto/algif_aead.c +++ b/crypto/algif_aead.c @@ -106,8 +106,8 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg, size_t usedpages = 0; /* [in] RX bufs to be used from user */ size_t processed = 0; /* [in] TX bufs to be consumed */ - if (!ctx->used) { - err = af_alg_wait_for_data(sk, flags); + if (!ctx->init || ctx->more) { + err = af_alg_wait_for_data(sk, flags, 0); if (err) return err; } diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index ec5567c87a6d..a51ba22fef58 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c @@ -61,8 +61,8 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg, int err = 0; size_t len = 0; - if (!ctx->used) { - err = af_alg_wait_for_data(sk, flags); + if (!ctx->init || (ctx->more && ctx->used < bs)) { + err = af_alg_wait_for_data(sk, flags, bs); if (err) return err; } diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h index 864849e942c4..c1a8d4a41bb1 100644 --- a/include/crypto/if_alg.h +++ b/include/crypto/if_alg.h @@ -135,6 +135,7 @@ struct af_alg_async_req { * SG? * @enc: Cryptographic operation to be performed when * recvmsg is invoked. + * @init: True if metadata has been sent. * @len: Length of memory allocated for this data structure. */ struct af_alg_ctx { @@ -151,6 +152,7 @@ struct af_alg_ctx { bool more; bool merge; bool enc; + bool init; unsigned int len; }; @@ -226,7 +228,7 @@ unsigned int af_alg_count_tsgl(struct sock *sk, size_t bytes, size_t offset); void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst, size_t dst_offset); void af_alg_wmem_wakeup(struct sock *sk); -int af_alg_wait_for_data(struct sock *sk, unsigned flags); +int af_alg_wait_for_data(struct sock *sk, unsigned flags, unsigned min); int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, unsigned int ivsize); ssize_t af_alg_sendpage(struct socket *sock, struct page *page, From 368caae370375cdcca7729203d34639458948607 Mon Sep 17 00:00:00 2001 From: Charles Keepax Date: Mon, 15 Jun 2020 14:53:21 +0100 Subject: [PATCH 375/448] mfd: arizona: Ensure 32k clock is put on driver unbind and error [ Upstream commit ddff6c45b21d0437ce0c85f8ac35d7b5480513d7 ] Whilst it doesn't matter if the internal 32k clock register settings are cleaned up on exit, as the part will be turned off losing any settings, hence the driver hasn't historially bothered. The external clock should however be cleaned up, as it could cause clocks to be left on, and will at best generate a warning on unbind. Add clean up on both the probe error path and unbind for the 32k clock. Fixes: cdd8da8cc66b ("mfd: arizona: Add gating of external MCLKn clocks") Signed-off-by: Charles Keepax Signed-off-by: Lee Jones Signed-off-by: Sasha Levin --- drivers/mfd/arizona-core.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 4a31907a4525..3ff872c205ee 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c @@ -1430,6 +1430,15 @@ err_irq: arizona_irq_exit(arizona); err_pm: pm_runtime_disable(arizona->dev); + + switch (arizona->pdata.clk32k_src) { + case ARIZONA_32KZ_MCLK1: + case ARIZONA_32KZ_MCLK2: + arizona_clk32k_disable(arizona); + break; + default: + break; + } err_reset: arizona_enable_reset(arizona); regulator_disable(arizona->dcvdd); @@ -1452,6 +1461,15 @@ int arizona_dev_exit(struct arizona *arizona) regulator_disable(arizona->dcvdd); regulator_put(arizona->dcvdd); + switch (arizona->pdata.clk32k_src) { + case ARIZONA_32KZ_MCLK1: + case ARIZONA_32KZ_MCLK2: + arizona_clk32k_disable(arizona); + break; + default: + break; + } + mfd_remove_devices(arizona->dev); arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona); arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona); From e1f2606892f2b285d202b61eed96ed53a458c9d7 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Wed, 17 Jun 2020 20:53:21 -0700 Subject: [PATCH 376/448] octeontx2-af: change (struct qmem)->entry_sz from u8 to u16 [ Upstream commit 393415203f5c916b5907e0a7c89f4c2c5a9c5505 ] We need to increase TSO_HEADER_SIZE from 128 to 256. Since otx2_sq_init() calls qmem_alloc() with TSO_HEADER_SIZE, we need to change (struct qmem)->entry_sz to avoid truncation to 0. Fixes: 7a37245ef23f ("octeontx2-af: NPA block admin queue init") Signed-off-by: Eric Dumazet Cc: Sunil Goutham Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/marvell/octeontx2/af/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/common.h b/drivers/net/ethernet/marvell/octeontx2/af/common.h index 413c3f254cf8..c881a573da66 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/common.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/common.h @@ -43,7 +43,7 @@ struct qmem { void *base; dma_addr_t iova; int alloc_sz; - u8 entry_sz; + u16 entry_sz; u8 align; u32 qsize; }; From 617da16f5ab90912e3404bfda80e1e72781edcbb Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Wed, 3 Jun 2020 15:49:13 +0200 Subject: [PATCH 377/448] mtd: rawnand: fsl_upm: Remove unused mtd var [ Upstream commit ccc49eff77bee2885447a032948959a134029fe3 ] The mtd var in fun_wait_rnb() is now unused, let's get rid of it and fix the warning resulting from this unused var. Fixes: 50a487e7719c ("mtd: rawnand: Pass a nand_chip object to chip->dev_ready()") Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Signed-off-by: Miquel Raynal Link: https://lore.kernel.org/linux-mtd/20200603134922.1352340-2-boris.brezillon@collabora.com Signed-off-by: Sasha Levin --- drivers/mtd/nand/raw/fsl_upm.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/mtd/nand/raw/fsl_upm.c b/drivers/mtd/nand/raw/fsl_upm.c index 1054cc070747..20b0ee174dc6 100644 --- a/drivers/mtd/nand/raw/fsl_upm.c +++ b/drivers/mtd/nand/raw/fsl_upm.c @@ -62,7 +62,6 @@ static int fun_chip_ready(struct nand_chip *chip) static void fun_wait_rnb(struct fsl_upm_nand *fun) { if (fun->rnb_gpio[fun->mchip_number] >= 0) { - struct mtd_info *mtd = nand_to_mtd(&fun->chip); int cnt = 1000000; while (--cnt && !fun_chip_ready(&fun->chip)) From ab67471562ad22371819ebb7303b8824bd06496b Mon Sep 17 00:00:00 2001 From: Qiushi Wu Date: Fri, 22 May 2020 22:16:08 -0500 Subject: [PATCH 378/448] platform/chrome: cros_ec_ishtp: Fix a double-unlock issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit aaa3cbbac326c95308e315f1ab964a3369c4d07d ] In function cros_ec_ishtp_probe(), "up_write" is already called before function "cros_ec_dev_init". But "up_write" will be called again after the calling of the function "cros_ec_dev_init" failed. Thus add a call of the function “down_write” in this if branch for the completion of the exception handling. Fixes: 26a14267aff2 ("platform/chrome: Add ChromeOS EC ISHTP driver") Signed-off-by: Qiushi Wu Tested-by: Mathew King Signed-off-by: Enric Balletbo i Serra Signed-off-by: Sasha Levin --- drivers/platform/chrome/cros_ec_ishtp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/platform/chrome/cros_ec_ishtp.c b/drivers/platform/chrome/cros_ec_ishtp.c index 25ca2c894b4d..ab0662a33b41 100644 --- a/drivers/platform/chrome/cros_ec_ishtp.c +++ b/drivers/platform/chrome/cros_ec_ishtp.c @@ -645,8 +645,10 @@ static int cros_ec_ishtp_probe(struct ishtp_cl_device *cl_device) /* Register croc_ec_dev mfd */ rv = cros_ec_dev_init(client_data); - if (rv) + if (rv) { + down_write(&init_lock); goto end_cros_ec_dev_init_error; + } return 0; From 5412efa6285af7c2cd20b1ecf3412468bc76afbe Mon Sep 17 00:00:00 2001 From: Kamal Heib Date: Tue, 23 Jun 2020 13:52:36 +0300 Subject: [PATCH 379/448] RDMA/ipoib: Return void from ipoib_ib_dev_stop() [ Upstream commit 95a5631f6c9f3045f26245e6045244652204dfdb ] The return value from ipoib_ib_dev_stop() is always 0 - change it to be void. Link: https://lore.kernel.org/r/20200623105236.18683-1-kamalheib1@gmail.com Signed-off-by: Kamal Heib Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/ulp/ipoib/ipoib.h | 2 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h index 0e5f27caf2b2..50a355738609 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib.h +++ b/drivers/infiniband/ulp/ipoib/ipoib.h @@ -515,7 +515,7 @@ void ipoib_ib_dev_cleanup(struct net_device *dev); int ipoib_ib_dev_open_default(struct net_device *dev); int ipoib_ib_dev_open(struct net_device *dev); -int ipoib_ib_dev_stop(struct net_device *dev); +void ipoib_ib_dev_stop(struct net_device *dev); void ipoib_ib_dev_up(struct net_device *dev); void ipoib_ib_dev_down(struct net_device *dev); int ipoib_ib_dev_stop_default(struct net_device *dev); diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index da3c5315bbb5..6ee64c25aaff 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c @@ -846,7 +846,7 @@ timeout: return 0; } -int ipoib_ib_dev_stop(struct net_device *dev) +void ipoib_ib_dev_stop(struct net_device *dev) { struct ipoib_dev_priv *priv = ipoib_priv(dev); @@ -854,8 +854,6 @@ int ipoib_ib_dev_stop(struct net_device *dev) clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); ipoib_flush_ah(dev); - - return 0; } int ipoib_ib_dev_open_default(struct net_device *dev) From 0f334b6684558658d1a92ba98695432223015c81 Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Thu, 25 Jun 2020 20:42:19 +0300 Subject: [PATCH 380/448] RDMA/ipoib: Fix ABBA deadlock with ipoib_reap_ah() [ Upstream commit 65936bf25f90fe440bb2d11624c7d10fab266639 ] ipoib_mcast_carrier_on_task() insanely open codes a rtnl_lock() such that the only time flush_workqueue() can be called is if it also clears IPOIB_FLAG_OPER_UP. Thus the flush inside ipoib_flush_ah() will deadlock if it gets unlucky enough, and lockdep doesn't help us to find it early: CPU0 CPU1 CPU2 __ipoib_ib_dev_flush() down_read(vlan_rwsem) ipoib_vlan_add() rtnl_trylock() down_write(vlan_rwsem) ipoib_mcast_carrier_on_task() while (!rtnl_trylock()) msleep(20); ipoib_flush_ah() flush_workqueue(priv->wq) Clean up the ah_reaper related functions and lifecycle to make sense: - Start/Stop of the reaper should only be done in open/stop NDOs, not in any other places - cancel and flush of the reaper should only happen in the stop NDO. cancel is only functional when combined with IPOIB_STOP_REAPER. - Non-stop places were flushing the AH's just need to flush out dead AH's synchronously and ignore the background task completely. It is fully locked and harmless to leave running. Which ultimately fixes the ABBA deadlock by removing the unnecessary flush_workqueue() from the problematic place under the vlan_rwsem. Fixes: efc82eeeae4e ("IB/ipoib: No longer use flush as a parameter") Link: https://lore.kernel.org/r/20200625174219.290842-1-kamalheib1@gmail.com Reported-by: Kamal Heib Tested-by: Kamal Heib Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 65 ++++++++++------------- drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 + 2 files changed, 31 insertions(+), 36 deletions(-) diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 6ee64c25aaff..494f413dc3c6 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c @@ -670,13 +670,12 @@ int ipoib_send(struct net_device *dev, struct sk_buff *skb, return rc; } -static void __ipoib_reap_ah(struct net_device *dev) +static void ipoib_reap_dead_ahs(struct ipoib_dev_priv *priv) { - struct ipoib_dev_priv *priv = ipoib_priv(dev); struct ipoib_ah *ah, *tah; unsigned long flags; - netif_tx_lock_bh(dev); + netif_tx_lock_bh(priv->dev); spin_lock_irqsave(&priv->lock, flags); list_for_each_entry_safe(ah, tah, &priv->dead_ahs, list) @@ -687,37 +686,37 @@ static void __ipoib_reap_ah(struct net_device *dev) } spin_unlock_irqrestore(&priv->lock, flags); - netif_tx_unlock_bh(dev); + netif_tx_unlock_bh(priv->dev); } void ipoib_reap_ah(struct work_struct *work) { struct ipoib_dev_priv *priv = container_of(work, struct ipoib_dev_priv, ah_reap_task.work); - struct net_device *dev = priv->dev; - __ipoib_reap_ah(dev); + ipoib_reap_dead_ahs(priv); if (!test_bit(IPOIB_STOP_REAPER, &priv->flags)) queue_delayed_work(priv->wq, &priv->ah_reap_task, round_jiffies_relative(HZ)); } -static void ipoib_flush_ah(struct net_device *dev) +static void ipoib_start_ah_reaper(struct ipoib_dev_priv *priv) { - struct ipoib_dev_priv *priv = ipoib_priv(dev); - - cancel_delayed_work(&priv->ah_reap_task); - flush_workqueue(priv->wq); - ipoib_reap_ah(&priv->ah_reap_task.work); + clear_bit(IPOIB_STOP_REAPER, &priv->flags); + queue_delayed_work(priv->wq, &priv->ah_reap_task, + round_jiffies_relative(HZ)); } -static void ipoib_stop_ah(struct net_device *dev) +static void ipoib_stop_ah_reaper(struct ipoib_dev_priv *priv) { - struct ipoib_dev_priv *priv = ipoib_priv(dev); - set_bit(IPOIB_STOP_REAPER, &priv->flags); - ipoib_flush_ah(dev); + cancel_delayed_work(&priv->ah_reap_task); + /* + * After ipoib_stop_ah_reaper() we always go through + * ipoib_reap_dead_ahs() which ensures the work is really stopped and + * does a final flush out of the dead_ah's list + */ } static int recvs_pending(struct net_device *dev) @@ -846,16 +845,6 @@ timeout: return 0; } -void ipoib_ib_dev_stop(struct net_device *dev) -{ - struct ipoib_dev_priv *priv = ipoib_priv(dev); - - priv->rn_ops->ndo_stop(dev); - - clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); - ipoib_flush_ah(dev); -} - int ipoib_ib_dev_open_default(struct net_device *dev) { struct ipoib_dev_priv *priv = ipoib_priv(dev); @@ -899,10 +888,7 @@ int ipoib_ib_dev_open(struct net_device *dev) return -1; } - clear_bit(IPOIB_STOP_REAPER, &priv->flags); - queue_delayed_work(priv->wq, &priv->ah_reap_task, - round_jiffies_relative(HZ)); - + ipoib_start_ah_reaper(priv); if (priv->rn_ops->ndo_open(dev)) { pr_warn("%s: Failed to open dev\n", dev->name); goto dev_stop; @@ -913,13 +899,20 @@ int ipoib_ib_dev_open(struct net_device *dev) return 0; dev_stop: - set_bit(IPOIB_STOP_REAPER, &priv->flags); - cancel_delayed_work(&priv->ah_reap_task); - set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); - ipoib_ib_dev_stop(dev); + ipoib_stop_ah_reaper(priv); return -1; } +void ipoib_ib_dev_stop(struct net_device *dev) +{ + struct ipoib_dev_priv *priv = ipoib_priv(dev); + + priv->rn_ops->ndo_stop(dev); + + clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); + ipoib_stop_ah_reaper(priv); +} + void ipoib_pkey_dev_check_presence(struct net_device *dev) { struct ipoib_dev_priv *priv = ipoib_priv(dev); @@ -1230,7 +1223,7 @@ static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv, ipoib_mcast_dev_flush(dev); if (oper_up) set_bit(IPOIB_FLAG_OPER_UP, &priv->flags); - ipoib_flush_ah(dev); + ipoib_reap_dead_ahs(priv); } if (level >= IPOIB_FLUSH_NORMAL) @@ -1305,7 +1298,7 @@ void ipoib_ib_dev_cleanup(struct net_device *dev) * the neighbor garbage collection is stopped and reaped. * That should all be done now, so make a final ah flush. */ - ipoib_stop_ah(dev); + ipoib_reap_dead_ahs(priv); clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags); diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 4fd095fd63b6..044bcacad6e4 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c @@ -1979,6 +1979,8 @@ static void ipoib_ndo_uninit(struct net_device *dev) /* no more works over the priv->wq */ if (priv->wq) { + /* See ipoib_mcast_carrier_on_task() */ + WARN_ON(test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)); flush_workqueue(priv->wq); destroy_workqueue(priv->wq); priv->wq = NULL; From 5f51ca677cd2952b4bd3d3a671e54b3180b8f5e2 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Thu, 30 Apr 2020 18:42:44 +0200 Subject: [PATCH 381/448] media: rockchip: rga: Introduce color fmt macros and refactor CSC mode logic [ Upstream commit ded874ece29d3fe2abd3775810a06056067eb68c ] This introduces two macros: RGA_COLOR_FMT_IS_YUV and RGA_COLOR_FMT_IS_RGB which allow quick checking of the colorspace familily of a RGA color format. These macros are then used to refactor the logic for CSC mode selection. The two nested tests for input colorspace are simplified into a single one, with a logical and, making the whole more readable. Signed-off-by: Paul Kocialkowski Reviewed-by: Ezequiel Garcia Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/rockchip/rga/rga-hw.c | 23 +++++++++----------- drivers/media/platform/rockchip/rga/rga-hw.h | 5 +++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c b/drivers/media/platform/rockchip/rga/rga-hw.c index 4be6dcf292ff..5607ee8d1917 100644 --- a/drivers/media/platform/rockchip/rga/rga-hw.c +++ b/drivers/media/platform/rockchip/rga/rga-hw.c @@ -200,22 +200,19 @@ static void rga_cmd_set_trans_info(struct rga_ctx *ctx) dst_info.data.format = ctx->out.fmt->hw_format; dst_info.data.swap = ctx->out.fmt->color_swap; - if (ctx->in.fmt->hw_format >= RGA_COLOR_FMT_YUV422SP) { - if (ctx->out.fmt->hw_format < RGA_COLOR_FMT_YUV422SP) { - switch (ctx->in.colorspace) { - case V4L2_COLORSPACE_REC709: - src_info.data.csc_mode = - RGA_SRC_CSC_MODE_BT709_R0; - break; - default: - src_info.data.csc_mode = - RGA_SRC_CSC_MODE_BT601_R0; - break; - } + if (RGA_COLOR_FMT_IS_YUV(ctx->in.fmt->hw_format) && + RGA_COLOR_FMT_IS_RGB(ctx->out.fmt->hw_format)) { + switch (ctx->in.colorspace) { + case V4L2_COLORSPACE_REC709: + src_info.data.csc_mode = RGA_SRC_CSC_MODE_BT709_R0; + break; + default: + src_info.data.csc_mode = RGA_SRC_CSC_MODE_BT601_R0; + break; } } - if (ctx->out.fmt->hw_format >= RGA_COLOR_FMT_YUV422SP) { + if (RGA_COLOR_FMT_IS_YUV(ctx->out.fmt->hw_format)) { switch (ctx->out.colorspace) { case V4L2_COLORSPACE_REC709: dst_info.data.csc_mode = RGA_SRC_CSC_MODE_BT709_R0; diff --git a/drivers/media/platform/rockchip/rga/rga-hw.h b/drivers/media/platform/rockchip/rga/rga-hw.h index 96cb0314dfa7..e8917e5630a4 100644 --- a/drivers/media/platform/rockchip/rga/rga-hw.h +++ b/drivers/media/platform/rockchip/rga/rga-hw.h @@ -95,6 +95,11 @@ #define RGA_COLOR_FMT_CP_8BPP 15 #define RGA_COLOR_FMT_MASK 15 +#define RGA_COLOR_FMT_IS_YUV(fmt) \ + (((fmt) >= RGA_COLOR_FMT_YUV422SP) && ((fmt) < RGA_COLOR_FMT_CP_1BPP)) +#define RGA_COLOR_FMT_IS_RGB(fmt) \ + ((fmt) < RGA_COLOR_FMT_YUV422SP) + #define RGA_COLOR_NONE_SWAP 0 #define RGA_COLOR_RB_SWAP 1 #define RGA_COLOR_ALPHA_SWAP 2 From ea1cdb1bb80b0bd8e85d16f2189e5d92c350f80e Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Thu, 30 Apr 2020 18:42:45 +0200 Subject: [PATCH 382/448] media: rockchip: rga: Only set output CSC mode for RGB input [ Upstream commit 0f879bab72f47e8ba2421a984e7acfa763d3e84e ] Setting the output CSC mode is required for a YUV output, but must not be set when the input is also YUV. Doing this (as tested with a YUV420P to YUV420P conversion) results in wrong colors. Adapt the logic to only set the output CSC mode when the output is YUV and the input is RGB. Also add a comment to clarify the rationale. Fixes: f7e7b48e6d79 ("[media] rockchip/rga: v4l2 m2m support") Signed-off-by: Paul Kocialkowski Reviewed-by: Ezequiel Garcia Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/rockchip/rga/rga-hw.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c b/drivers/media/platform/rockchip/rga/rga-hw.c index 5607ee8d1917..aaa96f256356 100644 --- a/drivers/media/platform/rockchip/rga/rga-hw.c +++ b/drivers/media/platform/rockchip/rga/rga-hw.c @@ -200,6 +200,11 @@ static void rga_cmd_set_trans_info(struct rga_ctx *ctx) dst_info.data.format = ctx->out.fmt->hw_format; dst_info.data.swap = ctx->out.fmt->color_swap; + /* + * CSC mode must only be set when the colorspace families differ between + * input and output. It must remain unset (zeroed) if both are the same. + */ + if (RGA_COLOR_FMT_IS_YUV(ctx->in.fmt->hw_format) && RGA_COLOR_FMT_IS_RGB(ctx->out.fmt->hw_format)) { switch (ctx->in.colorspace) { @@ -212,7 +217,8 @@ static void rga_cmd_set_trans_info(struct rga_ctx *ctx) } } - if (RGA_COLOR_FMT_IS_YUV(ctx->out.fmt->hw_format)) { + if (RGA_COLOR_FMT_IS_RGB(ctx->in.fmt->hw_format) && + RGA_COLOR_FMT_IS_YUV(ctx->out.fmt->hw_format)) { switch (ctx->out.colorspace) { case V4L2_COLORSPACE_REC709: dst_info.data.csc_mode = RGA_SRC_CSC_MODE_BT709_R0; From 95c736a2910572f7e2d36d1ffbc7b795b3832bb0 Mon Sep 17 00:00:00 2001 From: Yishai Hadas Date: Tue, 30 Jun 2020 12:39:11 +0300 Subject: [PATCH 383/448] IB/uverbs: Set IOVA on IB MR in uverbs layer [ Upstream commit 04c0a5fcfcf65aade2fb238b6336445f1a99b646 ] Set IOVA on IB MR in uverbs layer to let all drivers have it, this includes both reg/rereg MR flows. As part of this change cleaned-up this setting from the drivers that already did it by themselves in their user flows. Fixes: e6f0330106f4 ("mlx4_ib: set user mr attributes in struct ib_mr") Link: https://lore.kernel.org/r/20200630093916.332097-3-leon@kernel.org Signed-off-by: Yishai Hadas Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/uverbs_cmd.c | 4 ++++ drivers/infiniband/hw/cxgb4/mem.c | 1 - drivers/infiniband/hw/mlx4/mr.c | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index e2ddcb0dc4ee..c398d1a64614 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -757,6 +757,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs) mr->uobject = uobj; atomic_inc(&pd->usecnt); mr->res.type = RDMA_RESTRACK_MR; + mr->iova = cmd.hca_va; rdma_restrack_uadd(&mr->res); uobj->object = mr; @@ -847,6 +848,9 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs) atomic_dec(&old_pd->usecnt); } + if (cmd.flags & IB_MR_REREG_TRANS) + mr->iova = cmd.hca_va; + memset(&resp, 0, sizeof(resp)); resp.lkey = mr->lkey; resp.rkey = mr->rkey; diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c index 35c284af574d..dcb58cef336d 100644 --- a/drivers/infiniband/hw/cxgb4/mem.c +++ b/drivers/infiniband/hw/cxgb4/mem.c @@ -399,7 +399,6 @@ static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag) mmid = stag >> 8; mhp->ibmr.rkey = mhp->ibmr.lkey = stag; mhp->ibmr.length = mhp->attr.len; - mhp->ibmr.iova = mhp->attr.va_fbo; mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12); pr_debug("mmid 0x%x mhp %p\n", mmid, mhp); return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL); diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c index 6ae503cfc526..9114cb730769 100644 --- a/drivers/infiniband/hw/mlx4/mr.c +++ b/drivers/infiniband/hw/mlx4/mr.c @@ -439,7 +439,6 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, mr->ibmr.rkey = mr->ibmr.lkey = mr->mmr.key; mr->ibmr.length = length; - mr->ibmr.iova = virt_addr; mr->ibmr.page_size = 1U << shift; return &mr->ibmr; From de624fbac3eb3693d8c2f44abb12a123c7f605c9 Mon Sep 17 00:00:00 2001 From: Jesper Dangaard Brouer Date: Wed, 1 Jul 2020 23:44:07 +0200 Subject: [PATCH 384/448] selftests/bpf: Test_progs indicate to shell on non-actions [ Upstream commit 6c92bd5cd4650c39dd929565ee172984c680fead ] When a user selects a non-existing test the summary is printed with indication 0 for all info types, and shell "success" (EXIT_SUCCESS) is indicated. This can be understood by a human end-user, but for shell scripting is it useful to indicate a shell failure (EXIT_FAILURE). Signed-off-by: Jesper Dangaard Brouer Signed-off-by: Alexei Starovoitov Acked-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/159363984736.930467.17956007131403952343.stgit@firesoul Signed-off-by: Sasha Levin --- tools/testing/selftests/bpf/test_progs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 8cb3469dd11f..a7d06724c18c 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -584,5 +584,8 @@ int main(int argc, char **argv) free(env.test_selector.num_set); free(env.subtest_selector.num_set); + if (env.succ_cnt + env.fail_cnt + env.skip_cnt == 0) + return EXIT_FAILURE; + return env.fail_cnt ? EXIT_FAILURE : EXIT_SUCCESS; } From 8cab023c03aa4497b9cdb09bcb920166a48e0b8e Mon Sep 17 00:00:00 2001 From: Jesper Dangaard Brouer Date: Tue, 7 Jul 2020 09:12:19 +0200 Subject: [PATCH 385/448] selftests/bpf: test_progs use another shell exit on non-actions [ Upstream commit 3220fb667842a9725cbb71656f406eadb03c094b ] This is a follow up adjustment to commit 6c92bd5cd465 ("selftests/bpf: Test_progs indicate to shell on non-actions"), that returns shell exit indication EXIT_FAILURE (value 1) when user selects a non-existing test. The problem with using EXIT_FAILURE is that a shell script cannot tell the difference between a non-existing test and the test failing. This patch uses value 2 as shell exit indication. (Aside note unrecognized option parameters use value 64). Fixes: 6c92bd5cd465 ("selftests/bpf: Test_progs indicate to shell on non-actions") Signed-off-by: Jesper Dangaard Brouer Signed-off-by: Daniel Borkmann Acked-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/159410593992.1093222.90072558386094370.stgit@firesoul Signed-off-by: Sasha Levin --- tools/testing/selftests/bpf/test_progs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index a7d06724c18c..48bbe8e0ce48 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -7,6 +7,8 @@ #include #include +#define EXIT_NO_TEST 2 + /* defined in test_progs.h */ struct test_env env; @@ -585,7 +587,7 @@ int main(int argc, char **argv) free(env.subtest_selector.num_set); if (env.succ_cnt + env.fail_cnt + env.skip_cnt == 0) - return EXIT_FAILURE; + return EXIT_NO_TEST; return env.fail_cnt ? EXIT_FAILURE : EXIT_SUCCESS; } From aeefe7d15cf1725e7383821ce89fb080f949f296 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 8 Jul 2020 14:49:51 +0200 Subject: [PATCH 386/448] USB: serial: ftdi_sio: make process-packet buffer unsigned [ Upstream commit ab4cc4ef6724ea588e835fc1e764c4b4407a70b7 ] Use an unsigned type for the process-packet buffer argument and give it a more apt name. Reviewed-by: Greg Kroah-Hartman Signed-off-by: Johan Hovold Signed-off-by: Sasha Levin --- drivers/usb/serial/ftdi_sio.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 9ad44a96dfe3..96b9e2768ac5 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -2480,12 +2480,12 @@ static int ftdi_prepare_write_buffer(struct usb_serial_port *port, #define FTDI_RS_ERR_MASK (FTDI_RS_BI | FTDI_RS_PE | FTDI_RS_FE | FTDI_RS_OE) static int ftdi_process_packet(struct usb_serial_port *port, - struct ftdi_private *priv, char *packet, int len) + struct ftdi_private *priv, unsigned char *buf, int len) { + unsigned char status; + unsigned char *ch; int i; - char status; char flag; - char *ch; if (len < 2) { dev_dbg(&port->dev, "malformed packet\n"); @@ -2495,7 +2495,7 @@ static int ftdi_process_packet(struct usb_serial_port *port, /* Compare new line status to the old one, signal if different/ N.B. packet may be processed more than once, but differences are only processed once. */ - status = packet[0] & FTDI_STATUS_B0_MASK; + status = buf[0] & FTDI_STATUS_B0_MASK; if (status != priv->prev_status) { char diff_status = status ^ priv->prev_status; @@ -2521,7 +2521,7 @@ static int ftdi_process_packet(struct usb_serial_port *port, } /* save if the transmitter is empty or not */ - if (packet[1] & FTDI_RS_TEMT) + if (buf[1] & FTDI_RS_TEMT) priv->transmit_empty = 1; else priv->transmit_empty = 0; @@ -2535,29 +2535,29 @@ static int ftdi_process_packet(struct usb_serial_port *port, * data payload to avoid over-reporting. */ flag = TTY_NORMAL; - if (packet[1] & FTDI_RS_ERR_MASK) { + if (buf[1] & FTDI_RS_ERR_MASK) { /* Break takes precedence over parity, which takes precedence * over framing errors */ - if (packet[1] & FTDI_RS_BI) { + if (buf[1] & FTDI_RS_BI) { flag = TTY_BREAK; port->icount.brk++; usb_serial_handle_break(port); - } else if (packet[1] & FTDI_RS_PE) { + } else if (buf[1] & FTDI_RS_PE) { flag = TTY_PARITY; port->icount.parity++; - } else if (packet[1] & FTDI_RS_FE) { + } else if (buf[1] & FTDI_RS_FE) { flag = TTY_FRAME; port->icount.frame++; } /* Overrun is special, not associated with a char */ - if (packet[1] & FTDI_RS_OE) { + if (buf[1] & FTDI_RS_OE) { port->icount.overrun++; tty_insert_flip_char(&port->port, 0, TTY_OVERRUN); } } port->icount.rx += len; - ch = packet + 2; + ch = buf + 2; if (port->port.console && port->sysrq) { for (i = 0; i < len; i++, ch++) { From 9705f53eb01a3f25f4651145c7bf5f26231087ee Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 8 Jul 2020 14:49:52 +0200 Subject: [PATCH 387/448] USB: serial: ftdi_sio: clean up receive processing [ Upstream commit ce054039ba5e47b75a3be02a00274e52b06a6456 ] Clean up receive processing by dropping the character pointer and keeping the length argument unchanged throughout the function. Also make it more apparent that sysrq processing can consume a characters by adding an explicit continue. Reviewed-by: Greg Kroah-Hartman Signed-off-by: Johan Hovold Signed-off-by: Sasha Levin --- drivers/usb/serial/ftdi_sio.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 96b9e2768ac5..33f1cca7eaa6 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -2483,7 +2483,6 @@ static int ftdi_process_packet(struct usb_serial_port *port, struct ftdi_private *priv, unsigned char *buf, int len) { unsigned char status; - unsigned char *ch; int i; char flag; @@ -2526,8 +2525,7 @@ static int ftdi_process_packet(struct usb_serial_port *port, else priv->transmit_empty = 0; - len -= 2; - if (!len) + if (len == 2) return 0; /* status only */ /* @@ -2556,19 +2554,20 @@ static int ftdi_process_packet(struct usb_serial_port *port, } } - port->icount.rx += len; - ch = buf + 2; + port->icount.rx += len - 2; if (port->port.console && port->sysrq) { - for (i = 0; i < len; i++, ch++) { - if (!usb_serial_handle_sysrq_char(port, *ch)) - tty_insert_flip_char(&port->port, *ch, flag); + for (i = 2; i < len; i++) { + if (usb_serial_handle_sysrq_char(port, buf[i])) + continue; + tty_insert_flip_char(&port->port, buf[i], flag); } } else { - tty_insert_flip_string_fixed_flag(&port->port, ch, flag, len); + tty_insert_flip_string_fixed_flag(&port->port, buf + 2, flag, + len - 2); } - return len; + return len - 2; } static void ftdi_process_read_urb(struct urb *urb) From ddd3934f7b3911d800666a04aa5cc76bdc12b0cd Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 2 Jul 2020 13:32:21 +1000 Subject: [PATCH 388/448] crypto: af_alg - Fix regression on empty requests [ Upstream commit 662bb52f50bca16a74fe92b487a14d7dccb85e1a ] Some user-space programs rely on crypto requests that have no control metadata. This broke when a check was added to require the presence of control metadata with the ctx->init flag. This patch fixes the regression by setting ctx->init as long as one sendmsg(2) has been made, with or without a control message. Reported-by: Sachin Sant Reported-by: Naresh Kamboju Fixes: f3c802a1f300 ("crypto: algif_aead - Only wake up when...") Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- crypto/af_alg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/af_alg.c b/crypto/af_alg.c index ed8ace8675b7..35e026ba2c7e 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -851,6 +851,7 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, err = -EINVAL; goto unlock; } + ctx->init = true; if (init) { ctx->enc = enc; @@ -858,7 +859,6 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, memcpy(ctx->iv, con.iv->iv, ivsize); ctx->aead_assoclen = con.aead_assoclen; - ctx->init = true; } while (size) { From cf304df99fac512a02d412917d265a789d25f729 Mon Sep 17 00:00:00 2001 From: Vladimir Oltean Date: Mon, 1 Jun 2020 12:58:26 +0300 Subject: [PATCH 389/448] devres: keep both device name and resource name in pretty name [ Upstream commit 35bd8c07db2ce8fd2834ef866240613a4ef982e7 ] Sometimes debugging a device is easiest using devmem on its register map, and that can be seen with /proc/iomem. But some device drivers have many memory regions. Take for example a networking switch. Its memory map used to look like this in /proc/iomem: 1fc000000-1fc3fffff : pcie@1f0000000 1fc000000-1fc3fffff : 0000:00:00.5 1fc010000-1fc01ffff : sys 1fc030000-1fc03ffff : rew 1fc060000-1fc0603ff : s2 1fc070000-1fc0701ff : devcpu_gcb 1fc080000-1fc0800ff : qs 1fc090000-1fc0900cb : ptp 1fc100000-1fc10ffff : port0 1fc110000-1fc11ffff : port1 1fc120000-1fc12ffff : port2 1fc130000-1fc13ffff : port3 1fc140000-1fc14ffff : port4 1fc150000-1fc15ffff : port5 1fc200000-1fc21ffff : qsys 1fc280000-1fc28ffff : ana But after the patch in Fixes: was applied, the information is now presented in a much more opaque way: 1fc000000-1fc3fffff : pcie@1f0000000 1fc000000-1fc3fffff : 0000:00:00.5 1fc010000-1fc01ffff : 0000:00:00.5 1fc030000-1fc03ffff : 0000:00:00.5 1fc060000-1fc0603ff : 0000:00:00.5 1fc070000-1fc0701ff : 0000:00:00.5 1fc080000-1fc0800ff : 0000:00:00.5 1fc090000-1fc0900cb : 0000:00:00.5 1fc100000-1fc10ffff : 0000:00:00.5 1fc110000-1fc11ffff : 0000:00:00.5 1fc120000-1fc12ffff : 0000:00:00.5 1fc130000-1fc13ffff : 0000:00:00.5 1fc140000-1fc14ffff : 0000:00:00.5 1fc150000-1fc15ffff : 0000:00:00.5 1fc200000-1fc21ffff : 0000:00:00.5 1fc280000-1fc28ffff : 0000:00:00.5 That patch made a fair comment that /proc/iomem might be confusing when it shows resources without an associated device, but we can do better than just hide the resource name altogether. Namely, we can print the device name _and_ the resource name. Like this: 1fc000000-1fc3fffff : pcie@1f0000000 1fc000000-1fc3fffff : 0000:00:00.5 1fc010000-1fc01ffff : 0000:00:00.5 sys 1fc030000-1fc03ffff : 0000:00:00.5 rew 1fc060000-1fc0603ff : 0000:00:00.5 s2 1fc070000-1fc0701ff : 0000:00:00.5 devcpu_gcb 1fc080000-1fc0800ff : 0000:00:00.5 qs 1fc090000-1fc0900cb : 0000:00:00.5 ptp 1fc100000-1fc10ffff : 0000:00:00.5 port0 1fc110000-1fc11ffff : 0000:00:00.5 port1 1fc120000-1fc12ffff : 0000:00:00.5 port2 1fc130000-1fc13ffff : 0000:00:00.5 port3 1fc140000-1fc14ffff : 0000:00:00.5 port4 1fc150000-1fc15ffff : 0000:00:00.5 port5 1fc200000-1fc21ffff : 0000:00:00.5 qsys 1fc280000-1fc28ffff : 0000:00:00.5 ana Fixes: 8d84b18f5678 ("devres: always use dev_name() in devm_ioremap_resource()") Signed-off-by: Vladimir Oltean Link: https://lore.kernel.org/r/20200601095826.1757621-1-olteanv@gmail.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- lib/devres.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/devres.c b/lib/devres.c index 17624d35e82d..77c80ca9e485 100644 --- a/lib/devres.c +++ b/lib/devres.c @@ -155,6 +155,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, { resource_size_t size; void __iomem *dest_ptr; + char *pretty_name; BUG_ON(!dev); @@ -165,7 +166,15 @@ void __iomem *devm_ioremap_resource(struct device *dev, size = resource_size(res); - if (!devm_request_mem_region(dev, res->start, size, dev_name(dev))) { + if (res->name) + pretty_name = devm_kasprintf(dev, GFP_KERNEL, "%s %s", + dev_name(dev), res->name); + else + pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL); + if (!pretty_name) + return IOMEM_ERR_PTR(-ENOMEM); + + if (!devm_request_mem_region(dev, res->start, size, pretty_name)) { dev_err(dev, "can't request region for resource %pR\n", res); return IOMEM_ERR_PTR(-EBUSY); } From e5a9bb4f12432168abffd646bbc41342fc8a4236 Mon Sep 17 00:00:00 2001 From: Mark Zhang Date: Thu, 2 Jul 2020 11:29:32 +0300 Subject: [PATCH 390/448] RDMA/counter: Only bind user QPs in auto mode [ Upstream commit c9f557421e505f75da4234a6af8eff46bc08614b ] In auto mode only bind user QPs to a dynamic counter, since this feature is mainly used for system statistic and diagnostic purpose, while there's no need to counter kernel QPs so far. Fixes: 99fa331dc862 ("RDMA/counter: Add "auto" configuration mode support") Link: https://lore.kernel.org/r/20200702082933.424537-3-leon@kernel.org Signed-off-by: Mark Zhang Reviewed-by: Maor Gottlieb Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/counters.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/infiniband/core/counters.c b/drivers/infiniband/core/counters.c index 11210bf7fd61..42809f612c2c 100644 --- a/drivers/infiniband/core/counters.c +++ b/drivers/infiniband/core/counters.c @@ -284,7 +284,7 @@ int rdma_counter_bind_qp_auto(struct ib_qp *qp, u8 port) struct rdma_counter *counter; int ret; - if (!qp->res.valid) + if (!qp->res.valid || rdma_is_kernel_res(&qp->res)) return 0; if (!rdma_is_port_valid(dev, port)) From b638533ec6fa306389b2a1972792456a234acf92 Mon Sep 17 00:00:00 2001 From: Mark Zhang Date: Thu, 2 Jul 2020 11:29:33 +0300 Subject: [PATCH 391/448] RDMA/counter: Allow manually bind QPs with different pids to same counter [ Upstream commit cbeb7d896c0f296451ffa7b67e7706786b8364c8 ] In manual mode allow bind user QPs with different pids to same counter, since this is allowed in auto mode. Bind kernel QPs and user QPs to the same counter are not allowed. Fixes: 1bd8e0a9d0fd ("RDMA/counter: Allow manual mode configuration support") Link: https://lore.kernel.org/r/20200702082933.424537-4-leon@kernel.org Signed-off-by: Mark Zhang Reviewed-by: Maor Gottlieb Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/counters.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/infiniband/core/counters.c b/drivers/infiniband/core/counters.c index 42809f612c2c..f454d63008d6 100644 --- a/drivers/infiniband/core/counters.c +++ b/drivers/infiniband/core/counters.c @@ -487,7 +487,7 @@ int rdma_counter_bind_qpn(struct ib_device *dev, u8 port, goto err; } - if (counter->res.task != qp->res.task) { + if (rdma_is_kernel_res(&counter->res) != rdma_is_kernel_res(&qp->res)) { ret = -EINVAL; goto err_task; } From 64563d1dca808d39c90208b240ab45935532c9a8 Mon Sep 17 00:00:00 2001 From: Yoshihiro Shimoda Date: Thu, 21 May 2020 16:01:05 +0900 Subject: [PATCH 392/448] mmc: renesas_sdhi_internal_dmac: clean up the code for dma complete [ Upstream commit 2b26e34e9af3fa24fa1266e9ea2d66a1f7d62dc0 ] To add end() operation in the future, clean the code of renesas_sdhi_internal_dmac_complete_tasklet_fn(). No behavior change. Signed-off-by: Yoshihiro Shimoda Link: https://lore.kernel.org/r/1590044466-28372-3-git-send-email-yoshihiro.shimoda.uh@renesas.com Tested-by: Wolfram Sang Signed-off-by: Ulf Hansson Signed-off-by: Sasha Levin --- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/host/renesas_sdhi_internal_dmac.c index a66f8d6d61d1..cb89f0578d42 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -229,15 +229,12 @@ static void renesas_sdhi_internal_dmac_issue_tasklet_fn(unsigned long arg) DTRAN_CTRL_DM_START); } -static void renesas_sdhi_internal_dmac_complete_tasklet_fn(unsigned long arg) +static bool renesas_sdhi_internal_dmac_complete(struct tmio_mmc_host *host) { - struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg; enum dma_data_direction dir; - spin_lock_irq(&host->lock); - if (!host->data) - goto out; + return false; if (host->data->flags & MMC_DATA_READ) dir = DMA_FROM_DEVICE; @@ -250,6 +247,17 @@ static void renesas_sdhi_internal_dmac_complete_tasklet_fn(unsigned long arg) if (dir == DMA_FROM_DEVICE) clear_bit(SDHI_INTERNAL_DMAC_RX_IN_USE, &global_flags); + return true; +} + +static void renesas_sdhi_internal_dmac_complete_tasklet_fn(unsigned long arg) +{ + struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg; + + spin_lock_irq(&host->lock); + if (!renesas_sdhi_internal_dmac_complete(host)) + goto out; + tmio_mmc_do_data_irq(host); out: spin_unlock_irq(&host->lock); From e0a684edf6d751488a2631619150dcd4e3197c84 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 16 Jul 2020 21:45:03 +1000 Subject: [PATCH 393/448] crypto: caam - Remove broken arc4 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit eeedb618378f8a09779546a3eeac16b000447d62 ] The arc4 algorithm requires storing state in the request context in order to allow more than one encrypt/decrypt operation. As this driver does not seem to do that, it means that using it for more than one operation is broken. Fixes: eaed71a44ad9 ("crypto: caam - add ecb(*) support") Link: https://lore.kernel.org/linux-crypto/CAMj1kXGvMe_A_iQ43Pmygg9xaAM-RLy=_M=v+eg--8xNmv9P+w@mail.gmail.com Link: https://lore.kernel.org/linux-crypto/20200702101947.682-1-ardb@kernel.org Signed-off-by: Herbert Xu Acked-by: Ard Biesheuvel Acked-by: Horia Geantă Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/caam/caamalg.c | 29 ----------------------------- drivers/crypto/caam/compat.h | 1 - 2 files changed, 30 deletions(-) diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 4ce9c2b4544a..fdd994ee55e2 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -818,12 +818,6 @@ static int ctr_skcipher_setkey(struct crypto_skcipher *skcipher, return skcipher_setkey(skcipher, key, keylen, ctx1_iv_off); } -static int arc4_skcipher_setkey(struct crypto_skcipher *skcipher, - const u8 *key, unsigned int keylen) -{ - return skcipher_setkey(skcipher, key, keylen, 0); -} - static int des_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, unsigned int keylen) { @@ -2058,21 +2052,6 @@ static struct caam_skcipher_alg driver_algs[] = { }, .caam.class1_alg_type = OP_ALG_ALGSEL_3DES | OP_ALG_AAI_ECB, }, - { - .skcipher = { - .base = { - .cra_name = "ecb(arc4)", - .cra_driver_name = "ecb-arc4-caam", - .cra_blocksize = ARC4_BLOCK_SIZE, - }, - .setkey = arc4_skcipher_setkey, - .encrypt = skcipher_encrypt, - .decrypt = skcipher_decrypt, - .min_keysize = ARC4_MIN_KEY_SIZE, - .max_keysize = ARC4_MAX_KEY_SIZE, - }, - .caam.class1_alg_type = OP_ALG_ALGSEL_ARC4 | OP_ALG_AAI_ECB, - }, }; static struct caam_aead_alg driver_aeads[] = { @@ -3533,7 +3512,6 @@ int caam_algapi_init(struct device *ctrldev) struct caam_drv_private *priv = dev_get_drvdata(ctrldev); int i = 0, err = 0; u32 aes_vid, aes_inst, des_inst, md_vid, md_inst, ccha_inst, ptha_inst; - u32 arc4_inst; unsigned int md_limit = SHA512_DIGEST_SIZE; bool registered = false, gcm_support; @@ -3553,8 +3531,6 @@ int caam_algapi_init(struct device *ctrldev) CHA_ID_LS_DES_SHIFT; aes_inst = cha_inst & CHA_ID_LS_AES_MASK; md_inst = (cha_inst & CHA_ID_LS_MD_MASK) >> CHA_ID_LS_MD_SHIFT; - arc4_inst = (cha_inst & CHA_ID_LS_ARC4_MASK) >> - CHA_ID_LS_ARC4_SHIFT; ccha_inst = 0; ptha_inst = 0; @@ -3575,7 +3551,6 @@ int caam_algapi_init(struct device *ctrldev) md_inst = mdha & CHA_VER_NUM_MASK; ccha_inst = rd_reg32(&priv->ctrl->vreg.ccha) & CHA_VER_NUM_MASK; ptha_inst = rd_reg32(&priv->ctrl->vreg.ptha) & CHA_VER_NUM_MASK; - arc4_inst = rd_reg32(&priv->ctrl->vreg.afha) & CHA_VER_NUM_MASK; gcm_support = aesa & CHA_VER_MISC_AES_GCM; } @@ -3598,10 +3573,6 @@ int caam_algapi_init(struct device *ctrldev) if (!aes_inst && (alg_sel == OP_ALG_ALGSEL_AES)) continue; - /* Skip ARC4 algorithms if not supported by device */ - if (!arc4_inst && alg_sel == OP_ALG_ALGSEL_ARC4) - continue; - /* * Check support for AES modes not available * on LP devices. diff --git a/drivers/crypto/caam/compat.h b/drivers/crypto/caam/compat.h index 60e2a54c19f1..c3c22a8de4c0 100644 --- a/drivers/crypto/caam/compat.h +++ b/drivers/crypto/caam/compat.h @@ -43,7 +43,6 @@ #include #include #include -#include #include #include #include From 0f77e95efd75eee36ba1c536f27d46c548a31e55 Mon Sep 17 00:00:00 2001 From: Steve Longerbeam Date: Wed, 17 Jun 2020 15:40:37 -0700 Subject: [PATCH 394/448] gpu: ipu-v3: image-convert: Combine rotate/no-rotate irq handlers [ Upstream commit 0f6245f42ce9b7e4d20f2cda8d5f12b55a44d7d1 ] Combine the rotate_irq() and norotate_irq() handlers into a single eof_irq() handler. Signed-off-by: Steve Longerbeam Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/ipu-v3/ipu-image-convert.c | 60 +++++++++----------------- 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index eeca50d9a1ee..f8b031ded3cf 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c @@ -1709,38 +1709,7 @@ done: return IRQ_WAKE_THREAD; } -static irqreturn_t norotate_irq(int irq, void *data) -{ - struct ipu_image_convert_chan *chan = data; - struct ipu_image_convert_ctx *ctx; - struct ipu_image_convert_run *run; - unsigned long flags; - irqreturn_t ret; - - spin_lock_irqsave(&chan->irqlock, flags); - - /* get current run and its context */ - run = chan->current_run; - if (!run) { - ret = IRQ_NONE; - goto out; - } - - ctx = run->ctx; - - if (ipu_rot_mode_is_irt(ctx->rot_mode)) { - /* this is a rotation operation, just ignore */ - spin_unlock_irqrestore(&chan->irqlock, flags); - return IRQ_HANDLED; - } - - ret = do_irq(run); -out: - spin_unlock_irqrestore(&chan->irqlock, flags); - return ret; -} - -static irqreturn_t rotate_irq(int irq, void *data) +static irqreturn_t eof_irq(int irq, void *data) { struct ipu_image_convert_chan *chan = data; struct ipu_image_convert_priv *priv = chan->priv; @@ -1760,11 +1729,24 @@ static irqreturn_t rotate_irq(int irq, void *data) ctx = run->ctx; - if (!ipu_rot_mode_is_irt(ctx->rot_mode)) { - /* this was NOT a rotation operation, shouldn't happen */ - dev_err(priv->ipu->dev, "Unexpected rotation interrupt\n"); - spin_unlock_irqrestore(&chan->irqlock, flags); - return IRQ_HANDLED; + if (irq == chan->out_eof_irq) { + if (ipu_rot_mode_is_irt(ctx->rot_mode)) { + /* this is a rotation op, just ignore */ + ret = IRQ_HANDLED; + goto out; + } + } else if (irq == chan->rot_out_eof_irq) { + if (!ipu_rot_mode_is_irt(ctx->rot_mode)) { + /* this was NOT a rotation op, shouldn't happen */ + dev_err(priv->ipu->dev, + "Unexpected rotation interrupt\n"); + ret = IRQ_HANDLED; + goto out; + } + } else { + dev_err(priv->ipu->dev, "Received unknown irq %d\n", irq); + ret = IRQ_NONE; + goto out; } ret = do_irq(run); @@ -1859,7 +1841,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan) chan->out_chan, IPU_IRQ_EOF); - ret = request_threaded_irq(chan->out_eof_irq, norotate_irq, do_bh, + ret = request_threaded_irq(chan->out_eof_irq, eof_irq, do_bh, 0, "ipu-ic", chan); if (ret < 0) { dev_err(priv->ipu->dev, "could not acquire irq %d\n", @@ -1872,7 +1854,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan) chan->rotation_out_chan, IPU_IRQ_EOF); - ret = request_threaded_irq(chan->rot_out_eof_irq, rotate_irq, do_bh, + ret = request_threaded_irq(chan->rot_out_eof_irq, eof_irq, do_bh, 0, "ipu-ic", chan); if (ret < 0) { dev_err(priv->ipu->dev, "could not acquire irq %d\n", From 386f82040c84728c7c058f34cdd7113c2f4c5b16 Mon Sep 17 00:00:00 2001 From: Steve Longerbeam Date: Thu, 25 Jun 2020 11:13:37 -0700 Subject: [PATCH 395/448] gpu: ipu-v3: image-convert: Wait for all EOFs before completing a tile [ Upstream commit dd81d821d0b3f77d949d0cac5c05c1f05b921d46 ] Use a bit-mask of EOF irqs to determine when all required idmac channel EOFs have been received for a tile conversion, and only do tile completion processing after all EOFs have been received. Otherwise it was found that a conversion would stall after the completion of a tile and the start of the next tile, because the input/read idmac channel had not completed and entered idle state, thus locking up the channel when attempting to re-start it for the next tile. Fixes: 0537db801bb01 ("gpu: ipu-v3: image-convert: reconfigure IC per tile") Signed-off-by: Steve Longerbeam Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/ipu-v3/ipu-image-convert.c | 111 ++++++++++++++++++------- 1 file changed, 83 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index f8b031ded3cf..aa1d4b6d278f 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c @@ -137,6 +137,17 @@ struct ipu_image_convert_ctx; struct ipu_image_convert_chan; struct ipu_image_convert_priv; +enum eof_irq_mask { + EOF_IRQ_IN = BIT(0), + EOF_IRQ_ROT_IN = BIT(1), + EOF_IRQ_OUT = BIT(2), + EOF_IRQ_ROT_OUT = BIT(3), +}; + +#define EOF_IRQ_COMPLETE (EOF_IRQ_IN | EOF_IRQ_OUT) +#define EOF_IRQ_ROT_COMPLETE (EOF_IRQ_IN | EOF_IRQ_OUT | \ + EOF_IRQ_ROT_IN | EOF_IRQ_ROT_OUT) + struct ipu_image_convert_ctx { struct ipu_image_convert_chan *chan; @@ -173,6 +184,9 @@ struct ipu_image_convert_ctx { /* where to place converted tile in dest image */ unsigned int out_tile_map[MAX_TILES]; + /* mask of completed EOF irqs at every tile conversion */ + enum eof_irq_mask eof_mask; + struct list_head list; }; @@ -189,6 +203,8 @@ struct ipu_image_convert_chan { struct ipuv3_channel *rotation_out_chan; /* the IPU end-of-frame irqs */ + int in_eof_irq; + int rot_in_eof_irq; int out_eof_irq; int rot_out_eof_irq; @@ -1380,6 +1396,9 @@ static int convert_start(struct ipu_image_convert_run *run, unsigned int tile) dev_dbg(priv->ipu->dev, "%s: task %u: starting ctx %p run %p tile %u -> %u\n", __func__, chan->ic_task, ctx, run, tile, dst_tile); + /* clear EOF irq mask */ + ctx->eof_mask = 0; + if (ipu_rot_mode_is_irt(ctx->rot_mode)) { /* swap width/height for resizer */ dest_width = d_image->tile[dst_tile].height; @@ -1615,7 +1634,7 @@ static bool ic_settings_changed(struct ipu_image_convert_ctx *ctx) } /* hold irqlock when calling */ -static irqreturn_t do_irq(struct ipu_image_convert_run *run) +static irqreturn_t do_tile_complete(struct ipu_image_convert_run *run) { struct ipu_image_convert_ctx *ctx = run->ctx; struct ipu_image_convert_chan *chan = ctx->chan; @@ -1700,6 +1719,7 @@ static irqreturn_t do_irq(struct ipu_image_convert_run *run) ctx->cur_buf_num ^= 1; } + ctx->eof_mask = 0; /* clear EOF irq mask for next tile */ ctx->next_tile++; return IRQ_HANDLED; done: @@ -1715,8 +1735,9 @@ static irqreturn_t eof_irq(int irq, void *data) struct ipu_image_convert_priv *priv = chan->priv; struct ipu_image_convert_ctx *ctx; struct ipu_image_convert_run *run; + irqreturn_t ret = IRQ_HANDLED; + bool tile_complete = false; unsigned long flags; - irqreturn_t ret; spin_lock_irqsave(&chan->irqlock, flags); @@ -1729,27 +1750,33 @@ static irqreturn_t eof_irq(int irq, void *data) ctx = run->ctx; - if (irq == chan->out_eof_irq) { - if (ipu_rot_mode_is_irt(ctx->rot_mode)) { - /* this is a rotation op, just ignore */ - ret = IRQ_HANDLED; - goto out; - } - } else if (irq == chan->rot_out_eof_irq) { + if (irq == chan->in_eof_irq) { + ctx->eof_mask |= EOF_IRQ_IN; + } else if (irq == chan->out_eof_irq) { + ctx->eof_mask |= EOF_IRQ_OUT; + } else if (irq == chan->rot_in_eof_irq || + irq == chan->rot_out_eof_irq) { if (!ipu_rot_mode_is_irt(ctx->rot_mode)) { /* this was NOT a rotation op, shouldn't happen */ dev_err(priv->ipu->dev, "Unexpected rotation interrupt\n"); - ret = IRQ_HANDLED; goto out; } + ctx->eof_mask |= (irq == chan->rot_in_eof_irq) ? + EOF_IRQ_ROT_IN : EOF_IRQ_ROT_OUT; } else { dev_err(priv->ipu->dev, "Received unknown irq %d\n", irq); ret = IRQ_NONE; goto out; } - ret = do_irq(run); + if (ipu_rot_mode_is_irt(ctx->rot_mode)) + tile_complete = (ctx->eof_mask == EOF_IRQ_ROT_COMPLETE); + else + tile_complete = (ctx->eof_mask == EOF_IRQ_COMPLETE); + + if (tile_complete) + ret = do_tile_complete(run); out: spin_unlock_irqrestore(&chan->irqlock, flags); return ret; @@ -1783,6 +1810,10 @@ static void force_abort(struct ipu_image_convert_ctx *ctx) static void release_ipu_resources(struct ipu_image_convert_chan *chan) { + if (chan->in_eof_irq >= 0) + free_irq(chan->in_eof_irq, chan); + if (chan->rot_in_eof_irq >= 0) + free_irq(chan->rot_in_eof_irq, chan); if (chan->out_eof_irq >= 0) free_irq(chan->out_eof_irq, chan); if (chan->rot_out_eof_irq >= 0) @@ -1801,7 +1832,27 @@ static void release_ipu_resources(struct ipu_image_convert_chan *chan) chan->in_chan = chan->out_chan = chan->rotation_in_chan = chan->rotation_out_chan = NULL; - chan->out_eof_irq = chan->rot_out_eof_irq = -1; + chan->in_eof_irq = -1; + chan->rot_in_eof_irq = -1; + chan->out_eof_irq = -1; + chan->rot_out_eof_irq = -1; +} + +static int get_eof_irq(struct ipu_image_convert_chan *chan, + struct ipuv3_channel *channel) +{ + struct ipu_image_convert_priv *priv = chan->priv; + int ret, irq; + + irq = ipu_idmac_channel_irq(priv->ipu, channel, IPU_IRQ_EOF); + + ret = request_threaded_irq(irq, eof_irq, do_bh, 0, "ipu-ic", chan); + if (ret < 0) { + dev_err(priv->ipu->dev, "could not acquire irq %d\n", irq); + return ret; + } + + return irq; } static int get_ipu_resources(struct ipu_image_convert_chan *chan) @@ -1837,31 +1888,33 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan) } /* acquire the EOF interrupts */ - chan->out_eof_irq = ipu_idmac_channel_irq(priv->ipu, - chan->out_chan, - IPU_IRQ_EOF); - - ret = request_threaded_irq(chan->out_eof_irq, eof_irq, do_bh, - 0, "ipu-ic", chan); + ret = get_eof_irq(chan, chan->in_chan); + if (ret < 0) { + chan->in_eof_irq = -1; + goto err; + } + chan->in_eof_irq = ret; + + ret = get_eof_irq(chan, chan->rotation_in_chan); + if (ret < 0) { + chan->rot_in_eof_irq = -1; + goto err; + } + chan->rot_in_eof_irq = ret; + + ret = get_eof_irq(chan, chan->out_chan); if (ret < 0) { - dev_err(priv->ipu->dev, "could not acquire irq %d\n", - chan->out_eof_irq); chan->out_eof_irq = -1; goto err; } + chan->out_eof_irq = ret; - chan->rot_out_eof_irq = ipu_idmac_channel_irq(priv->ipu, - chan->rotation_out_chan, - IPU_IRQ_EOF); - - ret = request_threaded_irq(chan->rot_out_eof_irq, eof_irq, do_bh, - 0, "ipu-ic", chan); + ret = get_eof_irq(chan, chan->rotation_out_chan); if (ret < 0) { - dev_err(priv->ipu->dev, "could not acquire irq %d\n", - chan->rot_out_eof_irq); chan->rot_out_eof_irq = -1; goto err; } + chan->rot_out_eof_irq = ret; return 0; err: @@ -2440,6 +2493,8 @@ int ipu_image_convert_init(struct ipu_soc *ipu, struct device *dev) chan->ic_task = i; chan->priv = priv; chan->dma_ch = &image_convert_dma_chan[i]; + chan->in_eof_irq = -1; + chan->rot_in_eof_irq = -1; chan->out_eof_irq = -1; chan->rot_out_eof_irq = -1; From 0e0a146f978e1dc1add46e9a2e1ab742f72363c5 Mon Sep 17 00:00:00 2001 From: Ming Lei Date: Fri, 19 Jun 2020 16:42:14 +0800 Subject: [PATCH 396/448] dm rq: don't call blk_mq_queue_stopped() in dm_stop_queue() [ Upstream commit e766668c6cd49d741cfb49eaeb38998ba34d27bc ] dm_stop_queue() only uses blk_mq_quiesce_queue() so it doesn't formally stop the blk-mq queue; therefore there is no point making the blk_mq_queue_stopped() check -- it will never be stopped. In addition, even though dm_stop_queue() actually tries to quiesce hw queues via blk_mq_quiesce_queue(), checking with blk_queue_quiesced() to avoid unnecessary queue quiesce isn't reliable because: the QUEUE_FLAG_QUIESCED flag is set before synchronize_rcu() and dm_stop_queue() may be called when synchronize_rcu() from another blk_mq_quiesce_queue() is in-progress. Fixes: 7b17c2f7292ba ("dm: Fix a race condition related to stopping and starting queues") Signed-off-by: Ming Lei Signed-off-by: Mike Snitzer Signed-off-by: Sasha Levin --- drivers/md/dm-rq.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c index 3f8577e2c13b..2bd2444ad99c 100644 --- a/drivers/md/dm-rq.c +++ b/drivers/md/dm-rq.c @@ -70,9 +70,6 @@ void dm_start_queue(struct request_queue *q) void dm_stop_queue(struct request_queue *q) { - if (blk_mq_queue_stopped(q)) - return; - blk_mq_quiesce_queue(q); } From ea777df6b8b9d32fdf8d1330be9d12ff30180bc9 Mon Sep 17 00:00:00 2001 From: Cristian Ciocaltea Date: Fri, 3 Jul 2020 20:05:07 +0300 Subject: [PATCH 397/448] clk: actions: Fix h_clk for Actions S500 SoC [ Upstream commit f47ee279d25fb0e010cae5d6e758e39b40eb6378 ] The h_clk clock in the Actions Semi S500 SoC clock driver has an invalid parent. Replace with the correct one. Fixes: ed6b4795ece4 ("clk: actions: Add clock driver for S500 SoC") Signed-off-by: Cristian Ciocaltea Reviewed-by: Manivannan Sadhasivam Link: https://lore.kernel.org/r/c57e7ebabfa970014f073b92fe95b47d3e5a70b1.1593788312.git.cristian.ciocaltea@gmail.com Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/actions/owl-s500.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clk/actions/owl-s500.c b/drivers/clk/actions/owl-s500.c index e2007ac4d235..0eb83a0b70bc 100644 --- a/drivers/clk/actions/owl-s500.c +++ b/drivers/clk/actions/owl-s500.c @@ -183,7 +183,7 @@ static OWL_GATE(timer_clk, "timer_clk", "hosc", CMU_DEVCLKEN1, 27, 0, 0); static OWL_GATE(hdmi_clk, "hdmi_clk", "hosc", CMU_DEVCLKEN1, 3, 0, 0); /* divider clocks */ -static OWL_DIVIDER(h_clk, "h_clk", "ahbprevdiv_clk", CMU_BUSCLK1, 12, 2, NULL, 0, 0); +static OWL_DIVIDER(h_clk, "h_clk", "ahbprediv_clk", CMU_BUSCLK1, 12, 2, NULL, 0, 0); static OWL_DIVIDER(rmii_ref_clk, "rmii_ref_clk", "ethernet_pll_clk", CMU_ETHERNETPLL, 1, 1, rmii_ref_div_table, 0, 0); /* factor clocks */ From e4a6919c9908c258e3f0d92da5f65f332316939b Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Thu, 9 Jul 2020 08:59:43 +0530 Subject: [PATCH 398/448] selftests/powerpc: ptrace-pkey: Rename variables to make it easier to follow code [ Upstream commit 9a11f12e0a6c374b3ef1ce81e32ce477d28eb1b8 ] Rename variable to indicate that they are invalid values which we will use to test ptrace update of pkeys. Signed-off-by: Aneesh Kumar K.V Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200709032946.881753-21-aneesh.kumar@linux.ibm.com Signed-off-by: Sasha Levin --- .../selftests/powerpc/ptrace/ptrace-pkey.c | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c index bdbbbe8431e0..f9216c7a1829 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c @@ -44,7 +44,7 @@ struct shared_info { unsigned long amr2; /* AMR value that ptrace should refuse to write to the child. */ - unsigned long amr3; + unsigned long invalid_amr; /* IAMR value the parent expects to read from the child. */ unsigned long expected_iamr; @@ -57,8 +57,8 @@ struct shared_info { * (even though they're valid ones) because userspace doesn't have * access to those registers. */ - unsigned long new_iamr; - unsigned long new_uamor; + unsigned long invalid_iamr; + unsigned long invalid_uamor; }; static int sys_pkey_alloc(unsigned long flags, unsigned long init_access_rights) @@ -100,7 +100,7 @@ static int child(struct shared_info *info) info->amr1 |= 3ul << pkeyshift(pkey1); info->amr2 |= 3ul << pkeyshift(pkey2); - info->amr3 |= info->amr2 | 3ul << pkeyshift(pkey3); + info->invalid_amr |= info->amr2 | 3ul << pkeyshift(pkey3); if (disable_execute) info->expected_iamr |= 1ul << pkeyshift(pkey1); @@ -111,8 +111,8 @@ static int child(struct shared_info *info) info->expected_uamor |= 3ul << pkeyshift(pkey1) | 3ul << pkeyshift(pkey2); - info->new_iamr |= 1ul << pkeyshift(pkey1) | 1ul << pkeyshift(pkey2); - info->new_uamor |= 3ul << pkeyshift(pkey1); + info->invalid_iamr |= 1ul << pkeyshift(pkey1) | 1ul << pkeyshift(pkey2); + info->invalid_uamor |= 3ul << pkeyshift(pkey1); /* * We won't use pkey3. We just want a plausible but invalid key to test @@ -196,9 +196,9 @@ static int parent(struct shared_info *info, pid_t pid) PARENT_SKIP_IF_UNSUPPORTED(ret, &info->child_sync); PARENT_FAIL_IF(ret, &info->child_sync); - info->amr1 = info->amr2 = info->amr3 = regs[0]; - info->expected_iamr = info->new_iamr = regs[1]; - info->expected_uamor = info->new_uamor = regs[2]; + info->amr1 = info->amr2 = info->invalid_amr = regs[0]; + info->expected_iamr = info->invalid_iamr = regs[1]; + info->expected_uamor = info->invalid_uamor = regs[2]; /* Wake up child so that it can set itself up. */ ret = prod_child(&info->child_sync); @@ -234,10 +234,10 @@ static int parent(struct shared_info *info, pid_t pid) return ret; /* Write invalid AMR value in child. */ - ret = ptrace_write_regs(pid, NT_PPC_PKEY, &info->amr3, 1); + ret = ptrace_write_regs(pid, NT_PPC_PKEY, &info->invalid_amr, 1); PARENT_FAIL_IF(ret, &info->child_sync); - printf("%-30s AMR: %016lx\n", ptrace_write_running, info->amr3); + printf("%-30s AMR: %016lx\n", ptrace_write_running, info->invalid_amr); /* Wake up child so that it can verify it didn't change. */ ret = prod_child(&info->child_sync); @@ -249,7 +249,7 @@ static int parent(struct shared_info *info, pid_t pid) /* Try to write to IAMR. */ regs[0] = info->amr1; - regs[1] = info->new_iamr; + regs[1] = info->invalid_iamr; ret = ptrace_write_regs(pid, NT_PPC_PKEY, regs, 2); PARENT_FAIL_IF(!ret, &info->child_sync); @@ -257,7 +257,7 @@ static int parent(struct shared_info *info, pid_t pid) ptrace_write_running, regs[0], regs[1]); /* Try to write to IAMR and UAMOR. */ - regs[2] = info->new_uamor; + regs[2] = info->invalid_uamor; ret = ptrace_write_regs(pid, NT_PPC_PKEY, regs, 3); PARENT_FAIL_IF(!ret, &info->child_sync); From cf507818152813e2eb0871e3f49535fab7a128db Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Thu, 9 Jul 2020 08:59:44 +0530 Subject: [PATCH 399/448] selftests/powerpc: ptrace-pkey: Update the test to mark an invalid pkey correctly [ Upstream commit 0eaa3b5ca7b5a76e3783639c828498343be66a01 ] Signed-off-by: Aneesh Kumar K.V Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200709032946.881753-22-aneesh.kumar@linux.ibm.com Signed-off-by: Sasha Levin --- .../selftests/powerpc/ptrace/ptrace-pkey.c | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c index f9216c7a1829..bc33d748d95b 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c @@ -66,11 +66,6 @@ static int sys_pkey_alloc(unsigned long flags, unsigned long init_access_rights) return syscall(__NR_pkey_alloc, flags, init_access_rights); } -static int sys_pkey_free(int pkey) -{ - return syscall(__NR_pkey_free, pkey); -} - static int child(struct shared_info *info) { unsigned long reg; @@ -100,7 +95,11 @@ static int child(struct shared_info *info) info->amr1 |= 3ul << pkeyshift(pkey1); info->amr2 |= 3ul << pkeyshift(pkey2); - info->invalid_amr |= info->amr2 | 3ul << pkeyshift(pkey3); + /* + * invalid amr value where we try to force write + * things which are deined by a uamor setting. + */ + info->invalid_amr = info->amr2 | (~0x0UL & ~info->expected_uamor); if (disable_execute) info->expected_iamr |= 1ul << pkeyshift(pkey1); @@ -111,17 +110,12 @@ static int child(struct shared_info *info) info->expected_uamor |= 3ul << pkeyshift(pkey1) | 3ul << pkeyshift(pkey2); - info->invalid_iamr |= 1ul << pkeyshift(pkey1) | 1ul << pkeyshift(pkey2); - info->invalid_uamor |= 3ul << pkeyshift(pkey1); - /* - * We won't use pkey3. We just want a plausible but invalid key to test - * whether ptrace will let us write to AMR bits we are not supposed to. - * - * This also tests whether the kernel restores the UAMOR permissions - * after a key is freed. + * Create an IAMR value different from expected value. + * Kernel will reject an IAMR and UAMOR change. */ - sys_pkey_free(pkey3); + info->invalid_iamr = info->expected_iamr | (1ul << pkeyshift(pkey1) | 1ul << pkeyshift(pkey2)); + info->invalid_uamor = info->expected_uamor & ~(0x3ul << pkeyshift(pkey1)); printf("%-30s AMR: %016lx pkey1: %d pkey2: %d pkey3: %d\n", user_write, info->amr1, pkey1, pkey2, pkey3); @@ -196,9 +190,9 @@ static int parent(struct shared_info *info, pid_t pid) PARENT_SKIP_IF_UNSUPPORTED(ret, &info->child_sync); PARENT_FAIL_IF(ret, &info->child_sync); - info->amr1 = info->amr2 = info->invalid_amr = regs[0]; - info->expected_iamr = info->invalid_iamr = regs[1]; - info->expected_uamor = info->invalid_uamor = regs[2]; + info->amr1 = info->amr2 = regs[0]; + info->expected_iamr = regs[1]; + info->expected_uamor = regs[2]; /* Wake up child so that it can set itself up. */ ret = prod_child(&info->child_sync); From 34c920e2c858f47d0816df3356e1df7b03166602 Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Thu, 9 Jul 2020 08:59:45 +0530 Subject: [PATCH 400/448] selftests/powerpc: ptrace-pkey: Don't update expected UAMOR value [ Upstream commit 3563b9bea0ca7f53e4218b5e268550341a49f333 ] With commit 4a4a5e5d2aad ("powerpc/pkeys: key allocation/deallocation must not change pkey registers") we are not updating UAMOR on key allocation. So don't update the expected uamor value in the test. Fixes: 4a4a5e5d2aad ("powerpc/pkeys: key allocation/deallocation must not change pkey registers") Signed-off-by: Aneesh Kumar K.V Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200709032946.881753-23-aneesh.kumar@linux.ibm.com Signed-off-by: Sasha Levin --- tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c index bc33d748d95b..3694613f418f 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-pkey.c @@ -101,15 +101,20 @@ static int child(struct shared_info *info) */ info->invalid_amr = info->amr2 | (~0x0UL & ~info->expected_uamor); + /* + * if PKEY_DISABLE_EXECUTE succeeded we should update the expected_iamr + */ if (disable_execute) info->expected_iamr |= 1ul << pkeyshift(pkey1); else info->expected_iamr &= ~(1ul << pkeyshift(pkey1)); - info->expected_iamr &= ~(1ul << pkeyshift(pkey2) | 1ul << pkeyshift(pkey3)); + /* + * We allocated pkey2 and pkey 3 above. Clear the IAMR bits. + */ + info->expected_iamr &= ~(1ul << pkeyshift(pkey2)); + info->expected_iamr &= ~(1ul << pkeyshift(pkey3)); - info->expected_uamor |= 3ul << pkeyshift(pkey1) | - 3ul << pkeyshift(pkey2); /* * Create an IAMR value different from expected value. * Kernel will reject an IAMR and UAMOR change. From a31ac410198194eb5d2e26c31c4d089a80d498ba Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Tue, 14 Jul 2020 20:22:11 +0100 Subject: [PATCH 401/448] iommu/omap: Check for failure of a call to omap_iommu_dump_ctx [ Upstream commit dee9d154f40c58d02f69acdaa5cfd1eae6ebc28b ] It is possible for the call to omap_iommu_dump_ctx to return a negative error number, so check for the failure and return the error number rather than pass the negative value to simple_read_from_buffer. Fixes: 14e0e6796a0d ("OMAP: iommu: add initial debugfs support") Signed-off-by: Colin Ian King Link: https://lore.kernel.org/r/20200714192211.744776-1-colin.king@canonical.com Addresses-Coverity: ("Improper use of negative value") Signed-off-by: Joerg Roedel Signed-off-by: Sasha Levin --- drivers/iommu/omap-iommu-debug.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c index 8e19bfa94121..a99afb5d9011 100644 --- a/drivers/iommu/omap-iommu-debug.c +++ b/drivers/iommu/omap-iommu-debug.c @@ -98,8 +98,11 @@ static ssize_t debug_read_regs(struct file *file, char __user *userbuf, mutex_lock(&iommu_debug_lock); bytes = omap_iommu_dump_ctx(obj, p, count); + if (bytes < 0) + goto err; bytes = simple_read_from_buffer(userbuf, count, ppos, buf, bytes); +err: mutex_unlock(&iommu_debug_lock); kfree(buf); From f66d0154ed2f37e8d1ef20136b4efe0c9d115182 Mon Sep 17 00:00:00 2001 From: Jonathan Marek Date: Thu, 9 Jul 2020 09:52:32 -0400 Subject: [PATCH 402/448] clk: qcom: gcc: fix sm8150 GPU and NPU clocks [ Upstream commit 667f39b59b494d96ae70f4217637db2ebbee3df0 ] Fix the parents and set BRANCH_HALT_SKIP. From the downstream driver it should be a 500us delay and not skip, however this matches what was done for other clocks that had 500us delay in downstream. Fixes: f73a4230d5bb ("clk: qcom: gcc: Add GPU and NPU clocks for SM8150") Signed-off-by: Jonathan Marek Tested-by: Dmitry Baryshkov Link: https://lore.kernel.org/r/20200709135251.643-2-jonathan@marek.ca Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/qcom/gcc-sm8150.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/clk/qcom/gcc-sm8150.c b/drivers/clk/qcom/gcc-sm8150.c index fad42897a7a7..ee908fbfeab1 100644 --- a/drivers/clk/qcom/gcc-sm8150.c +++ b/drivers/clk/qcom/gcc-sm8150.c @@ -1616,6 +1616,7 @@ static struct clk_branch gcc_gpu_cfg_ahb_clk = { }; static struct clk_branch gcc_gpu_gpll0_clk_src = { + .halt_check = BRANCH_HALT_SKIP, .clkr = { .enable_reg = 0x52004, .enable_mask = BIT(15), @@ -1631,13 +1632,14 @@ static struct clk_branch gcc_gpu_gpll0_clk_src = { }; static struct clk_branch gcc_gpu_gpll0_div_clk_src = { + .halt_check = BRANCH_HALT_SKIP, .clkr = { .enable_reg = 0x52004, .enable_mask = BIT(16), .hw.init = &(struct clk_init_data){ .name = "gcc_gpu_gpll0_div_clk_src", .parent_hws = (const struct clk_hw *[]){ - &gcc_gpu_gpll0_clk_src.clkr.hw }, + &gpll0_out_even.clkr.hw }, .num_parents = 1, .flags = CLK_SET_RATE_PARENT, .ops = &clk_branch2_ops, @@ -1728,6 +1730,7 @@ static struct clk_branch gcc_npu_cfg_ahb_clk = { }; static struct clk_branch gcc_npu_gpll0_clk_src = { + .halt_check = BRANCH_HALT_SKIP, .clkr = { .enable_reg = 0x52004, .enable_mask = BIT(18), @@ -1743,13 +1746,14 @@ static struct clk_branch gcc_npu_gpll0_clk_src = { }; static struct clk_branch gcc_npu_gpll0_div_clk_src = { + .halt_check = BRANCH_HALT_SKIP, .clkr = { .enable_reg = 0x52004, .enable_mask = BIT(19), .hw.init = &(struct clk_init_data){ .name = "gcc_npu_gpll0_div_clk_src", .parent_hws = (const struct clk_hw *[]){ - &gcc_npu_gpll0_clk_src.clkr.hw }, + &gpll0_out_even.clkr.hw }, .num_parents = 1, .flags = CLK_SET_RATE_PARENT, .ops = &clk_branch2_ops, From 99d1472ba802ddbd60426d221bed2511dd034c54 Mon Sep 17 00:00:00 2001 From: Jonathan Marek Date: Thu, 9 Jul 2020 09:52:33 -0400 Subject: [PATCH 403/448] clk: qcom: clk-alpha-pll: remove unused/incorrect PLL_CAL_VAL [ Upstream commit c8b9002f44e4a1d2771b2f59f6de900864b1f9d7 ] 0x44 isn't a register offset, it is the value that goes into CAL_L_VAL. Fixes: 548a909597d5 ("clk: qcom: clk-alpha-pll: Add support for Trion PLLs") Signed-off-by: Jonathan Marek Tested-by: Dmitry Baryshkov Link: https://lore.kernel.org/r/20200709135251.643-3-jonathan@marek.ca Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/qcom/clk-alpha-pll.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c index 055318f97991..a69f53e435ed 100644 --- a/drivers/clk/qcom/clk-alpha-pll.c +++ b/drivers/clk/qcom/clk-alpha-pll.c @@ -55,7 +55,6 @@ #define PLL_STATUS(p) ((p)->offset + (p)->regs[PLL_OFF_STATUS]) #define PLL_OPMODE(p) ((p)->offset + (p)->regs[PLL_OFF_OPMODE]) #define PLL_FRAC(p) ((p)->offset + (p)->regs[PLL_OFF_FRAC]) -#define PLL_CAL_VAL(p) ((p)->offset + (p)->regs[PLL_OFF_CAL_VAL]) const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = { [CLK_ALPHA_PLL_TYPE_DEFAULT] = { @@ -114,7 +113,6 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = { [PLL_OFF_STATUS] = 0x30, [PLL_OFF_OPMODE] = 0x38, [PLL_OFF_ALPHA_VAL] = 0x40, - [PLL_OFF_CAL_VAL] = 0x44, }, }; EXPORT_SYMBOL_GPL(clk_alpha_pll_regs); From 043bc80399a80625a66e0eae52f4e6c819200637 Mon Sep 17 00:00:00 2001 From: Liu Yi L Date: Fri, 24 Jul 2020 09:49:14 +0800 Subject: [PATCH 404/448] iommu/vt-d: Enforce PASID devTLB field mask [ Upstream commit 5f77d6ca5ca74e4b4a5e2e010f7ff50c45dea326 ] Set proper masks to avoid invalid input spillover to reserved bits. Signed-off-by: Liu Yi L Signed-off-by: Jacob Pan Signed-off-by: Lu Baolu Reviewed-by: Eric Auger Link: https://lore.kernel.org/r/20200724014925.15523-2-baolu.lu@linux.intel.com Signed-off-by: Joerg Roedel Signed-off-by: Sasha Levin --- include/linux/intel-iommu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 1e5dad8b8e59..ed870da78326 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h @@ -359,8 +359,8 @@ enum { #define QI_DEV_EIOTLB_ADDR(a) ((u64)(a) & VTD_PAGE_MASK) #define QI_DEV_EIOTLB_SIZE (((u64)1) << 11) -#define QI_DEV_EIOTLB_GLOB(g) ((u64)g) -#define QI_DEV_EIOTLB_PASID(p) (((u64)p) << 32) +#define QI_DEV_EIOTLB_GLOB(g) ((u64)(g) & 0x1) +#define QI_DEV_EIOTLB_PASID(p) ((u64)((p) & 0xfffff) << 32) #define QI_DEV_EIOTLB_SID(sid) ((u64)((sid) & 0xffff) << 16) #define QI_DEV_EIOTLB_QDEP(qd) ((u64)((qd) & 0x1f) << 4) #define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \ From 422a01fc23d23de90499403bbb705354c5c3af78 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Mon, 29 Jun 2020 17:38:07 +0200 Subject: [PATCH 405/448] i2c: rcar: slave: only send STOP event when we have been addressed [ Upstream commit 314139f9f0abdba61ed9a8463bbcb0bf900ac5a2 ] When the SSR interrupt is activated, it will detect every STOP condition on the bus, not only the ones after we have been addressed. So, enable this interrupt only after we have been addressed, and disable it otherwise. Fixes: de20d1857dd6 ("i2c: rcar: add slave support") Signed-off-by: Wolfram Sang Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-rcar.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c index 36af8fdb6658..3ea6013a3d68 100644 --- a/drivers/i2c/busses/i2c-rcar.c +++ b/drivers/i2c/busses/i2c-rcar.c @@ -580,13 +580,14 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv) rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR); } - rcar_i2c_write(priv, ICSSR, ~SAR & 0xff); + /* Clear SSR, too, because of old STOPs to other clients than us */ + rcar_i2c_write(priv, ICSSR, ~(SAR | SSR) & 0xff); } /* master sent stop */ if (ssr_filtered & SSR) { i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value); - rcar_i2c_write(priv, ICSIER, SAR | SSR); + rcar_i2c_write(priv, ICSIER, SAR); rcar_i2c_write(priv, ICSSR, ~SSR & 0xff); } @@ -850,7 +851,7 @@ static int rcar_reg_slave(struct i2c_client *slave) priv->slave = slave; rcar_i2c_write(priv, ICSAR, slave->addr); rcar_i2c_write(priv, ICSSR, 0); - rcar_i2c_write(priv, ICSIER, SAR | SSR); + rcar_i2c_write(priv, ICSIER, SAR); rcar_i2c_write(priv, ICSCR, SIE | SDBS); return 0; From c7bd131f43351647280f950a74da0bb3b0cb0b98 Mon Sep 17 00:00:00 2001 From: Konrad Dybcio Date: Sun, 26 Jul 2020 13:12:05 +0200 Subject: [PATCH 406/448] clk: qcom: gcc-sdm660: Fix up gcc_mss_mnoc_bimc_axi_clk [ Upstream commit 3386af51d3bcebcba3f7becdb1ef2e384abe90cf ] Add missing halt_check, hwcg_reg and hwcg_bit properties. These were likely omitted when porting the driver upstream. Signed-off-by: Konrad Dybcio Link: https://lore.kernel.org/r/20200726111215.22361-9-konradybcio@gmail.com Fixes: f2a76a2955c0 ("clk: qcom: Add Global Clock controller (GCC) driver for SDM660") Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/qcom/gcc-sdm660.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/clk/qcom/gcc-sdm660.c b/drivers/clk/qcom/gcc-sdm660.c index bf5730832ef3..c6fb57cd576f 100644 --- a/drivers/clk/qcom/gcc-sdm660.c +++ b/drivers/clk/qcom/gcc-sdm660.c @@ -1715,6 +1715,9 @@ static struct clk_branch gcc_mss_cfg_ahb_clk = { static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = { .halt_reg = 0x8a004, + .halt_check = BRANCH_HALT, + .hwcg_reg = 0x8a004, + .hwcg_bit = 1, .clkr = { .enable_reg = 0x8a004, .enable_mask = BIT(0), From ba2c4d0e720b5ce67b45e951cd6e92705937e179 Mon Sep 17 00:00:00 2001 From: Xu Wang Date: Mon, 13 Jul 2020 03:21:43 +0000 Subject: [PATCH 407/448] clk: clk-atlas6: fix return value check in atlas6_clk_init() [ Upstream commit 12b90b40854a8461a02ef19f6f4474cc88d64b66 ] In case of error, the function clk_register() returns ERR_PTR() and never returns NULL. The NULL test in the return value check should be replaced with IS_ERR(). Signed-off-by: Xu Wang Link: https://lore.kernel.org/r/20200713032143.21362-1-vulab@iscas.ac.cn Acked-by: Barry Song Fixes: 7bf21bc81f28 ("clk: sirf: re-arch to make the codes support both prima2 and atlas6") Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/sirf/clk-atlas6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clk/sirf/clk-atlas6.c b/drivers/clk/sirf/clk-atlas6.c index c84d5bab7ac2..b95483bb6a5e 100644 --- a/drivers/clk/sirf/clk-atlas6.c +++ b/drivers/clk/sirf/clk-atlas6.c @@ -135,7 +135,7 @@ static void __init atlas6_clk_init(struct device_node *np) for (i = pll1; i < maxclk; i++) { atlas6_clks[i] = clk_register(NULL, atlas6_clk_hw_array[i]); - BUG_ON(!atlas6_clks[i]); + BUG_ON(IS_ERR(atlas6_clks[i])); } clk_register_clkdev(atlas6_clks[cpu], NULL, "cpu"); clk_register_clkdev(atlas6_clks[io], NULL, "io"); From 3d0808f3c7d9991b4f1859a0513989331f86c604 Mon Sep 17 00:00:00 2001 From: Rayagonda Kokatanur Date: Fri, 17 Jul 2020 21:46:06 -0700 Subject: [PATCH 408/448] pwm: bcm-iproc: handle clk_get_rate() return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 6ced5ff0be8e94871ba846dfbddf69d21363f3d7 ] Handle clk_get_rate() returning 0 to avoid possible division by zero. Fixes: daa5abc41c80 ("pwm: Add support for Broadcom iProc PWM controller") Signed-off-by: Rayagonda Kokatanur Signed-off-by: Scott Branden Reviewed-by: Ray Jui Reviewed-by: Uwe Kleine-König Signed-off-by: Thierry Reding Signed-off-by: Sasha Levin --- drivers/pwm/pwm-bcm-iproc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c index 1f829edd8ee7..d392a828fc49 100644 --- a/drivers/pwm/pwm-bcm-iproc.c +++ b/drivers/pwm/pwm-bcm-iproc.c @@ -85,8 +85,6 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm, u64 tmp, multi, rate; u32 value, prescale; - rate = clk_get_rate(ip->clk); - value = readl(ip->base + IPROC_PWM_CTRL_OFFSET); if (value & BIT(IPROC_PWM_CTRL_EN_SHIFT(pwm->hwpwm))) @@ -99,6 +97,13 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm, else state->polarity = PWM_POLARITY_INVERSED; + rate = clk_get_rate(ip->clk); + if (rate == 0) { + state->period = 0; + state->duty_cycle = 0; + return; + } + value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET); prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm); prescale &= IPROC_PWM_PRESCALE_MAX; From 4f69483568d6732fa61164b2dba3158726ee5cd9 Mon Sep 17 00:00:00 2001 From: Thomas Hebb Date: Sun, 26 Jul 2020 21:08:14 -0700 Subject: [PATCH 409/448] tools build feature: Use CC and CXX from parent [ Upstream commit e3232c2f39acafd5a29128425bc30b9884642cfa ] commit c8c188679ccf ("tools build: Use the same CC for feature detection and actual build") changed these assignments from unconditional (:=) to conditional (?=) so that they wouldn't clobber values from the environment. However, conditional assignment does not work properly for variables that Make implicitly sets, among which are CC and CXX. To quote tools/scripts/Makefile.include, which handles this properly: # Makefiles suck: This macro sets a default value of $(2) for the # variable named by $(1), unless the variable has been set by # environment or command line. This is necessary for CC and AR # because make sets default values, so the simpler ?= approach # won't work as expected. In other words, the conditional assignments will not run even if the variables are not overridden in the environment; Make will set CC to "cc" and CXX to "g++" when it starts[1], meaning the variables are not empty by the time the conditional assignments are evaluated. This breaks cross-compilation when CROSS_COMPILE is set but CC isn't, since "cc" gets used for feature detection instead of the cross compiler (and likewise for CXX). To fix the issue, just pass down the values of CC and CXX computed by the parent Makefile, which gets included by the Makefile that actually builds whatever we're detecting features for and so is guaranteed to have good values. This is a better solution anyway, since it means we aren't trying to replicate the logic of the parent build system and so don't risk it getting out of sync. Leave PKG_CONFIG alone, since 1) there's no common logic to compute it in Makefile.include, and 2) it's not an implicit variable, so conditional assignment works properly. [1] https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html Fixes: c8c188679ccf ("tools build: Use the same CC for feature detection and actual build") Signed-off-by: Thomas Hebb Acked-by: Jiri Olsa Cc: David Carrillo-Cisneros Cc: Ian Rogers Cc: Igor Lubashev Cc: Namhyung Kim Cc: Quentin Monnet Cc: Song Liu Cc: Stephane Eranian Cc: thomas hebb Link: http://lore.kernel.org/lkml/0a6e69d1736b0fa231a648f50b0cce5d8a6734ef.1595822871.git.tommyhebb@gmail.com Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/build/Makefile.feature | 2 +- tools/build/feature/Makefile | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 8a19753cc26a..e80a1a8e287f 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -8,7 +8,7 @@ endif feature_check = $(eval $(feature_check_code)) define feature_check_code - feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" CXXFLAGS="$(EXTRA_CXXFLAGS) $(FEATURE_CHECK_CXXFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) $(OUTPUT_FEATURES)test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0) + feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CC=$(CC) CXX=$(CXX) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" CXXFLAGS="$(EXTRA_CXXFLAGS) $(FEATURE_CHECK_CXXFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) $(OUTPUT_FEATURES)test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0) endef feature_set = $(eval $(feature_set_code)) diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 8499385365c0..054e09ab4a9e 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -70,8 +70,6 @@ FILES= \ FILES := $(addprefix $(OUTPUT),$(FILES)) -CC ?= $(CROSS_COMPILE)gcc -CXX ?= $(CROSS_COMPILE)g++ PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config LLVM_CONFIG ?= llvm-config From 9153e0d4371010ae0d7e1edd7c65391de1856f7f Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Sun, 26 Jul 2020 18:16:06 +0200 Subject: [PATCH 410/448] i2c: rcar: avoid race when unregistering slave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit c7c9e914f9a0478fba4dc6f227cfd69cf84a4063 ] Due to the lockless design of the driver, it is theoretically possible to access a NULL pointer, if a slave interrupt was running while we were unregistering the slave. To make this rock solid, disable the interrupt for a short time while we are clearing the interrupt_enable register. This patch is purely based on code inspection. The OOPS is super-hard to trigger because clearing SAR (the address) makes interrupts even more unlikely to happen as well. While here, reinit SCR to SDBS because this bit should always be set according to documentation. There is no effect, though, because the interface is disabled. Fixes: 7b814d852af6 ("i2c: rcar: avoid race when unregistering slave client") Signed-off-by: Wolfram Sang Reviewed-by: Niklas Söderlund Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-rcar.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c index 3ea6013a3d68..0b90aa0318df 100644 --- a/drivers/i2c/busses/i2c-rcar.c +++ b/drivers/i2c/busses/i2c-rcar.c @@ -863,12 +863,14 @@ static int rcar_unreg_slave(struct i2c_client *slave) WARN_ON(!priv->slave); - /* disable irqs and ensure none is running before clearing ptr */ + /* ensure no irq is running before clearing ptr */ + disable_irq(priv->irq); rcar_i2c_write(priv, ICSIER, 0); - rcar_i2c_write(priv, ICSCR, 0); + rcar_i2c_write(priv, ICSSR, 0); + enable_irq(priv->irq); + rcar_i2c_write(priv, ICSCR, SDBS); rcar_i2c_write(priv, ICSAR, 0); /* Gen2: must be 0 if not using slave */ - synchronize_irq(priv->irq); priv->slave = NULL; pm_runtime_put(rcar_i2c_priv_to_dev(priv)); From 7dccbf1111bfcc78c0efdbc7eab45568058614c8 Mon Sep 17 00:00:00 2001 From: Scott Mayhew Date: Sat, 1 Aug 2020 07:10:38 -0400 Subject: [PATCH 411/448] nfs: ensure correct writeback errors are returned on close() [ Upstream commit 67dd23f9e6fbaf163431912ef5599c5e0693476c ] nfs_wb_all() calls filemap_write_and_wait(), which uses filemap_check_errors() to determine the error to return. filemap_check_errors() only looks at the mapping->flags and will therefore only return either -ENOSPC or -EIO. To ensure that the correct error is returned on close(), nfs{,4}_file_flush() should call filemap_check_wb_err() which looks at the errseq value in mapping->wb_err without consuming it. Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one") Signed-off-by: Scott Mayhew Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/file.c | 5 ++++- fs/nfs/nfs4file.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 95dc90570786..348f67c8f322 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -140,6 +140,7 @@ static int nfs_file_flush(struct file *file, fl_owner_t id) { struct inode *inode = file_inode(file); + errseq_t since; dprintk("NFS: flush(%pD2)\n", file); @@ -148,7 +149,9 @@ nfs_file_flush(struct file *file, fl_owner_t id) return 0; /* Flush writes to the server and return any errors */ - return nfs_wb_all(inode); + since = filemap_sample_wb_err(file->f_mapping); + nfs_wb_all(inode); + return filemap_check_wb_err(file->f_mapping, since); } ssize_t diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index fb55c04cdc6b..534b6fd70ffd 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -109,6 +109,7 @@ static int nfs4_file_flush(struct file *file, fl_owner_t id) { struct inode *inode = file_inode(file); + errseq_t since; dprintk("NFS: flush(%pD2)\n", file); @@ -124,7 +125,9 @@ nfs4_file_flush(struct file *file, fl_owner_t id) return filemap_fdatawrite(file->f_mapping); /* Flush writes to the server and return any errors */ - return nfs_wb_all(inode); + since = filemap_sample_wb_err(file->f_mapping); + nfs_wb_all(inode); + return filemap_check_wb_err(file->f_mapping, since); } #ifdef CONFIG_NFS_V4_2 From 1896dfc97c902937935f2eba3d6bec694d1811b2 Mon Sep 17 00:00:00 2001 From: Zhihao Cheng Date: Tue, 7 Jul 2020 20:51:40 +0800 Subject: [PATCH 412/448] ubifs: Fix wrong orphan node deletion in ubifs_jnl_update|rename [ Upstream commit 094b6d1295474f338201b846a1f15e72eb0b12cf ] There a wrong orphan node deleting in error handling path in ubifs_jnl_update() and ubifs_jnl_rename(), which may cause following error msg: UBIFS error (ubi0:0 pid 1522): ubifs_delete_orphan [ubifs]: missing orphan ino 65 Fix this by checking whether the node has been operated for adding to orphan list before being deleted, Signed-off-by: Zhihao Cheng Fixes: 823838a486888cf484e ("ubifs: Add hashes to the tree node cache") Signed-off-by: Richard Weinberger Signed-off-by: Sasha Levin --- fs/ubifs/journal.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c index 826dad0243dc..a6ae2428e4c9 100644 --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c @@ -539,7 +539,7 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, const struct fscrypt_name *nm, const struct inode *inode, int deletion, int xent) { - int err, dlen, ilen, len, lnum, ino_offs, dent_offs; + int err, dlen, ilen, len, lnum, ino_offs, dent_offs, orphan_added = 0; int aligned_dlen, aligned_ilen, sync = IS_DIRSYNC(dir); int last_reference = !!(deletion && inode->i_nlink == 0); struct ubifs_inode *ui = ubifs_inode(inode); @@ -630,6 +630,7 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, goto out_finish; } ui->del_cmtno = c->cmt_no; + orphan_added = 1; } err = write_head(c, BASEHD, dent, len, &lnum, &dent_offs, sync); @@ -702,7 +703,7 @@ out_release: kfree(dent); out_ro: ubifs_ro_mode(c, err); - if (last_reference) + if (orphan_added) ubifs_delete_orphan(c, inode->i_ino); finish_reservation(c); return err; @@ -1217,7 +1218,7 @@ int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir, void *p; union ubifs_key key; struct ubifs_dent_node *dent, *dent2; - int err, dlen1, dlen2, ilen, lnum, offs, len; + int err, dlen1, dlen2, ilen, lnum, offs, len, orphan_added = 0; int aligned_dlen1, aligned_dlen2, plen = UBIFS_INO_NODE_SZ; int last_reference = !!(new_inode && new_inode->i_nlink == 0); int move = (old_dir != new_dir); @@ -1333,6 +1334,7 @@ int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir, goto out_finish; } new_ui->del_cmtno = c->cmt_no; + orphan_added = 1; } err = write_head(c, BASEHD, dent, len, &lnum, &offs, sync); @@ -1414,7 +1416,7 @@ out_release: release_head(c, BASEHD); out_ro: ubifs_ro_mode(c, err); - if (last_reference) + if (orphan_added) ubifs_delete_orphan(c, new_inode->i_ino); out_finish: finish_reservation(c); From 0c51d8f5c83ef72edc6f303d2fd4d13e8cc7be11 Mon Sep 17 00:00:00 2001 From: Nicolas Saenz Julienne Date: Thu, 30 Jul 2020 20:26:19 +0200 Subject: [PATCH 413/448] clk: bcm2835: Do not use prediv with bcm2711's PLLs [ Upstream commit f34e4651ce66a754f41203284acf09b28b9dd955 ] Contrary to previous SoCs, bcm2711 doesn't have a prescaler in the PLL feedback loop. Bypass it by zeroing fb_prediv_mask when running on bcm2711. Note that, since the prediv configuration bits were re-purposed, this was triggering miscalculations on all clocks hanging from the VPU clock, notably the aux UART, making its output unintelligible. Fixes: 42de9ad400af ("clk: bcm2835: Add BCM2711_CLOCK_EMMC2 support") Reported-by: Nathan Chancellor Signed-off-by: Nicolas Saenz Julienne Link: https://lore.kernel.org/r/20200730182619.23246-1-nsaenzjulienne@suse.de Tested-by: Nathan Chancellor Reviewed-by: Florian Fainelli Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/bcm/clk-bcm2835.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index 6e5d635f030f..45420b514149 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -314,6 +314,7 @@ struct bcm2835_cprman { struct device *dev; void __iomem *regs; spinlock_t regs_lock; /* spinlock for all clocks */ + unsigned int soc; /* * Real names of cprman clock parents looked up through @@ -525,6 +526,20 @@ static int bcm2835_pll_is_on(struct clk_hw *hw) A2W_PLL_CTRL_PRST_DISABLE; } +static u32 bcm2835_pll_get_prediv_mask(struct bcm2835_cprman *cprman, + const struct bcm2835_pll_data *data) +{ + /* + * On BCM2711 there isn't a pre-divisor available in the PLL feedback + * loop. Bits 13:14 of ANA1 (PLLA,PLLB,PLLC,PLLD) have been re-purposed + * for to for VCO RANGE bits. + */ + if (cprman->soc & SOC_BCM2711) + return 0; + + return data->ana->fb_prediv_mask; +} + static void bcm2835_pll_choose_ndiv_and_fdiv(unsigned long rate, unsigned long parent_rate, u32 *ndiv, u32 *fdiv) @@ -582,7 +597,7 @@ static unsigned long bcm2835_pll_get_rate(struct clk_hw *hw, ndiv = (a2wctrl & A2W_PLL_CTRL_NDIV_MASK) >> A2W_PLL_CTRL_NDIV_SHIFT; pdiv = (a2wctrl & A2W_PLL_CTRL_PDIV_MASK) >> A2W_PLL_CTRL_PDIV_SHIFT; using_prediv = cprman_read(cprman, data->ana_reg_base + 4) & - data->ana->fb_prediv_mask; + bcm2835_pll_get_prediv_mask(cprman, data); if (using_prediv) { ndiv *= 2; @@ -665,6 +680,7 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw, struct bcm2835_pll *pll = container_of(hw, struct bcm2835_pll, hw); struct bcm2835_cprman *cprman = pll->cprman; const struct bcm2835_pll_data *data = pll->data; + u32 prediv_mask = bcm2835_pll_get_prediv_mask(cprman, data); bool was_using_prediv, use_fb_prediv, do_ana_setup_first; u32 ndiv, fdiv, a2w_ctl; u32 ana[4]; @@ -682,7 +698,7 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw, for (i = 3; i >= 0; i--) ana[i] = cprman_read(cprman, data->ana_reg_base + i * 4); - was_using_prediv = ana[1] & data->ana->fb_prediv_mask; + was_using_prediv = ana[1] & prediv_mask; ana[0] &= ~data->ana->mask0; ana[0] |= data->ana->set0; @@ -692,10 +708,10 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw, ana[3] |= data->ana->set3; if (was_using_prediv && !use_fb_prediv) { - ana[1] &= ~data->ana->fb_prediv_mask; + ana[1] &= ~prediv_mask; do_ana_setup_first = true; } else if (!was_using_prediv && use_fb_prediv) { - ana[1] |= data->ana->fb_prediv_mask; + ana[1] |= prediv_mask; do_ana_setup_first = false; } else { do_ana_setup_first = true; @@ -2234,6 +2250,7 @@ static int bcm2835_clk_probe(struct platform_device *pdev) platform_set_drvdata(pdev, cprman); cprman->onecell.num = asize; + cprman->soc = pdata->soc; hws = cprman->onecell.hws; for (i = 0; i < asize; i++) { From dfb5d727d7212c90467ce75a936d621def836996 Mon Sep 17 00:00:00 2001 From: Jane Chu Date: Mon, 3 Aug 2020 16:41:37 -0600 Subject: [PATCH 414/448] libnvdimm/security: fix a typo [ Upstream commit dad42d17558f316e9e807698cd4207359b636084 ] commit d78c620a2e82 ("libnvdimm/security: Introduce a 'frozen' attribute") introduced a typo, causing a 'nvdimm->sec.flags' update being overwritten by the subsequent update meant for 'nvdimm->sec.ext_flags'. Link: https://lore.kernel.org/r/1596494499-9852-1-git-send-email-jane.chu@oracle.com Fixes: d78c620a2e82 ("libnvdimm/security: Introduce a 'frozen' attribute") Cc: Dan Williams Reviewed-by: Dave Jiang Signed-off-by: Jane Chu Signed-off-by: Vishal Verma Signed-off-by: Sasha Levin --- drivers/nvdimm/security.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvdimm/security.c b/drivers/nvdimm/security.c index 89b85970912d..acfd211c01b9 100644 --- a/drivers/nvdimm/security.c +++ b/drivers/nvdimm/security.c @@ -457,7 +457,7 @@ void __nvdimm_security_overwrite_query(struct nvdimm *nvdimm) clear_bit(NDD_WORK_PENDING, &nvdimm->flags); put_device(&nvdimm->dev); nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER); - nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_MASTER); + nvdimm->sec.ext_flags = nvdimm_security_flags(nvdimm, NVDIMM_MASTER); } void nvdimm_security_overwrite_query(struct work_struct *work) From a6d5c5a398d67faecfcd2e099cad6adc7786b3c3 Mon Sep 17 00:00:00 2001 From: Jane Chu Date: Mon, 3 Aug 2020 16:41:39 -0600 Subject: [PATCH 415/448] libnvdimm/security: ensure sysfs poll thread woke up and fetch updated attr [ Upstream commit 7f674025d9f7321dea11b802cc0ab3f09cbe51c5 ] commit 7d988097c546 ("acpi/nfit, libnvdimm/security: Add security DSM overwrite support") adds a sysfs_notify_dirent() to wake up userspace poll thread when the "overwrite" operation has completed. But the notification is issued before the internal dimm security state and flags have been updated, so the userspace poll thread wakes up and fetches the not-yet-updated attr and falls back to sleep, forever. But if user from another terminal issue "ndctl wait-overwrite nmemX" again, the command returns instantly. Link: https://lore.kernel.org/r/1596494499-9852-3-git-send-email-jane.chu@oracle.com Fixes: 7d988097c546 ("acpi/nfit, libnvdimm/security: Add security DSM overwrite support") Cc: Dave Jiang Cc: Dan Williams Reviewed-by: Dave Jiang Signed-off-by: Jane Chu Signed-off-by: Vishal Verma Signed-off-by: Sasha Levin --- drivers/nvdimm/security.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/nvdimm/security.c b/drivers/nvdimm/security.c index acfd211c01b9..35d265014e1e 100644 --- a/drivers/nvdimm/security.c +++ b/drivers/nvdimm/security.c @@ -450,14 +450,19 @@ void __nvdimm_security_overwrite_query(struct nvdimm *nvdimm) else dev_dbg(&nvdimm->dev, "overwrite completed\n"); - if (nvdimm->sec.overwrite_state) - sysfs_notify_dirent(nvdimm->sec.overwrite_state); + /* + * Mark the overwrite work done and update dimm security flags, + * then send a sysfs event notification to wake up userspace + * poll threads to picked up the changed state. + */ nvdimm->sec.overwrite_tmo = 0; clear_bit(NDD_SECURITY_OVERWRITE, &nvdimm->flags); clear_bit(NDD_WORK_PENDING, &nvdimm->flags); - put_device(&nvdimm->dev); nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER); nvdimm->sec.ext_flags = nvdimm_security_flags(nvdimm, NVDIMM_MASTER); + if (nvdimm->sec.overwrite_state) + sysfs_notify_dirent(nvdimm->sec.overwrite_state); + put_device(&nvdimm->dev); } void nvdimm_security_overwrite_query(struct work_struct *work) From c9220ff3b9cc39e6f2607ee0ddd65d2b9d774cfb Mon Sep 17 00:00:00 2001 From: Stafford Horne Date: Tue, 16 Jun 2020 06:19:46 +0900 Subject: [PATCH 416/448] openrisc: Fix oops caused when dumping stack [ Upstream commit 57b8e277c33620e115633cdf700a260b55095460 ] When dumping a stack with 'cat /proc/#/stack' the kernel would oops. For example: # cat /proc/690/stack Unable to handle kernel access at virtual address 0x7fc60f58 Oops#: 0000 CPU #: 0 PC: c00097fc SR: 0000807f SP: d6f09b9c GPR00: 00000000 GPR01: d6f09b9c GPR02: d6f09bb8 GPR03: d6f09bc4 GPR04: 7fc60f5c GPR05: c00099b4 GPR06: 00000000 GPR07: d6f09ba3 GPR08: ffffff00 GPR09: c0009804 GPR10: d6f08000 GPR11: 00000000 GPR12: ffffe000 GPR13: dbb86000 GPR14: 00000001 GPR15: dbb86250 GPR16: 7fc60f63 GPR17: 00000f5c GPR18: d6f09bc4 GPR19: 00000000 GPR20: c00099b4 GPR21: ffffffc0 GPR22: 00000000 GPR23: 00000000 GPR24: 00000001 GPR25: 000002c6 GPR26: d78b6850 GPR27: 00000001 GPR28: 00000000 GPR29: dbb86000 GPR30: ffffffff GPR31: dbb862fc RES: 00000000 oGPR11: ffffffff Process cat (pid: 702, stackpage=d79d6000) Stack: Call trace: [<598977f2>] save_stack_trace_tsk+0x40/0x74 [<95063f0e>] stack_trace_save_tsk+0x44/0x58 [] proc_pid_stack+0xd0/0x13c [] proc_single_show+0x6c/0xf0 [] seq_read+0x1b4/0x688 [<2d6c7480>] do_iter_read+0x208/0x248 [<2182a2fb>] vfs_readv+0x64/0x90 This was caused by the stack trace code in save_stack_trace_tsk using the wrong stack pointer. It was using the user stack pointer instead of the kernel stack pointer. Fix this by using the right stack. Also for good measure we add try_get_task_stack/put_task_stack to ensure the task is not lost while we are walking it's stack. Fixes: eecac38b0423a ("openrisc: support framepointers and STACKTRACE_SUPPORT") Signed-off-by: Stafford Horne Signed-off-by: Sasha Levin --- arch/openrisc/kernel/stacktrace.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/arch/openrisc/kernel/stacktrace.c b/arch/openrisc/kernel/stacktrace.c index 43f140a28bc7..54d38809e22c 100644 --- a/arch/openrisc/kernel/stacktrace.c +++ b/arch/openrisc/kernel/stacktrace.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -68,12 +69,25 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) { unsigned long *sp = NULL; + if (!try_get_task_stack(tsk)) + return; + if (tsk == current) sp = (unsigned long *) &sp; - else - sp = (unsigned long *) KSTK_ESP(tsk); + else { + unsigned long ksp; + + /* Locate stack from kernel context */ + ksp = task_thread_info(tsk)->ksp; + ksp += STACK_FRAME_OVERHEAD; /* redzone */ + ksp += sizeof(struct pt_regs); + + sp = (unsigned long *) ksp; + } unwind_stack(trace, sp, save_stack_address_nosched); + + put_task_stack(tsk); } EXPORT_SYMBOL_GPL(save_stack_trace_tsk); From da14c05ad875337cc73aa806f35e8f4297c28623 Mon Sep 17 00:00:00 2001 From: "Ewan D. Milne" Date: Wed, 29 Jul 2020 19:10:11 -0400 Subject: [PATCH 417/448] scsi: lpfc: nvmet: Avoid hang / use-after-free again when destroying targetport [ Upstream commit af6de8c60fe9433afa73cea6fcccdccd98ad3e5e ] We cannot wait on a completion object in the lpfc_nvme_targetport structure in the _destroy_targetport() code path because the NVMe/fc transport will free that structure immediately after the .targetport_delete() callback. This results in a use-after-free, and a crash if slub_debug=FZPU is enabled. An earlier fix put put the completion on the stack, but commit 2a0fb340fcc8 ("scsi: lpfc: Correct localport timeout duration error") subsequently changed the code to reference the completion through a pointer in the object rather than the local stack variable. Fix this by using the stack variable directly. Link: https://lore.kernel.org/r/20200729231011.13240-1-emilne@redhat.com Fixes: 2a0fb340fcc8 ("scsi: lpfc: Correct localport timeout duration error") Reviewed-by: James Smart Signed-off-by: Ewan D. Milne Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/lpfc/lpfc_nvmet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c index 9884228800a5..f14394ab0e03 100644 --- a/drivers/scsi/lpfc/lpfc_nvmet.c +++ b/drivers/scsi/lpfc/lpfc_nvmet.c @@ -1923,7 +1923,7 @@ lpfc_nvmet_destroy_targetport(struct lpfc_hba *phba) } tgtp->tport_unreg_cmp = &tport_unreg_cmp; nvmet_fc_unregister_targetport(phba->targetport); - if (!wait_for_completion_timeout(tgtp->tport_unreg_cmp, + if (!wait_for_completion_timeout(&tport_unreg_cmp, msecs_to_jiffies(LPFC_NVMET_WAIT_TMO))) lpfc_printf_log(phba, KERN_ERR, LOG_NVME, "6179 Unreg targetport x%px timeout " From 9340d8bfec949d52fcfb7e9446aecf32382d7d08 Mon Sep 17 00:00:00 2001 From: Scott Mayhew Date: Sat, 1 Aug 2020 07:10:39 -0400 Subject: [PATCH 418/448] nfs: nfs_file_write() should check for writeback errors [ Upstream commit ce368536dd614452407dc31e2449eb84681a06af ] The NFS_CONTEXT_ERROR_WRITE flag (as well as the check of said flag) was removed by commit 6fbda89b257f. The absence of an error check allows writes to be continually queued up for a server that may no longer be able to handle them. Fix it by adding an error check using the generic error reporting functions. Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one") Signed-off-by: Scott Mayhew Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/file.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 348f67c8f322..387a2cfa7e17 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -583,12 +583,14 @@ static const struct vm_operations_struct nfs_file_vm_ops = { .page_mkwrite = nfs_vm_page_mkwrite, }; -static int nfs_need_check_write(struct file *filp, struct inode *inode) +static int nfs_need_check_write(struct file *filp, struct inode *inode, + int error) { struct nfs_open_context *ctx; ctx = nfs_file_open_context(filp); - if (nfs_ctx_key_to_expire(ctx, inode)) + if (nfs_error_is_fatal_on_server(error) || + nfs_ctx_key_to_expire(ctx, inode)) return 1; return 0; } @@ -599,6 +601,8 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) struct inode *inode = file_inode(file); unsigned long written = 0; ssize_t result; + errseq_t since; + int error; result = nfs_key_timeout_notify(file, inode); if (result) @@ -623,6 +627,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) if (iocb->ki_pos > i_size_read(inode)) nfs_revalidate_mapping(inode, file->f_mapping); + since = filemap_sample_wb_err(file->f_mapping); nfs_start_io_write(inode); result = generic_write_checks(iocb, from); if (result > 0) { @@ -641,7 +646,8 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) goto out; /* Return error values */ - if (nfs_need_check_write(file, inode)) { + error = filemap_check_wb_err(file->f_mapping, since); + if (nfs_need_check_write(file, inode, error)) { int err = nfs_wb_all(inode); if (err < 0) result = err; From 3fcd24040f5553e52bb6e1048823dab6cc8f2e36 Mon Sep 17 00:00:00 2001 From: Krzysztof Sobota Date: Fri, 17 Jul 2020 12:31:09 +0200 Subject: [PATCH 419/448] watchdog: initialize device before misc_register [ Upstream commit cb36e29bb0e4b0c33c3d5866a0a4aebace4c99b7 ] When watchdog device is being registered, it calls misc_register that makes watchdog available for systemd to open. This is a data race scenario, because when device is open it may still have device struct not initialized - this in turn causes a crash. This patch moves device initialization before misc_register call and it solves the problem printed below. ------------[ cut here ]------------ WARNING: CPU: 3 PID: 1 at lib/kobject.c:612 kobject_get+0x50/0x54 kobject: '(null)' ((ptrval)): is not initialized, yet kobject_get() is being called. Modules linked in: k2_reset_status(O) davinci_wdt(+) sfn_platform_hwbcn(O) fsmddg_sfn(O) clk_misc_mmap(O) clk_sw_bcn(O) fsp_reset(O) cma_mod(O) slave_sup_notif(O) fpga_master(O) latency(O+) evnotify(O) enable_arm_pmu(O) xge(O) rio_mport_cdev br_netfilter bridge stp llc nvrd_checksum(O) ipv6 CPU: 3 PID: 1 Comm: systemd Tainted: G O 4.19.113-g2579778-fsm4_k2 #1 Hardware name: Keystone [] (unwind_backtrace) from [] (show_stack+0x18/0x1c) [] (show_stack) from [] (dump_stack+0xb4/0xe8) [] (dump_stack) from [] (__warn+0xfc/0x114) [] (__warn) from [] (warn_slowpath_fmt+0x50/0x74) [] (warn_slowpath_fmt) from [] (kobject_get+0x50/0x54) [] (kobject_get) from [] (get_device+0x1c/0x24) [] (get_device) from [] (watchdog_open+0x90/0xf0) [] (watchdog_open) from [] (misc_open+0x130/0x17c) [] (misc_open) from [] (chrdev_open+0xec/0x1a8) [] (chrdev_open) from [] (do_dentry_open+0x204/0x3cc) [] (do_dentry_open) from [] (path_openat+0x330/0x1148) [] (path_openat) from [] (do_filp_open+0x78/0xec) [] (do_filp_open) from [] (do_sys_open+0x130/0x1f4) [] (do_sys_open) from [] (ret_fast_syscall+0x0/0x28) Exception stack(0xd2ceffa8 to 0xd2cefff0) ffa0: b6f69968 00000000 ffffff9c b6ebd210 000a0001 00000000 ffc0: b6f69968 00000000 00000000 00000142 fffffffd ffffffff 00b65530 bed7bb78 ffe0: 00000142 bed7ba70 b6cc2503 b6cc41d6 ---[ end trace 7b16eb105513974f ]--- ------------[ cut here ]------------ WARNING: CPU: 3 PID: 1 at lib/refcount.c:153 kobject_get+0x24/0x54 refcount_t: increment on 0; use-after-free. Modules linked in: k2_reset_status(O) davinci_wdt(+) sfn_platform_hwbcn(O) fsmddg_sfn(O) clk_misc_mmap(O) clk_sw_bcn(O) fsp_reset(O) cma_mod(O) slave_sup_notif(O) fpga_master(O) latency(O+) evnotify(O) enable_arm_pmu(O) xge(O) rio_mport_cdev br_netfilter bridge stp llc nvrd_checksum(O) ipv6 CPU: 3 PID: 1 Comm: systemd Tainted: G W O 4.19.113-g2579778-fsm4_k2 #1 Hardware name: Keystone [] (unwind_backtrace) from [] (show_stack+0x18/0x1c) [] (show_stack) from [] (dump_stack+0xb4/0xe8) [] (dump_stack) from [] (__warn+0xfc/0x114) [] (__warn) from [] (warn_slowpath_fmt+0x50/0x74) [] (warn_slowpath_fmt) from [] (kobject_get+0x24/0x54) [] (kobject_get) from [] (get_device+0x1c/0x24) [] (get_device) from [] (watchdog_open+0x90/0xf0) [] (watchdog_open) from [] (misc_open+0x130/0x17c) [] (misc_open) from [] (chrdev_open+0xec/0x1a8) [] (chrdev_open) from [] (do_dentry_open+0x204/0x3cc) [] (do_dentry_open) from [] (path_openat+0x330/0x1148) [] (path_openat) from [] (do_filp_open+0x78/0xec) [] (do_filp_open) from [] (do_sys_open+0x130/0x1f4) [] (do_sys_open) from [] (ret_fast_syscall+0x0/0x28) Exception stack(0xd2ceffa8 to 0xd2cefff0) ffa0: b6f69968 00000000 ffffff9c b6ebd210 000a0001 00000000 ffc0: b6f69968 00000000 00000000 00000142 fffffffd ffffffff 00b65530 bed7bb78 ffe0: 00000142 bed7ba70 b6cc2503 b6cc41d6 ---[ end trace 7b16eb1055139750 ]--- Fixes: 72139dfa2464 ("watchdog: Fix the race between the release of watchdog_core_data and cdev") Reviewed-by: Guenter Roeck Reviewed-by: Alexander Sverdlin Signed-off-by: Krzysztof Sobota Link: https://lore.kernel.org/r/20200717103109.14660-1-krzysztof.sobota@nokia.com Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Sasha Levin --- drivers/watchdog/watchdog_dev.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index c4147e93aa7d..3729f99fd8ec 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -974,6 +974,15 @@ static int watchdog_cdev_register(struct watchdog_device *wdd) if (IS_ERR_OR_NULL(watchdog_kworker)) return -ENODEV; + device_initialize(&wd_data->dev); + wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id); + wd_data->dev.class = &watchdog_class; + wd_data->dev.parent = wdd->parent; + wd_data->dev.groups = wdd->groups; + wd_data->dev.release = watchdog_core_data_release; + dev_set_drvdata(&wd_data->dev, wdd); + dev_set_name(&wd_data->dev, "watchdog%d", wdd->id); + kthread_init_work(&wd_data->work, watchdog_ping_work); hrtimer_init(&wd_data->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); wd_data->timer.function = watchdog_timer_expired; @@ -994,15 +1003,6 @@ static int watchdog_cdev_register(struct watchdog_device *wdd) } } - device_initialize(&wd_data->dev); - wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id); - wd_data->dev.class = &watchdog_class; - wd_data->dev.parent = wdd->parent; - wd_data->dev.groups = wdd->groups; - wd_data->dev.release = watchdog_core_data_release; - dev_set_drvdata(&wd_data->dev, wdd); - dev_set_name(&wd_data->dev, "watchdog%d", wdd->id); - /* Fill in the data structures */ cdev_init(&wd_data->cdev, &watchdog_fops); From 8645225c7180e2b5a157e9687a7515da97ae42de Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 4 Aug 2020 13:16:45 +0300 Subject: [PATCH 420/448] md-cluster: Fix potential error pointer dereference in resize_bitmaps() [ Upstream commit e8abe1de43dac658dacbd04a4543e0c988a8d386 ] The error handling calls md_bitmap_free(bitmap) which checks for NULL but will Oops if we pass an error pointer. Let's set "bitmap" to NULL on this error path. Fixes: afd756286083 ("md-cluster/raid10: resize all the bitmaps before start reshape") Signed-off-by: Dan Carpenter Reviewed-by: Guoqing Jiang Signed-off-by: Song Liu Signed-off-by: Sasha Levin --- drivers/md/md-cluster.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index 73fd50e77975..d50737ec4039 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c @@ -1139,6 +1139,7 @@ static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsiz bitmap = get_bitmap_from_slot(mddev, i); if (IS_ERR(bitmap)) { pr_err("can't get bitmap from slot %d\n", i); + bitmap = NULL; goto out; } counts = &bitmap->counts; From 8d7633b5aff9532afabb5f6c7bdd49e02130beba Mon Sep 17 00:00:00 2001 From: Dilip Kota Date: Mon, 3 Aug 2020 15:56:36 +0800 Subject: [PATCH 421/448] x86/tsr: Fix tsc frequency enumeration bug on Lightning Mountain SoC [ Upstream commit 7d98585860d845e36ee612832a5ff021f201dbaf ] Frequency descriptor of Lightning Mountain SoC doesn't have all the frequency entries so resulting in the below failure causing a kernel hang: Error MSR_FSB_FREQ index 15 is unknown tsc: Fast TSC calibration failed So, add all the frequency entries in the Lightning Mountain SoC frequency descriptor. Fixes: 0cc5359d8fd45 ("x86/cpu: Update init data for new Airmont CPU model") Fixes: 812c2d7506fd ("x86/tsc_msr: Use named struct initializers") Signed-off-by: Dilip Kota Signed-off-by: Ingo Molnar Reviewed-by: Andy Shevchenko Link: https://lore.kernel.org/r/211c643ae217604b46cbec43a2c0423946dc7d2d.1596440057.git.eswara.kota@linux.intel.com Signed-off-by: Sasha Levin --- arch/x86/kernel/tsc_msr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c index c65adaf81384..41200706e6da 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c @@ -133,10 +133,15 @@ static const struct freq_desc freq_desc_ann = { .mask = 0x0f, }; -/* 24 MHz crystal? : 24 * 13 / 4 = 78 MHz */ +/* + * 24 MHz crystal? : 24 * 13 / 4 = 78 MHz + * Frequency step for Lightning Mountain SoC is fixed to 78 MHz, + * so all the frequency entries are 78000. + */ static const struct freq_desc freq_desc_lgm = { .use_msr_plat = true, - .freqs = { 78000, 78000, 78000, 78000, 78000, 78000, 78000, 78000 }, + .freqs = { 78000, 78000, 78000, 78000, 78000, 78000, 78000, 78000, + 78000, 78000, 78000, 78000, 78000, 78000, 78000, 78000 }, .mask = 0x0f, }; From f41600c55789fb3c4dceb522edae7cb71bd5ccd9 Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Thu, 6 Aug 2020 15:35:34 -0700 Subject: [PATCH 422/448] Input: sentelic - fix error return when fsp_reg_write fails [ Upstream commit ea38f06e0291986eb93beb6d61fd413607a30ca4 ] Currently when the call to fsp_reg_write fails -EIO is not being returned because the count is being returned instead of the return value in retval. Fix this by returning the value in retval instead of count. Addresses-Coverity: ("Unused value") Fixes: fc69f4a6af49 ("Input: add new driver for Sentelic Finger Sensing Pad") Signed-off-by: Colin Ian King Link: https://lore.kernel.org/r/20200603141218.131663-1-colin.king@canonical.com Signed-off-by: Dmitry Torokhov Signed-off-by: Sasha Levin --- drivers/input/mouse/sentelic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c index e99d9bf1a267..e78c4c7eda34 100644 --- a/drivers/input/mouse/sentelic.c +++ b/drivers/input/mouse/sentelic.c @@ -441,7 +441,7 @@ static ssize_t fsp_attr_set_setreg(struct psmouse *psmouse, void *data, fsp_reg_write_enable(psmouse, false); - return count; + return retval; } PSMOUSE_DEFINE_WO_ATTR(setreg, S_IWUSR, NULL, fsp_attr_set_setreg); From 1d8dce52a0085cd9fc7db85f42dea5c4fd66e971 Mon Sep 17 00:00:00 2001 From: Christophe Leroy Date: Mon, 10 Aug 2020 08:48:22 +0000 Subject: [PATCH 423/448] recordmcount: Fix build failure on non arm64 [ Upstream commit 3df14264ad9930733a8166e5bd0eccc1727564bb ] Commit ea0eada45632 leads to the following build failure on powerpc: HOSTCC scripts/recordmcount scripts/recordmcount.c: In function 'arm64_is_fake_mcount': scripts/recordmcount.c:440: error: 'R_AARCH64_CALL26' undeclared (first use in this function) scripts/recordmcount.c:440: error: (Each undeclared identifier is reported only once scripts/recordmcount.c:440: error: for each function it appears in.) make[2]: *** [scripts/recordmcount] Error 1 Make sure R_AARCH64_CALL26 is always defined. Fixes: ea0eada45632 ("recordmcount: only record relocation of type R_AARCH64_CALL26 on arm64.") Signed-off-by: Christophe Leroy Acked-by: Steven Rostedt (VMware) Acked-by: Gregory Herrero Cc: Gregory Herrero Link: https://lore.kernel.org/r/5ca1be21fa6ebf73203b45fd9aadd2bafb5e6b15.1597049145.git.christophe.leroy@csgroup.eu Signed-off-by: Catalin Marinas Signed-off-by: Sasha Levin --- scripts/recordmcount.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c index e59022b3f125..b9c2ee7ab43f 100644 --- a/scripts/recordmcount.c +++ b/scripts/recordmcount.c @@ -42,6 +42,8 @@ #define R_ARM_THM_CALL 10 #define R_ARM_CALL 28 +#define R_AARCH64_CALL26 283 + static int fd_map; /* File descriptor for file being modified. */ static int mmap_failed; /* Boolean flag. */ static char gpfx; /* prefix for global symbol name (sometimes '_') */ From 95922cdab4ad7cbd0c1a50a165fa01ffd899fac4 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 26 Jun 2020 13:34:37 +0300 Subject: [PATCH 424/448] drm/vmwgfx: Use correct vmw_legacy_display_unit pointer [ Upstream commit 1d2c0c565bc0da25f5e899a862fb58e612b222df ] The "entry" pointer is an offset from the list head and it doesn't point to a valid vmw_legacy_display_unit struct. Presumably the intent was to point to the last entry. Also the "i++" wasn't used so I have removed that as well. Fixes: d7e1958dbe4a ("drm/vmwgfx: Support older hardware.") Signed-off-by: Dan Carpenter Reviewed-by: Roland Scheidegger Signed-off-by: Roland Scheidegger Signed-off-by: Sasha Levin --- drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index 5702219ec38f..7b54c1f56208 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c @@ -81,7 +81,7 @@ static int vmw_ldu_commit_list(struct vmw_private *dev_priv) struct vmw_legacy_display_unit *entry; struct drm_framebuffer *fb = NULL; struct drm_crtc *crtc = NULL; - int i = 0; + int i; /* If there is no display topology the host just assumes * that the guest will set the same layout as the host. @@ -92,12 +92,11 @@ static int vmw_ldu_commit_list(struct vmw_private *dev_priv) crtc = &entry->base.crtc; w = max(w, crtc->x + crtc->mode.hdisplay); h = max(h, crtc->y + crtc->mode.vdisplay); - i++; } if (crtc == NULL) return 0; - fb = entry->base.crtc.primary->state->fb; + fb = crtc->primary->state->fb; return vmw_kms_write_svga(dev_priv, w, h, fb->pitches[0], fb->format->cpp[0] * 8, From 35b5e689abd93f2bbfb1e87e84199e9a7f5d29b8 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 26 Jun 2020 13:39:59 +0300 Subject: [PATCH 425/448] drm/vmwgfx: Fix two list_for_each loop exit tests [ Upstream commit 4437c1152ce0e57ab8f401aa696ea6291cc07ab1 ] These if statements are supposed to be true if we ended the list_for_each_entry() loops without hitting a break statement but they don't work. In the first loop, we increment "i" after the "if (i == unit)" condition so we don't necessarily know that "i" is not equal to unit at the end of the loop. In the second loop we exit when mode is not pointing to a valid drm_display_mode struct so it doesn't make sense to check "mode->type". Fixes: a278724aa23c ("drm/vmwgfx: Implement fbdev on kms v2") Signed-off-by: Dan Carpenter Reviewed-by: Roland Scheidegger Signed-off-by: Roland Scheidegger Signed-off-by: Sasha Levin --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index f47d5710cc95..33b151988747 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -2666,7 +2666,7 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv, ++i; } - if (i != unit) { + if (&con->head == &dev_priv->dev->mode_config.connector_list) { DRM_ERROR("Could not find initial display unit.\n"); ret = -EINVAL; goto out_unlock; @@ -2690,13 +2690,13 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv, break; } - if (mode->type & DRM_MODE_TYPE_PREFERRED) - *p_mode = mode; - else { + if (&mode->head == &con->modes) { WARN_ONCE(true, "Could not find initial preferred mode.\n"); *p_mode = list_first_entry(&con->modes, struct drm_display_mode, head); + } else { + *p_mode = mode; } out_unlock: From d09d6dca89e948ddddf2b0c509b05b8cd71626de Mon Sep 17 00:00:00 2001 From: Wang Hai Date: Mon, 10 Aug 2020 10:57:05 +0800 Subject: [PATCH 426/448] net: qcom/emac: add missed clk_disable_unprepare in error path of emac_clks_phase1_init [ Upstream commit 50caa777a3a24d7027748e96265728ce748b41ef ] Fix the missing clk_disable_unprepare() before return from emac_clks_phase1_init() in the error handling case. Fixes: b9b17debc69d ("net: emac: emac gigabit ethernet controller driver") Reported-by: Hulk Robot Signed-off-by: Wang Hai Acked-by: Timur Tabi Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/qualcomm/emac/emac.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c index c84ab052ef26..3eee8df359a1 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac.c +++ b/drivers/net/ethernet/qualcomm/emac/emac.c @@ -485,13 +485,24 @@ static int emac_clks_phase1_init(struct platform_device *pdev, ret = clk_prepare_enable(adpt->clk[EMAC_CLK_CFG_AHB]); if (ret) - return ret; + goto disable_clk_axi; ret = clk_set_rate(adpt->clk[EMAC_CLK_HIGH_SPEED], 19200000); if (ret) - return ret; + goto disable_clk_cfg_ahb; - return clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]); + ret = clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]); + if (ret) + goto disable_clk_cfg_ahb; + + return 0; + +disable_clk_cfg_ahb: + clk_disable_unprepare(adpt->clk[EMAC_CLK_CFG_AHB]); +disable_clk_axi: + clk_disable_unprepare(adpt->clk[EMAC_CLK_AXI]); + + return ret; } /* Enable clocks; needs emac_clks_phase1_init to be called before */ From 75cf7f895f563e14c82c1aeea0362dc155b5baf3 Mon Sep 17 00:00:00 2001 From: Jeffrey Mitchell Date: Wed, 5 Aug 2020 12:23:19 -0500 Subject: [PATCH 427/448] nfs: Fix getxattr kernel panic and memory overflow [ Upstream commit b4487b93545214a9db8cbf32e86411677b0cca21 ] Move the buffer size check to decode_attr_security_label() before memcpy() Only call memcpy() if the buffer is large enough Fixes: aa9c2669626c ("NFS: Client implementation of Labeled-NFS") Signed-off-by: Jeffrey Mitchell [Trond: clean up duplicate test of label->len != 0] Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/nfs4proc.c | 2 -- fs/nfs/nfs4xdr.c | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 1a1bd2fe6e98..d0cb827b72cf 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -5811,8 +5811,6 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf, return ret; if (!(fattr.valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL)) return -ENOENT; - if (buflen < label.len) - return -ERANGE; return 0; } diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 7c0ff1a3b591..677751bc3a33 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -4169,7 +4169,11 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, return -EIO; if (len < NFS4_MAXLABELLEN) { if (label) { - memcpy(label->label, p, len); + if (label->len) { + if (label->len < len) + return -ERANGE; + memcpy(label->label, p, len); + } label->len = len; label->pi = pi; label->lfs = lfs; From 6def476496a551ef02f25b2c8c7d817e97d72a87 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:33 -0700 Subject: [PATCH 428/448] fs/minix: set s_maxbytes correctly [ Upstream commit 32ac86efff91a3e4ef8c3d1cadd4559e23c8e73a ] The minix filesystem leaves super_block::s_maxbytes at MAX_NON_LFS rather than setting it to the actual filesystem-specific limit. This is broken because it means userspace doesn't see the standard behavior like getting EFBIG and SIGXFSZ when exceeding the maximum file size. Fix this by setting s_maxbytes correctly. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Alexander Viro Cc: Qiujun Huang Link: http://lkml.kernel.org/r/20200628060846.682158-5-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/minix/inode.c | 12 +++++++----- fs/minix/itree_v1.c | 2 +- fs/minix/itree_v2.c | 3 +-- fs/minix/minix.h | 1 - 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 0dd929346f3f..7b09a9158e40 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -150,8 +150,10 @@ static int minix_remount (struct super_block * sb, int * flags, char * data) return 0; } -static bool minix_check_superblock(struct minix_sb_info *sbi) +static bool minix_check_superblock(struct super_block *sb) { + struct minix_sb_info *sbi = minix_sb(sb); + if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0) return false; @@ -161,7 +163,7 @@ static bool minix_check_superblock(struct minix_sb_info *sbi) * of indirect blocks which places the limit well above U32_MAX. */ if (sbi->s_version == MINIX_V1 && - sbi->s_max_size > (7 + 512 + 512*512) * BLOCK_SIZE) + sb->s_maxbytes > (7 + 512 + 512*512) * BLOCK_SIZE) return false; return true; @@ -202,7 +204,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) sbi->s_zmap_blocks = ms->s_zmap_blocks; sbi->s_firstdatazone = ms->s_firstdatazone; sbi->s_log_zone_size = ms->s_log_zone_size; - sbi->s_max_size = ms->s_max_size; + s->s_maxbytes = ms->s_max_size; s->s_magic = ms->s_magic; if (s->s_magic == MINIX_SUPER_MAGIC) { sbi->s_version = MINIX_V1; @@ -233,7 +235,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) sbi->s_zmap_blocks = m3s->s_zmap_blocks; sbi->s_firstdatazone = m3s->s_firstdatazone; sbi->s_log_zone_size = m3s->s_log_zone_size; - sbi->s_max_size = m3s->s_max_size; + s->s_maxbytes = m3s->s_max_size; sbi->s_ninodes = m3s->s_ninodes; sbi->s_nzones = m3s->s_zones; sbi->s_dirsize = 64; @@ -245,7 +247,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) } else goto out_no_fs; - if (!minix_check_superblock(sbi)) + if (!minix_check_superblock(s)) goto out_illegal_sb; /* diff --git a/fs/minix/itree_v1.c b/fs/minix/itree_v1.c index 046cc96ee7ad..c0d418209ead 100644 --- a/fs/minix/itree_v1.c +++ b/fs/minix/itree_v1.c @@ -29,7 +29,7 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) if (block < 0) { printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n", block, inode->i_sb->s_bdev); - } else if (block >= (minix_sb(inode->i_sb)->s_max_size/BLOCK_SIZE)) { + } else if (block >= inode->i_sb->s_maxbytes/BLOCK_SIZE) { if (printk_ratelimit()) printk("MINIX-fs: block_to_path: " "block %ld too big on dev %pg\n", diff --git a/fs/minix/itree_v2.c b/fs/minix/itree_v2.c index f7fc7ecccccc..ee8af2f9e282 100644 --- a/fs/minix/itree_v2.c +++ b/fs/minix/itree_v2.c @@ -32,8 +32,7 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) if (block < 0) { printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n", block, sb->s_bdev); - } else if ((u64)block * (u64)sb->s_blocksize >= - minix_sb(sb)->s_max_size) { + } else if ((u64)block * (u64)sb->s_blocksize >= sb->s_maxbytes) { if (printk_ratelimit()) printk("MINIX-fs: block_to_path: " "block %ld too big on dev %pg\n", diff --git a/fs/minix/minix.h b/fs/minix/minix.h index df081e8afcc3..168d45d3de73 100644 --- a/fs/minix/minix.h +++ b/fs/minix/minix.h @@ -32,7 +32,6 @@ struct minix_sb_info { unsigned long s_zmap_blocks; unsigned long s_firstdatazone; unsigned long s_log_zone_size; - unsigned long s_max_size; int s_dirsize; int s_namelen; struct buffer_head ** s_imap; From d91005b645d1dba804fa64389ca4f51fac013f55 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:36 -0700 Subject: [PATCH 429/448] fs/minix: fix block limit check for V1 filesystems [ Upstream commit 0a12c4a8069607247cb8edc3b035a664e636fd9a ] The minix filesystem reads its maximum file size from its on-disk superblock. This value isn't necessarily a multiple of the block size. When it's not, the V1 block mapping code doesn't allow mapping the last possible block. Commit 6ed6a722f9ab ("minixfs: fix block limit check") fixed this in the V2 mapping code. Fix it in the V1 mapping code too. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Alexander Viro Cc: Qiujun Huang Link: http://lkml.kernel.org/r/20200628060846.682158-6-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/minix/itree_v1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/minix/itree_v1.c b/fs/minix/itree_v1.c index c0d418209ead..405573a79aab 100644 --- a/fs/minix/itree_v1.c +++ b/fs/minix/itree_v1.c @@ -29,7 +29,7 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) if (block < 0) { printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n", block, inode->i_sb->s_bdev); - } else if (block >= inode->i_sb->s_maxbytes/BLOCK_SIZE) { + } else if ((u64)block * BLOCK_SIZE >= inode->i_sb->s_maxbytes) { if (printk_ratelimit()) printk("MINIX-fs: block_to_path: " "block %ld too big on dev %pg\n", From ba40d33e36b2a6219ef3a5084e878001a894b439 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 11 Aug 2020 18:35:39 -0700 Subject: [PATCH 430/448] fs/minix: remove expected error message in block_to_path() [ Upstream commit f666f9fb9a36f1c833b9d18923572f0e4d304754 ] When truncating a file to a size within the last allowed logical block, block_to_path() is called with the *next* block. This exceeds the limit, causing the "block %ld too big" error message to be printed. This case isn't actually an error; there are just no more blocks past that point. So, remove this error message. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Eric Biggers Signed-off-by: Andrew Morton Cc: Alexander Viro Cc: Qiujun Huang Link: http://lkml.kernel.org/r/20200628060846.682158-7-ebiggers@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/minix/itree_v1.c | 12 ++++++------ fs/minix/itree_v2.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/fs/minix/itree_v1.c b/fs/minix/itree_v1.c index 405573a79aab..1fed906042aa 100644 --- a/fs/minix/itree_v1.c +++ b/fs/minix/itree_v1.c @@ -29,12 +29,12 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) if (block < 0) { printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n", block, inode->i_sb->s_bdev); - } else if ((u64)block * BLOCK_SIZE >= inode->i_sb->s_maxbytes) { - if (printk_ratelimit()) - printk("MINIX-fs: block_to_path: " - "block %ld too big on dev %pg\n", - block, inode->i_sb->s_bdev); - } else if (block < 7) { + return 0; + } + if ((u64)block * BLOCK_SIZE >= inode->i_sb->s_maxbytes) + return 0; + + if (block < 7) { offsets[n++] = block; } else if ((block -= 7) < 512) { offsets[n++] = 7; diff --git a/fs/minix/itree_v2.c b/fs/minix/itree_v2.c index ee8af2f9e282..9d00f31a2d9d 100644 --- a/fs/minix/itree_v2.c +++ b/fs/minix/itree_v2.c @@ -32,12 +32,12 @@ static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) if (block < 0) { printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n", block, sb->s_bdev); - } else if ((u64)block * (u64)sb->s_blocksize >= sb->s_maxbytes) { - if (printk_ratelimit()) - printk("MINIX-fs: block_to_path: " - "block %ld too big on dev %pg\n", - block, sb->s_bdev); - } else if (block < DIRCOUNT) { + return 0; + } + if ((u64)block * (u64)sb->s_blocksize >= sb->s_maxbytes) + return 0; + + if (block < DIRCOUNT) { offsets[n++] = block; } else if ((block -= DIRCOUNT) < INDIRCOUNT(sb)) { offsets[n++] = DIRCOUNT; From 3457ba1acec2f98eb6dc71cc682466267a636a17 Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Tue, 11 Aug 2020 18:35:53 -0700 Subject: [PATCH 431/448] fs/ufs: avoid potential u32 multiplication overflow [ Upstream commit 88b2e9b06381551b707d980627ad0591191f7a2d ] The 64 bit ino is being compared to the product of two u32 values, however, the multiplication is being performed using a 32 bit multiply so there is a potential of an overflow. To be fully safe, cast uspi->s_ncg to a u64 to ensure a 64 bit multiplication occurs to avoid any chance of overflow. Fixes: f3e2a520f5fb ("ufs: NFS support") Signed-off-by: Colin Ian King Signed-off-by: Andrew Morton Cc: Evgeniy Dushistov Cc: Alexey Dobriyan Link: http://lkml.kernel.org/r/20200715170355.1081713-1-colin.king@canonical.com Addresses-Coverity: ("Unintentional integer overflow") Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/ufs/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 1da0be667409..e3b69fb280e8 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -101,7 +101,7 @@ static struct inode *ufs_nfs_get_inode(struct super_block *sb, u64 ino, u32 gene struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; struct inode *inode; - if (ino < UFS_ROOTINO || ino > uspi->s_ncg * uspi->s_ipg) + if (ino < UFS_ROOTINO || ino > (u64)uspi->s_ncg * uspi->s_ipg) return ERR_PTR(-ESTALE); inode = ufs_iget(sb, ino); From 8620d18575af2f2406554a6190e7d12a663474b4 Mon Sep 17 00:00:00 2001 From: Tiezhu Yang Date: Tue, 11 Aug 2020 18:36:16 -0700 Subject: [PATCH 432/448] test_kmod: avoid potential double free in trigger_config_run_type() [ Upstream commit 0776d1231bec0c7ab43baf440a3f5ef5f49dd795 ] Reset the member "test_fs" of the test configuration after a call of the function "kfree_const" to a null pointer so that a double memory release will not be performed. Fixes: d9c6a72d6fa2 ("kmod: add test driver to stress test the module loader") Signed-off-by: Tiezhu Yang Signed-off-by: Luis Chamberlain Signed-off-by: Andrew Morton Acked-by: Luis Chamberlain Cc: Alexei Starovoitov Cc: Al Viro Cc: Christian Brauner Cc: Chuck Lever Cc: David Howells Cc: David S. Miller Cc: Greg Kroah-Hartman Cc: Jakub Kicinski Cc: James Morris Cc: Jarkko Sakkinen Cc: J. Bruce Fields Cc: Jens Axboe Cc: Josh Triplett Cc: Kees Cook Cc: Lars Ellenberg Cc: Nikolay Aleksandrov Cc: Philipp Reisner Cc: Roopa Prabhu Cc: "Serge E. Hallyn" Cc: Sergei Trofimovich Cc: Sergey Kvachonok Cc: Shuah Khan Cc: Tony Vroon Cc: Christoph Hellwig Link: http://lkml.kernel.org/r/20200610154923.27510-4-mcgrof@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- lib/test_kmod.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/test_kmod.c b/lib/test_kmod.c index 9cf77628fc91..87a0cc750ea2 100644 --- a/lib/test_kmod.c +++ b/lib/test_kmod.c @@ -745,7 +745,7 @@ static int trigger_config_run_type(struct kmod_test_device *test_dev, break; case TEST_KMOD_FS_TYPE: kfree_const(config->test_fs); - config->test_driver = NULL; + config->test_fs = NULL; copied = config_copy_test_fs(config, test_str, strlen(test_str)); break; From 315b5cbe1aee94a8c856c52e12fe2088f0cb6fbd Mon Sep 17 00:00:00 2001 From: Dhananjay Phadke Date: Mon, 10 Aug 2020 17:42:40 -0700 Subject: [PATCH 433/448] i2c: iproc: fix race between client unreg and isr [ Upstream commit b1eef236f50ba6afea680da039ef3a2ca9c43d11 ] When i2c client unregisters, synchronize irq before setting iproc_i2c->slave to NULL. (1) disable_irq() (2) Mask event enable bits in control reg (3) Erase slave address (avoid further writes to rx fifo) (4) Flush tx and rx FIFOs (5) Clear pending event (interrupt) bits in status reg (6) enable_irq() (7) Set client pointer to NULL Unable to handle kernel NULL pointer dereference at virtual address 0000000000000318 [ 371.020421] pc : bcm_iproc_i2c_isr+0x530/0x11f0 [ 371.025098] lr : __handle_irq_event_percpu+0x6c/0x170 [ 371.030309] sp : ffff800010003e40 [ 371.033727] x29: ffff800010003e40 x28: 0000000000000060 [ 371.039206] x27: ffff800010ca9de0 x26: ffff800010f895df [ 371.044686] x25: ffff800010f18888 x24: ffff0008f7ff3600 [ 371.050165] x23: 0000000000000003 x22: 0000000001600000 [ 371.055645] x21: ffff800010f18888 x20: 0000000001600000 [ 371.061124] x19: ffff0008f726f080 x18: 0000000000000000 [ 371.066603] x17: 0000000000000000 x16: 0000000000000000 [ 371.072082] x15: 0000000000000000 x14: 0000000000000000 [ 371.077561] x13: 0000000000000000 x12: 0000000000000001 [ 371.083040] x11: 0000000000000000 x10: 0000000000000040 [ 371.088519] x9 : ffff800010f317c8 x8 : ffff800010f317c0 [ 371.093999] x7 : ffff0008f805b3b0 x6 : 0000000000000000 [ 371.099478] x5 : ffff0008f7ff36a4 x4 : ffff8008ee43d000 [ 371.104957] x3 : 0000000000000000 x2 : ffff8000107d64c0 [ 371.110436] x1 : 00000000c00000af x0 : 0000000000000000 [ 371.115916] Call trace: [ 371.118439] bcm_iproc_i2c_isr+0x530/0x11f0 [ 371.122754] __handle_irq_event_percpu+0x6c/0x170 [ 371.127606] handle_irq_event_percpu+0x34/0x88 [ 371.132189] handle_irq_event+0x40/0x120 [ 371.136234] handle_fasteoi_irq+0xcc/0x1a0 [ 371.140459] generic_handle_irq+0x24/0x38 [ 371.144594] __handle_domain_irq+0x60/0xb8 [ 371.148820] gic_handle_irq+0xc0/0x158 [ 371.152687] el1_irq+0xb8/0x140 [ 371.155927] arch_cpu_idle+0x10/0x18 [ 371.159615] do_idle+0x204/0x290 [ 371.162943] cpu_startup_entry+0x24/0x60 [ 371.166990] rest_init+0xb0/0xbc [ 371.170322] arch_call_rest_init+0xc/0x14 [ 371.174458] start_kernel+0x404/0x430 Fixes: c245d94ed106 ("i2c: iproc: Add multi byte read-write support for slave mode") Signed-off-by: Dhananjay Phadke Reviewed-by: Florian Fainelli Acked-by: Ray Jui Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-bcm-iproc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c index 03475f179973..dd9661c11782 100644 --- a/drivers/i2c/busses/i2c-bcm-iproc.c +++ b/drivers/i2c/busses/i2c-bcm-iproc.c @@ -1037,7 +1037,7 @@ static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave) if (!iproc_i2c->slave) return -EINVAL; - iproc_i2c->slave = NULL; + disable_irq(iproc_i2c->irq); /* disable all slave interrupts */ tmp = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); @@ -1050,6 +1050,17 @@ static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave) tmp &= ~BIT(S_CFG_EN_NIC_SMB_ADDR3_SHIFT); iproc_i2c_wr_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET, tmp); + /* flush TX/RX FIFOs */ + tmp = (BIT(S_FIFO_RX_FLUSH_SHIFT) | BIT(S_FIFO_TX_FLUSH_SHIFT)); + iproc_i2c_wr_reg(iproc_i2c, S_FIFO_CTRL_OFFSET, tmp); + + /* clear all pending slave interrupts */ + iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, ISR_MASK_SLAVE); + + iproc_i2c->slave = NULL; + + enable_irq(iproc_i2c->irq); + return 0; } From a2326997610985619cd0da03ad21612815e871ff Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Thu, 23 Jul 2020 16:02:46 +0300 Subject: [PATCH 434/448] mfd: dln2: Run event handler loop under spinlock [ Upstream commit 3d858942250820b9adc35f963a257481d6d4c81d ] The event handler loop must be run with interrupts disabled. Otherwise we will have a warning: [ 1970.785649] irq 31 handler lineevent_irq_handler+0x0/0x20 enabled interrupts [ 1970.792739] WARNING: CPU: 0 PID: 0 at kernel/irq/handle.c:159 __handle_irq_event_percpu+0x162/0x170 [ 1970.860732] RIP: 0010:__handle_irq_event_percpu+0x162/0x170 ... [ 1970.946994] Call Trace: [ 1970.949446] [ 1970.951471] handle_irq_event_percpu+0x2c/0x80 [ 1970.955921] handle_irq_event+0x23/0x43 [ 1970.959766] handle_simple_irq+0x57/0x70 [ 1970.963695] generic_handle_irq+0x42/0x50 [ 1970.967717] dln2_rx+0xc1/0x210 [dln2] [ 1970.971479] ? usb_hcd_unmap_urb_for_dma+0xa6/0x1c0 [ 1970.976362] __usb_hcd_giveback_urb+0x77/0xe0 [ 1970.980727] usb_giveback_urb_bh+0x8e/0xe0 [ 1970.984837] tasklet_action_common.isra.0+0x4a/0xe0 ... Recently xHCI driver switched to tasklets in the commit 36dc01657b49 ("usb: host: xhci: Support running urb giveback in tasklet context"). The handle_irq_event_* functions are expected to be called with interrupts disabled and they rightfully complain here because we run in tasklet context with interrupts enabled. Use a event spinlock to protect event handler from being interrupted. Note, that there are only two users of this GPIO and ADC drivers and both of them are using generic_handle_irq() which makes above happen. Fixes: 338a12814297 ("mfd: Add support for Diolan DLN-2 devices") Signed-off-by: Andy Shevchenko Signed-off-by: Lee Jones Signed-off-by: Sasha Levin --- drivers/mfd/dln2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c index 4faa8d2e5d04..707f4287ab4a 100644 --- a/drivers/mfd/dln2.c +++ b/drivers/mfd/dln2.c @@ -287,7 +287,11 @@ static void dln2_rx(struct urb *urb) len = urb->actual_length - sizeof(struct dln2_header); if (handle == DLN2_HANDLE_EVENT) { + unsigned long flags; + + spin_lock_irqsave(&dln2->event_cb_lock, flags); dln2_run_event_callbacks(dln2, id, echo, data, len); + spin_unlock_irqrestore(&dln2->event_cb_lock, flags); } else { /* URB will be re-submitted in _dln2_transfer (free_rx_slot) */ if (dln2_transfer_complete(dln2, urb, handle, echo)) From 8bc48c35a983f4f43fb2abf990821659475ab835 Mon Sep 17 00:00:00 2001 From: Ondrej Mosnacek Date: Wed, 12 Aug 2020 14:58:25 +0200 Subject: [PATCH 435/448] crypto: algif_aead - fix uninitialized ctx->init [ Upstream commit 21dfbcd1f5cbff9cf2f9e7e43475aed8d072b0dd ] In skcipher_accept_parent_nokey() the whole af_alg_ctx structure is cleared by memset() after allocation, so add such memset() also to aead_accept_parent_nokey() so that the new "init" field is also initialized to zero. Without that the initial ctx->init checks might randomly return true and cause errors. While there, also remove the redundant zero assignments in both functions. Found via libkcapi testsuite. Cc: Stephan Mueller Fixes: f3c802a1f300 ("crypto: algif_aead - Only wake up when ctx->more is zero") Suggested-by: Herbert Xu Signed-off-by: Ondrej Mosnacek Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- crypto/algif_aead.c | 6 ------ crypto/algif_skcipher.c | 7 +------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c index d48d2156e621..43c6aa784858 100644 --- a/crypto/algif_aead.c +++ b/crypto/algif_aead.c @@ -558,12 +558,6 @@ static int aead_accept_parent_nokey(void *private, struct sock *sk) INIT_LIST_HEAD(&ctx->tsgl_list); ctx->len = len; - ctx->used = 0; - atomic_set(&ctx->rcvused, 0); - ctx->more = 0; - ctx->merge = 0; - ctx->enc = 0; - ctx->aead_assoclen = 0; crypto_init_wait(&ctx->wait); ask->private = ctx; diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index a51ba22fef58..81c4022285a7 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c @@ -333,6 +333,7 @@ static int skcipher_accept_parent_nokey(void *private, struct sock *sk) ctx = sock_kmalloc(sk, len, GFP_KERNEL); if (!ctx) return -ENOMEM; + memset(ctx, 0, len); ctx->iv = sock_kmalloc(sk, crypto_skcipher_ivsize(tfm), GFP_KERNEL); @@ -340,16 +341,10 @@ static int skcipher_accept_parent_nokey(void *private, struct sock *sk) sock_kfree_s(sk, ctx, len); return -ENOMEM; } - memset(ctx->iv, 0, crypto_skcipher_ivsize(tfm)); INIT_LIST_HEAD(&ctx->tsgl_list); ctx->len = len; - ctx->used = 0; - atomic_set(&ctx->rcvused, 0); - ctx->more = 0; - ctx->merge = 0; - ctx->enc = 0; crypto_init_wait(&ctx->wait); ask->private = ctx; From 306df54b5b8a04a7f1cee3c6f7f03fb5b565ce3b Mon Sep 17 00:00:00 2001 From: Dinghao Liu Date: Thu, 13 Aug 2020 15:46:30 +0800 Subject: [PATCH 436/448] ALSA: echoaudio: Fix potential Oops in snd_echo_resume() [ Upstream commit 5a25de6df789cc805a9b8ba7ab5deef5067af47e ] Freeing chip on error may lead to an Oops at the next time the system goes to resume. Fix this by removing all snd_echo_free() calls on error. Fixes: 47b5d028fdce8 ("ALSA: Echoaudio - Add suspend support #2") Signed-off-by: Dinghao Liu Link: https://lore.kernel.org/r/20200813074632.17022-1-dinghao.liu@zju.edu.cn Signed-off-by: Takashi Iwai Signed-off-by: Sasha Levin --- sound/pci/echoaudio/echoaudio.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c index ca9125726be2..8596ae4c2bde 100644 --- a/sound/pci/echoaudio/echoaudio.c +++ b/sound/pci/echoaudio/echoaudio.c @@ -2198,7 +2198,6 @@ static int snd_echo_resume(struct device *dev) if (err < 0) { kfree(commpage_bak); dev_err(dev, "resume init_hw err=%d\n", err); - snd_echo_free(chip); return err; } @@ -2225,7 +2224,6 @@ static int snd_echo_resume(struct device *dev) if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED, KBUILD_MODNAME, chip)) { dev_err(chip->card->dev, "cannot grab irq\n"); - snd_echo_free(chip); return -EBUSY; } chip->irq = pci->irq; From 45989801d7cf9c61b6708b670362a62f060c23a8 Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Mon, 10 Aug 2020 15:34:04 +0200 Subject: [PATCH 437/448] perf bench mem: Always memset source before memcpy [ Upstream commit 1beaef29c34154ccdcb3f1ae557f6883eda18840 ] For memcpy, the source pages are memset to zero only when --cycles is used. This leads to wildly different results with or without --cycles, since all sources pages are likely to be mapped to the same zero page without explicit writes. Before this fix: $ export cmd="./perf stat -e LLC-loads -- ./perf bench \ mem memcpy -s 1024MB -l 100 -f default" $ $cmd 2,935,826 LLC-loads 3.821677452 seconds time elapsed $ $cmd --cycles 217,533,436 LLC-loads 8.616725985 seconds time elapsed After this fix: $ $cmd 214,459,686 LLC-loads 8.674301124 seconds time elapsed $ $cmd --cycles 214,758,651 LLC-loads 8.644480006 seconds time elapsed Fixes: 47b5757bac03c338 ("perf bench mem: Move boilerplate memory allocation to the infrastructure") Signed-off-by: Vincent Whitchurch Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Cc: kernel@axis.com Link: http://lore.kernel.org/lkml/20200810133404.30829-1-vincent.whitchurch@axis.com Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/perf/bench/mem-functions.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tools/perf/bench/mem-functions.c b/tools/perf/bench/mem-functions.c index 9235b76501be..19d45c377ac1 100644 --- a/tools/perf/bench/mem-functions.c +++ b/tools/perf/bench/mem-functions.c @@ -223,12 +223,8 @@ static int bench_mem_common(int argc, const char **argv, struct bench_mem_info * return 0; } -static u64 do_memcpy_cycles(const struct function *r, size_t size, void *src, void *dst) +static void memcpy_prefault(memcpy_t fn, size_t size, void *src, void *dst) { - u64 cycle_start = 0ULL, cycle_end = 0ULL; - memcpy_t fn = r->fn.memcpy; - int i; - /* Make sure to always prefault zero pages even if MMAP_THRESH is crossed: */ memset(src, 0, size); @@ -237,6 +233,15 @@ static u64 do_memcpy_cycles(const struct function *r, size_t size, void *src, vo * to not measure page fault overhead: */ fn(dst, src, size); +} + +static u64 do_memcpy_cycles(const struct function *r, size_t size, void *src, void *dst) +{ + u64 cycle_start = 0ULL, cycle_end = 0ULL; + memcpy_t fn = r->fn.memcpy; + int i; + + memcpy_prefault(fn, size, src, dst); cycle_start = get_cycles(); for (i = 0; i < nr_loops; ++i) @@ -252,11 +257,7 @@ static double do_memcpy_gettimeofday(const struct function *r, size_t size, void memcpy_t fn = r->fn.memcpy; int i; - /* - * We prefault the freshly allocated memory range here, - * to not measure page fault overhead: - */ - fn(dst, src, size); + memcpy_prefault(fn, size, src, dst); BUG_ON(gettimeofday(&tv_start, NULL)); for (i = 0; i < nr_loops; ++i) From 5c90739d36ce621d6589af50b4398ceedcf4f1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=C3=ADaz?= Date: Wed, 12 Aug 2020 17:15:17 -0500 Subject: [PATCH 438/448] tools build feature: Quote CC and CXX for their arguments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit fa5c893181ed2ca2f96552f50073786d2cfce6c0 ] When using a cross-compilation environment, such as OpenEmbedded, the CC an CXX variables are set to something more than just a command: there are arguments (such as --sysroot) that need to be passed on to the compiler so that the right set of headers and libraries are used. For the particular case that our systems detected, CC is set to the following: export CC="aarch64-linaro-linux-gcc --sysroot=/oe/build/tmp/work/machine/perf/1.0-r9/recipe-sysroot" Without quotes, detection is as follows: Auto-detecting system features: ... dwarf: [ OFF ] ... dwarf_getlocations: [ OFF ] ... glibc: [ OFF ] ... gtk2: [ OFF ] ... libbfd: [ OFF ] ... libcap: [ OFF ] ... libelf: [ OFF ] ... libnuma: [ OFF ] ... numa_num_possible_cpus: [ OFF ] ... libperl: [ OFF ] ... libpython: [ OFF ] ... libcrypto: [ OFF ] ... libunwind: [ OFF ] ... libdw-dwarf-unwind: [ OFF ] ... zlib: [ OFF ] ... lzma: [ OFF ] ... get_cpuid: [ OFF ] ... bpf: [ OFF ] ... libaio: [ OFF ] ... libzstd: [ OFF ] ... disassembler-four-args: [ OFF ] Makefile.config:414: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. Makefile.perf:230: recipe for target 'sub-make' failed make[1]: *** [sub-make] Error 2 Makefile:69: recipe for target 'all' failed make: *** [all] Error 2 With CC and CXX quoted, some of those features are now detected. Fixes: e3232c2f39ac ("tools build feature: Use CC and CXX from parent") Signed-off-by: Daniel Díaz Reviewed-by: Thomas Hebb Cc: Alexei Starovoitov Cc: Andrii Nakryiko Cc: Daniel Borkmann Cc: Jiri Olsa Cc: John Fastabend Cc: KP Singh Cc: Martin KaFai Lau Cc: Namhyung Kim Cc: Song Liu Cc: Stephane Eranian Cc: Yonghong Song Link: http://lore.kernel.org/lkml/20200812221518.2869003-1-daniel.diaz@linaro.org Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/build/Makefile.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index e80a1a8e287f..8c6e1ea67f21 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -8,7 +8,7 @@ endif feature_check = $(eval $(feature_check_code)) define feature_check_code - feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CC=$(CC) CXX=$(CXX) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" CXXFLAGS="$(EXTRA_CXXFLAGS) $(FEATURE_CHECK_CXXFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) $(OUTPUT_FEATURES)test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0) + feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CC="$(CC)" CXX="$(CXX)" CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" CXXFLAGS="$(EXTRA_CXXFLAGS) $(FEATURE_CHECK_CXXFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) $(OUTPUT_FEATURES)test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0) endef feature_set = $(eval $(feature_set_code)) From 64d358a9adb5bc6567cc33f0072bda119c379d0e Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Tue, 11 Aug 2020 23:31:47 +0800 Subject: [PATCH 439/448] perf/x86/rapl: Fix missing psys sysfs attributes [ Upstream commit 4bb5fcb97a5df0bbc0a27e0252b1e7ce140a8431 ] This fixes a problem introduced by commit: 5fb5273a905c ("perf/x86/rapl: Use new MSR detection interface") that perf event sysfs attributes for psys RAPL domain are missing. Fixes: 5fb5273a905c ("perf/x86/rapl: Use new MSR detection interface") Signed-off-by: Zhang Rui Signed-off-by: Ingo Molnar Reviewed-by: Kan Liang Reviewed-by: Len Brown Acked-by: Jiri Olsa Link: https://lore.kernel.org/r/20200811153149.12242-2-rui.zhang@intel.com Signed-off-by: Sasha Levin --- arch/x86/events/rapl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c index 3c222d6fdee3..187c72a58e69 100644 --- a/arch/x86/events/rapl.c +++ b/arch/x86/events/rapl.c @@ -642,7 +642,7 @@ static const struct attribute_group *rapl_attr_update[] = { &rapl_events_pkg_group, &rapl_events_ram_group, &rapl_events_gpu_group, - &rapl_events_gpu_group, + &rapl_events_psys_group, NULL, }; From e47e00559893b4d61c545e994d70d49f8f8e4491 Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven Date: Fri, 14 Aug 2020 14:42:45 +0200 Subject: [PATCH 440/448] sh: landisk: Add missing initialization of sh_io_port_base [ Upstream commit 0c64a0dce51faa9c706fdf1f957d6f19878f4b81 ] The Landisk setup code maps the CF IDE area using ioremap_prot(), and passes the resulting virtual addresses to the pata_platform driver, disguising them as I/O port addresses. Hence the pata_platform driver translates them again using ioport_map(). As CONFIG_GENERIC_IOMAP=n, and CONFIG_HAS_IOPORT_MAP=y, the SuperH-specific mapping code in arch/sh/kernel/ioport.c translates I/O port addresses to virtual addresses by adding sh_io_port_base, which defaults to -1, thus breaking the assumption of an identity mapping. Fix this by setting sh_io_port_base to zero. Fixes: 37b7a97884ba64bf ("sh: machvec IO death.") Signed-off-by: Geert Uytterhoeven Signed-off-by: Rich Felker Signed-off-by: Sasha Levin --- arch/sh/boards/mach-landisk/setup.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c index 16b4d8b0bb85..2c44b94f82fb 100644 --- a/arch/sh/boards/mach-landisk/setup.c +++ b/arch/sh/boards/mach-landisk/setup.c @@ -82,6 +82,9 @@ device_initcall(landisk_devices_setup); static void __init landisk_setup(char **cmdline_p) { + /* I/O port identity mapping */ + __set_io_port_base(0); + /* LED ON */ __raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED); From 0f1c938ef82df38d95faecd680f611d52547b10a Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Thu, 6 Aug 2020 23:26:22 -0700 Subject: [PATCH 441/448] khugepaged: retract_page_tables() remember to test exit commit 18e77600f7a1ed69f8ce46c9e11cad0985712dfa upstream. Only once have I seen this scenario (and forgot even to notice what forced the eventual crash): a sequence of "BUG: Bad page map" alerts from vm_normal_page(), from zap_pte_range() servicing exit_mmap(); pmd:00000000, pte values corresponding to data in physical page 0. The pte mappings being zapped in this case were supposed to be from a huge page of ext4 text (but could as well have been shmem): my belief is that it was racing with collapse_file()'s retract_page_tables(), found *pmd pointing to a page table, locked it, but *pmd had become 0 by the time start_pte was decided. In most cases, that possibility is excluded by holding mmap lock; but exit_mmap() proceeds without mmap lock. Most of what's run by khugepaged checks khugepaged_test_exit() after acquiring mmap lock: khugepaged_collapse_pte_mapped_thps() and hugepage_vma_revalidate() do so, for example. But retract_page_tables() did not: fix that. The fix is for retract_page_tables() to check khugepaged_test_exit(), after acquiring mmap lock, before doing anything to the page table. Getting the mmap lock serializes with __mmput(), which briefly takes and drops it in __khugepaged_exit(); then the khugepaged_test_exit() check on mm_users makes sure we don't touch the page table once exit_mmap() might reach it, since exit_mmap() will be proceeding without mmap lock, not expecting anyone to be racing with it. Fixes: f3f0e1d2150b ("khugepaged: add support of collapse for tmpfs/shmem pages") Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton Acked-by: Kirill A. Shutemov Cc: Andrea Arcangeli Cc: Mike Kravetz Cc: Song Liu Cc: [4.8+] Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021215400.27773@eggly.anvils Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/khugepaged.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index e328a5ea9a56..719f49d1fba2 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1414,6 +1414,7 @@ out: static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) { struct vm_area_struct *vma; + struct mm_struct *mm; unsigned long addr; pmd_t *pmd, _pmd; @@ -1442,7 +1443,8 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) continue; if (vma->vm_end < addr + HPAGE_PMD_SIZE) continue; - pmd = mm_find_pmd(vma->vm_mm, addr); + mm = vma->vm_mm; + pmd = mm_find_pmd(mm, addr); if (!pmd) continue; /* @@ -1452,17 +1454,19 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) * mmap_sem while holding page lock. Fault path does it in * reverse order. Trylock is a way to avoid deadlock. */ - if (down_write_trylock(&vma->vm_mm->mmap_sem)) { - spinlock_t *ptl = pmd_lock(vma->vm_mm, pmd); - /* assume page table is clear */ - _pmd = pmdp_collapse_flush(vma, addr, pmd); - spin_unlock(ptl); - up_write(&vma->vm_mm->mmap_sem); - mm_dec_nr_ptes(vma->vm_mm); - pte_free(vma->vm_mm, pmd_pgtable(_pmd)); + if (down_write_trylock(&mm->mmap_sem)) { + if (!khugepaged_test_exit(mm)) { + spinlock_t *ptl = pmd_lock(mm, pmd); + /* assume page table is clear */ + _pmd = pmdp_collapse_flush(vma, addr, pmd); + spin_unlock(ptl); + mm_dec_nr_ptes(mm); + pte_free(mm, pmd_pgtable(_pmd)); + } + up_write(&mm->mmap_sem); } else { /* Try again later */ - khugepaged_add_pte_mapped_thp(vma->vm_mm, addr); + khugepaged_add_pte_mapped_thp(mm, addr); } } i_mmap_unlock_write(mapping); From a202b42b94bc7cc860edca64153d2ed65e7e221e Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Thu, 27 Feb 2020 17:52:32 +0100 Subject: [PATCH 442/448] arm64: dts: marvell: espressobin: add ethernet alias MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 5253cb8c00a6f4356760efb38bca0e0393aa06de upstream. The maker of this board and its variants, stores MAC address in U-Boot environment. Add alias for bootloader to recognise, to which ethernet node inject the factory MAC address. Signed-off-by: Tomasz Maciej Nowak Signed-off-by: Gregory CLEMENT [pali: Backported to 5.4 and older versions] Signed-off-by: Pali Rohár Signed-off-by: Greg Kroah-Hartman --- arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts index fbcf03f86c96..05dc58c13fa4 100644 --- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts +++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts @@ -19,6 +19,12 @@ model = "Globalscale Marvell ESPRESSOBin Board"; compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710"; + aliases { + ethernet0 = ð0; + serial0 = &uart0; + serial1 = &uart1; + }; + chosen { stdout-path = "serial0:115200n8"; }; From aeec14061d53480e8f9ac2a3d0a067aed5f9b5cb Mon Sep 17 00:00:00 2001 From: Denis Efremov Date: Mon, 8 Jun 2020 18:17:28 +0300 Subject: [PATCH 443/448] drm/panfrost: Use kvfree() to free bo->sgts commit 114427b8927a4def2942b2b886f7e4aeae289ccb upstream. Use kvfree() to free bo->sgts, because the memory is allocated with kvmalloc_array() in panfrost_mmu_map_fault_addr(). Fixes: 187d2929206e ("drm/panfrost: Add support for GPU heap allocations") Cc: stable@vger.kernel.org Signed-off-by: Denis Efremov Reviewed-by: Steven Price Signed-off-by: Steven Price Link: https://patchwork.freedesktop.org/patch/msgid/20200608151728.234026-1-efremov@linux.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/panfrost/panfrost_gem.c | 2 +- drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c index 77c3a3855c68..c05e013bb8e3 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -46,7 +46,7 @@ static void panfrost_gem_free_object(struct drm_gem_object *obj) sg_free_table(&bo->sgts[i]); } } - kfree(bo->sgts); + kvfree(bo->sgts); } drm_gem_shmem_free_object(obj); diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c index 5d75f8cf6477..3dc9b30a64b0 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -486,7 +486,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, pages = kvmalloc_array(bo->base.base.size >> PAGE_SHIFT, sizeof(struct page *), GFP_KERNEL | __GFP_ZERO); if (!pages) { - kfree(bo->sgts); + kvfree(bo->sgts); bo->sgts = NULL; mutex_unlock(&bo->base.pages_lock); ret = -ENOMEM; From f9f53b7c6a8161d4d397ec382d62d0d2ea31a930 Mon Sep 17 00:00:00 2001 From: Marius Iacob Date: Sat, 1 Aug 2020 15:34:46 +0300 Subject: [PATCH 444/448] drm: Added orientation quirk for ASUS tablet model T103HAF commit b5ac98cbb8e5e30c34ebc837d1e5a3982d2b5f5c upstream. Signed-off-by: Marius Iacob Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20200801123445.1514567-1-themariusus@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_panel_orientation_quirks.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c index d00ea384dcbf..58f5dc2f6dd5 100644 --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c @@ -121,6 +121,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T101HA"), }, .driver_data = (void *)&lcd800x1280_rightside_up, + }, { /* Asus T103HAF */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"), + }, + .driver_data = (void *)&lcd800x1280_rightside_up, }, { /* GPD MicroPC (generic strings, also match on bios date) */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), From 915ad46bdd4a9d39ee3dd88a3a95c8e04657bde2 Mon Sep 17 00:00:00 2001 From: Xin Xiong Date: Sun, 19 Jul 2020 23:45:45 +0800 Subject: [PATCH 445/448] drm: fix drm_dp_mst_port refcount leaks in drm_dp_mst_allocate_vcpi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a34a0a632dd991a371fec56431d73279f9c54029 upstream. drm_dp_mst_allocate_vcpi() invokes drm_dp_mst_topology_get_port_validated(), which increases the refcount of the "port". These reference counting issues take place in two exception handling paths separately. Either when “slots” is less than 0 or when drm_dp_init_vcpi() returns a negative value, the function forgets to reduce the refcnt increased drm_dp_mst_topology_get_port_validated(), which results in a refcount leak. Fix these issues by pulling up the error handling when "slots" is less than 0, and calling drm_dp_mst_topology_put_port() before termination when drm_dp_init_vcpi() returns a negative value. Fixes: 1e797f556c61 ("drm/dp: Split drm_dp_mst_allocate_vcpi") Cc: # v4.12+ Signed-off-by: Xiyu Yang Signed-off-by: Xin Tan Signed-off-by: Xin Xiong Reviewed-by: Lyude Paul Signed-off-by: Lyude Paul Link: https://patchwork.freedesktop.org/patch/msgid/20200719154545.GA41231@xin-virtual-machine Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_dp_mst_topology.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 006d6087700f..2de1eebe591f 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -3369,11 +3369,11 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, { int ret; - port = drm_dp_mst_topology_get_port_validated(mgr, port); - if (!port) + if (slots < 0) return false; - if (slots < 0) + port = drm_dp_mst_topology_get_port_validated(mgr, port); + if (!port) return false; if (port->vcpi.vcpi > 0) { @@ -3389,6 +3389,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, if (ret) { DRM_DEBUG_KMS("failed to init vcpi slots=%d max=63 ret=%d\n", DIV_ROUND_UP(pbn, mgr->pbn_div), ret); + drm_dp_mst_topology_put_port(port); goto out; } DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n", From 4287c18a7d8fa49ed6736ed505ff4c9f76835c27 Mon Sep 17 00:00:00 2001 From: Sandeep Raghuraman Date: Thu, 6 Aug 2020 22:52:20 +0530 Subject: [PATCH 446/448] drm/amdgpu: Fix bug where DPM is not enabled after hibernate and resume commit f87812284172a9809820d10143b573d833cd3f75 upstream. Reproducing bug report here: After hibernating and resuming, DPM is not enabled. This remains the case even if you test hibernate using the steps here: https://www.kernel.org/doc/html/latest/power/basic-pm-debugging.html I debugged the problem, and figured out that in the file hardwaremanager.c, in the function, phm_enable_dynamic_state_management(), the check 'if (!hwmgr->pp_one_vf && smum_is_dpm_running(hwmgr) && !amdgpu_passthrough(adev) && adev->in_suspend)' returns true for the hibernate case, and false for the suspend case. This means that for the hibernate case, the AMDGPU driver doesn't enable DPM (even though it should) and simply returns from that function. In the suspend case, it goes ahead and enables DPM, even though it doesn't need to. I debugged further, and found out that in the case of suspend, for the CIK/Hawaii GPUs, smum_is_dpm_running(hwmgr) returns false, while in the case of hibernate, smum_is_dpm_running(hwmgr) returns true. For CIK, the ci_is_dpm_running() function calls the ci_is_smc_ram_running() function, which is ultimately used to determine if DPM is currently enabled or not, and this seems to provide the wrong answer. I've changed the ci_is_dpm_running() function to instead use the same method that some other AMD GPU chips do (e.g Fiji), which seems to read the voltage controller. I've tested on my R9 390 and it seems to work correctly for both suspend and hibernate use cases, and has been stable so far. Bug: https://bugzilla.kernel.org/show_bug.cgi?id=208839 Signed-off-by: Sandeep Raghuraman Signed-off-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c index 2e71ca3e19f5..09a3d8ae4449 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c @@ -2725,7 +2725,10 @@ static int ci_initialize_mc_reg_table(struct pp_hwmgr *hwmgr) static bool ci_is_dpm_running(struct pp_hwmgr *hwmgr) { - return ci_is_smc_ram_running(hwmgr); + return (1 == PHM_READ_INDIRECT_FIELD(hwmgr->device, + CGS_IND_REG__SMC, FEATURE_STATUS, + VOLTAGE_CONTROLLER_ON)) + ? true : false; } static int ci_smu_init(struct pp_hwmgr *hwmgr) From 53a856c5a6af18e6938b2a58cccdbe649e4536f3 Mon Sep 17 00:00:00 2001 From: hersen wu Date: Sun, 19 Jul 2020 17:21:59 -0400 Subject: [PATCH 447/448] drm/amd/display: dchubbub p-state warning during surface planes switch commit 8b0379a85762b516c7b46aed7dbf2a4947c00564 upstream. [Why] ramp_up_dispclk_with_dpp is to change dispclk, dppclk and dprefclk according to bandwidth requirement. call stack: rv1_update_clocks --> update_clocks --> dcn10_prepare_bandwidth / dcn10_optimize_bandwidth --> prepare_bandwidth / optimize_bandwidth. before change dcn hw, prepare_bandwidth will be called first to allow enough clock, watermark for change, after end of dcn hw change, optimize_bandwidth is executed to lower clock to save power for new dcn hw settings. below is sequence of commit_planes_for_stream: step 1: prepare_bandwidth - raise clock to have enough bandwidth step 2: lock_doublebuffer_enable step 3: pipe_control_lock(true) - make dchubp register change will not take effect right way step 4: apply_ctx_for_surface - program dchubp step 5: pipe_control_lock(false) - dchubp register change take effect step 6: optimize_bandwidth --> dc_post_update_surfaces_to_stream for full_date, optimize clock to save power at end of step 1, dcn clocks (dprefclk, dispclk, dppclk) may be changed for new dchubp configuration. but real dcn hub dchubps are still running with old configuration until end of step 5. this need clocks settings at step 1 should not less than that before step 1. this is checked by two conditions: 1. if (should_set_clock(safe_to_lower , new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) || new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz) 2. request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz the second condition is based on new dchubp configuration. dppclk for new dchubp may be different from dppclk before step 1. for example, before step 1, dchubps are as below: pipe 0: recout=(0,40,1920,980) viewport=(0,0,1920,979) pipe 1: recout=(0,0,1920,1080) viewport=(0,0,1920,1080) for dppclk for pipe0 need dppclk = dispclk new dchubp pipe split configuration: pipe 0: recout=(0,0,960,1080) viewport=(0,0,960,1080) pipe 1: recout=(960,0,960,1080) viewport=(960,0,960,1080) dppclk only needs dppclk = dispclk /2. dispclk, dppclk are not lock by otg master lock. they take effect after step 1. during this transition, dispclk are the same, but dppclk is changed to half of previous clock for old dchubp configuration between step 1 and step 6. This may cause p-state warning intermittently. [How] for new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz, we need make sure dppclk are not changed to less between step 1 and 6. for new_clocks->dispclk_khz > clk_mgr_base->clks.dispclk_khz, new display clock is raised, but we do not know ratio of new_clocks->dispclk_khz and clk_mgr_base->clks.dispclk_khz, new_clocks->dispclk_khz /2 does not guarantee equal or higher than old dppclk. we could ignore power saving different between dppclk = displck and dppclk = dispclk / 2 between step 1 and step 6. as long as safe_to_lower = false, set dpclk = dispclk to simplify condition check. CC: Stable Signed-off-by: Hersen Wu Reviewed-by: Aric Cyr Acked-by: Eryk Brol Signed-off-by: Alex Deucher Signed-off-by: Greg Kroah-Hartman --- .../display/dc/clk_mgr/dcn10/rv1_clk_mgr.c | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c index 47f529ce280a..2718396083ee 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c @@ -85,12 +85,77 @@ static int rv1_determine_dppclk_threshold(struct clk_mgr_internal *clk_mgr, stru return disp_clk_threshold; } -static void ramp_up_dispclk_with_dpp(struct clk_mgr_internal *clk_mgr, struct dc *dc, struct dc_clocks *new_clocks) +static void ramp_up_dispclk_with_dpp( + struct clk_mgr_internal *clk_mgr, + struct dc *dc, + struct dc_clocks *new_clocks, + bool safe_to_lower) { int i; int dispclk_to_dpp_threshold = rv1_determine_dppclk_threshold(clk_mgr, new_clocks); bool request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz; + /* this function is to change dispclk, dppclk and dprefclk according to + * bandwidth requirement. Its call stack is rv1_update_clocks --> + * update_clocks --> dcn10_prepare_bandwidth / dcn10_optimize_bandwidth + * --> prepare_bandwidth / optimize_bandwidth. before change dcn hw, + * prepare_bandwidth will be called first to allow enough clock, + * watermark for change, after end of dcn hw change, optimize_bandwidth + * is executed to lower clock to save power for new dcn hw settings. + * + * below is sequence of commit_planes_for_stream: + * + * step 1: prepare_bandwidth - raise clock to have enough bandwidth + * step 2: lock_doublebuffer_enable + * step 3: pipe_control_lock(true) - make dchubp register change will + * not take effect right way + * step 4: apply_ctx_for_surface - program dchubp + * step 5: pipe_control_lock(false) - dchubp register change take effect + * step 6: optimize_bandwidth --> dc_post_update_surfaces_to_stream + * for full_date, optimize clock to save power + * + * at end of step 1, dcn clocks (dprefclk, dispclk, dppclk) may be + * changed for new dchubp configuration. but real dcn hub dchubps are + * still running with old configuration until end of step 5. this need + * clocks settings at step 1 should not less than that before step 1. + * this is checked by two conditions: 1. if (should_set_clock(safe_to_lower + * , new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) || + * new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz) + * 2. request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz + * + * the second condition is based on new dchubp configuration. dppclk + * for new dchubp may be different from dppclk before step 1. + * for example, before step 1, dchubps are as below: + * pipe 0: recout=(0,40,1920,980) viewport=(0,0,1920,979) + * pipe 1: recout=(0,0,1920,1080) viewport=(0,0,1920,1080) + * for dppclk for pipe0 need dppclk = dispclk + * + * new dchubp pipe split configuration: + * pipe 0: recout=(0,0,960,1080) viewport=(0,0,960,1080) + * pipe 1: recout=(960,0,960,1080) viewport=(960,0,960,1080) + * dppclk only needs dppclk = dispclk /2. + * + * dispclk, dppclk are not lock by otg master lock. they take effect + * after step 1. during this transition, dispclk are the same, but + * dppclk is changed to half of previous clock for old dchubp + * configuration between step 1 and step 6. This may cause p-state + * warning intermittently. + * + * for new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz, we + * need make sure dppclk are not changed to less between step 1 and 6. + * for new_clocks->dispclk_khz > clk_mgr_base->clks.dispclk_khz, + * new display clock is raised, but we do not know ratio of + * new_clocks->dispclk_khz and clk_mgr_base->clks.dispclk_khz, + * new_clocks->dispclk_khz /2 does not guarantee equal or higher than + * old dppclk. we could ignore power saving different between + * dppclk = displck and dppclk = dispclk / 2 between step 1 and step 6. + * as long as safe_to_lower = false, set dpclk = dispclk to simplify + * condition check. + * todo: review this change for other asic. + **/ + if (!safe_to_lower) + request_dpp_div = false; + /* set disp clk to dpp clk threshold */ clk_mgr->funcs->set_dispclk(clk_mgr, dispclk_to_dpp_threshold); @@ -206,7 +271,7 @@ static void rv1_update_clocks(struct clk_mgr *clk_mgr_base, /* program dispclk on = as a w/a for sleep resume clock ramping issues */ if (should_set_clock(safe_to_lower, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) || new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz) { - ramp_up_dispclk_with_dpp(clk_mgr, dc, new_clocks); + ramp_up_dispclk_with_dpp(clk_mgr, dc, new_clocks, safe_to_lower); clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz; send_request_to_lower = true; } From 77fcb48939fc863d9ba9d808fac9000959e937d3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 21 Aug 2020 13:05:39 +0200 Subject: [PATCH 448/448] Linux 5.4.60 Tested-by: Guenter Roeck Tested-by: Shuah Khan Signed-off-by: Greg Kroah-Hartman --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cc72b8472f24..7c001e21e28e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 59 +SUBLEVEL = 60 EXTRAVERSION = NAME = Kleptomaniac Octopus