mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-05 19:31:57 -04:00
Merge android11-5.4.61+ (3720133) into msm-5.4
* refs/heads/tmp-3720133: ANDROID: ABI: Update allowed list for QCOM FROMGIT: Input: Add devices for HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE ANDROID: GKI: add allowed list for Exynosauto SoC ANDROID: GKI: update allowed list for Exynosauto SoC UPSTREAM: mfd: sprd: Add wakeup capability for PMIC IRQ UPSTREAM: tick/common: Touch watchdog in tick_unfreeze() on all CPUs FROMLIST: thermal: Fix NULL pointer dereference issue ANDROID: ABI: Update allowed list for QCOM UPSTREAM: spi: Fix regression to return zero on success instead of positive value UPSTREAM: thermal: power_allocator: Fix Kconfig warning UPSTREAM: of/platform: Unconditionally pause/resume sync state during kernel init UPSTREAM: selinux: ensure the policy has been loaded before reading the sidtab stats UPSTREAM: MIPS: vdso: Define BUILD_VDSO32 when building a 32bit kernel UPSTREAM: mfd: syscon: Fix syscon_regmap_lookup_by_phandle_args() dummy UPSTREAM: ARM: bcm2835_defconfig: Explicitly restore CONFIG_DEBUG_FS UPSTREAM: ARM: socfpga_defconfig: Add back DEBUG_FS UPSTREAM: um: Fix header inclusion UPSTREAM: net: fix fraglist segmentation reference count leak UPSTREAM: ipv6: ndisc: RFC-ietf-6man-ra-pref64-09 is now published as RFC8781 UPSTREAM: of: property: Fix create device links for all child-supplier dependencies UPSTREAM: of: property: Do not link to disabled devices UPSTREAM: mmc: sdhci: Fix SDHCI_QUIRK_BROKEN_CQE UPSTREAM: usb: renesas-xhci: include correct header for get_unaligned_le16() UPSTREAM: wil6210: account for napi_gro_receive never returning GRO_DROP UPSTREAM: nl80211: fix memory leak when parsing NL80211_ATTR_HE_BSS_COLOR UPSTREAM: thermal/drivers/sprd: Fix return value of sprd_thm_probe() UPSTREAM: fscrypt: restrict IV_INO_LBLK_* to AES-256-XTS UPSTREAM: fscrypt: use smp_load_acquire() for fscrypt_prepared_key UPSTREAM: nvmem: sprd: Fix return value of sprd_efuse_probe() UPSTREAM: mac80211: fix warning in 6 GHz IE addition in mesh mode UPSTREAM: scsi: ufs: Fix interrupt error message for shared interrupts UPSTREAM: sched/fair: Fix wrong negative conversion in find_energy_efficient_cpu() UPSTREAM: driver core: Fix device_pm_lock() locking for device links UPSTREAM: fscrypt: restrict IV_INO_LBLK_32 to ino_bits <= 32 UPSTREAM: scsi: ufs: ufs-mediatek: Eliminate error message for unbound mphy UPSTREAM: scsi: ufs: ufs-mediatek: Fix HOST_PA_TACTIVATE quirk UPSTREAM: cfg80211: fix 6 GHz channel conversion ANDROID: GKI: update symbol list for exynosauto soc ANDROID: ABI: update allowed list for galaxy ANDROID: GKI: initial upload list for exynosauto soc ANDROID: ABI: Update allowed list for QCOM Conflicts: drivers/thermal/thermal_sysfs.c kernel/sched/fair.c Change-Id: I9a0af53ba055157468e6b3cee41f4c8bda1f34af Signed-off-by: Blagovest Kolenichev <bkolenichev@codeaurora.org>
This commit is contained in:
commit
c47e2335cc
41 changed files with 4048 additions and 1268 deletions
|
|
@ -1 +1 @@
|
|||
LTS_5.4.61_dc2d5a0ace05
|
||||
LTS_5.4.61_37201331c48d
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1462
android/abi_gki_aarch64_exynosauto
Normal file
1462
android/abi_gki_aarch64_exynosauto
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -144,8 +144,11 @@
|
|||
__spi_alloc_controller
|
||||
__spi_register_driver
|
||||
__spmi_driver_register
|
||||
__srcu_read_lock
|
||||
__srcu_read_unlock
|
||||
__stack_chk_fail
|
||||
__stack_chk_guard
|
||||
__sw_hweight8
|
||||
__sw_hweight32
|
||||
__sw_hweight64
|
||||
__sync_dirty_buffer
|
||||
|
|
@ -177,6 +180,7 @@
|
|||
__wake_up
|
||||
__wake_up_locked
|
||||
__warn_printk
|
||||
__xa_alloc
|
||||
_bcd2bin
|
||||
_bin2bcd
|
||||
_copy_from_iter_full
|
||||
|
|
@ -441,6 +445,7 @@
|
|||
cpufreq_table_index_unsorted
|
||||
cpufreq_unregister_driver
|
||||
cpufreq_unregister_notifier
|
||||
cpufreq_update_policy
|
||||
cpuhp_tasks_frozen
|
||||
cpuidle_pause_and_lock
|
||||
cpuidle_resume_and_unlock
|
||||
|
|
@ -457,6 +462,8 @@
|
|||
crypto_destroy_tfm
|
||||
crypto_register_rngs
|
||||
crypto_shash_digest
|
||||
crypto_shash_final
|
||||
crypto_shash_update
|
||||
crypto_unregister_rngs
|
||||
csum_partial
|
||||
d_add
|
||||
|
|
@ -575,6 +582,7 @@
|
|||
devm_gpio_request_one
|
||||
devm_gpiochip_add_data
|
||||
devm_gpiod_get
|
||||
devm_gpiod_get_index
|
||||
devm_gpiod_get_optional
|
||||
devm_iio_channel_get
|
||||
devm_iio_device_alloc
|
||||
|
|
@ -678,6 +686,7 @@
|
|||
dma_fence_context_alloc
|
||||
dma_fence_default_wait
|
||||
dma_fence_enable_sw_signaling
|
||||
dma_fence_free
|
||||
dma_fence_get_status
|
||||
dma_fence_init
|
||||
dma_fence_release
|
||||
|
|
@ -1079,6 +1088,7 @@
|
|||
gpiod_direction_input
|
||||
gpiod_direction_output
|
||||
gpiod_direction_output_raw
|
||||
gpiod_cansleep
|
||||
gpiod_get_optional
|
||||
gpiod_get_raw_value
|
||||
gpiod_get_raw_value_cansleep
|
||||
|
|
@ -1115,6 +1125,7 @@
|
|||
hrtimer_try_to_cancel
|
||||
hvc_alloc
|
||||
hvc_kick
|
||||
hvc_poll
|
||||
hvc_remove
|
||||
hwrng_register
|
||||
hwrng_unregister
|
||||
|
|
@ -1192,6 +1203,7 @@
|
|||
in6_pton
|
||||
init_dummy_netdev
|
||||
init_net
|
||||
init_srcu_struct
|
||||
init_task
|
||||
init_timer_key
|
||||
init_uts_ns
|
||||
|
|
@ -1336,6 +1348,7 @@
|
|||
kernel_kobj
|
||||
kernel_read
|
||||
kernel_recvmsg
|
||||
kernel_restart
|
||||
kernel_sendmsg
|
||||
kernel_setsockopt
|
||||
kernel_write
|
||||
|
|
@ -1376,6 +1389,7 @@
|
|||
kstat
|
||||
kstrdup
|
||||
kstrdup_quotable
|
||||
kstrdup_quotable_cmdline
|
||||
kstrndup
|
||||
kstrtobool
|
||||
kstrtobool_from_user
|
||||
|
|
@ -1812,6 +1826,7 @@
|
|||
power_supply_unregister
|
||||
preempt_schedule
|
||||
preempt_schedule_notrace
|
||||
prepare_to_wait
|
||||
prepare_to_wait_event
|
||||
print_hex_dump
|
||||
printk
|
||||
|
|
@ -1913,6 +1928,7 @@
|
|||
regulator_enable
|
||||
regulator_force_disable
|
||||
regulator_get
|
||||
regulator_get_current_limit
|
||||
regulator_get_mode
|
||||
regulator_get_optional
|
||||
regulator_get_voltage
|
||||
|
|
@ -1933,6 +1949,7 @@
|
|||
regulatory_hint
|
||||
release_firmware
|
||||
release_sock
|
||||
regmap_mmio_detach_clk
|
||||
remap_pfn_range
|
||||
remap_vmalloc_range
|
||||
remove_proc_entry
|
||||
|
|
@ -2113,6 +2130,7 @@
|
|||
smp_call_function_single
|
||||
smp_call_function_single_async
|
||||
smp_call_on_cpu
|
||||
smpboot_register_percpu_thread
|
||||
smpboot_unregister_percpu_thread
|
||||
snd_card_free
|
||||
snd_card_new
|
||||
|
|
@ -2321,6 +2339,7 @@
|
|||
sync_filesystem
|
||||
synchronize_irq
|
||||
synchronize_rcu
|
||||
synchronize_srcu
|
||||
sys_tz
|
||||
syscon_node_to_regmap
|
||||
syscon_regmap_lookup_by_phandle
|
||||
|
|
@ -2379,6 +2398,7 @@
|
|||
trace_raw_output_prep
|
||||
trace_seq_printf
|
||||
tracepoint_probe_register
|
||||
tracing_off
|
||||
truncate_inode_pages
|
||||
try_module_get
|
||||
try_wait_for_completion
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@
|
|||
cfg80211_scan_done
|
||||
cfg80211_sched_scan_results
|
||||
__cfg80211_send_event_skb
|
||||
cfg80211_stop_iface
|
||||
cfg80211_tdls_oper_request
|
||||
cfg80211_unlink_bss
|
||||
cfg80211_update_owe_info_event
|
||||
|
|
@ -663,6 +664,7 @@
|
|||
drm_connector_list_iter_end
|
||||
drm_connector_list_iter_next
|
||||
drm_connector_register
|
||||
drm_connector_set_tile_property
|
||||
drm_connector_unregister
|
||||
drm_connector_update_edid_property
|
||||
drm_crtc_cleanup
|
||||
|
|
@ -781,9 +783,11 @@
|
|||
drm_mode_copy
|
||||
drm_mode_create
|
||||
drm_mode_create_dp_colorspace_property
|
||||
drm_mode_create_tile_group
|
||||
drm_mode_debug_printmodeline
|
||||
drm_mode_duplicate
|
||||
drm_mode_equal
|
||||
drm_mode_get_tile_group
|
||||
drm_mode_object_find
|
||||
drm_mode_object_get
|
||||
drm_mode_object_put
|
||||
|
|
@ -1882,6 +1886,8 @@
|
|||
register_shrinker
|
||||
register_syscore_ops
|
||||
register_sysctl_table
|
||||
register_virtio_device
|
||||
register_virtio_driver
|
||||
regmap_bulk_read
|
||||
regmap_bulk_write
|
||||
regmap_field_read
|
||||
|
|
@ -2485,6 +2491,8 @@
|
|||
unregister_shrinker
|
||||
unregister_syscore_ops
|
||||
unregister_sysctl_table
|
||||
unregister_virtio_device
|
||||
unregister_virtio_driver
|
||||
up
|
||||
update_devfreq
|
||||
up_read
|
||||
|
|
@ -2741,6 +2749,29 @@
|
|||
video_ioctl2
|
||||
__video_register_device
|
||||
video_unregister_device
|
||||
virtio_check_driver_offered_feature
|
||||
virtio_config_changed
|
||||
virtio_max_dma_size
|
||||
virtqueue_add_inbuf
|
||||
virtqueue_add_inbuf_ctx
|
||||
virtqueue_add_outbuf
|
||||
virtqueue_add_sgs
|
||||
virtqueue_detach_unused_buf
|
||||
virtqueue_disable_cb
|
||||
virtqueue_enable_cb
|
||||
virtqueue_enable_cb_delayed
|
||||
virtqueue_enable_cb_prepare
|
||||
virtqueue_get_avail_addr
|
||||
virtqueue_get_buf
|
||||
virtqueue_get_buf_ctx
|
||||
virtqueue_get_desc_addr
|
||||
virtqueue_get_used_addr
|
||||
virtqueue_get_vring_size
|
||||
virtqueue_is_broken
|
||||
virtqueue_kick
|
||||
virtqueue_kick_prepare
|
||||
virtqueue_notify
|
||||
virtqueue_poll
|
||||
vmalloc
|
||||
vmalloc_to_page
|
||||
vmalloc_user
|
||||
|
|
@ -2754,6 +2785,10 @@
|
|||
vm_map_ram
|
||||
vm_unmap_ram
|
||||
vprintk
|
||||
vring_create_virtqueue
|
||||
vring_del_virtqueue
|
||||
vring_interrupt
|
||||
vring_transport_features
|
||||
vscnprintf
|
||||
vsnprintf
|
||||
vunmap
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ CONFIG_SCHED_TRACER=y
|
|||
CONFIG_STACK_TRACER=y
|
||||
CONFIG_FUNCTION_PROFILER=y
|
||||
CONFIG_TEST_KSTRTOX=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_KGDB=y
|
||||
CONFIG_KGDB_KDB=y
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ CONFIG_NLS_ISO8859_1=y
|
|||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_FUNCTION_TRACER=y
|
||||
|
|
|
|||
|
|
@ -18,6 +18,10 @@ ccflags-vdso := \
|
|||
$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
|
||||
-D__VDSO__
|
||||
|
||||
ifndef CONFIG_64BIT
|
||||
ccflags-vdso += -DBUILD_VDSO32
|
||||
endif
|
||||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
ccflags-vdso += $(filter --target=%,$(KBUILD_CFLAGS))
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@
|
|||
#ifndef _ASM_X86_VGTOD_H
|
||||
#define _ASM_X86_VGTOD_H
|
||||
|
||||
/*
|
||||
* This check is required to prevent ARCH=um to include
|
||||
* unwanted headers.
|
||||
*/
|
||||
#ifdef CONFIG_GENERIC_GETTIMEOFDAY
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/clocksource.h>
|
||||
#include <vdso/datapage.h>
|
||||
|
|
@ -14,6 +19,7 @@ typedef u64 gtod_long_t;
|
|||
#else
|
||||
typedef unsigned long gtod_long_t;
|
||||
#endif
|
||||
#endif /* CONFIG_GENERIC_GETTIMEOFDAY */
|
||||
|
||||
extern int vclocks_used;
|
||||
static inline bool vclock_was_used(int vclock)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ ADDITIONAL_KMI_SYMBOL_LISTS="
|
|||
android/abi_gki_aarch64_cuttlefish
|
||||
android/abi_gki_aarch64_db845c
|
||||
android/abi_gki_aarch64_exynos
|
||||
android/abi_gki_aarch64_exynosauto
|
||||
android/abi_gki_aarch64_galaxy
|
||||
android/abi_gki_aarch64_goldfish
|
||||
android/abi_gki_aarch64_hikey960
|
||||
|
|
|
|||
|
|
@ -806,9 +806,7 @@ static void device_link_put_kref(struct device_link *link)
|
|||
void device_link_del(struct device_link *link)
|
||||
{
|
||||
device_links_write_lock();
|
||||
device_pm_lock();
|
||||
device_link_put_kref(link);
|
||||
device_pm_unlock();
|
||||
device_links_write_unlock();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_link_del);
|
||||
|
|
@ -829,7 +827,6 @@ void device_link_remove(void *consumer, struct device *supplier)
|
|||
return;
|
||||
|
||||
device_links_write_lock();
|
||||
device_pm_lock();
|
||||
|
||||
list_for_each_entry(link, &supplier->links.consumers, s_node) {
|
||||
if (link->consumer == consumer) {
|
||||
|
|
@ -838,7 +835,6 @@ void device_link_remove(void *consumer, struct device *supplier)
|
|||
}
|
||||
}
|
||||
|
||||
device_pm_unlock();
|
||||
device_links_write_unlock();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_link_remove);
|
||||
|
|
|
|||
|
|
@ -449,6 +449,10 @@
|
|||
#define USB_VENDOR_ID_FRUCTEL 0x25B6
|
||||
#define USB_DEVICE_ID_GAMETEL_MT_MODE 0x0002
|
||||
|
||||
#define USB_VENDOR_ID_GAMEVICE 0x27F8
|
||||
#define USB_DEVICE_ID_GAMEVICE_GV186 0x0BBE
|
||||
#define USB_DEVICE_ID_GAMEVICE_KISHI 0x0BBF
|
||||
|
||||
#define USB_VENDOR_ID_GAMERON 0x0810
|
||||
#define USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR 0x0001
|
||||
#define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ static const struct hid_device_id hid_quirks[] = {
|
|||
{ HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), HID_QUIRK_NOGET },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD), HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_GV186),
|
||||
HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_KISHI),
|
||||
HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ static int sprd_pmic_probe(struct spi_device *spi)
|
|||
}
|
||||
|
||||
ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq,
|
||||
IRQF_ONESHOT | IRQF_NO_SUSPEND, 0,
|
||||
IRQF_ONESHOT, 0,
|
||||
&ddata->irq_chip, &ddata->irq_data);
|
||||
if (ret) {
|
||||
dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret);
|
||||
|
|
@ -272,9 +272,34 @@ static int sprd_pmic_probe(struct spi_device *spi)
|
|||
return ret;
|
||||
}
|
||||
|
||||
device_init_wakeup(&spi->dev, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int sprd_pmic_suspend(struct device *dev)
|
||||
{
|
||||
struct sprd_pmic *ddata = dev_get_drvdata(dev);
|
||||
|
||||
if (device_may_wakeup(dev))
|
||||
enable_irq_wake(ddata->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sprd_pmic_resume(struct device *dev)
|
||||
{
|
||||
struct sprd_pmic *ddata = dev_get_drvdata(dev);
|
||||
|
||||
if (device_may_wakeup(dev))
|
||||
disable_irq_wake(ddata->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops, sprd_pmic_suspend, sprd_pmic_resume);
|
||||
|
||||
static const struct of_device_id sprd_pmic_match[] = {
|
||||
{ .compatible = "sprd,sc2731", .data = &sc2731_data },
|
||||
{},
|
||||
|
|
@ -286,6 +311,7 @@ static struct spi_driver sprd_pmic_driver = {
|
|||
.name = "sc27xx-pmic",
|
||||
.bus = &spi_bus_type,
|
||||
.of_match_table = sprd_pmic_match,
|
||||
.pm = &sprd_pmic_pm_ops,
|
||||
},
|
||||
.probe = sprd_pmic_probe,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4014,9 +4014,6 @@ int sdhci_setup_host(struct sdhci_host *host)
|
|||
mmc_hostname(mmc), host->version);
|
||||
}
|
||||
|
||||
if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
|
||||
mmc->caps2 &= ~MMC_CAP2_CQE;
|
||||
|
||||
if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
|
||||
host->flags |= SDHCI_USE_SDMA;
|
||||
else if (!(host->caps & SDHCI_CAN_DO_SDMA))
|
||||
|
|
@ -4557,6 +4554,12 @@ int __sdhci_add_host(struct sdhci_host *host)
|
|||
struct mmc_host *mmc = host->mmc;
|
||||
int ret;
|
||||
|
||||
if ((mmc->caps2 & MMC_CAP2_CQE) &&
|
||||
(host->quirks & SDHCI_QUIRK_BROKEN_CQE)) {
|
||||
mmc->caps2 &= ~MMC_CAP2_CQE;
|
||||
mmc->cqe_ops = NULL;
|
||||
}
|
||||
|
||||
host->complete_wq = alloc_workqueue("sdhci", flags, 0);
|
||||
if (!host->complete_wq)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -921,7 +921,6 @@ static void wil_rx_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
|
|||
void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
|
||||
struct wil_net_stats *stats, bool gro)
|
||||
{
|
||||
gro_result_t rc = GRO_NORMAL;
|
||||
struct wil6210_vif *vif = ndev_to_vif(ndev);
|
||||
struct wil6210_priv *wil = ndev_to_wil(ndev);
|
||||
struct wireless_dev *wdev = vif_to_wdev(vif);
|
||||
|
|
@ -932,22 +931,16 @@ void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
|
|||
*/
|
||||
int mcast = is_multicast_ether_addr(da);
|
||||
struct sk_buff *xmit_skb = NULL;
|
||||
static const char * const gro_res_str[] = {
|
||||
[GRO_MERGED] = "GRO_MERGED",
|
||||
[GRO_MERGED_FREE] = "GRO_MERGED_FREE",
|
||||
[GRO_HELD] = "GRO_HELD",
|
||||
[GRO_NORMAL] = "GRO_NORMAL",
|
||||
[GRO_DROP] = "GRO_DROP",
|
||||
[GRO_CONSUMED] = "GRO_CONSUMED",
|
||||
};
|
||||
|
||||
if (wdev->iftype == NL80211_IFTYPE_STATION) {
|
||||
sa = wil_skb_get_sa(skb);
|
||||
if (mcast && ether_addr_equal(sa, ndev->dev_addr)) {
|
||||
/* mcast packet looped back to us */
|
||||
rc = GRO_DROP;
|
||||
dev_kfree_skb(skb);
|
||||
goto stats;
|
||||
ndev->stats.rx_dropped++;
|
||||
stats->rx_dropped++;
|
||||
wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
|
||||
return;
|
||||
}
|
||||
} else if (wdev->iftype == NL80211_IFTYPE_AP && !vif->ap_isolate) {
|
||||
if (mcast) {
|
||||
|
|
@ -991,26 +984,16 @@ void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
|
|||
wil_rx_handle_eapol(vif, skb);
|
||||
|
||||
if (gro)
|
||||
rc = napi_gro_receive(&wil->napi_rx, skb);
|
||||
napi_gro_receive(&wil->napi_rx, skb);
|
||||
else
|
||||
netif_rx_ni(skb);
|
||||
wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n",
|
||||
len, gro_res_str[rc]);
|
||||
}
|
||||
stats:
|
||||
/* statistics. rc set to GRO_NORMAL for AP bridging */
|
||||
if (unlikely(rc == GRO_DROP)) {
|
||||
ndev->stats.rx_dropped++;
|
||||
stats->rx_dropped++;
|
||||
wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
|
||||
} else {
|
||||
ndev->stats.rx_packets++;
|
||||
stats->rx_packets++;
|
||||
ndev->stats.rx_bytes += len;
|
||||
stats->rx_bytes += len;
|
||||
if (mcast)
|
||||
ndev->stats.multicast++;
|
||||
}
|
||||
ndev->stats.rx_packets++;
|
||||
stats->rx_packets++;
|
||||
ndev->stats.rx_bytes += len;
|
||||
stats->rx_bytes += len;
|
||||
if (mcast)
|
||||
ndev->stats.multicast++;
|
||||
}
|
||||
|
||||
void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
|
||||
|
|
|
|||
|
|
@ -378,8 +378,8 @@ static int sprd_efuse_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
|
||||
efuse->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (!efuse->base)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(efuse->base))
|
||||
return PTR_ERR(efuse->base);
|
||||
|
||||
ret = of_hwspin_lock_get_id(np, 0);
|
||||
if (ret < 0) {
|
||||
|
|
|
|||
|
|
@ -518,10 +518,11 @@ static int __init of_platform_default_populate_init(void)
|
|||
{
|
||||
struct device_node *node;
|
||||
|
||||
device_links_supplier_sync_state_pause();
|
||||
|
||||
if (!of_have_populated_dt())
|
||||
return -ENODEV;
|
||||
|
||||
device_links_supplier_sync_state_pause();
|
||||
/*
|
||||
* Handle certain compatibles explicitly, since we don't want to create
|
||||
* platform_devices for every node in /reserved-memory with a
|
||||
|
|
@ -547,8 +548,7 @@ arch_initcall_sync(of_platform_default_populate_init);
|
|||
|
||||
static int __init of_platform_sync_state_init(void)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
device_links_supplier_sync_state_resume();
|
||||
device_links_supplier_sync_state_resume();
|
||||
return 0;
|
||||
}
|
||||
late_initcall_sync(of_platform_sync_state_init);
|
||||
|
|
|
|||
|
|
@ -1031,8 +1031,20 @@ static int of_link_to_phandle(struct device *dev, struct device_node *sup_np,
|
|||
* Find the device node that contains the supplier phandle. It may be
|
||||
* @sup_np or it may be an ancestor of @sup_np.
|
||||
*/
|
||||
while (sup_np && !of_find_property(sup_np, "compatible", NULL))
|
||||
while (sup_np) {
|
||||
|
||||
/* Don't allow linking to a disabled supplier */
|
||||
if (!of_device_is_available(sup_np)) {
|
||||
of_node_put(sup_np);
|
||||
sup_np = NULL;
|
||||
}
|
||||
|
||||
if (of_find_property(sup_np, "compatible", NULL))
|
||||
break;
|
||||
|
||||
sup_np = of_get_next_parent(sup_np);
|
||||
}
|
||||
|
||||
if (!sup_np) {
|
||||
dev_dbg(dev, "Not linking to %pOFP - No device\n", tmp_np);
|
||||
return -ENODEV;
|
||||
|
|
@ -1311,7 +1323,7 @@ static int of_link_to_suppliers(struct device *dev,
|
|||
if (of_link_property(dev, con_np, p->name))
|
||||
ret = -ENODEV;
|
||||
|
||||
for_each_child_of_node(con_np, child)
|
||||
for_each_available_child_of_node(con_np, child)
|
||||
if (of_link_to_suppliers(dev, child) && !ret)
|
||||
ret = -EAGAIN;
|
||||
|
||||
|
|
|
|||
|
|
@ -129,7 +129,10 @@ static int ufs_mtk_bind_mphy(struct ufs_hba *hba)
|
|||
__func__, err);
|
||||
} else if (IS_ERR(host->mphy)) {
|
||||
err = PTR_ERR(host->mphy);
|
||||
dev_info(dev, "%s: PHY get failed %d\n", __func__, err);
|
||||
if (err != -ENODEV) {
|
||||
dev_info(dev, "%s: PHY get failed %d\n", __func__,
|
||||
err);
|
||||
}
|
||||
}
|
||||
|
||||
if (err)
|
||||
|
|
@ -669,13 +672,7 @@ static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba)
|
|||
|
||||
static void ufs_mtk_fixup_dev_quirks(struct ufs_hba *hba)
|
||||
{
|
||||
struct ufs_dev_info *dev_info = &hba->dev_info;
|
||||
u16 mid = dev_info->wmanufacturerid;
|
||||
|
||||
ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups);
|
||||
|
||||
if (mid == UFS_VENDOR_SAMSUNG)
|
||||
hba->dev_quirks &= ~UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -6339,7 +6339,7 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
|
|||
intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
|
||||
} while (intr_status && --retries);
|
||||
|
||||
if (retval == IRQ_NONE) {
|
||||
if (enabled_intr_status && retval == IRQ_NONE) {
|
||||
dev_err(hba->dev, "%s: Unhandled interrupt 0x%08x\n",
|
||||
__func__, intr_status);
|
||||
ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
|
||||
|
|
|
|||
|
|
@ -3119,6 +3119,15 @@ int spi_setup(struct spi_device *spi)
|
|||
status);
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* We do not want to return positive value from pm_runtime_get,
|
||||
* there are many instances of devices calling spi_setup() and
|
||||
* checking for a non-zero return value instead of a negative
|
||||
* return value.
|
||||
*/
|
||||
status = 0;
|
||||
|
||||
spi_set_cs(spi, false);
|
||||
pm_runtime_mark_last_busy(spi->controller->dev.parent);
|
||||
pm_runtime_put_autosuspend(spi->controller->dev.parent);
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ config THERMAL_DEFAULT_GOV_USER_SPACE
|
|||
|
||||
config THERMAL_DEFAULT_GOV_POWER_ALLOCATOR
|
||||
bool "power_allocator"
|
||||
select THERMAL_GOV_POWER_ALLOCATOR
|
||||
depends on THERMAL_GOV_POWER_ALLOCATOR
|
||||
help
|
||||
Select this if you want to control temperature based on
|
||||
system and device power allocation. This governor can only
|
||||
|
|
|
|||
|
|
@ -348,8 +348,8 @@ static int sprd_thm_probe(struct platform_device *pdev)
|
|||
|
||||
thm->var_data = pdata;
|
||||
thm->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (!thm->base)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(thm->base))
|
||||
return PTR_ERR(thm->base);
|
||||
|
||||
thm->nr_sensors = of_get_child_count(np);
|
||||
if (thm->nr_sensors == 0 || thm->nr_sensors > SPRD_THM_MAX_SENSOR) {
|
||||
|
|
|
|||
|
|
@ -980,10 +980,8 @@ void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
|
|||
{
|
||||
struct cooling_dev_stats *stats = cdev->stats;
|
||||
|
||||
#ifdef CONFIG_QTI_THERMAL
|
||||
if (!stats)
|
||||
return;
|
||||
#endif
|
||||
|
||||
spin_lock(&stats->lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/unaligned/access_ok.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
|
|
|
|||
|
|
@ -363,13 +363,16 @@ fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
|
|||
const struct fscrypt_info *ci)
|
||||
{
|
||||
/*
|
||||
* The READ_ONCE() here pairs with the smp_store_release() in
|
||||
* fscrypt_prepare_key(). (This only matters for the per-mode keys,
|
||||
* which are shared by multiple inodes.)
|
||||
* The two smp_load_acquire()'s here pair with the smp_store_release()'s
|
||||
* in fscrypt_prepare_inline_crypt_key() and fscrypt_prepare_key().
|
||||
* I.e., in some cases (namely, if this prep_key is a per-mode
|
||||
* encryption key) another task can publish blk_key or tfm concurrently,
|
||||
* executing a RELEASE barrier. We need to use smp_load_acquire() here
|
||||
* to safely ACQUIRE the memory the other task published.
|
||||
*/
|
||||
if (fscrypt_using_inline_encryption(ci))
|
||||
return READ_ONCE(prep_key->blk_key) != NULL;
|
||||
return READ_ONCE(prep_key->tfm) != NULL;
|
||||
return smp_load_acquire(&prep_key->blk_key) != NULL;
|
||||
return smp_load_acquire(&prep_key->tfm) != NULL;
|
||||
}
|
||||
|
||||
#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
|
||||
|
|
@ -416,7 +419,7 @@ static inline bool
|
|||
fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
|
||||
const struct fscrypt_info *ci)
|
||||
{
|
||||
return READ_ONCE(prep_key->tfm) != NULL;
|
||||
return smp_load_acquire(&prep_key->tfm) != NULL;
|
||||
}
|
||||
#endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
|
||||
|
||||
|
|
|
|||
|
|
@ -202,8 +202,10 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
|
|||
}
|
||||
}
|
||||
/*
|
||||
* Pairs with READ_ONCE() in fscrypt_is_key_prepared(). (Only matters
|
||||
* for the per-mode keys, which are shared by multiple inodes.)
|
||||
* Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
|
||||
* I.e., here we publish ->blk_key with a RELEASE barrier so that
|
||||
* concurrent tasks can ACQUIRE it. Note that this concurrency is only
|
||||
* possible for per-mode keys, not for per-file keys.
|
||||
*/
|
||||
smp_store_release(&prep_key->blk_key, blk_key);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -134,8 +134,10 @@ int fscrypt_prepare_key(struct fscrypt_prepared_key *prep_key,
|
|||
if (IS_ERR(tfm))
|
||||
return PTR_ERR(tfm);
|
||||
/*
|
||||
* Pairs with READ_ONCE() in fscrypt_is_key_prepared(). (Only matters
|
||||
* for the per-mode keys, which are shared by multiple inodes.)
|
||||
* Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
|
||||
* I.e., here we publish ->tfm with a RELEASE barrier so that
|
||||
* concurrent tasks can ACQUIRE it. Note that this concurrency is only
|
||||
* possible for per-mode keys, not for per-file keys.
|
||||
*/
|
||||
smp_store_release(&prep_key->tfm, tfm);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -77,6 +77,20 @@ static bool supported_iv_ino_lblk_policy(const struct fscrypt_policy_v2 *policy,
|
|||
struct super_block *sb = inode->i_sb;
|
||||
int ino_bits = 64, lblk_bits = 64;
|
||||
|
||||
/*
|
||||
* IV_INO_LBLK_* exist only because of hardware limitations, and
|
||||
* currently the only known use case for them involves AES-256-XTS.
|
||||
* That's also all we test currently. For these reasons, for now only
|
||||
* allow AES-256-XTS here. This can be relaxed later if a use case for
|
||||
* IV_INO_LBLK_* with other encryption modes arises.
|
||||
*/
|
||||
if (policy->contents_encryption_mode != FSCRYPT_MODE_AES_256_XTS) {
|
||||
fscrypt_warn(inode,
|
||||
"Can't use %s policy with contents mode other than AES-256-XTS",
|
||||
type);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* It's unsafe to include inode numbers in the IVs if the filesystem can
|
||||
* potentially renumber inodes, e.g. via filesystem shrinking.
|
||||
|
|
@ -178,10 +192,15 @@ static bool fscrypt_supported_v2_policy(const struct fscrypt_policy_v2 *policy,
|
|||
32, 32))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* IV_INO_LBLK_32 hashes the inode number, so in principle it can
|
||||
* support any ino_bits. However, currently the inode number is gotten
|
||||
* from inode::i_ino which is 'unsigned long'. So for now the
|
||||
* implementation limit is 32 bits.
|
||||
*/
|
||||
if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
|
||||
/* This uses hashed inode numbers, so ino_bits doesn't matter. */
|
||||
!supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_32",
|
||||
INT_MAX, 32))
|
||||
32, 32))
|
||||
return false;
|
||||
|
||||
if (memchr_inv(policy->__reserved, 0, sizeof(policy->__reserved))) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ static inline struct regmap *syscon_regmap_lookup_by_phandle(
|
|||
return ERR_PTR(-ENOTSUPP);
|
||||
}
|
||||
|
||||
static struct regmap *syscon_regmap_lookup_by_phandle_args(
|
||||
static inline struct regmap *syscon_regmap_lookup_by_phandle_args(
|
||||
struct device_node *np,
|
||||
const char *property,
|
||||
int arg_count,
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ enum {
|
|||
ND_OPT_DNSSL = 31, /* RFC6106 */
|
||||
ND_OPT_6CO = 34, /* RFC6775 */
|
||||
ND_OPT_CAPTIVE_PORTAL = 37, /* RFC7710 */
|
||||
ND_OPT_PREF64 = 38, /* RFC-ietf-6man-ra-pref64-09 */
|
||||
ND_OPT_PREF64 = 38, /* RFC8781 */
|
||||
__ND_OPT_MAX
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -7209,7 +7209,9 @@ int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu,
|
|||
continue;
|
||||
util = cpu_util_next(cpu, p, cpu);
|
||||
cpu_cap = capacity_of(cpu);
|
||||
spare_cap = cpu_cap - util;
|
||||
spare_cap = cpu_cap;
|
||||
lsub_positive(&spare_cap, util);
|
||||
|
||||
/*
|
||||
* Skip CPUs that cannot satisfy the capacity request.
|
||||
* IOW, placing the task there would make the CPU
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/err.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/nmi.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/profile.h>
|
||||
#include <linux/sched.h>
|
||||
|
|
@ -558,6 +559,7 @@ void tick_unfreeze(void)
|
|||
trace_suspend_resume(TPS("timekeeping_freeze"),
|
||||
smp_processor_id(), false);
|
||||
} else {
|
||||
touch_softlockup_watchdog();
|
||||
tick_resume_local();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3671,6 +3671,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
|
|||
|
||||
skb_push(nskb, -skb_network_offset(nskb) + offset);
|
||||
|
||||
skb_release_head_state(nskb);
|
||||
__copy_skb_header(nskb, skb);
|
||||
|
||||
skb_headers_offset_update(nskb, skb_headroom(nskb) - skb_headroom(skb));
|
||||
|
|
|
|||
|
|
@ -590,6 +590,19 @@ int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
|
|||
int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_supported_band *sband;
|
||||
const struct ieee80211_sband_iftype_data *iftd;
|
||||
|
||||
sband = ieee80211_get_sband(sdata);
|
||||
if (!sband)
|
||||
return -EINVAL;
|
||||
|
||||
iftd = ieee80211_get_sband_iftype_data(sband,
|
||||
NL80211_IFTYPE_MESH_POINT);
|
||||
/* The device doesn't support HE in mesh mode or at all */
|
||||
if (!iftd)
|
||||
return 0;
|
||||
|
||||
ieee80211_ie_build_he_6ghz_cap(sdata, skb);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2845,6 +2845,10 @@ void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
|||
if (WARN_ON(!iftd))
|
||||
return;
|
||||
|
||||
/* Check for device HE 6 GHz capability before adding element */
|
||||
if (!iftd->he_6ghz_capa.capa)
|
||||
return;
|
||||
|
||||
cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
|
||||
cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
|
||||
|
||||
|
|
|
|||
|
|
@ -4995,7 +4995,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
|
|||
info->attrs[NL80211_ATTR_HE_BSS_COLOR],
|
||||
¶ms.he_bss_color);
|
||||
if (err)
|
||||
return err;
|
||||
goto out;
|
||||
}
|
||||
|
||||
nl80211_calculate_ap_params(¶ms);
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)
|
|||
/* see 802.11ax D6.1 27.3.23.2 */
|
||||
if (chan == 2)
|
||||
return MHZ_TO_KHZ(5935);
|
||||
if (chan <= 253)
|
||||
if (chan <= 233)
|
||||
return MHZ_TO_KHZ(5950 + chan * 5);
|
||||
break;
|
||||
case NL80211_BAND_60GHZ:
|
||||
|
|
|
|||
|
|
@ -1261,6 +1261,12 @@ int security_sidtab_hash_stats(struct selinux_state *state, char *page)
|
|||
{
|
||||
int rc;
|
||||
|
||||
if (!state->initialized) {
|
||||
pr_err("SELinux: %s: called before initial load_policy\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
read_lock(&state->ss->policy_rwlock);
|
||||
rc = sidtab_hash_stats(state->ss->sidtab, page);
|
||||
read_unlock(&state->ss->policy_rwlock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue