Commit graph

878,652 commits

Author SHA1 Message Date
Can Guo
e2bb35c426 FROMGIT: scsi: ufs: Enable block layer runtime PM for well-known logical units
Block layer RPM is enabled for the genernal UFS SCSI devices when they are
probed by their driver. However block layer RPM is not enabled for UFS
well-known SCSI devices.

As UFS SCSI devices have their corresponding BSG char devices, accessing a
BSG char device via IOCTL may send requests to its corresponding SCSI
device through its request queue. If BSG IOCTL sends a request to a
well-known SCSI device when HBA is not runtime active, due to block layer
RPM not being enabled for the well-known SCSI devices, the HBA, which is at
the top of a SCSI device's parent chain, will not be resumed.

This change enables block layer RPM for the well-known SCSI devices so that
block layer can handle RPM for the well-known SCSI devices just like for
the general SCSI devices.

Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

Bug: 152930830
Change-Id: Id5cc396a1d072eff5d55080f097c2f8d3c60b58f
(cherry picked from commit fb276f770118ac1464316231868e711e04218d53
https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.7/scsi-queue)
Signed-off-by: Can Guo <cang@codeaurora.org>
2020-04-01 23:30:56 +00:00
Can Guo
79aec256f3 UPSTREAM: scsi: ufs: Fix possible unclocked access to auto hibern8 timer register
Before access auto hibner8 timer register, make sure power and clock are
properly configured to avoid unclocked register access.

Link: https://lore.kernel.org/r/1583398391-14273-1-git-send-email-cang@codeaurora.org
Fixes: ba7af5ec5126 ("scsi: ufs: export ufshcd_auto_hibern8_update for vendor usage")
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

Bug: 152930830
Change-Id: Ief402e50849b54807a02b3d06be6f310bc06b845
(cherry picked from commit be7594a424b4de7473b3d726635c3bf6aa19a86e)
Signed-off-by: Can Guo <cang@codeaurora.org>
2020-04-01 23:29:49 +00:00
Todd Kjos
9bb4e91b94 ANDROID: db845c build: Use merge_configs
Previously the db845c build was cat'ng the db845c_gki.fragment
with the gki_defconfig. The correct way to merge fragments is to use
the merge_configs script.

Bug: 152231482
Test: Treehugger
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I32d5d6576bb4bdc115b32e7e7ef3ef1e9daa2323
2020-04-01 14:04:53 +00:00
Liangcai Fan
8e8c63d051 ANDROID: ABI/Whitelist: update whitelist of unisoc
Update whitelist for the symbols used by the unisoc device and
updates the ABI representation accordingly.

Leaf changes summary: 10 artifacts changed
Changed leaf types summary: 0 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 10 Added functions
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

10 Added functions:

  [A] 'function pwm_device* devm_pwm_get(device*, const char*)'
  [A] 'function void drm_atomic_helper_commit_tail_rpm(drm_atomic_state*)'
  [A] 'function bool gpiochip_line_is_irq(gpio_chip*, unsigned int)'
  [A] 'function int gpiod_get_direction(gpio_desc*)'
  [A] 'function gpio_chip* gpiod_to_chip(const gpio_desc*)'
  [A] 'function void pwm_free(pwm_device*)'
  [A] 'function pwm_device* pwm_request(int, const char*)'
  [A] 'function void usb_phy_get_charger_current(usb_phy*, unsigned int*, unsigned int*)'
  [A] 'function void usb_phy_set_charger_current(usb_phy*, unsigned int)'
  [A] 'function void usb_phy_set_charger_state(usb_phy*, usb_charger_state)'

Bug: 147075469
Change-Id: I04b243e226f62a621746cd09b8f7cd37b2ab85f5
Signed-off-by: Liangcai Fan <liangcai.fan@unisoc.com>
2020-04-01 17:36:30 +08:00
Todd Kjos
78915e920b ANDROID: GKI: defconfig: enable CONFIG_THERMAL_GOV_POWER_ALLOCATOR
Enable "power_allocator" thermal governor.

Bug: 152588496
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I463528236bdfd640cdaefbac7dee932dc28d7005
2020-04-01 08:26:05 +00:00
Andrey Konovalov
e8bbff4ed1 UPSTREAM: usb: raw_gadget: fix compilation warnings in uapi headers
(Upstream commit 956ae8df7fed0a2acc7ae934f24493eaeb031f62.)

Mark usb_raw_io_flags_valid() and usb_raw_io_flags_zero() as inline to
fix the following warnings:

./usr/include/linux/usb/raw_gadget.h:69:12: warning: unused function 'usb_raw_io_flags_valid' [-Wunused-function]
./usr/include/linux/usb/raw_gadget.h:74:12: warning: unused function 'usb_raw_io_flags_zero' [-Wunused-function]

Reported-by: kernelci.org bot <bot@kernelci.org>
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Link: https://lore.kernel.org/r/6206b80b3810f95bfe1d452de45596609a07b6ea.1584456779.git.andreyknvl@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bug: 147413187
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Change-Id: Ief46cc5076f202fe058508ee11839708395842dd
2020-04-01 06:52:35 +00:00
Andrey Konovalov
638d17b3fa BACKPORT: usb: gadget: add raw-gadget interface
(Upstream commit f2c2e717642c66f7fe7e5dd69b2e8ff5849f4d10.)

USB Raw Gadget is a kernel module that provides a userspace interface for
the USB Gadget subsystem. Essentially it allows to emulate USB devices
from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is
currently a strictly debugging feature and shouldn't be used in
production.

Raw Gadget is similar to GadgetFS, but provides a more low-level and
direct access to the USB Gadget layer for the userspace. The key
differences are:

1. Every USB request is passed to the userspace to get a response, while
   GadgetFS responds to some USB requests internally based on the provided
   descriptors. However note, that the UDC driver might respond to some
   requests on its own and never forward them to the Gadget layer.

2. GadgetFS performs some sanity checks on the provided USB descriptors,
   while Raw Gadget allows you to provide arbitrary data as responses to
   USB requests.

3. Raw Gadget provides a way to select a UDC device/driver to bind to,
   while GadgetFS currently binds to the first available UDC.

4. Raw Gadget uses predictable endpoint names (handles) across different
   UDCs (as long as UDCs have enough endpoints of each required transfer
   type).

5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Bug: 147413187
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Change-Id: Ib48759bda0651e685160c532bed55b7335a39034
2020-04-01 06:52:26 +00:00
Masahiro Yamada
93a99b66ed UPSTREAM: usb: gadget: move choice ... endchoice to legacy/Kconfig
(Upstream commit 10e5e6c2496354f0afec82dba459339c421badbf.

drivers/usb/gadget/Kconfig includes drivers/usb/gadget/legacy/Kconfig
inside the 'choice' block. The current Kconfig allows this, but I'd
like to discourage this usage.

People tend to mess up the structure without noticing that entire
drivers/usb/gadget/legacy/Kconfig is placed in the choice context.
In fact, legacy/Kconfig mixes up bool and tristate in the choice,
and creates nested choice, etc.

This commit does not change the behavior, but it will help people
notice how badly this Kconfig file is written.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Link: https://lore.kernel.org/r/20191211073857.16780-1-masahiroy@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bug: 147413187
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Change-Id: Ib2b96fd9c2acb681b2186eb89ec1f0f2b18d0e89
2020-04-01 06:52:17 +00:00
Ram Muthiah
2379085a07 ANDROID: GKI: Added goldfish whitelist to aarch64 abi
Bug: 151893768
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: Ifb50d7a02c8beb3ed6d7fddd2287154969cb2282
2020-03-31 12:45:07 -07:00
Ram Muthiah
0e36cb2865 ANDROID: GKI: update cf whitelist + gki whitelist
Bug: 147894960
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I1d06a4d72bcef9a335d9120f936d475aa6a377c0
2020-03-31 12:28:54 -07:00
Maciej Żenczykowski
6db48906aa UPSTREAM: ipv6: ndisc: add support for 'PREF64' dns64 prefix identifier
This is trivial since we already have support for the entirely
identical (from the kernel's point of view) RDNSS, DNSSL, etc. that
also contain opaque data that needs to be passed down to userspace
for further processing.

As specified in draft-ietf-6man-ra-pref64-09 (while it is still a draft,
it is purely waiting on the RFC Editor for cleanups and publishing):
  PREF64 option contains lifetime and a (up to) 96-bit IPv6 prefix.

The 8-bit identifier of the option type as assigned by the IANA is 38.

Since we lack DNS64/NAT64/CLAT support in kernel at the moment,
thus this option should also be passed on to userland.

See:
  https://tools.ietf.org/html/draft-ietf-6man-ra-pref64-09
  https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml#icmpv6-parameters-5

Cc: Erik Kline <ek@google.com>
Cc: Jen Linkova <furry@google.com>
Cc: Lorenzo Colitti <lorenzo@google.com>
Cc: Michael Haro <mharo@google.com>
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Acked-By: Lorenzo Colitti <lorenzo@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit c24a77edc9a7ac9b5fea75407f197fe1469262f4)
Bug: 150648313
Change-Id: I02bff2103194a8171f907e82f811d7ab66962138
2020-03-31 03:17:50 -07:00
Raghavendra Rao Ananta
9c1fc2d22c ANDROID: ABI: Add initial ABI whitelist for QCOM
Add initial ABI whitelist file for Qualcomm's family of SoCs.
Update the ABI snapshot (that added 569 functions) as well
as build.config.gki.aarch64 accordingly.

569 Added functions:

  [A] 'function int ___pskb_trim(sk_buff*, unsigned int)'
  [A] 'function void __bitmap_clear(unsigned long int*, unsigned int, int)'
  [A] 'function void __bitmap_set(unsigned long int*, unsigned int, int)'
  [A] 'function int __bitmap_subset(const unsigned long int*, const unsigned long int*, unsigned int)'
  [A] 'function clk_hw* __clk_get_hw(clk*)'
  [A] 'function void __drm_atomic_helper_connector_destroy_state(drm_connector_state*)'
  [A] 'function void __drm_atomic_helper_connector_duplicate_state(drm_connector*, drm_connector_state*)'
  [A] 'function void __drm_atomic_helper_connector_reset(drm_connector*, drm_connector_state*)'
  [A] 'function void __hvc_resize(hvc_struct*, winsize)'
  [A] 'function void __iowrite32_copy(void*, void*, size_t)'
  [A] 'function int __ipv6_addr_type(const in6_addr*)'
  [A] 'function int __media_device_register(media_device*, module*)'
  [A] 'function void __scsi_print_sense(const scsi_device*, const char*, const unsigned char*, int)'
  [A] 'function bool __sg_page_iter_next(sg_page_iter*)'
  [A] 'function void __sg_page_iter_start(sg_page_iter*, scatterlist*, unsigned int, unsigned long int)'
  [A] 'function void __skb_get_hash(sk_buff*)'
  [A] 'function sk_buff* __skb_gso_segment(sk_buff*, netdev_features_t, bool)'
  [A] 'function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*)'
  [A] 'function void __sock_tx_timestamp(__u16, __u8*)'
  [A] 'function ssize_t __splice_from_pipe(pipe_inode_info*, splice_desc*, splice_actor*)'
  [A] 'function unsigned int __sw_hweight8(unsigned int)'
  [A] 'function pid_t __task_pid_nr_ns(task_struct*, pid_type, pid_namespace*)'
  [A] 'function void __tasklet_hi_schedule(tasklet_struct*)'
  [A] 'function int __uio_register_device(module*, device*, uio_info*)'
  [A] 'function int __v4l2_ctrl_modify_range(v4l2_ctrl*, s64, s64, u64, s64)'
  [A] 'function int __v4l2_ctrl_s_ctrl(v4l2_ctrl*, s32)'
  [A] 'function int __video_register_device(video_device*, vfl_devnode_type, int, int, module*)'
  [A] 'function void __wake_up_locked(wait_queue_head*, unsigned int, int)'
  [A] 'function void _raw_read_lock_irq(rwlock_t*)'
  [A] 'function unsigned long int _raw_read_lock_irqsave(rwlock_t*)'
  [A] 'function void _raw_read_unlock_irq(rwlock_t*)'
  [A] 'function void _raw_read_unlock_irqrestore(rwlock_t*, unsigned long int)'
  [A] 'function int _raw_spin_trylock_bh(raw_spinlock_t*)'
  [A] 'function void _raw_write_lock_irq(__anonymous_struct__9*)'
  [A] 'function unsigned long int _raw_write_lock_irqsave(rwlock_t*)'
  [A] 'function void _raw_write_unlock_irq(__anonymous_struct__9*)'
  [A] 'function void _raw_write_unlock_irqrestore(rwlock_t*, unsigned long int)'
  [A] 'function void add_device_randomness(void*, unsigned int)'
  [A] 'function void add_timer_on(timer_list*, int)'
  [A] 'function void adjust_managed_page_count(page*, long int)'
  [A] 'function void alarm_start_relative(alarm*, ktime_t)'
  [A] 'function io_pgtable_ops* alloc_io_pgtable_ops(io_pgtable_fmt, io_pgtable_cfg*, void*)'
  [A] 'function sk_buff* alloc_skb_with_frags(unsigned long int, unsigned long int, int, int*, unsigned int)'
  [A] 'function backlight_device* backlight_device_get_by_type(backlight_type)'
  [A] 'function backlight_device* backlight_device_register(const char*, device*, void*, const backlight_ops*, const backlight_properties*)'
  [A] 'function int backlight_device_set_brightness(backlight_device*, unsigned long int)'
  [A] 'function void backlight_device_unregister(backlight_device*)'
  [A] 'function unsigned long int bitmap_find_next_zero_area_off(unsigned long int*, unsigned long int, unsigned long int, unsigned int, unsigned long int, unsigned long int)'
  [A] 'function void bitmap_free(const unsigned long int*)'
  [A] 'function int bitmap_parselist(const char*, unsigned long int*, int)'
  [A] 'function int bitmap_print_to_pagebuf(bool, char*, const unsigned long int*, int)'
  [A] 'function unsigned long int* bitmap_zalloc(unsigned int, unsigned int)'
  [A] 'function int blk_mq_virtio_map_queues(blk_mq_queue_map*, virtio_device*, int)'
  [A] 'function int blk_rq_map_user_iov(request_queue*, request*, rq_map_data*, const iov_iter*, gfp_t)'
  [A] 'function int blk_verify_command(unsigned char*, fmode_t)'
  [A] 'function void bpf_trace_run11(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)'
  [A] 'function void bpf_trace_run12(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)'
  [A] 'function int bus_for_each_dev(bus_type*, device*, void*, void ()*)'
  [A] 'function int bus_set_iommu(bus_type*, const iommu_ops*)'
  [A] 'function u32 cfg80211_calculate_bitrate(rate_info*)'
  [A] 'function void cfg80211_ch_switch_notify(net_device*, cfg80211_chan_def*)'
  [A] 'function void cfg80211_chandef_create(cfg80211_chan_def*, ieee80211_channel*, nl80211_channel_type)'
  [A] 'function void cfg80211_ft_event(net_device*, cfg80211_ft_event_params*)'
  [A] 'function void cfg80211_gtk_rekey_notify(net_device*, const u8*, const u8*, gfp_t)'
  [A] 'function cfg80211_bss* cfg80211_inform_bss_frame_data(wiphy*, cfg80211_inform_bss*, ieee80211_mgmt*, size_t, gfp_t)'
  [A] 'function void cfg80211_pmksa_candidate_notify(net_device*, int, const u8*, bool, gfp_t)'
  [A] 'function void class_interface_unregister(class_interface*)'
  [A] 'function clk* clk_get_sys(const char*, const char*)'
  [A] 'function clk* clk_register(device*, clk_hw*)'
  [A] 'function cmd_db_hw_type cmd_db_read_slave_id(const char*)'
  [A] 'function int cmd_db_ready()'
  [A] 'function void* compat_alloc_user_space(unsigned long int)'
  [A] 'function void complete_and_exit(completion*, long int)'
  [A] 'function void config_item_put(config_item*)'
  [A] 'function int cpu_pm_unregister_notifier(notifier_block*)'
  [A] 'function unsigned int cpufreq_quick_get_max(unsigned int)'
  [A] 'function int cpufreq_register_notifier(notifier_block*, unsigned int)'
  [A] 'function int cpufreq_unregister_notifier(notifier_block*, unsigned int)'
  [A] 'function void cpufreq_update_policy(unsigned int)'
  [A] 'function u8 crc8(const u8*, u8*, size_t, u8)'
  [A] 'function void crc8_populate_msb(u8*, u8)'
  [A] 'function int crypto_aead_encrypt(aead_request*)'
  [A] 'function int crypto_aead_setauthsize(crypto_aead*, unsigned int)'
  [A] 'function int crypto_aead_setkey(crypto_aead*, const unsigned char*, unsigned int)'
  [A] 'function crypto_aead* crypto_alloc_aead(const char*, unsigned int, unsigned int)'
  [A] 'function crypto_tfm* crypto_alloc_base(const char*, unsigned int, unsigned int)'
  [A] 'function crypto_shash* crypto_alloc_shash(const char*, unsigned int, unsigned int)'
  [A] 'function crypto_skcipher* crypto_alloc_skcipher(const char*, unsigned int, unsigned int)'
  [A] 'function crypto_async_request* crypto_dequeue_request(crypto_queue*)'
  [A] 'function void crypto_destroy_tfm(void*, crypto_tfm*)'
  [A] 'function int crypto_enqueue_request(crypto_queue*, crypto_async_request*)'
  [A] 'function void crypto_init_queue(crypto_queue*, unsigned int)'
  [A] 'function int crypto_shash_final(shash_desc*, unsigned char*)'
  [A] 'function int crypto_shash_setkey(crypto_shash*, const unsigned char*, unsigned int)'
  [A] 'function int crypto_shash_update(shash_desc*, const unsigned char*, unsigned int)'
  [A] 'function int crypto_skcipher_decrypt(skcipher_request*)'
  [A] 'function int crypto_skcipher_encrypt(skcipher_request*)'
  [A] 'function int dequeue_signal(task_struct*, sigset_t*, kernel_siginfo_t*)'
  [A] 'function void dev_add_pack(packet_type*)'
  [A] 'function int dev_alloc_name(net_device*, const char*)'
  [A] 'function int dev_pm_domain_attach(device*, bool)'
  [A] 'function int dev_pm_opp_register_notifier(device*, notifier_block*)'
  [A] 'function int dev_pm_opp_unregister_notifier(device*, notifier_block*)'
  [A] 'function void dev_remove_pack(packet_type*)'
  [A] 'function int dev_set_mac_address(net_device*, sockaddr*, netlink_ext_ack*)'
  [A] 'function device* device_create_with_groups(class*, device*, unsigned int, void*, const attribute_group**, const char*, ...)'
  [A] 'function unsigned int device_get_child_node_count(device*)'
  [A] 'function device_link* device_link_add(device*, device*, unsigned int)'
  [A] 'function void device_link_del(device_link*)'
  [A] 'function ssize_t device_show_int(device*, device_attribute*, char*)'
  [A] 'function ssize_t device_store_int(device*, device_attribute*, const char*, size_t)'
  [A] 'function int devm_clk_bulk_get_optional(device*, int, clk_bulk_data*)'
  [A] 'function void devm_clk_put(device*, clk*)'
  [A] 'function gpio_desc* devm_fwnode_get_index_gpiod_from_child(device*, const char*, int, fwnode_handle*, gpiod_flags, const char*)'
  [A] 'function nvmem_device* devm_nvmem_device_get(device*, const char*)'
  [A] 'function int devm_of_pci_get_host_bridge_resources(device*, unsigned char, unsigned char, list_head*, resource_size_t*)'
  [A] 'function pwm_device* devm_of_pwm_get(device*, device_node*, const char*)'
  [A] 'function pci_host_bridge* devm_pci_alloc_host_bridge(device*, size_t)'
  [A] 'function void devm_pinctrl_put(pinctrl*)'
  [A] 'function power_supply* devm_power_supply_get_by_phandle(device*, const char*)'
  [A] 'function void devm_pwm_put(device*, pwm_device*)'
  [A] 'function void devm_regmap_del_irq_chip(device*, int, regmap_irq_chip_data*)'
  [A] 'function int devm_regulator_register_notifier(regulator*, notifier_block*)'
  [A] 'function int devm_request_pci_bus_resources(device*, list_head*)'
  [A] 'function int dma_buf_begin_cpu_access_partial(dma_buf*, dma_data_direction, unsigned int, unsigned int)'
  [A] 'function int dma_buf_end_cpu_access_partial(dma_buf*, dma_data_direction, unsigned int, unsigned int)'
  [A] 'function int dma_buf_get_flags(dma_buf*, unsigned long int*)'
  [A] 'function dma_addr_t dma_direct_map_resource(device*, phys_addr_t, size_t, dma_data_direction, unsigned long int)'
  [A] 'function dma_fence_array* dma_fence_array_create(int, dma_fence**, u64, unsigned int, bool)'
  [A] 'function void do_exit(long int)'
  [A] 'function int do_wait_intr(wait_queue_head_t*, wait_queue_entry_t*)'
  [A] 'function void drain_workqueue(workqueue_struct*)'
  [A] 'function device* driver_find_device(device_driver*, device*, void*, void ()*)'
  [A] 'function int drm_atomic_commit(drm_atomic_state*)'
  [A] 'function drm_connector_state* drm_atomic_get_connector_state(drm_atomic_state*, drm_connector*)'
  [A] 'function drm_plane_state* drm_atomic_get_plane_state(drm_atomic_state*, drm_plane*)'
  [A] 'function int drm_atomic_helper_commit_duplicated_state(drm_atomic_state*, drm_modeset_acquire_ctx*)'
  [A] 'function drm_atomic_state* drm_atomic_helper_duplicate_state(drm_device*, drm_modeset_acquire_ctx*)'
  [A] 'function void drm_atomic_helper_update_legacy_modeset_state(drm_device*, drm_atomic_state*)'
  [A] 'function int drm_atomic_helper_wait_for_fences(drm_device*, drm_atomic_state*, bool)'
  [A] 'function int drm_atomic_set_crtc_for_connector(drm_connector_state*, drm_crtc*)'
  [A] 'function void drm_atomic_set_fence_for_plane(drm_plane_state*, dma_fence*)'
  [A] 'function int drm_atomic_set_mode_for_crtc(drm_crtc_state*, const drm_display_mode*)'
  [A] 'function drm_atomic_state* drm_atomic_state_alloc(drm_device*)'
  [A] 'function void drm_atomic_state_clear(drm_atomic_state*)'
  [A] 'function void drm_atomic_state_default_clear(drm_atomic_state*)'
  [A] 'function void drm_atomic_state_default_release(drm_atomic_state*)'
  [A] 'function int drm_atomic_state_init(drm_device*, drm_atomic_state*)'
  [A] 'function void drm_bridge_disable(drm_bridge*)'
  [A] 'function void drm_bridge_enable(drm_bridge*)'
  [A] 'function void drm_bridge_mode_set(drm_bridge*, const drm_display_mode*, const drm_display_mode*)'
  [A] 'function void drm_bridge_post_disable(drm_bridge*)'
  [A] 'function void drm_bridge_pre_enable(drm_bridge*)'
  [A] 'function int drm_client_init(drm_device*, drm_client_dev*, const char*, const drm_client_funcs*)'
  [A] 'function int drm_client_modeset_commit_force(drm_client_dev*)'
  [A] 'function void drm_client_register(drm_client_dev*)'
  [A] 'function void drm_crtc_wait_one_vblank(drm_crtc*)'
  [A] 'function bool drm_detect_monitor_audio(edid*)'
  [A] 'function int drm_event_reserve_init_locked(drm_device*, drm_file*, drm_pending_event*, drm_event*)'
  [A] 'function drm_framebuffer* drm_framebuffer_lookup(drm_device*, drm_file*, unsigned int)'
  [A] 'function void drm_framebuffer_remove(drm_framebuffer*)'
  [A] 'function void drm_framebuffer_unregister_private(drm_framebuffer*)'
  [A] 'function const char* drm_get_connector_status_name(drm_connector_status)'
  [A] 'function void drm_kms_helper_poll_disable(drm_device*)'
  [A] 'function void drm_kms_helper_poll_enable(drm_device*)'
  [A] 'function unsigned char drm_match_cea_mode(const drm_display_mode*)'
  [A] 'function int drm_mode_convert_umode(drm_device*, drm_display_mode*, const drm_mode_modeinfo*)'
  [A] 'function int drm_mode_create_dp_colorspace_property(drm_connector*)'
  [A] 'function bool drm_mode_equal(const drm_display_mode*, const drm_display_mode*)'
  [A] 'function void drm_mode_object_get(drm_mode_object*)'
  [A] 'function void drm_mode_set_crtcinfo(drm_display_mode*, int)'
  [A] 'function void drm_mode_set_name(drm_display_mode*)'
  [A] 'function void drm_modeset_acquire_fini(drm_modeset_acquire_ctx*)'
  [A] 'function void drm_modeset_acquire_init(drm_modeset_acquire_ctx*, unsigned int)'
  [A] 'function int drm_modeset_backoff(drm_modeset_acquire_ctx*)'
  [A] 'function void drm_modeset_drop_locks(drm_modeset_acquire_ctx*)'
  [A] 'function int drm_modeset_lock_all_ctx(drm_device*, drm_modeset_acquire_ctx*)'
  [A] 'function int drm_object_property_set_value(drm_mode_object*, drm_property*, long long unsigned int)'
  [A] 'function int drm_panel_notifier_call_chain(drm_panel*, unsigned long int, void*)'
  [A] 'function drm_property_blob* drm_property_blob_get(drm_property_blob*)'
  [A] 'function void drm_property_blob_put(drm_property_blob*)'
  [A] 'function drm_property* drm_property_create_bitmask(drm_device*, unsigned int, const char*, const drm_prop_enum_list*, int, long long unsigned int)'
  [A] 'function drm_property* drm_property_create_enum(drm_device*, unsigned int, const char*, const drm_prop_enum_list*, int)'
  [A] 'function drm_property_blob* drm_property_lookup_blob(drm_device*, uint32_t)'
  [A] 'function void drm_send_event_locked(drm_device*, drm_pending_event*)'
  [A] 'function int extcon_get_property(extcon_dev*, unsigned int, unsigned int, extcon_property_value*)'
  [A] 'function char* file_path(file*, char*, int)'
  [A] 'function unsigned long int find_last_bit(const unsigned long int*, unsigned long int)'
  [A] 'function snd_usb_substream* find_snd_usb_substream(unsigned int, unsigned int, unsigned int, snd_usb_audio**, void ()*)'
  [A] 'function int firmware_request_nowarn(const firmware**, const char*, device*)'
  [A] 'function void flush_dcache_page(page*)'
  [A] 'function void free_io_pgtable_ops(io_pgtable_ops*)'
  [A] 'function int fsl8250_handle_irq(uart_port*)'
  [A] 'function size_t gen_pool_avail(gen_pool*)'
  [A] 'function size_t gen_pool_size(gen_pool*)'
  [A] 'function iommu_group* generic_device_group(device*)'
  [A] 'function int get_option(char**, int*)'
  [A] 'function unsigned long int get_unmapped_area(file*, unsigned long int, unsigned long int, unsigned long int, unsigned long int)'
  [A] 'function void getboottime64(timespec64*)'
  [A] 'function void gpio_free_array(const gpio*, size_t)'
  [A] 'function int gpiod_cansleep(const gpio_desc*)'
  [A] 'function gpio_desc* gpiod_get_optional(device*, const char*, gpiod_flags)'
  [A] 'function int gpiod_get_raw_value_cansleep(const gpio_desc*)'
  [A] 'function int gpiod_is_active_low(const gpio_desc*)'
  [A] 'function void gpiod_set_raw_value_cansleep(gpio_desc*, int)'
  [A] 'function void gro_cells_destroy(gro_cells*)'
  [A] 'function int gro_cells_init(gro_cells*, net_device*)'
  [A] 'function int gro_cells_receive(gro_cells*, sk_buff*)'
  [A] 'function void handle_simple_irq(irq_desc*)'
  [A] 'function int hex2bin(unsigned char*, const char*, unsigned long int)'
  [A] 'function int hex_dump_to_buffer(void*, unsigned long int, int, int, char*, unsigned long int, bool)'
  [A] 'function hvc_struct* hvc_alloc(uint32_t, int, const hv_ops*, int)'
  [A] 'function int hvc_instantiate(uint32_t, int, const hv_ops*)'
  [A] 'function void hvc_kick()'
  [A] 'function int hvc_poll(hvc_struct*)'
  [A] 'function int hvc_remove(hvc_struct*)'
  [A] 'function icc_path* icc_get(device*, const int, const int)'
  [A] 'function void icc_set_tag(icc_path*, u32)'
  [A] 'function int idr_alloc_cyclic(idr*, void*, int, int, unsigned int)'
  [A] 'function long int import_iovec(int, const iovec*, unsigned int, unsigned int, iovec**, iov_iter*)'
  [A] 'function int in_egroup_p(kgid_t)'
  [A] 'function int init_dummy_netdev(net_device*)'
  [A] 'function void input_close_device(input_handle*)'
  [A] 'function int input_ff_create(input_dev*, unsigned int)'
  [A] 'function void input_ff_destroy(input_dev*)'
  [A] 'function int input_open_device(input_handle*)'
  [A] 'function int input_register_handle(input_handle*)'
  [A] 'function int input_register_handler(input_handler*)'
  [A] 'function void input_unregister_handle(input_handle*)'
  [A] 'function void input_unregister_handler(input_handler*)'
  [A] 'function iommu_resv_region* iommu_alloc_resv_region(long long unsigned int, unsigned long int, int, iommu_resv_type)'
  [A] 'function int iommu_device_register(iommu_device*)'
  [A] 'function void iommu_device_unregister(iommu_device*)'
  [A] 'function void iommu_dma_get_resv_regions(device*, list_head*)'
  [A] 'function int iommu_domain_get_attr(iommu_domain*, iommu_attr, void*)'
  [A] 'function int iommu_domain_set_attr(iommu_domain*, iommu_attr, void*)'
  [A] 'function int iommu_fwspec_add_ids(device*, unsigned int*, int)'
  [A] 'function void iommu_fwspec_free(device*)'
  [A] 'function int iommu_get_dma_cookie(iommu_domain*)'
  [A] 'function iommu_domain* iommu_get_domain_for_dev(device*)'
  [A] 'function iommu_group* iommu_group_get(device*)'
  [A] 'function iommu_group* iommu_group_get_for_dev(device*)'
  [A] 'function void* iommu_group_get_iommudata(iommu_group*)'
  [A] 'function void iommu_group_put(iommu_group*)'
  [A] 'function iommu_group* iommu_group_ref_get(iommu_group*)'
  [A] 'function void iommu_group_remove_device(device*)'
  [A] 'function void iommu_group_set_iommudata(iommu_group*, void*, void ()*)'
  [A] 'function int iommu_map(iommu_domain*, unsigned long int, phys_addr_t, size_t, int)'
  [A] 'function void iommu_put_dma_cookie(iommu_domain*)'
  [A] 'function dma_buf* ion_alloc(size_t, unsigned int, unsigned int)'
  [A] 'function int ion_buffer_zero(ion_buffer*)'
  [A] 'function int ion_free(ion_buffer*)'
  [A] 'function void* ion_heap_map_kernel(ion_heap*, ion_buffer*)'
  [A] 'function int ion_heap_map_user(ion_heap*, ion_buffer*, vm_area_struct*)'
  [A] 'function void ion_heap_unmap_kernel(ion_heap*, ion_buffer*)'
  [A] 'function __sum16 ip_compute_csum(void*, int)'
  [A] 'function int ipv6_skip_exthdr(const sk_buff*, int, unsigned char*, unsigned short int*)'
  [A] 'function unsigned int irq_create_fwspec_mapping(irq_fwspec*)'
  [A] 'function unsigned int irq_create_mapping(irq_domain*, irq_hw_number_t)'
  [A] 'function void irq_dispose_mapping(unsigned int)'
  [A] 'function void irq_domain_free_irqs_parent(irq_domain*, unsigned int, unsigned int)'
  [A] 'function irq_data* irq_domain_get_irq_data(irq_domain*, unsigned int)'
  [A] 'function int irq_set_irqchip_state(unsigned int, irqchip_irq_state, bool)'
  [A] 'function int irq_set_parent(int, int)'
  [A] 'function int iterate_fd(files_struct*, unsigned int, void ()*, void*)'
  [A] 'function int kernel_getsockname(socket*, sockaddr*)'
  [A] 'function int kernel_recvmsg(socket*, msghdr*, kvec*, size_t, size_t, int)'
  [A] 'function void kernel_sigaction(int, __sighandler_t)'
  [A] 'function kernfs_node* kernfs_find_and_get_ns(kernfs_node*, const char*, void*)'
  [A] 'function void kernfs_notify(kernfs_node*)'
  [A] 'function void kernfs_put(kernfs_node*)'
  [A] 'function void kfree_skb_list(sk_buff*)'
  [A] 'function kset* kset_create_and_add(const char*, const kset_uevent_ops*, kobject*)'
  [A] 'function void kset_unregister(kset*)'
  [A] 'function int kstrtoint_from_user(const char*, unsigned long int, unsigned int, int*)'
  [A] 'function int kstrtos8(const char*, unsigned int, s8*)'
  [A] 'function int kstrtos8_from_user(const char*, size_t, unsigned int, s8*)'
  [A] 'function int kstrtou16_from_user(const char*, size_t, unsigned int, u16*)'
  [A] 'function int kstrtou8_from_user(const char*, size_t, unsigned int, u8*)'
  [A] 'function void kthread_bind(task_struct*, unsigned int)'
  [A] 'function bool kthread_cancel_delayed_work_sync(kthread_delayed_work*)'
  [A] 'function bool kthread_cancel_work_sync(kthread_work*)'
  [A] 'function kthread_worker* kthread_create_worker(unsigned int, const char*, ...)'
  [A] 'function void kthread_delayed_work_timer_fn(timer_list*)'
  [A] 'function void kthread_flush_work(kthread_work*)'
  [A] 'function void kthread_flush_worker(kthread_worker*)'
  [A] 'function bool kthread_mod_delayed_work(kthread_worker*, kthread_delayed_work*, unsigned long int)'
  [A] 'function int kthread_park(task_struct*)'
  [A] 'function void kthread_parkme()'
  [A] 'function bool kthread_queue_delayed_work(kthread_worker*, kthread_delayed_work*, unsigned long int)'
  [A] 'function bool kthread_should_park()'
  [A] 'function void kthread_unpark(task_struct*)'
  [A] 'function int led_classdev_register_ext(device*, led_classdev*, led_init_data*)'
  [A] 'function void led_classdev_unregister(led_classdev*)'
  [A] 'function void led_trigger_event(led_trigger*, led_brightness)'
  [A] 'function void led_trigger_register_simple(const char*, led_trigger**)'
  [A] 'function void led_trigger_unregister_simple(led_trigger*)'
  [A] 'function bool mac_pton(const char*, u8*)'
  [A] 'function void mbox_chan_received_data(mbox_chan*, void*)'
  [A] 'function void mbox_chan_txdone(mbox_chan*, int)'
  [A] 'function void mbox_client_txdone(mbox_chan*, int)'
  [A] 'function int mbox_controller_register(mbox_controller*)'
  [A] 'function void mbox_controller_unregister(mbox_controller*)'
  [A] 'function void mbox_free_channel(mbox_chan*)'
  [A] 'function mbox_chan* mbox_request_channel(mbox_client*, int)'
  [A] 'function int mbox_send_message(mbox_chan*, void*)'
  [A] 'function void media_device_cleanup(media_device*)'
  [A] 'function void media_device_init(media_device*)'
  [A] 'function void media_device_unregister(media_device*)'
  [A] 'function int media_entity_pads_init(media_entity*, u16, media_pad*)'
  [A] 'function void* memchr(void*, int, unsigned long int)'
  [A] 'function int mipi_dsi_dcs_set_display_brightness(mipi_dsi_device*, u16)'
  [A] 'function int mipi_dsi_dcs_set_tear_off(mipi_dsi_device*)'
  [A] 'function void mod_node_page_state(pglist_data*, node_stat_item, long int)'
  [A] 'function void napi_gro_flush(napi_struct*, bool)'
  [A] 'function int netif_rx(sk_buff*)'
  [A] 'function bool ns_capable(user_namespace*, int)'
  [A] 'function timespec64 ns_to_timespec64(long long int)'
  [A] 'function int nvmem_cell_read_u32(device*, const char*, u32*)'
  [A] 'function int nvmem_cell_write(nvmem_cell*, void*, size_t)'
  [A] 'function int nvmem_device_read(nvmem_device*, unsigned int, unsigned long int, void*)'
  [A] 'function int nvmem_device_write(nvmem_device*, unsigned int, unsigned long int, void*)'
  [A] 'function int of_clk_add_provider(device_node*, void ()*, void*)'
  [A] 'function clk* of_clk_get_from_provider(of_phandle_args*)'
  [A] 'function clk* of_clk_src_onecell_get(of_phandle_args*, void*)'
  [A] 'function clk* of_clk_src_simple_get(of_phandle_args*, void*)'
  [A] 'function int of_count_phandle_with_args(const device_node*, const char*, const char*)'
  [A] 'function thermal_cooling_device* of_devfreq_cooling_register(device_node*, devfreq*)'
  [A] 'function bool of_dma_is_coherent(device_node*)'
  [A] 'function device_node* of_find_node_with_property(device_node*, const char*)'
  [A] 'function const __be32* of_get_address(device_node*, int, u64*, unsigned int*)'
  [A] 'function device_node* of_get_cpu_node(int, unsigned int*)'
  [A] 'function int of_irq_get(device_node*, int)'
  [A] 'function int of_irq_get_byname(device_node*, const char*)'
  [A] 'function int of_irq_parse_and_map_pci(const pci_dev*, u8, u8)'
  [A] 'function int of_irq_parse_one(device_node*, int, of_phandle_args*)'
  [A] 'function int of_modalias_node(device_node*, char*, int)'
  [A] 'function int of_phandle_iterator_init(of_phandle_iterator*, const device_node*, const char*, const char*, int)'
  [A] 'function int of_phandle_iterator_next(of_phandle_iterator*)'
  [A] 'function platform_device* of_platform_device_create(device_node*, const char*, device*)'
  [A] 'function int of_property_read_variable_u16_array(const device_node*, const char*, u16*, size_t, size_t)'
  [A] 'function void of_reserved_mem_device_release(device*)'
  [A] 'function bool of_thermal_is_trip_valid(thermal_zone_device*, int)'
  [A] 'function int param_get_string(char*, const kernel_param*)'
  [A] 'function int param_set_bool(const char*, const kernel_param*)'
  [A] 'function int param_set_copystring(const char*, const kernel_param*)'
  [A] 'function int pci_assign_resource(pci_dev*, int)'
  [A] 'function void pci_clear_master(pci_dev*)'
  [A] 'function u8 pci_common_swizzle(pci_dev*, u8*)'
  [A] 'function iommu_group* pci_device_group(device*)'
  [A] 'function void pci_disable_msi(pci_dev*)'
  [A] 'function pci_dev* pci_find_pcie_root_port(pci_dev*)'
  [A] 'function pci_dev* pci_get_device(unsigned int, unsigned int, pci_dev*)'
  [A] 'function int pci_load_and_free_saved_state(pci_dev*, pci_saved_state**)'
  [A] 'function irq_domain* pci_msi_create_irq_domain(fwnode_handle*, msi_domain_info*, irq_domain*)'
  [A] 'function void pci_msi_mask_irq(irq_data*)'
  [A] 'function void pci_msi_unmask_irq(irq_data*)'
  [A] 'function int pci_scan_root_bus_bridge(pci_host_bridge*)'
  [A] 'function pci_saved_state* pci_store_saved_state(pci_dev*)'
  [A] 'function void pci_walk_bus(pci_bus*, void ()*, void*)'
  [A] 'function int pci_write_config_word(const pci_dev*, int, unsigned short int)'
  [A] 'function int pcie_capability_read_word(pci_dev*, int, u16*)'
  [A] 'function int phy_calibrate(phy*)'
  [A] 'function void pipe_lock(pipe_inode_info*)'
  [A] 'function void pipe_unlock(pipe_inode_info*)'
  [A] 'function int pm_generic_resume(device*)'
  [A] 'function int pm_generic_runtime_resume(device*)'
  [A] 'function int pm_generic_runtime_suspend(device*)'
  [A] 'function int pm_generic_suspend(device*)'
  [A] 'function int pm_qos_add_notifier(int, notifier_block*)'
  [A] 'function void pm_qos_add_request(pm_qos_request*, int, s32)'
  [A] 'function int pm_qos_remove_notifier(int, notifier_block*)'
  [A] 'function void pm_qos_remove_request(pm_qos_request*)'
  [A] 'function int pm_qos_request_active(pm_qos_request*)'
  [A] 'function void pm_qos_update_request(pm_qos_request*, s32)'
  [A] 'function int pm_runtime_barrier(device*)'
  [A] 'function void pm_runtime_no_callbacks(device*)'
  [A] 'function void pm_system_wakeup()'
  [A] 'function int power_supply_set_property(power_supply*, power_supply_property, const power_supply_propval*)'
  [A] 'function proc_dir_entry* proc_create_net_single(const char*, umode_t, proc_dir_entry*, void ()*, void*)'
  [A] 'function proc_dir_entry* proc_mkdir_data(const char*, umode_t, proc_dir_entry*, void*)'
  [A] 'function int qcom_scm_io_readl(long long unsigned int, unsigned int*)'
  [A] 'function int qcom_scm_io_writel(long long unsigned int, unsigned int)'
  [A] 'function int qcom_scm_pas_shutdown(u32)'
  [A] 'function int qcom_scm_qsmmu500_wait_safe_toggle(bool)'
  [A] 'function qcom_smem_state* qcom_smem_state_get(device*, const char*, unsigned int*)'
  [A] 'function int qcom_smem_state_update_bits(qcom_smem_state*, u32, u32)'
  [A] 'function void qdisc_reset(Qdisc*)'
  [A] 'function unsigned int radix_tree_gang_lookup(const xarray*, void**, unsigned long int, unsigned int)'
  [A] 'function void radix_tree_iter_delete(xarray*, radix_tree_iter*, void**)'
  [A] 'function void rational_best_approximation(unsigned long int, unsigned long int, unsigned long int, unsigned long int, unsigned long int*, unsigned long int*)'
  [A] 'function int raw_notifier_call_chain(raw_notifier_head*, unsigned long int, void*)'
  [A] 'function int raw_notifier_chain_register(raw_notifier_head*, notifier_block*)'
  [A] 'function int raw_notifier_chain_unregister(raw_notifier_head*, notifier_block*)'
  [A] 'function rb_node* rb_last(const rb_root*)'
  [A] 'function bool refcount_dec_and_lock(refcount_struct*, spinlock*)'
  [A] 'function bool refcount_dec_not_one(refcount_struct*)'
  [A] 'function void regcache_cache_only(regmap*, bool)'
  [A] 'function int regcache_sync_region(regmap*, unsigned int, unsigned int)'
  [A] 'function int register_netevent_notifier(notifier_block*)'
  [A] 'function ctl_table_header* register_sysctl_table(ctl_table*)'
  [A] 'function int regmap_irq_get_virq(regmap_irq_chip_data*, int)'
  [A] 'function int regulator_count_voltages(regulator*)'
  [A] 'function int regulator_disable_deferred(regulator*, int)'
  [A] 'function int regulator_get_current_limit(regulator*)'
  [A] 'function int regulator_get_voltage(regulator*)'
  [A] 'function int regulator_list_voltage(regulator*, unsigned int)'
  [A] 'function void regulator_lock(regulator_dev*)'
  [A] 'function int regulator_register_notifier(regulator*, notifier_block*)'
  [A] 'function void regulator_unlock(regulator_dev*)'
  [A] 'function int regulator_unregister_notifier(regulator*, notifier_block*)'
  [A] 'function int regulatory_set_wiphy_regd(wiphy*, ieee80211_regdomain*)'
  [A] 'function int report_iommu_fault(iommu_domain*, device*, unsigned long int, int)'
  [A] 'function unsigned long int round_jiffies(unsigned long int)'
  [A] 'function int rtnl_trylock()'
  [A] 'function void rtnl_unregister_all(int)'
  [A] 'function void save_stack_trace(stack_trace*)'
  [A] 'function void save_stack_trace_tsk(task_struct*, stack_trace*)'
  [A] 'function int sched_setattr(task_struct*, const sched_attr*)'
  [A] 'function int scsi_autopm_get_device(scsi_device*)'
  [A] 'function void scsi_autopm_put_device(scsi_device*)'
  [A] 'function int scsi_block_when_processing_errors(scsi_device*)'
  [A] 'function int scsi_device_get(scsi_device*)'
  [A] 'function void scsi_device_put(scsi_device*)'
  [A] 'function int scsi_ioctl(scsi_device*, int, void*)'
  [A] 'function int scsi_ioctl_block_when_processing_errors(scsi_device*, int, bool)'
  [A] 'function int scsi_register_interface(class_interface*)'
  [A] 'function void sdev_prefix_printk(const char*, const scsi_device*, const char*, const char*, ...)'
  [A] 'function int send_sig_info(int, kernel_siginfo*, task_struct*)'
  [A] 'function void seq_hex_dump(seq_file*, const char*, int, int, int, void*, size_t, bool)'
  [A] 'function uart_8250_port* serial8250_get_port(int)'
  [A] 'function int set_cpus_allowed_ptr(task_struct*, const cpumask*)'
  [A] 'function void set_normalized_timespec64(timespec64*, long long int, long long int)'
  [A] 'function int sg_alloc_table_from_pages(sg_table*, page**, unsigned int, unsigned int, unsigned long int, gfp_t)'
  [A] 'function unsigned long int sg_copy_from_buffer(scatterlist*, unsigned int, void*, unsigned long int)'
  [A] 'function unsigned long int sg_copy_to_buffer(scatterlist*, unsigned int, void*, unsigned long int)'
  [A] 'function int sg_scsi_ioctl(request_queue*, gendisk*, fmode_t, scsi_ioctl_command*)'
  [A] 'function int sigprocmask(int, sigset_t*, sigset_t*)'
  [A] 'function ssize_t simple_write_to_buffer(void*, size_t, loff_t*, void*, size_t)'
  [A] 'function int skb_append_pagefrags(sk_buff*, page*, int, size_t)'
  [A] 'function unsigned int skb_checksum(const sk_buff*, int, int, unsigned int)'
  [A] 'function sk_buff* skb_copy(const sk_buff*, unsigned int)'
  [A] 'function int skb_store_bits(sk_buff*, int, void*, int)'
  [A] 'function char* skip_spaces(const char*)'
  [A] 'function void smp_call_function(smp_call_func_t, void*, int)'
  [A] 'function void snd_ctl_notify(snd_card*, unsigned int, snd_ctl_elem_id*)'
  [A] 'function int snd_ctl_remove(snd_card*, snd_kcontrol*)'
  [A] 'function snd_info_entry* snd_info_create_module_entry(module*, const char*, snd_info_entry*)'
  [A] 'function int snd_pcm_stop(snd_pcm_substream*, int)'
  [A] 'function int snd_soc_add_component_controls(snd_soc_component*, const snd_kcontrol_new*, unsigned int)'
  [A] 'function int snd_soc_bytes_tlv_callback(snd_kcontrol*, int, unsigned int, unsigned int*)'
  [A] 'function snd_kcontrol* snd_soc_card_get_kcontrol(snd_soc_card*, const char*)'
  [A] 'function void snd_soc_component_exit_regmap(snd_soc_component*)'
  [A] 'function void snd_soc_component_init_regmap(snd_soc_component*, regmap*)'
  [A] 'function int snd_soc_dai_get_channel_map(snd_soc_dai*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)'
  [A] 'function int snd_soc_dai_set_channel_map(snd_soc_dai*, unsigned int, unsigned int*, unsigned int, unsigned int*)'
  [A] 'function int snd_soc_dai_set_fmt(snd_soc_dai*, unsigned int)'
  [A] 'function snd_soc_dapm_widget* snd_soc_dapm_kcontrol_widget(snd_kcontrol*)'
  [A] 'function int snd_soc_dapm_mixer_update_power(snd_soc_dapm_context*, snd_kcontrol*, int, snd_soc_dapm_update*)'
  [A] 'function int snd_soc_dapm_mux_update_power(snd_soc_dapm_context*, snd_kcontrol*, int, soc_enum*, snd_soc_dapm_update*)'
  [A] 'function int snd_soc_dapm_new_controls(snd_soc_dapm_context*, const snd_soc_dapm_widget*, int)'
  [A] 'function int snd_soc_dapm_new_widgets(snd_soc_card*)'
  [A] 'function int snd_soc_get_volsw(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_get_volsw_sx(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_info_multi_ext(snd_kcontrol*, snd_ctl_elem_info*)'
  [A] 'function int snd_soc_info_volsw_sx(snd_kcontrol*, snd_ctl_elem_info*)'
  [A] 'function snd_soc_component* snd_soc_lookup_component(device*, const char*)'
  [A] 'function int snd_soc_new_compress(snd_soc_pcm_runtime*, int)'
  [A] 'function int snd_soc_put_volsw(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_put_volsw_sx(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_unregister_card(snd_soc_card*)'
  [A] 'function void snd_timer_interrupt(snd_timer*, unsigned long int)'
  [A] 'function int snd_usb_enable_audio_stream(snd_usb_substream*, int, bool)'
  [A] 'function soc_device* soc_device_register(soc_device_attribute*)'
  [A] 'function void soc_device_unregister(soc_device*)'
  [A] 'function void sock_efree(sk_buff*)'
  [A] 'function int spi_register_controller(spi_controller*)'
  [A] 'function void spi_unregister_controller(spi_controller*)'
  [A] 'function int sprint_symbol(char*, unsigned long int)'
  [A] 'function void srcu_init_notifier_head(srcu_notifier_head*)'
  [A] 'function int srcu_notifier_call_chain(srcu_notifier_head*, unsigned long int, void*)'
  [A] 'function int srcu_notifier_chain_register(srcu_notifier_head*, notifier_block*)'
  [A] 'function int srcu_notifier_chain_unregister(srcu_notifier_head*, notifier_block*)'
  [A] 'function void stack_trace_print(const unsigned long int*, unsigned int, int)'
  [A] 'function char* strchrnul(const char*, int)'
  [A] 'function unsigned long int strlcat(char*, const char*, size_t)'
  [A] 'function char* strnchr(const char*, unsigned long int, int)'
  [A] 'function char* strnstr(const char*, const char*, unsigned long int)'
  [A] 'function char* strreplace(char*, char, char)'
  [A] 'function unsigned int swiotlb_max_segment()'
  [A] 'function bool synchronize_hardirq(unsigned int)'
  [A] 'function int sysfs_create_bin_file(kobject*, const bin_attribute*)'
  [A] 'function int sysfs_create_files(kobject*, const attribute* const*)'
  [A] 'function void sysfs_remove_bin_file(kobject*, const bin_attribute*)'
  [A] 'function void sysfs_remove_file_ns(kobject*, const attribute*, void*)'
  [A] 'function void sysfs_remove_files(kobject*, const attribute* const*)'
  [A] 'function void time64_to_tm(time64_t, int, tm*)'
  [A] 'function const char* trace_print_array_seq(trace_seq*, void*, int, size_t)'
  [A] 'function const char* trace_print_flags_seq(trace_seq*, const char*, unsigned long int, const trace_print_flags*)'
  [A] 'function const char* trace_print_hex_seq(trace_seq*, const unsigned char*, int, bool)'
  [A] 'function void tracing_off()'
  [A] 'function int ufshcd_query_attr(ufs_hba*, query_opcode, attr_idn, u8, u8, u32*)'
  [A] 'function int ufshcd_query_descriptor_retry(ufs_hba*, query_opcode, desc_idn, u8, u8, u8*, int*)'
  [A] 'function int ufshcd_query_flag(ufs_hba*, query_opcode, flag_idn, bool*)'
  [A] 'function void uio_unregister_device(uio_info*)'
  [A] 'function void unlock_page(page*)'
  [A] 'function void unregister_gadget_item(config_item*)'
  [A] 'function int unregister_netevent_notifier(notifier_block*)'
  [A] 'function void unregister_sysctl_table(ctl_table_header*)'
  [A] 'function int usb_add_phy_dev(usb_phy*)'
  [A] 'function usb_device* usb_alloc_dev(usb_device*, usb_bus*, unsigned int)'
  [A] 'function int usb_assign_descriptors(usb_function*, usb_descriptor_header**, usb_descriptor_header**, usb_descriptor_header**, usb_descriptor_header**)'
  [A] 'function void usb_composite_setup_continue(usb_composite_dev*)'
  [A] 'function int usb_ep_set_wedge(usb_ep*)'
  [A] 'function void usb_free_all_descriptors(usb_function*)'
  [A] 'function int usb_gadget_vbus_connect(usb_gadget*)'
  [A] 'function int usb_gadget_vbus_disconnect(usb_gadget*)'
  [A] 'function int usb_gadget_wakeup(usb_gadget*)'
  [A] 'function urb* usb_get_urb(urb*)'
  [A] 'function usb_string* usb_gstrings_attach(usb_composite_dev*, usb_gadget_strings**, unsigned int)'
  [A] 'function usb_device* usb_hub_find_child(usb_device*, int)'
  [A] 'function void usb_register_notify(notifier_block*)'
  [A] 'function void usb_remove_phy(usb_phy*)'
  [A] 'function void usb_set_device_state(usb_device*, usb_device_state)'
  [A] 'function void usb_unregister_notify(notifier_block*)'
  [A] 'function v4l2_ctrl* v4l2_ctrl_find(v4l2_ctrl_handler*, u32)'
  [A] 'function const char* v4l2_ctrl_get_name(u32)'
  [A] 'function void v4l2_ctrl_handler_free(v4l2_ctrl_handler*)'
  [A] 'function int v4l2_ctrl_handler_init_class(v4l2_ctrl_handler*, unsigned int, lock_class_key*, const char*)'
  [A] 'function v4l2_ctrl* v4l2_ctrl_new_custom(v4l2_ctrl_handler*, const v4l2_ctrl_config*, void*)'
  [A] 'function v4l2_ctrl* v4l2_ctrl_new_std(v4l2_ctrl_handler*, const v4l2_ctrl_ops*, u32, s64, s64, u64, s64)'
  [A] 'function v4l2_ctrl* v4l2_ctrl_new_std_menu(v4l2_ctrl_handler*, const v4l2_ctrl_ops*, u32, u8, u64, u8)'
  [A] 'function int v4l2_device_register(device*, v4l2_device*)'
  [A] 'function int v4l2_device_register_subdev(v4l2_device*, v4l2_subdev*)'
  [A] 'function int v4l2_device_register_subdev_nodes(v4l2_device*)'
  [A] 'function void v4l2_device_unregister(v4l2_device*)'
  [A] 'function void v4l2_device_unregister_subdev(v4l2_subdev*)'
  [A] 'function int v4l2_event_dequeue(v4l2_fh*, v4l2_event*, int)'
  [A] 'function int v4l2_event_pending(v4l2_fh*)'
  [A] 'function void v4l2_event_queue(video_device*, const v4l2_event*)'
  [A] 'function void v4l2_event_queue_fh(v4l2_fh*, const v4l2_event*)'
  [A] 'function int v4l2_event_subscribe(v4l2_fh*, const v4l2_event_subscription*, unsigned int, const v4l2_subscribed_event_ops*)'
  [A] 'function int v4l2_event_unsubscribe(v4l2_fh*, const v4l2_event_subscription*)'
  [A] 'function void v4l2_fh_add(v4l2_fh*)'
  [A] 'function void v4l2_fh_del(v4l2_fh*)'
  [A] 'function void v4l2_fh_exit(v4l2_fh*)'
  [A] 'function void v4l2_fh_init(v4l2_fh*, video_device*)'
  [A] 'function int v4l2_fh_open(file*)'
  [A] 'function int v4l2_fh_release(file*)'
  [A] 'function int v4l2_s_ctrl(v4l2_fh*, v4l2_ctrl_handler*, v4l2_control*)'
  [A] 'function void v4l2_subdev_init(v4l2_subdev*, const v4l2_subdev_ops*)'
  [A] 'function void vb2_buffer_done(vb2_buffer*, vb2_buffer_state)'
  [A] 'function int vb2_dqbuf(vb2_queue*, v4l2_buffer*, bool)'
  [A] 'function int vb2_qbuf(vb2_queue*, media_device*, v4l2_buffer*)'
  [A] 'function int vb2_queue_init(vb2_queue*)'
  [A] 'function void vb2_queue_release(vb2_queue*)'
  [A] 'function int vb2_reqbufs(vb2_queue*, v4l2_requestbuffers*)'
  [A] 'function int vb2_streamoff(vb2_queue*, v4l2_buf_type)'
  [A] 'function int vb2_streamon(vb2_queue*, v4l2_buf_type)'
  [A] 'function video_device* video_devdata(file*)'
  [A] 'function video_device* video_device_alloc()'
  [A] 'function void video_device_release(video_device*)'
  [A] 'function void video_device_release_empty(video_device*)'
  [A] 'function long int video_ioctl2(file*, unsigned int, unsigned long int)'
  [A] 'function void video_unregister_device(video_device*)'
  [A] 'function int vm_iomap_memory(vm_area_struct*, phys_addr_t, unsigned long int)'
  [A] 'function int vprintk(const char*, __va_list)'
  [A] 'function void wireless_send_event(net_device*, unsigned int, iwreq_data*, const char*)'
  [A] 'function unsigned int work_busy(work_struct*)'

Bug: 151133259

Change-Id: I029aaa288d1b0697291bdd2b0531626ec28a4cd0
Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
Signed-off-by: Matthias Maennich <maennich@google.com>
2020-03-31 09:25:07 +02:00
Ram Muthiah
4fe54315ee ANDROID: GKI: Removed cuttlefish configs
Configs were moved to repo cuttlefish-modules.

Bug: 151981046
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I217422c401c6ea183ce974c1d156abd4d9e209a6
2020-03-31 04:55:14 +00:00
John Stultz
f08ddd2d45 ANDROID: ABI/Whitelist: update for db845c
Yet again, adds a whitelist for the symbols used by the db845c
device and updates the ABI representation accordingly.

abi report:

 Comparing ABI against expected definition (abi_gki_aarch64.xml)
========================================================
 ABI report has been created at /home/docker/repo/out_abi/android-5.4/dist/abi.report
 ABI DIFFERENCES HAVE BEEN DETECTED! (RC=8)
========================================================
Leaf changes summary: 2 artifacts changed
Changed leaf types summary: 0 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 2 Added functions
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

2 Added functions:

  [A] 'function bool __list_add_valid(list_head*, list_head*, list_head*)'
  [A] 'function bool __list_del_entry_valid(list_head*)'

Bug: 146449535
Signed-off-by: John Stultz <john.stultz@linaro.org>
Change-Id: Ic755e50b21aba2ae173724b27a23a520e756e6b2
2020-03-30 23:58:31 +00:00
Alistair Delva
1069b51326 ANDROID: clang: update to 10.0.5
Bug: 151950245
Signed-off-by: Alistair Delva <adelva@google.com>
Change-Id: Ida4d7312c6dda528b4c54338dcb7ed4d41787720
2020-03-30 20:09:25 +00:00
glider@google.com
a61cf116bc FROMLIST: arm64: define __alloc_zeroed_user_highpage
When running the kernel with init_on_alloc=1, calling the default
implementation of __alloc_zeroed_user_highpage() from include/linux/highmem.h
leads to double-initialization of the allocated page (first by the page
allocator, then by clear_user_page().
Calling alloc_page_vma() with __GFP_ZERO, similarly to e.g. x86, seems
to be enough to ensure the user page is zeroed only once.

Signed-off-by: Alexander Potapenko <glider@google.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Bug: 149975351
Link: https://lore.kernel.org/linux-arm-kernel/20200312155920.50067-1-glider@google.com/
Change-Id: I3ff7c3fb082b420491313e0fdd841ce340989d72
Signed-off-by: Alexander Potapenko <glider@google.com>
2020-03-30 09:39:54 +00:00
Mayank Rana
041b82322f BACKPORT: extcon: Mark extcon_get_edev_name() function as exported symbol
extcon_get_edev_name() function provides client driver to request
extcon dev's name. If extcon driver and client driver are compiled
as loadable modules, extcon_get_edev_name() function symbol is not
visible to client driver. Hence mark extcon_find_edev_name() function
as exported symbol.

(cherry picked from commit 995bb1092326b8ba8fa29456c334ac6a49765ccd
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git)
Bug: 152643506
Change-Id: Idbeed2cf45cc201d707ccbccdd043d71e3a0c23a
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2020-03-30 06:21:26 +00:00
Paul Lawrence
37c7bda887 ANDROID: Incremental fs: Fix two typos
Test: incfs_test passes
Bug: 151240628
Signed-off-by: Paul Lawrence <paullawrence@google.com>
Change-Id: I627e683b562329fd57aedc8393e22449ff09ee1f
(cherry picked from commit 06c715e275dc65e720759cfeacb4120289e2a306)
2020-03-30 06:19:58 +00:00
John Stultz
1a12f7e69c ANDROID: gki_defconfig: Enable CONFIG_REMOTEPROC
This patch adds required CONFIG_REMOTEPROC to the gki_defconfig
in order for functionality like wifi to work on the db845c.

Bug: 146449535
Change-Id: I21a233b193b22b84ebb1462daf324bcc6b5c6594
Signed-off-by: John Stultz <john.stultz@linaro.org>
2020-03-30 05:45:33 +00:00
Alistair Delva
47ea291ae5 ANDROID: GKI: Add CONFIG_RPMSG to gki_defconfig
RPMSG is used on various SoC platforms downstream. Enable the subsystem
in the gki_defconfig. This also enables RPMSG_CHAR.

Bug: 146449535
Change-Id: Ib4a6e5a438681a9835398cdb8917045191e1fbe6
Signed-off-by: Alistair Delva <adelva@google.com>
2020-03-30 05:44:52 +00:00
Todd Kjos
669d93f855 Revert "sched/core: Prevent race condition between cpuset and __sched_setscheduler()"
This reverts commit 710da3c8ea.

When changing a thread's scheduling priority, binder calls
sched_setscheduler_nocheck() while holding the node lock and
proc inner lock. This was safe until v5.3 when this change was
introduced where cpuset_read_lock() is called in this path
which can sleep.

This patch was introduced to fix a possible accounting error
in sched deadline (potential oversell of CPU bandwidth) due
to a race condition between cpusets and __sched_setscheduler().
This is not an issue for Android.

This should be fixed in the binder driver, but that may take
some time.

Bug: 151861772
Change-Id: Ica1ef71b3cdcdc509b341ea1b57c41f8ee73794a
Signed-off-by: Todd Kjos <tkjos@google.com>
2020-03-30 04:49:04 +00:00
Todd Kjos
553f33f495 Revert "ANDROID: binder: fix sleeping from invalid function caused by RT inheritance"
This reverts commit aefd2d632e.

This patch introduced a race condition reported by Pete Zhang
<pete.zhang@nxp.com> where a thread already selected to handle a
transaction could be selected again by a different client. The signature
was triggering of the WARN_ON() in binder_enqueue_thread_work_ilocked():

static void
binder_enqueue_thread_work_ilocked(...)
{
	WARN_ON(!list_empty(&thread->waiting_thread_node));
	...
}

which indicates that a thread is unexpectedly enqueued
as a waiting thread when it has been selected and work is
being assigned to it.

There was a 2nd issue introduced by the same patch that could,
at least in theory, cause async transactions to hang.

Bug: 151861772
Change-Id: I0c2bdb4c4a0d57caae1551bcbb4c31a8e09e024b
Signed-off-by: Todd Kjos <tkjos@google.com>
2020-03-30 04:48:56 +00:00
Paul Lawrence
4061772e28 ANDROID: Incremental fs: Add INCFS_IOC_GET_FILLED_BLOCKS
Test: incfs_test passes
Bug: 151240628
Signed-off-by: Paul Lawrence <paullawrence@google.com>
Change-Id: I66d0ba1911adc5d68ed404585222e6a81a7eb94f
(cherry picked from commit 8d963bb24076b60cb2de0f2d49deaff1d52e8270)
2020-03-30 04:48:06 +00:00
Sandeep Patil
8398205ce4 ANDROID: GKI: defconfig: Enable CONFIG_SHUFFLE_PAGE_ALLOCATOR
This enables page allocator randomization in both x86
and ar64 gki defconfig

Bug: 151881089
Test: builds

Signed-off-by: Sandeep Patil <sspatil@google.com>
Change-Id: I1d28368f2df6aad47d9e90cc991b7f5dc21d2cfa
2020-03-27 14:49:07 -07:00
Greg Kroah-Hartman
fc2c4ee73f ANDROID: gki_defconfig: disable CONFIG_HARDENED_USERCOPY_FALLBACK
This should be unset so that usercopy whitelists are not actually being
enforced.

Bug: 152470236
Cc: Kees Cook <keescook@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I11069fa6d66cf23d38d33ccc52492aaa0915b776
2020-03-27 13:57:37 +01:00
Greg Kroah-Hartman
15cdabbf6e ANDROID: gki_defconfig: enable CONFIG_DEBUG_LIST
For lots of good security reasons, this config option needs to be
enabled

Bug: 152470236
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I96a88bbee9c4d17be97ed63262dbab2ef31fee79
2020-03-27 12:12:50 +01:00
A. Cody Schuffelen
44c2c8729b ANDROID: Follow aosp/1233812 to update ABI whitelists post-TPM addition.
Bug: 152440615
Test: build only
Change-Id: I99be6f6077340074dbfffa4a65c7d368e4601b03
Signed-off-by: A. Cody Schuffelen <schuffelen@google.com>
2020-03-26 21:28:52 +00:00
Dylan Chang
9503d046c9 ANDROID: dm-bow: Fix free_show value is incorrect
Fix free_show value is incorrect

Change-Id: If7f36a64afa600c980ee8a25393f8716a6ffd474
Signed-off-by: Dylan Chang <dylan.chang@oneplus.com>
Bug: 152116739
(cherry picked from commit feff0b2236497c0651baa7f59ea50c2377fff053)
Signed-off-by: Paul Lawrence <paullawrence@google.com>
2020-03-26 19:06:44 +00:00
Greg Kroah-Hartman
383156c695 ANDROID: GKI: workqueue.h: add Android ABI padding to some structures
Try to mitigate potential future driver core api changes by adding a
padding to struct work_struct and struct delayed_work

Based on a change made to the RHEL/CENTOS 8 kernel.

Leaf changes summary: 129 artifacts changed
Changed leaf types summary: 129 leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

type 'struct work_struct' changed:
  type size changed from 256 to 384 (in bits)
  2 data member insertions:
    'u64 work_struct::android_kabi_reserved1', at offset 256 (in bits) at workqueue.h:110:1
    'u64 work_struct::android_kabi_reserved2', at offset 320 (in bits) at workqueue.h:111:1

type 'struct delayed_work' changed:
  type size changed from 704 to 960 (in bits)
  2 data member insertions:
    'u64 delayed_work::android_kabi_reserved1', at offset 832 (in bits) at workqueue.h:126:1
    'u64 delayed_work::android_kabi_reserved2', at offset 896 (in bits) at workqueue.h:127:1

Bug: 151154716
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I5492a13e2430c1a5775aec52518144b7aa4f3268
2020-03-26 14:56:22 +01:00
Matthias Maennich
8e901b0149 ANDROID: gki_defconfig: enabled UAPI header compile testing
To ensure UAPI headers will compile standalone and can (later) be
monitored for API/ABI stability, enable the feature accordingly.

That seams like an additional overhead at compile time, but runs
smoothly while we are waiting for the LTO link to finish :-)

Bug: 73298553
Signed-off-by: Matthias Maennich <maennich@google.com>
Change-Id: Iae4f67f430ee2a3000f9f035aa0cd4392e72460f
(cherry picked from commit 9465730798f95fc5a0f0916ef6bcdfc7a1e839e9)
2020-03-26 10:29:49 +00:00
Greg Kroah-Hartman
5b6494b7be ANDROID: GKI: fs.h: add Android ABI padding to some structures
Try to mitigate potential future driver core api changes by adding a
padding to a bunch of filesystem structures.

Based on a change made to the RHEL/CENTOS 8 kernel.

Leaf changes summary: 12 artifacts changed
Changed leaf types summary: 12 leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

'struct address_space at fs.h:445:1' changed:
  type size changed from 1280 to 1536 (in bits)
  4 data member insertions:
    'u64 address_space::android_kabi_reserved1', at offset 1280 (in bits) at fs.h:472:1
    'u64 address_space::android_kabi_reserved2', at offset 1344 (in bits) at fs.h:473:1
    'u64 address_space::android_kabi_reserved3', at offset 1408 (in bits) at fs.h:474:1
    'u64 address_space::android_kabi_reserved4', at offset 1472 (in bits) at fs.h:475:1

'struct address_space_operations at fs.h:362:1' changed:
  type size changed from 1344 to 1600 (in bits)
  4 data member insertions:
    'u64 address_space_operations::android_kabi_reserved1', at offset 1344 (in bits) at fs.h:412:1
    'u64 address_space_operations::android_kabi_reserved2', at offset 1408 (in bits) at fs.h:413:1
    'u64 address_space_operations::android_kabi_reserved3', at offset 1472 (in bits) at fs.h:414:1
    'u64 address_space_operations::android_kabi_reserved4', at offset 1536 (in bits) at fs.h:415:1

'struct block_device at fs.h:473:1' changed:
  type size changed from 1728 to 1984 (in bits)
  4 data member insertions:
    'u64 block_device::android_kabi_reserved1', at offset 1728 (in bits) at fs.h:521:1
    'u64 block_device::android_kabi_reserved2', at offset 1792 (in bits) at fs.h:522:1
    'u64 block_device::android_kabi_reserved3', at offset 1856 (in bits) at fs.h:523:1
    'u64 block_device::android_kabi_reserved4', at offset 1920 (in bits) at fs.h:524:1

'struct file_lock at fs.h:1080:1' changed:
  type size changed from 1728 to 1984 (in bits)
  3 data member insertions:
    'list_head file_lock::android_reserved1', at offset 1728 (in bits) at fs.h:1142:1
    'u64 file_lock::android_kabi_reserved1', at offset 1856 (in bits) at fs.h:1143:1
    'u64 file_lock::android_kabi_reserved2', at offset 1920 (in bits) at fs.h:1144:1

'struct file_lock_operations at fs.h:1030:1' changed:
  type size changed from 128 to 256 (in bits)
  2 data member insertions:
    'u64 file_lock_operations::android_kabi_reserved1', at offset 128 (in bits) at fs.h:1053:1
    'u64 file_lock_operations::android_kabi_reserved2', at offset 192 (in bits) at fs.h:1054:1

'struct file_operations at fs.h:1843:1' changed:
  type size changed from 2048 to 2304 (in bits)
  4 data member insertions:
    'u64 file_operations::android_kabi_reserved1', at offset 2048 (in bits) at fs.h:1918:1
    'u64 file_operations::android_kabi_reserved2', at offset 2112 (in bits) at fs.h:1919:1
    'u64 file_operations::android_kabi_reserved3', at offset 2176 (in bits) at fs.h:1920:1
    'u64 file_operations::android_kabi_reserved4', at offset 2240 (in bits) at fs.h:1921:1

'struct file_system_type at fs.h:2245:1' changed:
  type size changed from 640 to 896 (in bits)
  4 data member insertions:
    'u64 file_system_type::android_kabi_reserved1', at offset 640 (in bits) at fs.h:2322:1
    'u64 file_system_type::android_kabi_reserved2', at offset 704 (in bits) at fs.h:2323:1
    'u64 file_system_type::android_kabi_reserved3', at offset 768 (in bits) at fs.h:2324:1
    'u64 file_system_type::android_kabi_reserved4', at offset 832 (in bits) at fs.h:2325:1

'struct inode at fs.h:628:1' changed:
  type size changed from 4800 to 5184 (in bits)
  2 data member insertions:
    'u64 inode::android_kabi_reserved1', at offset 5056 (in bits) at fs.h:756:1
    'u64 inode::android_kabi_reserved2', at offset 5120 (in bits) at fs.h:757:1

'struct inode_operations at fs.h:1885:1' changed:
  type size changed from 1536 to 2048 (in bits)
  4 data member insertions:
    'u64 inode_operations::android_kabi_reserved1', at offset 1472 (in bits) at fs.h:1955:1
    'u64 inode_operations::android_kabi_reserved2', at offset 1536 (in bits) at fs.h:1956:1
    'u64 inode_operations::android_kabi_reserved3', at offset 1600 (in bits) at fs.h:1957:1
    'u64 inode_operations::android_kabi_reserved4', at offset 1664 (in bits) at fs.h:1958:1

'struct lock_manager_operations at fs.h:1035:1' changed:
  type size changed from 448 to 576 (in bits)
  2 data member insertions:
    'u64 lock_manager_operations::android_kabi_reserved1', at offset 448 (in bits) at fs.h:1066:1
    'u64 lock_manager_operations::android_kabi_reserved2', at offset 512 (in bits) at fs.h:1067:1

'struct super_block at fs.h:1431:1' changed:
  type size changed from 11776 to 12288 (in bits)
  4 data member insertions:
    'u64 super_block::android_kabi_reserved1', at offset 11648 (in bits) at fs.h:1592:1
    'u64 super_block::android_kabi_reserved2', at offset 11712 (in bits) at fs.h:1593:1
    'u64 super_block::android_kabi_reserved3', at offset 11776 (in bits) at fs.h:1594:1
    'u64 super_block::android_kabi_reserved4', at offset 11840 (in bits) at fs.h:1595:1

'struct super_operations at fs.h:1966:1' changed:
  type size changed from 1920 to 2176 (in bits)
  4 data member insertions:
    'u64 super_operations::android_kabi_reserved1', at offset 1920 (in bits) at fs.h:2048:1
    'u64 super_operations::android_kabi_reserved2', at offset 1984 (in bits) at fs.h:2049:1
    'u64 super_operations::android_kabi_reserved3', at offset 2048 (in bits) at fs.h:2050:1
    'u64 super_operations::android_kabi_reserved4', at offset 2112 (in bits) at fs.h:2051:1

Bug: 151154716
Change-Id: Ida6d98d30f292c980ab07e0250fec5268c4c87ed
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2020-03-25 18:20:02 +01:00
Seungchul Kim
d568dedb8b FROMLIST: media: v4l2-fh: define v4l2_fh struct regardless of condition
v4l2_fh struct define differently by CONFIG_V4L2_MEM2MEM_DEV.
If some vendors use CONFIG_V4L2_MEM2MEM_DEV by module,
it can make the mismatch of v4l2_fh sturct.

By the mismatch, the following error occurs.
===============================
[    7.533506] v4l2_mem2mem: disagrees about version of symbol video_devdata
[    7.533594] v4l2_mem2mem: Unknown symbol video_devdata (err -22)
[    7.535319] v4l2_mem2mem: disagrees about version of symbol v4l2_event_pending
[    7.542532] v4l2_mem2mem: Unknown symbol v4l2_event_pending (err -22)
===============================

So v4l2_fh struct is modified to does not have dependency
for CONFIG_V4L2_MEM2MEM_DEV.

Bug: 151399858
Link: https://lore.kernel.org/linux-media/000601d600bb$0e2d4320$2a87c960$@samsung.com/T/#u

Change-Id: I6481516d5197988e800853a491474b374ed61d36
Signed-off-by: Seungchul Kim <sc377.kim@samsung.com>
2020-03-25 16:22:50 +00:00
Greg Kroah-Hartman
6d164dd847 ANDROID: update ABI for 5.4.28
Leaf changes summary: 1 artifact changed
Changed leaf types summary: 1 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

'struct inode at fs.h:628:1' changed:
  type size changed from 4736 to 4800 (in bits)
  1 data member insertion:
    'atomic64_t inode::i_sequence', at offset 2688 (in bits) at fs.h:701:1
  there are data member changes:
  861 impacted interfaces:

Change-Id: I58496998ce4fa926345882aa0ec89a7c029575b9
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2020-03-25 15:14:01 +00:00
Greg Kroah-Hartman
2341be6d9d This is the 5.4.28 stable release
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl57B4gACgkQONu9yGCS
 aT6KWQ//ToF4D+fDl1Muf4xuT83HnXe1yA1XFlyC54ZmEaxGFnFMSAgAvitBR7HC
 GEczXlvYbbVJl646ynTmX/LFz2d+V0i2zGv2QKN3xfd8GtDrAq/s+Ffhneaskk1k
 gKkIUzOyBq0nEAq5vXbCT4LbQDYGLw8BxxvurLim/YywSy5sfnw+hKkYE7cVVSOa
 rTIdt5qnuL4pxD8VeCAakoU6SajoxfFqS8pX79LC1UPY+++OaVcJjyJvM4APw0Kr
 e2E1BaeZxxCyY57pQY2oqhjG3cCfIcmfln19JRzMCVNo9+J3MEjZI5EUqP/Zcjwz
 1V5FHqDmqMGfA9cn+CexDk79bTKW5+YOyYMEG2RJjV5alWJtvv3Wj6dRPVPpBhnJ
 O627IuIVGMsHuiEbjziKczaTtYYU5GTpJF+7COH0Jnud0q1w3/RjaJXspnb2Yozh
 L9BFqc4aonD+AyW2NXTxuuvc3hnD2YSVgLectm7LF/TbM2YFJVu4tounelFsGG6I
 CPH2VF0Tn+yNR2iWf8igvopvYPCjv+QFGXU6kFGxQxLQFTnXHqoO2sPF4awXx7Hv
 XF8LrJzPwissX5BbPyhUSIl0FEcmQi6UzSN1/6fpxVq+092OGVacMWpZvwqjUOV/
 3k/OrmcYsu7i2UUbms47YHAK0PRkL2ogKgxgcSO4aNZ7MfkXkm8=
 =kp1m
 -----END PGP SIGNATURE-----

Merge 5.4.28 into android-5.4

Changes in 5.4.28
	locks: fix a potential use-after-free problem when wakeup a waiter
	locks: reinstate locks_delete_block optimization
	spi: spi-omap2-mcspi: Support probe deferral for DMA channels
	drm/mediatek: Find the cursor plane instead of hard coding it
	phy: ti: gmii-sel: fix set of copy-paste errors
	phy: ti: gmii-sel: do not fail in case of gmii
	ARM: dts: dra7-l4: mark timer13-16 as pwm capable
	spi: qup: call spi_qup_pm_resume_runtime before suspending
	powerpc: Include .BTF section
	cifs: fix potential mismatch of UNC paths
	cifs: add missing mount option to /proc/mounts
	ARM: dts: dra7: Add "dma-ranges" property to PCIe RC DT nodes
	spi: pxa2xx: Add CS control clock quirk
	spi/zynqmp: remove entry that causes a cs glitch
	drm/exynos: dsi: propagate error value and silence meaningless warning
	drm/exynos: dsi: fix workaround for the legacy clock name
	drm/exynos: hdmi: don't leak enable HDMI_EN regulator if probe fails
	drivers/perf: fsl_imx8_ddr: Correct the CLEAR bit definition
	drivers/perf: arm_pmu_acpi: Fix incorrect checking of gicc pointer
	altera-stapl: altera_get_note: prevent write beyond end of 'key'
	dm bio record: save/restore bi_end_io and bi_integrity
	dm integrity: use dm_bio_record and dm_bio_restore
	riscv: avoid the PIC offset of static percpu data in module beyond 2G limits
	ASoC: stm32: sai: manage rebind issue
	spi: spi_register_controller(): free bus id on error paths
	riscv: Force flat memory model with no-mmu
	riscv: Fix range looking for kernel image memblock
	drm/amdgpu: clean wptr on wb when gpu recovery
	drm/amd/display: Clear link settings on MST disable connector
	drm/amd/display: fix dcc swath size calculations on dcn1
	xenbus: req->body should be updated before req->state
	xenbus: req->err should be updated before req->state
	block, bfq: fix overwrite of bfq_group pointer in bfq_find_set_group()
	parse-maintainers: Mark as executable
	binderfs: use refcount for binder control devices too
	Revert "drm/fbdev: Fallback to non tiled mode if all tiles not present"
	USB: Disable LPM on WD19's Realtek Hub
	usb: quirks: add NO_LPM quirk for RTL8153 based ethernet adapters
	USB: serial: option: add ME910G1 ECM composition 0x110b
	usb: host: xhci-plat: add a shutdown
	USB: serial: pl2303: add device-id for HP LD381
	usb: xhci: apply XHCI_SUSPEND_DELAY to AMD XHCI controller 1022:145c
	usb: typec: ucsi: displayport: Fix NULL pointer dereference
	usb: typec: ucsi: displayport: Fix a potential race during registration
	USB: cdc-acm: fix close_delay and closing_wait units in TIOCSSERIAL
	USB: cdc-acm: fix rounding error in TIOCSSERIAL
	ALSA: line6: Fix endless MIDI read loop
	ALSA: hda/realtek - Enable headset mic of Acer X2660G with ALC662
	ALSA: hda/realtek - Enable the headset of Acer N50-600 with ALC662
	ALSA: seq: virmidi: Fix running status after receiving sysex
	ALSA: seq: oss: Fix running status after receiving sysex
	ALSA: pcm: oss: Avoid plugin buffer overflow
	ALSA: pcm: oss: Remove WARNING from snd_pcm_plug_alloc() checks
	tty: fix compat TIOCGSERIAL leaking uninitialized memory
	tty: fix compat TIOCGSERIAL checking wrong function ptr
	iio: chemical: sps30: fix missing triggered buffer dependency
	iio: st_sensors: remap SMO8840 to LIS2DH12
	iio: trigger: stm32-timer: disable master mode when stopping
	iio: accel: adxl372: Set iio_chan BE
	iio: magnetometer: ak8974: Fix negative raw values in sysfs
	iio: adc: stm32-dfsdm: fix sleep in atomic context
	iio: adc: at91-sama5d2_adc: fix differential channels in triggered mode
	iio: light: vcnl4000: update sampling periods for vcnl4200
	iio: light: vcnl4000: update sampling periods for vcnl4040
	mmc: rtsx_pci: Fix support for speed-modes that relies on tuning
	mmc: sdhci-of-at91: fix cd-gpios for SAMA5D2
	mmc: sdhci-cadence: set SDHCI_QUIRK2_PRESET_VALUE_BROKEN for UniPhier
	CIFS: fiemap: do not return EINVAL if get nothing
	kbuild: Disable -Wpointer-to-enum-cast
	staging: rtl8188eu: Add device id for MERCUSYS MW150US v2
	staging: greybus: loopback_test: fix poll-mask build breakage
	staging/speakup: fix get_word non-space look-ahead
	intel_th: msu: Fix the unexpected state warning
	intel_th: Fix user-visible error codes
	intel_th: pci: Add Elkhart Lake CPU support
	modpost: move the namespace field in Module.symvers last
	rtc: max8907: add missing select REGMAP_IRQ
	arm64: compat: Fix syscall number of compat_clock_getres
	xhci: Do not open code __print_symbolic() in xhci trace events
	btrfs: fix log context list corruption after rename whiteout error
	drm/amd/amdgpu: Fix GPR read from debugfs (v2)
	drm/lease: fix WARNING in idr_destroy
	stm class: sys-t: Fix the use of time_after()
	memcg: fix NULL pointer dereference in __mem_cgroup_usage_unregister_event
	mm, memcg: fix corruption on 64-bit divisor in memory.high throttling
	mm, memcg: throttle allocators based on ancestral memory.high
	mm/hotplug: fix hot remove failure in SPARSEMEM|!VMEMMAP case
	mm: do not allow MADV_PAGEOUT for CoW pages
	epoll: fix possible lost wakeup on epoll_ctl() path
	mm: slub: be more careful about the double cmpxchg of freelist
	mm, slub: prevent kmalloc_node crashes and memory leaks
	page-flags: fix a crash at SetPageError(THP_SWAP)
	x86/mm: split vmalloc_sync_all()
	futex: Fix inode life-time issue
	futex: Unbreak futex hashing
	ALSA: hda/realtek: Fix pop noise on ALC225
	arm64: smp: fix smp_send_stop() behaviour
	arm64: smp: fix crash_smp_send_stop() behaviour
	nvmet-tcp: set MSG_MORE only if we actually have more to send
	drm/bridge: dw-hdmi: fix AVI frame colorimetry
	staging: greybus: loopback_test: fix potential path truncation
	staging: greybus: loopback_test: fix potential path truncations
	Linux 5.4.28

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I5d9d15d6236d8ab7374205c6ceda7efa7a9abb70
2020-03-25 16:12:11 +01:00
Sami Tolvanen
032407e4d6 ANDROID: kbuild: do not merge .section..* into .section in modules
Sections with double dots, e.g. .data..percpu are named intentionally
to avoid matching rules that apply to .section.*. Change module section
merging rules to skip these.

Bug: 151981957
Change-Id: I23787aa40d69da1c6ca622a5f111704d2459e163
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2020-03-25 14:58:16 +00:00
Greg Kroah-Hartman
462afcd6e7 Linux 5.4.28 2020-03-25 08:26:00 +01:00
Johan Hovold
7b2cdbd67f staging: greybus: loopback_test: fix potential path truncations
commit ae62cf5eb2792d9a818c2d93728ed92119357017 upstream.

Newer GCC warns about possible truncations of two generated path names as
we're concatenating the configurable sysfs and debugfs path prefixes
with a filename and placing the results in buffers of the same size as
the maximum length of the prefixes.

	snprintf(d->name, MAX_STR_LEN, "gb_loopback%u", dev_id);

	snprintf(d->sysfs_entry, MAX_SYSFS_PATH, "%s%s/",
		 t->sysfs_prefix, d->name);

	snprintf(d->debugfs_entry, MAX_SYSFS_PATH, "%sraw_latency_%s",
		 t->debugfs_prefix, d->name);

Fix this by separating the maximum path length from the maximum prefix
length and reducing the latter enough to fit the generated strings.

Note that we also need to reduce the device-name buffer size as GCC
isn't smart enough to figure out that we ever only used MAX_STR_LEN
bytes of it.

Fixes: 6b0658f687 ("greybus: tools: Add tools directory to greybus repo and add loopback")
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20200312110151.22028-4-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Johan Hovold
8e79f440ed staging: greybus: loopback_test: fix potential path truncation
commit f16023834863932f95dfad13fac3fc47f77d2f29 upstream.

Newer GCC warns about a possible truncation of a generated sysfs path
name as we're concatenating a directory path with a file name and
placing the result in a buffer that is half the size of the maximum
length of the directory path (which is user controlled).

loopback_test.c: In function 'open_poll_files':
loopback_test.c:651:31: warning: '%s' directive output may be truncated writing up to 511 bytes into a region of size 255 [-Wformat-truncation=]
  651 |   snprintf(buf, sizeof(buf), "%s%s", dev->sysfs_entry, "iteration_count");
      |                               ^~
loopback_test.c:651:3: note: 'snprintf' output between 16 and 527 bytes into a destination of size 255
  651 |   snprintf(buf, sizeof(buf), "%s%s", dev->sysfs_entry, "iteration_count");
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix this by making sure the buffer is large enough the concatenated
strings.

Fixes: 6b0658f687 ("greybus: tools: Add tools directory to greybus repo and add loopback")
Fixes: 9250c0ee26 ("greybus: Loopback_test: use poll instead of inotify")
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20200312110151.22028-3-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Jernej Skrabec
58ffe6b024 drm/bridge: dw-hdmi: fix AVI frame colorimetry
commit e8dca30f7118461d47e1c3510d0e31b277439151 upstream.

CTA-861-F explicitly states that for RGB colorspace colorimetry should
be set to "none". Fix that.

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Fixes: def23aa7e9 ("drm: bridge: dw-hdmi: Switch to V4L bus format and encodings")
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20200304232512.51616-2-jernej.skrabec@siol.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Sagi Grimberg
c965a0299c nvmet-tcp: set MSG_MORE only if we actually have more to send
commit 98fd5c723730f560e5bea919a64ac5b83d45eb72 upstream.

When we send PDU data, we want to optimize the tcp stack
operation if we have more data to send. So when we set MSG_MORE
when:
- We have more fragments coming in the batch, or
- We have a more data to send in this PDU
- We don't have a data digest trailer
- We optimize with the SUCCESS flag and omit the NVMe completion
  (used if sq_head pointer update is disabled)

This addresses a regression in QD=1 with SUCCESS flag optimization
as we unconditionally set MSG_MORE when we didn't actually have
more data to send.

Fixes: 7058329538 ("nvmet-tcp: implement C2HData SUCCESS optimization")
Reported-by: Mark Wunderlich <mark.wunderlich@intel.com>
Tested-by: Mark Wunderlich <mark.wunderlich@intel.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Cristian Marussi
d3eb4daa33 arm64: smp: fix crash_smp_send_stop() behaviour
commit f50b7dacccbab2b9e3ef18f52a6dcc18ed2050b9 upstream.

On a system configured to trigger a crash_kexec() reboot, when only one CPU
is online and another CPU panics while starting-up, crash_smp_send_stop()
will fail to send any STOP message to the other already online core,
resulting in fail to freeze and registers not properly saved.

Moreover even if the proper messages are sent (case CPUs > 2)
it will similarly fail to account for the booting CPU when executing
the final stop wait-loop, so potentially resulting in some CPU not
been waited for shutdown before rebooting.

A tangible effect of this behaviour can be observed when, after a panic
with kexec enabled and loaded, on the following reboot triggered by kexec,
the cpu that could not be successfully stopped fails to come back online:

[  362.291022] ------------[ cut here ]------------
[  362.291525] kernel BUG at arch/arm64/kernel/cpufeature.c:886!
[  362.292023] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
[  362.292400] Modules linked in:
[  362.292970] CPU: 3 PID: 0 Comm: swapper/3 Kdump: loaded Not tainted 5.6.0-rc4-00003-gc780b890948a #105
[  362.293136] Hardware name: Foundation-v8A (DT)
[  362.293382] pstate: 200001c5 (nzCv dAIF -PAN -UAO)
[  362.294063] pc : has_cpuid_feature+0xf0/0x348
[  362.294177] lr : verify_local_elf_hwcaps+0x84/0xe8
[  362.294280] sp : ffff800011b1bf60
[  362.294362] x29: ffff800011b1bf60 x28: 0000000000000000
[  362.294534] x27: 0000000000000000 x26: 0000000000000000
[  362.294631] x25: 0000000000000000 x24: ffff80001189a25c
[  362.294718] x23: 0000000000000000 x22: 0000000000000000
[  362.294803] x21: ffff8000114aa018 x20: ffff800011156a00
[  362.294897] x19: ffff800010c944a0 x18: 0000000000000004
[  362.294987] x17: 0000000000000000 x16: 0000000000000000
[  362.295073] x15: 00004e53b831ae3c x14: 00004e53b831ae3c
[  362.295165] x13: 0000000000000384 x12: 0000000000000000
[  362.295251] x11: 0000000000000000 x10: 00400032b5503510
[  362.295334] x9 : 0000000000000000 x8 : ffff800010c7e204
[  362.295426] x7 : 00000000410fd0f0 x6 : 0000000000000001
[  362.295508] x5 : 00000000410fd0f0 x4 : 0000000000000000
[  362.295592] x3 : 0000000000000000 x2 : ffff8000100939d8
[  362.295683] x1 : 0000000000180420 x0 : 0000000000180480
[  362.296011] Call trace:
[  362.296257]  has_cpuid_feature+0xf0/0x348
[  362.296350]  verify_local_elf_hwcaps+0x84/0xe8
[  362.296424]  check_local_cpu_capabilities+0x44/0x128
[  362.296497]  secondary_start_kernel+0xf4/0x188
[  362.296998] Code: 52805001 72a00301 6b01001f 54000ec0 (d4210000)
[  362.298652] SMP: stopping secondary CPUs
[  362.300615] Starting crashdump kernel...
[  362.301168] Bye!
[    0.000000] Booting Linux on physical CPU 0x0000000003 [0x410fd0f0]
[    0.000000] Linux version 5.6.0-rc4-00003-gc780b890948a (crimar01@e120937-lin) (gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))) #105 SMP PREEMPT Fri Mar 6 17:00:42 GMT 2020
[    0.000000] Machine model: Foundation-v8A
[    0.000000] earlycon: pl11 at MMIO 0x000000001c090000 (options '')
[    0.000000] printk: bootconsole [pl11] enabled
.....
[    0.138024] rcu: Hierarchical SRCU implementation.
[    0.153472] its@2f020000: unable to locate ITS domain
[    0.154078] its@2f020000: Unable to locate ITS domain
[    0.157541] EFI services will not be available.
[    0.175395] smp: Bringing up secondary CPUs ...
[    0.209182] psci: failed to boot CPU1 (-22)
[    0.209377] CPU1: failed to boot: -22
[    0.274598] Detected PIPT I-cache on CPU2
[    0.278707] GICv3: CPU2: found redistributor 1 region 0:0x000000002f120000
[    0.285212] CPU2: Booted secondary processor 0x0000000001 [0x410fd0f0]
[    0.369053] Detected PIPT I-cache on CPU3
[    0.372947] GICv3: CPU3: found redistributor 2 region 0:0x000000002f140000
[    0.378664] CPU3: Booted secondary processor 0x0000000002 [0x410fd0f0]
[    0.401707] smp: Brought up 1 node, 3 CPUs
[    0.404057] SMP: Total of 3 processors activated.

Make crash_smp_send_stop() account also for the online status of the
calling CPU while evaluating how many CPUs are effectively online: this way
the right number of STOPs is sent and all other stopped-cores's registers
are properly saved.

Fixes: 78fd584cde ("arm64: kdump: implement machine_crash_shutdown()")
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Cristian Marussi
6080e0a9d1 arm64: smp: fix smp_send_stop() behaviour
commit d0bab0c39e32d39a8c5cddca72e5b4a3059fe050 upstream.

On a system with only one CPU online, when another one CPU panics while
starting-up, smp_send_stop() will fail to send any STOP message to the
other already online core, resulting in a system still responsive and
alive at the end of the panic procedure.

[  186.700083] CPU3: shutdown
[  187.075462] CPU2: shutdown
[  187.162869] CPU1: shutdown
[  188.689998] ------------[ cut here ]------------
[  188.691645] kernel BUG at arch/arm64/kernel/cpufeature.c:886!
[  188.692079] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
[  188.692444] Modules linked in:
[  188.693031] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 5.6.0-rc4-00001-g338d25c35a98 #104
[  188.693175] Hardware name: Foundation-v8A (DT)
[  188.693492] pstate: 200001c5 (nzCv dAIF -PAN -UAO)
[  188.694183] pc : has_cpuid_feature+0xf0/0x348
[  188.694311] lr : verify_local_elf_hwcaps+0x84/0xe8
[  188.694410] sp : ffff800011b1bf60
[  188.694536] x29: ffff800011b1bf60 x28: 0000000000000000
[  188.694707] x27: 0000000000000000 x26: 0000000000000000
[  188.694801] x25: 0000000000000000 x24: ffff80001189a25c
[  188.694905] x23: 0000000000000000 x22: 0000000000000000
[  188.694996] x21: ffff8000114aa018 x20: ffff800011156a38
[  188.695089] x19: ffff800010c944a0 x18: 0000000000000004
[  188.695187] x17: 0000000000000000 x16: 0000000000000000
[  188.695280] x15: 0000249dbde5431e x14: 0262cbe497efa1fa
[  188.695371] x13: 0000000000000002 x12: 0000000000002592
[  188.695472] x11: 0000000000000080 x10: 00400032b5503510
[  188.695572] x9 : 0000000000000000 x8 : ffff800010c80204
[  188.695659] x7 : 00000000410fd0f0 x6 : 0000000000000001
[  188.695750] x5 : 00000000410fd0f0 x4 : 0000000000000000
[  188.695836] x3 : 0000000000000000 x2 : ffff8000100939d8
[  188.695919] x1 : 0000000000180420 x0 : 0000000000180480
[  188.696253] Call trace:
[  188.696410]  has_cpuid_feature+0xf0/0x348
[  188.696504]  verify_local_elf_hwcaps+0x84/0xe8
[  188.696591]  check_local_cpu_capabilities+0x44/0x128
[  188.696666]  secondary_start_kernel+0xf4/0x188
[  188.697150] Code: 52805001 72a00301 6b01001f 54000ec0 (d4210000)
[  188.698639] ---[ end trace 3f12ca47652f7b72 ]---
[  188.699160] Kernel panic - not syncing: Attempted to kill the idle task!
[  188.699546] Kernel Offset: disabled
[  188.699828] CPU features: 0x00004,20c02008
[  188.700012] Memory Limit: none
[  188.700538] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---

[root@arch ~]# echo Helo
Helo
[root@arch ~]# cat /proc/cpuinfo | grep proce
processor	: 0

Make smp_send_stop() account also for the online status of the calling CPU
while evaluating how many CPUs are effectively online: this way, the right
number of STOPs is sent, so enforcing a proper freeze of the system at the
end of panic even under the above conditions.

Fixes: 08e875c16a ("arm64: SMP support")
Reported-by: Dave Martin <Dave.Martin@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Kai-Heng Feng
c61417fef9 ALSA: hda/realtek: Fix pop noise on ALC225
commit 3b36b13d5e69d6f51ff1c55d1b404a74646c9757 upstream.

Commit 317d931392 ("ALSA: hda/realtek - Set default power save node to
0") makes the ALC225 have pop noise on S3 resume and cold boot.

So partially revert this commit for ALC225 to fix the regression.

Fixes: 317d931392 ("ALSA: hda/realtek - Set default power save node to 0")
BugLink: https://bugs.launchpad.net/bugs/1866357
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Link: https://lore.kernel.org/r/20200311061328.17614-1-kai.heng.feng@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:59 +01:00
Thomas Gleixner
163489b643 futex: Unbreak futex hashing
commit 8d67743653dce5a0e7aa500fcccb237cde7ad88e upstream.

The recent futex inode life time fix changed the ordering of the futex key
union struct members, but forgot to adjust the hash function accordingly,

As a result the hashing omits the leading 64bit and even hashes beyond the
futex key causing a bad hash distribution which led to a ~100% performance
regression.

Hand in the futex key pointer instead of a random struct member and make
the size calculation based of the struct offset.

Fixes: 8019ad13ef7f ("futex: Fix inode life-time issue")
Reported-by: Rong Chen <rong.a.chen@intel.com>
Decoded-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Rong Chen <rong.a.chen@intel.com>
Link: https://lkml.kernel.org/r/87h7yy90ve.fsf@nanos.tec.linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:58 +01:00
Peter Zijlstra
553d46b07d futex: Fix inode life-time issue
commit 8019ad13ef7f64be44d4f892af9c840179009254 upstream.

As reported by Jann, ihold() does not in fact guarantee inode
persistence. And instead of making it so, replace the usage of inode
pointers with a per boot, machine wide, unique inode identifier.

This sequence number is global, but shared (file backed) futexes are
rare enough that this should not become a performance issue.

Reported-by: Jann Horn <jannh@google.com>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:58 +01:00
Joerg Roedel
66f28e1105 x86/mm: split vmalloc_sync_all()
commit 763802b53a427ed3cbd419dbba255c414fdd9e7c upstream.

Commit 3f8fd02b1b ("mm/vmalloc: Sync unmappings in
__purge_vmap_area_lazy()") introduced a call to vmalloc_sync_all() in
the vunmap() code-path.  While this change was necessary to maintain
correctness on x86-32-pae kernels, it also adds additional cycles for
architectures that don't need it.

Specifically on x86-64 with CONFIG_VMAP_STACK=y some people reported
severe performance regressions in micro-benchmarks because it now also
calls the x86-64 implementation of vmalloc_sync_all() on vunmap().  But
the vmalloc_sync_all() implementation on x86-64 is only needed for newly
created mappings.

To avoid the unnecessary work on x86-64 and to gain the performance
back, split up vmalloc_sync_all() into two functions:

	* vmalloc_sync_mappings(), and
	* vmalloc_sync_unmappings()

Most call-sites to vmalloc_sync_all() only care about new mappings being
synchronized.  The only exception is the new call-site added in the
above mentioned commit.

Shile Zhang directed us to a report of an 80% regression in reaim
throughput.

Fixes: 3f8fd02b1b ("mm/vmalloc: Sync unmappings in __purge_vmap_area_lazy()")
Reported-by: kernel test robot <oliver.sang@intel.com>
Reported-by: Shile Zhang <shile.zhang@linux.alibaba.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Tested-by: Borislav Petkov <bp@suse.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>	[GHES]
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/20191009124418.8286-1-joro@8bytes.org
Link: https://lists.01.org/hyperkitty/list/lkp@lists.01.org/thread/4D3JPPHBNOSPFK2KEPC6KGKS6J25AIDB/
Link: http://lkml.kernel.org/r/20191113095530.228959-1-shile.zhang@linux.alibaba.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:58 +01:00
Qian Cai
9dfed456e1 page-flags: fix a crash at SetPageError(THP_SWAP)
commit d72520ad004a8ce18a6ba6cde317f0081b27365a upstream.

Commit bd4c82c22c ("mm, THP, swap: delay splitting THP after swapped
out") supported writing THP to a swap device but forgot to upgrade an
older commit df8c94d13c ("page-flags: define behavior of FS/IO-related
flags on compound pages") which could trigger a crash during THP
swapping out with DEBUG_VM_PGFLAGS=y,

  kernel BUG at include/linux/page-flags.h:317!

  page dumped because: VM_BUG_ON_PAGE(1 && PageCompound(page))
  page:fffff3b2ec3a8000 refcount:512 mapcount:0 mapping:000000009eb0338c index:0x7f6e58200 head:fffff3b2ec3a8000 order:9 compound_mapcount:0 compound_pincount:0
  anon flags: 0x45fffe0000d8454(uptodate|lru|workingset|owner_priv_1|writeback|head|reclaim|swapbacked)

  end_swap_bio_write()
    SetPageError(page)
      VM_BUG_ON_PAGE(1 && PageCompound(page))

  <IRQ>
  bio_endio+0x297/0x560
  dec_pending+0x218/0x430 [dm_mod]
  clone_endio+0xe4/0x2c0 [dm_mod]
  bio_endio+0x297/0x560
  blk_update_request+0x201/0x920
  scsi_end_request+0x6b/0x4b0
  scsi_io_completion+0x509/0x7e0
  scsi_finish_command+0x1ed/0x2a0
  scsi_softirq_done+0x1c9/0x1d0
  __blk_mqnterrupt+0xf/0x20
  </IRQ>

Fix by checking PF_NO_TAIL in those places instead.

Fixes: bd4c82c22c ("mm, THP, swap: delay splitting THP after swapped out")
Signed-off-by: Qian Cai <cai@lca.pw>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Acked-by: "Huang, Ying" <ying.huang@intel.com>
Acked-by: Rafael Aquini <aquini@redhat.com>
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/20200310235846.1319-1-cai@lca.pw
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:58 +01:00
Vlastimil Babka
32991c960d mm, slub: prevent kmalloc_node crashes and memory leaks
commit 0715e6c516f106ed553828a671d30ad9a3431536 upstream.

Sachin reports [1] a crash in SLUB __slab_alloc():

  BUG: Kernel NULL pointer dereference on read at 0x000073b0
  Faulting instruction address: 0xc0000000003d55f4
  Oops: Kernel access of bad area, sig: 11 [#1]
  LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
  Modules linked in:
  CPU: 19 PID: 1 Comm: systemd Not tainted 5.6.0-rc2-next-20200218-autotest #1
  NIP:  c0000000003d55f4 LR: c0000000003d5b94 CTR: 0000000000000000
  REGS: c0000008b37836d0 TRAP: 0300   Not tainted  (5.6.0-rc2-next-20200218-autotest)
  MSR:  8000000000009033 <SF,EE,ME,IR,DR,RI,LE>  CR: 24004844  XER: 00000000
  CFAR: c00000000000dec4 DAR: 00000000000073b0 DSISR: 40000000 IRQMASK: 1
  GPR00: c0000000003d5b94 c0000008b3783960 c00000000155d400 c0000008b301f500
  GPR04: 0000000000000dc0 0000000000000002 c0000000003443d8 c0000008bb398620
  GPR08: 00000008ba2f0000 0000000000000001 0000000000000000 0000000000000000
  GPR12: 0000000024004844 c00000001ec52a00 0000000000000000 0000000000000000
  GPR16: c0000008a1b20048 c000000001595898 c000000001750c18 0000000000000002
  GPR20: c000000001750c28 c000000001624470 0000000fffffffe0 5deadbeef0000122
  GPR24: 0000000000000001 0000000000000dc0 0000000000000002 c0000000003443d8
  GPR28: c0000008b301f500 c0000008bb398620 0000000000000000 c00c000002287180
  NIP ___slab_alloc+0x1f4/0x760
  LR __slab_alloc+0x34/0x60
  Call Trace:
    ___slab_alloc+0x334/0x760 (unreliable)
    __slab_alloc+0x34/0x60
    __kmalloc_node+0x110/0x490
    kvmalloc_node+0x58/0x110
    mem_cgroup_css_online+0x108/0x270
    online_css+0x48/0xd0
    cgroup_apply_control_enable+0x2ec/0x4d0
    cgroup_mkdir+0x228/0x5f0
    kernfs_iop_mkdir+0x90/0xf0
    vfs_mkdir+0x110/0x230
    do_mkdirat+0xb0/0x1a0
    system_call+0x5c/0x68

This is a PowerPC platform with following NUMA topology:

  available: 2 nodes (0-1)
  node 0 cpus:
  node 0 size: 0 MB
  node 0 free: 0 MB
  node 1 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  node 1 size: 35247 MB
  node 1 free: 30907 MB
  node distances:
  node   0   1
    0:  10  40
    1:  40  10

  possible numa nodes: 0-31

This only happens with a mmotm patch "mm/memcontrol.c: allocate
shrinker_map on appropriate NUMA node" [2] which effectively calls
kmalloc_node for each possible node.  SLUB however only allocates
kmem_cache_node on online N_NORMAL_MEMORY nodes, and relies on
node_to_mem_node to return such valid node for other nodes since commit
a561ce00b0 ("slub: fall back to node_to_mem_node() node if allocating
on memoryless node").  This is however not true in this configuration
where the _node_numa_mem_ array is not initialized for nodes 0 and 2-31,
thus it contains zeroes and get_partial() ends up accessing
non-allocated kmem_cache_node.

A related issue was reported by Bharata (originally by Ramachandran) [3]
where a similar PowerPC configuration, but with mainline kernel without
patch [2] ends up allocating large amounts of pages by kmalloc-1k
kmalloc-512.  This seems to have the same underlying issue with
node_to_mem_node() not behaving as expected, and might probably also
lead to an infinite loop with CONFIG_SLUB_CPU_PARTIAL [4].

This patch should fix both issues by not relying on node_to_mem_node()
anymore and instead simply falling back to NUMA_NO_NODE, when
kmalloc_node(node) is attempted for a node that's not online, or has no
usable memory.  The "usable memory" condition is also changed from
node_present_pages() to N_NORMAL_MEMORY node state, as that is exactly
the condition that SLUB uses to allocate kmem_cache_node structures.
The check in get_partial() is removed completely, as the checks in
___slab_alloc() are now sufficient to prevent get_partial() being
reached with an invalid node.

[1] https://lore.kernel.org/linux-next/3381CD91-AB3D-4773-BA04-E7A072A63968@linux.vnet.ibm.com/
[2] https://lore.kernel.org/linux-mm/fff0e636-4c36-ed10-281c-8cdb0687c839@virtuozzo.com/
[3] https://lore.kernel.org/linux-mm/20200317092624.GB22538@in.ibm.com/
[4] https://lore.kernel.org/linux-mm/088b5996-faae-8a56-ef9c-5b567125ae54@suse.cz/

Fixes: a561ce00b0 ("slub: fall back to node_to_mem_node() node if allocating on memoryless node")
Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com>
Reported-by: PUVICHAKRAVARTHY RAMACHANDRAN <puvichakravarthy@in.ibm.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Tested-by: Sachin Sant <sachinp@linux.vnet.ibm.com>
Tested-by: Bharata B Rao <bharata@linux.ibm.com>
Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Christopher Lameter <cl@linux.com>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Kirill Tkhai <ktkhai@virtuozzo.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Nathan Lynch <nathanl@linux.ibm.com>
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/20200320115533.9604-1-vbabka@suse.cz
Debugged-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:58 +01:00
Linus Torvalds
6235157392 mm: slub: be more careful about the double cmpxchg of freelist
commit 5076190daded2197f62fe92cf69674488be44175 upstream.

This is just a cleanup addition to Jann's fix to properly update the
transaction ID for the slub slowpath in commit fd4d9c7d0c71 ("mm: slub:
add missing TID bump..").

The transaction ID is what protects us against any concurrent accesses,
but we should really also make sure to make the 'freelist' comparison
itself always use the same freelist value that we then used as the new
next free pointer.

Jann points out that if we do all of this carefully, we could skip the
transaction ID update for all the paths that only remove entries from
the lists, and only update the TID when adding entries (to avoid the ABA
issue with cmpxchg and list handling re-adding a previously seen value).

But this patch just does the "make sure to cmpxchg the same value we
used" rather than then try to be clever.

Acked-by: Jann Horn <jannh@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:57 +01:00
Roman Penyaev
8e709bbe41 epoll: fix possible lost wakeup on epoll_ctl() path
commit 1b53734bd0b2feed8e7761771b2e76fc9126ea0c upstream.

This fixes possible lost wakeup introduced by commit a218cc4914.
Originally modifications to ep->wq were serialized by ep->wq.lock, but
in commit a218cc4914 ("epoll: use rwlock in order to reduce
ep_poll_callback() contention") a new rw lock was introduced in order to
relax fd event path, i.e. callers of ep_poll_callback() function.

After the change ep_modify and ep_insert (both are called on epoll_ctl()
path) were switched to ep->lock, but ep_poll (epoll_wait) was using
ep->wq.lock on wqueue list modification.

The bug doesn't lead to any wqueue list corruptions, because wake up
path and list modifications were serialized by ep->wq.lock internally,
but actual waitqueue_active() check prior wake_up() call can be
reordered with modifications of ep ready list, thus wake up can be lost.

And yes, can be healed by explicit smp_mb():

  list_add_tail(&epi->rdlink, &ep->rdllist);
  smp_mb();
  if (waitqueue_active(&ep->wq))
	wake_up(&ep->wp);

But let's make it simple, thus current patch replaces ep->wq.lock with
the ep->lock for wqueue modifications, thus wake up path always observes
activeness of the wqueue correcty.

Fixes: a218cc4914 ("epoll: use rwlock in order to reduce ep_poll_callback() contention")
Reported-by: Max Neunhoeffer <max@arangodb.com>
Signed-off-by: Roman Penyaev <rpenyaev@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Tested-by: Max Neunhoeffer <max@arangodb.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Christopher Kohlhoff <chris.kohlhoff@clearpool.io>
Cc: Davidlohr Bueso <dbueso@suse.de>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Jes Sorensen <jes.sorensen@gmail.com>
Cc: <stable@vger.kernel.org>	[5.1+]
Link: http://lkml.kernel.org/r/20200214170211.561524-1-rpenyaev@suse.de
References: https://bugzilla.kernel.org/show_bug.cgi?id=205933
Bisected-by: Max Neunhoeffer <max@arangodb.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-03-25 08:25:57 +01:00