Commit graph

877,878 commits

Author SHA1 Message Date
Todd Kjos
2f7f6ce2cf ANDROID: gki_defconfig: disable KPROBES, update ABI
Security teams from Google and Qualcomm request disabling
due to "large attack vector".

Also update the abi definition required for this change:

Leaf changes summary: 3 artifacts changed
Changed leaf types summary: 3 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 module at module.h:348:1' changed:
  type size changed from 7168 to 6656 (in bits)
  2 data member deletions:
    'error_injection_entry* module::ei_funcs', at offset 6656 (in bits) at module.h:514:1

    'unsigned int module::num_ei_funcs', at offset 6720 (in bits) at module.h:515:1

  1309 impacted interfaces:
    function void* PDE_DATA(const inode*)
    function gendisk* __alloc_disk_node(int, int)
    function sk_buff* __cfg80211_alloc_event_skb(wiphy*, wireless_dev*, nl80211_commands, nl80211_attrs, unsigned int, int, int, gfp_t)
    function sk_buff* __cfg80211_alloc_reply_skb(wiphy*, nl80211_commands, nl80211_attrs, int)
    function class* __class_create(module*, const char*, lock_class_key*)
    function int __class_register(class*, lock_class_key*)
    function int __close_fd(files_struct*, unsigned int)
    function net_device* __dev_get_by_index(net*, int)
    function int __devm_iio_device_register(device*, iio_dev*, module*)
    function phy_provider* __devm_of_phy_provider_register(device*, device_node*, module*, void ()*)
    function regmap* __devm_regmap_init(device*, const regmap_bus*, void*, const regmap_config*, lock_class_key*, const char*)
    function regmap* __devm_regmap_init_i2c(i2c_client*, const regmap_config*, lock_class_key*, const char*)
    function regmap* __devm_regmap_init_mmio_clk(device*, const char*, void*, const regmap_config*, lock_class_key*, const char*)
    function resource* __devm_request_region(device*, resource*, resource_size_t, resource_size_t, const char*)
    function reset_control* __devm_reset_control_get(device*, const char*, int, bool, bool, bool)
    function void* __devres_alloc_node(dr_release_t, size_t, gfp_t, int, const char*)
    function void __drm_atomic_helper_crtc_destroy_state(drm_crtc_state*)
    function void __drm_atomic_helper_crtc_duplicate_state(drm_crtc*, drm_crtc_state*)
    function void __drm_atomic_helper_crtc_reset(drm_crtc*, drm_crtc_state*)
    function void __drm_atomic_helper_plane_destroy_state(drm_plane_state*)
    function void __drm_atomic_helper_plane_duplicate_state(drm_plane*, drm_plane_state*)
    function void __drm_atomic_helper_private_obj_duplicate_state(drm_private_obj*, drm_private_state*)
    function int __ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function int __hci_cmd_send(hci_dev*, u16, u32, void*)
    function sk_buff* __hci_cmd_sync(hci_dev*, u16, u32, void*, u32)
    function sk_buff* __hci_cmd_sync_ev(hci_dev*, u16, u32, void*, u8, u32)
    function int __hid_register_driver(hid_driver*, module*, const char*)
    function irq_domain* __irq_domain_add(fwnode_handle*, int, irq_hw_number_t, int, const irq_domain_ops*, void*)
    function int __mdiobus_register(mii_bus*, module*)
    function void __module_get(module*)
    function sk_buff* __napi_alloc_skb(napi_struct*, unsigned int, gfp_t)
    function void __napi_schedule(napi_struct*)
    function sk_buff* __netdev_alloc_skb(net_device*, unsigned int, gfp_t)
    function int __netif_set_xps_queue(net_device*, const unsigned long int*, u16, bool)
    function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*)
    function reset_control* __of_reset_control_get(device_node*, const char*, int, bool, bool, bool)
    function int __pci_register_driver(pci_driver*, module*, const char*)
    function int __platform_driver_register(platform_driver*, module*)
    function int __platform_register_drivers(platform_driver* const*, unsigned int, module*)
    function void __pm_relax(wakeup_source*)
    function void __pm_runtime_disable(device*, bool)
    function int __pm_runtime_idle(device*, int)
    function int __pm_runtime_resume(device*, int)
    function int __pm_runtime_set_status(device*, unsigned int)
    function int __pm_runtime_suspend(device*, int)
    function void __pm_runtime_use_autosuspend(device*, bool)
    function void __pm_stay_awake(wakeup_source*)
    function regmap* __regmap_init(device*, const regmap_bus*, void*, const regmap_config*, lock_class_key*, const char*)
    function int __rtc_register_device(module*, rtc_device*)
    function int __serdev_device_driver_register(serdev_device_driver*, module*)
    function bool __skb_flow_dissect(const net*, const sk_buff*, flow_dissector*, void*, void*, __be16, int, int, unsigned int)
    function int __spi_register_driver(module*, spi_driver*)
    function int __spmi_driver_register(spmi_driver*, module*)
    function tty_driver* __tty_alloc_driver(unsigned int, module*, unsigned long int)
    function int __tty_insert_flip_char(tty_port*, unsigned char, char)
    function usb_hcd* __usb_create_hcd(const hc_driver*, device*, device*, const char*, usb_hcd*)
    function unsigned long int _copy_from_iter(void*, unsigned long int, iov_iter*)
    function bool _copy_from_iter_full(void*, unsigned long int, iov_iter*)
    function unsigned long int _copy_to_iter(void*, unsigned long int, iov_iter*)
    function void _dev_emerg(const device*, const char*, ...)
    function void _dev_err(const device*, const char*, ...)
    function void _dev_info(const device*, const char*, ...)
    function void _dev_notice(const device*, const char*, ...)
    function void _dev_warn(const device*, const char*, ...)
    function net_device* alloc_etherdev_mqs(int, unsigned int, unsigned int)
    function net_device* alloc_netdev_mqs(int, const char*, unsigned char, void ()*, unsigned int, unsigned int)
    function bool arch_bpf_jit_check_func(const bpf_prog*)
    function bio* bio_alloc_bioset(unsigned int, unsigned int, bio_set*)
    function void bio_chain(bio*, bio*)
    function void bio_clone_blkg_association(bio*, bio*)
    function void blk_cleanup_queue(request_queue*)
    function void blk_execute_rq(request_queue*, gendisk*, request*, int)
    function request* blk_get_request(request_queue*, unsigned int, blk_mq_req_flags_t)
    function bool blk_mq_complete_request(request*)
    function void blk_mq_end_request(request*, unsigned char)
    function request_queue* blk_mq_init_queue(blk_mq_tag_set*)
    function void blk_mq_quiesce_queue(request_queue*)
    function void blk_mq_start_request(request*)
    function void blk_mq_start_stopped_hw_queues(request_queue*, bool)
    function void blk_mq_stop_hw_queue(blk_mq_hw_ctx*)
    function void blk_mq_unquiesce_queue(request_queue*)
    function void blk_put_request(request*)
    function void blk_queue_alignment_offset(request_queue*, unsigned int)
    function void blk_queue_bounce_limit(request_queue*, u64)
    function void blk_queue_flag_set(unsigned int, request_queue*)
    function void blk_queue_io_min(request_queue*, unsigned int)
    function void blk_queue_io_opt(request_queue*, unsigned int)
    function void blk_queue_logical_block_size(request_queue*, unsigned int)
    function void blk_queue_max_discard_sectors(request_queue*, unsigned int)
    function void blk_queue_max_discard_segments(request_queue*, unsigned short int)
    function void blk_queue_max_hw_sectors(request_queue*, unsigned int)
    function void blk_queue_max_segment_size(request_queue*, unsigned int)
    function void blk_queue_max_segments(request_queue*, unsigned short int)
    function void blk_queue_max_write_zeroes_sectors(request_queue*, unsigned int)
    function void blk_queue_physical_block_size(request_queue*, unsigned int)
    function void blk_queue_update_dma_alignment(request_queue*, int)
    function void blk_queue_write_cache(request_queue*, bool, bool)
    function int blk_rq_map_kern(request_queue*, request*, void*, unsigned int, gfp_t)
    function int blk_rq_map_sg(request_queue*, request*, scatterlist*)
    function bpf_prog* bpf_prog_add(bpf_prog*, int)
    function void bpf_prog_put(bpf_prog*)
    function void bpf_prog_sub(bpf_prog*, int)
    function void bpf_trace_run10(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run6(bpf_prog*, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run7(bpf_prog*, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run8(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64)
    function int bprm_change_interp(const char*, linux_binprm*)
    function device* bus_find_device(bus_type*, device*, void*, void ()*)
    function int bus_for_each_drv(bus_type*, device_driver*, void*, void ()*)
    function int bus_register(bus_type*)
    function void bus_unregister(bus_type*)
    function int call_netdevice_notifiers(unsigned long int, net_device*)
    function int cdc_parse_cdc_header(usb_cdc_parsed_header*, usb_interface*, u8*, int)
    function int cdev_add(cdev*, unsigned int, unsigned int)
    function cdev* cdev_alloc()
    function void cdev_del(cdev*)
    function int cdev_device_add(cdev*, device*)
    function void cdev_device_del(cdev*, device*)
    function void cdev_init(cdev*, const file_operations*)
    function void cfg80211_connect_done(net_device*, cfg80211_connect_resp_params*, gfp_t)
    function void cfg80211_cqm_rssi_notify(net_device*, nl80211_cqm_rssi_threshold_event, s32, gfp_t)
    function void cfg80211_del_sta_sinfo(net_device*, const u8*, station_info*, gfp_t)
    function void cfg80211_disconnected(net_device*, u16, const u8*, size_t, bool, gfp_t)
    function cfg80211_bss* cfg80211_get_bss(wiphy*, ieee80211_channel*, const u8*, const u8*, size_t, ieee80211_bss_type, ieee80211_privacy)
    function cfg80211_bss* cfg80211_inform_bss_data(wiphy*, cfg80211_inform_bss*, cfg80211_bss_frame_type, const u8*, u64, u16, u16, const u8*, size_t, gfp_t)
    function void cfg80211_mgmt_tx_status(wireless_dev*, u64, const u8*, size_t, bool, gfp_t)
    function void cfg80211_michael_mic_failure(net_device*, const u8*, nl80211_key_type, int, const u8*, gfp_t)
    function void cfg80211_new_sta(net_device*, const u8*, station_info*, gfp_t)
    function void cfg80211_put_bss(wiphy*, cfg80211_bss*)
    function void cfg80211_ready_on_channel(wireless_dev*, u64, ieee80211_channel*, unsigned int, gfp_t)
    function void cfg80211_remain_on_channel_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)
    function void cfg80211_roamed(net_device*, cfg80211_roam_info*, gfp_t)
    function bool cfg80211_rx_mgmt(wireless_dev*, int, int, const u8*, size_t, u32)
    function void cfg80211_rx_unprot_mlme_mgmt(net_device*, const u8*, size_t)
    function void cfg80211_scan_done(cfg80211_scan_request*, cfg80211_scan_info*)
    function void cfg80211_sched_scan_results(wiphy*, u64)
    function void cfg80211_tdls_oper_request(net_device*, const u8*, nl80211_tdls_operation, u16, gfp_t)
    function void cfg80211_unlink_bss(wiphy*, cfg80211_bss*)
    function void cfg80211_unregister_wdev(wireless_dev*)
    function void class_destroy(class*)
    function device* class_find_device(class*, device*, void*, void ()*)
    function void class_unregister(class*)
    function void clear_inode(inode*)
    function int clk_bulk_get_all(device*, clk_bulk_data**)
    function clk* clk_get(device*, const char*)
    function int clk_hw_register(device*, clk_hw*)
    function clk_hw* clk_hw_register_fixed_factor(device*, const char*, const char*, unsigned long int, unsigned int, unsigned int)
    function void clk_sync_state(device*)
    function int component_add(device*, const component_ops*)
    function int component_bind_all(device*, void*)
    function void component_del(device*, const component_ops*)
    function int component_master_add_with_match(device*, const component_master_ops*, component_match*)
    function void component_master_del(device*, const component_master_ops*)
    function void component_match_add_release(device*, component_match**, void ()*, void ()*, void*)
    function void component_unbind_all(device*, void*)
    function void console_stop(console*)
    function int copy_strings_kernel(int, const char* const*, linux_binprm*)
    function int cpufreq_register_driver(cpufreq_driver*)
    function int cpufreq_unregister_driver(cpufreq_driver*)
    function crypto_engine* crypto_engine_alloc_init(device*, bool)
    function int crypto_engine_exit(crypto_engine*)
    function int crypto_engine_start(crypto_engine*)
    function void crypto_finalize_ablkcipher_request(crypto_engine*, ablkcipher_request*, int)
    function int crypto_register_alg(crypto_alg*)
    function int crypto_transfer_ablkcipher_request_to_engine(crypto_engine*, ablkcipher_request*)
    function int crypto_unregister_alg(crypto_alg*)
    function timespec64 current_time(inode*)
    function void d_drop(dentry*)
    function void d_instantiate(dentry*, inode*)
    function int dapm_regulator_event(snd_soc_dapm_widget*, snd_kcontrol*, int)
    function __poll_t datagram_poll(file*, socket*, poll_table*)
    function loff_t default_llseek(file*, loff_t, int)
    function void del_gendisk(gendisk*)
    function file* dentry_open(const path*, int, const cred*)
    function void dev_close(net_device*)
    function const char* dev_driver_string(const device*)
    function fwnode_handle* dev_fwnode(device*)
    function net_device* dev_get_by_index(net*, int)
    function net_device* dev_get_by_index_rcu(net*, int)
    function net_device* dev_get_by_name(net*, const char*)
    function regmap* dev_get_regmap(device*, const char*)
    function rtnl_link_stats64* dev_get_stats(net_device*, rtnl_link_stats64*)
    function int dev_mc_sync_multiple(net_device*, net_device*)
    function void dev_mc_unsync(net_device*, net_device*)
    function int dev_open(net_device*, netlink_ext_ack*)
    function device* dev_pm_domain_attach_by_name(device*, const char*)
    function void dev_pm_domain_detach(device*, bool)
    function int dev_pm_opp_add(device*, unsigned long int, unsigned long int)
    function dev_pm_opp* dev_pm_opp_find_freq_ceil(device*, unsigned long int*)
    function dev_pm_opp* dev_pm_opp_find_freq_exact(device*, unsigned long int, bool)
    function dev_pm_opp* dev_pm_opp_find_freq_floor(device*, unsigned long int*)
    function int dev_pm_opp_get_opp_count(device*)
    function int dev_pm_opp_of_add_table(device*)
    function void dev_pm_opp_of_remove_table(device*)
    function opp_table* dev_pm_opp_set_supported_hw(device*, const u32*, unsigned int)
    function void dev_printk(const char*, const device*, const char*, ...)
    function int dev_set_mtu(net_device*, int)
    function int dev_set_name(device*, const char*, ...)
    function int dev_uc_sync_multiple(net_device*, net_device*)
    function void dev_uc_unsync(net_device*, net_device*)
    function void devfreq_cooling_unregister(thermal_cooling_device*)
    function dev_pm_opp* devfreq_recommended_opp(device*, unsigned long int*, unsigned int)
    function int devfreq_register_opp_notifier(device*, devfreq*)
    function int devfreq_resume_device(devfreq*)
    function int devfreq_suspend_device(devfreq*)
    function int devfreq_unregister_opp_notifier(device*, devfreq*)
    function int device_add(device*)
    function void device_add_disk(device*, gendisk*, const attribute_group**)
    function void* device_connection_find_match(device*, const char*, void*, devcon_match_fn_t)
    function device* device_create(class*, device*, unsigned int, void*, const char*, ...)
    function int device_create_file(device*, const device_attribute*)
    function void device_del(device*)
    function void device_destroy(class*, unsigned int)
    function device* device_find_child(device*, void*, void ()*)
    function int device_for_each_child(device*, void*, void ()*)
    function void* device_get_match_data(device*)
    function fwnode_handle* device_get_named_child_node(device*, const char*)
    function fwnode_handle* device_get_next_child_node(device*, fwnode_handle*)
    function int device_init_wakeup(device*, bool)
    function void device_initialize(device*)
    function int device_match_fwnode(device*, void*)
    function int device_match_name(device*, void*)
    function int device_pm_wait_for_dev(device*, device*)
    function bool device_property_present(device*, const char*)
    function int device_property_read_string(device*, const char*, const char**)
    function int device_property_read_u32_array(device*, const char*, unsigned int*, unsigned long int)
    function int device_property_read_u8_array(device*, const char*, u8*, size_t)
    function int device_register(device*)
    function void device_release_driver(device*)
    function void device_remove_file(device*, const device_attribute*)
    function void device_set_wakeup_capable(device*, bool)
    function void device_unregister(device*)
    function int device_wakeup_enable(device*)
    function int devm_add_action(device*, void ()*, void*)
    function backlight_device* devm_backlight_device_register(device*, const char*, device*, void*, const backlight_ops*, const backlight_properties*)
    function int devm_clk_bulk_get(device*, int, clk_bulk_data*)
    function int devm_clk_bulk_get_all(device*, clk_bulk_data**)
    function clk* devm_clk_get(device*, const char*)
    function clk* devm_clk_get_optional(device*, const char*)
    function int devm_clk_hw_register(device*, clk_hw*)
    function clk* devm_clk_register(device*, clk_hw*)
    function devfreq* devm_devfreq_add_device(device*, devfreq_dev_profile*, const char*, void*)
    function void devm_devfreq_remove_device(device*, devfreq*)
    function extcon_dev* devm_extcon_dev_allocate(device*, const unsigned int*)
    function int devm_extcon_dev_register(device*, extcon_dev*)
    function int devm_extcon_register_notifier(device*, extcon_dev*, unsigned int, notifier_block*)
    function int devm_extcon_register_notifier_all(device*, extcon_dev*, notifier_block*)
    function void devm_free_irq(device*, unsigned int, void*)
    function int devm_gpio_request(device*, unsigned int, const char*)
    function int devm_gpio_request_one(device*, unsigned int, unsigned long int, const char*)
    function gpio_desc* devm_gpiod_get(device*, const char*, gpiod_flags)
    function gpio_desc* devm_gpiod_get_index(device*, const char*, unsigned int, gpiod_flags)
    function gpio_desc* devm_gpiod_get_optional(device*, const char*, gpiod_flags)
    function iio_channel* devm_iio_channel_get(device*, const char*)
    function iio_dev* devm_iio_device_alloc(device*, int)
    function input_dev* devm_input_allocate_device(device*)
    function void* devm_ioremap(device*, long long unsigned int, long long unsigned int)
    function void* devm_ioremap_nocache(device*, long long unsigned int, long long unsigned int)
    function void* devm_ioremap_resource(device*, const resource*)
    function void* devm_ioremap_wc(device*, resource_size_t, resource_size_t)
    function void devm_iounmap(device*, void*)
    function void devm_kfree(device*, void*)
    function void* devm_kmalloc(device*, unsigned long int, unsigned int)
    function void* devm_kmemdup(device*, void*, unsigned long int, unsigned int)
    function void* devm_memremap(device*, long long unsigned int, unsigned long int, unsigned long int)
    function int devm_mfd_add_devices(device*, int, const mfd_cell*, int, resource*, int, irq_domain*)
    function nvmem_cell* devm_nvmem_cell_get(device*, const char*)
    function nvmem_device* devm_nvmem_register(device*, const nvmem_config*)
    function int devm_of_clk_add_hw_provider(device*, void ()*, void*)
    function int devm_of_platform_populate(device*)
    function phy* devm_phy_create(device*, device_node*, const phy_ops*)
    function phy* devm_phy_get(device*, const char*)
    function pinctrl* devm_pinctrl_get(device*)
    function pinctrl_dev* devm_pinctrl_register(device*, pinctrl_desc*, void*)
    function void* devm_platform_ioremap_resource(platform_device*, unsigned int)
    function power_supply* devm_power_supply_register(device*, const power_supply_desc*, const power_supply_config*)
    function int devm_register_reboot_notifier(device*, notifier_block*)
    function int devm_regmap_add_irq_chip(device*, regmap*, int, int, int, const regmap_irq_chip*, regmap_irq_chip_data**)
    function regmap_field* devm_regmap_field_alloc(device*, regmap*, reg_field)
    function int devm_regulator_bulk_get(device*, int, regulator_bulk_data*)
    function regulator* devm_regulator_get(device*, const char*)
    function regulator* devm_regulator_get_exclusive(device*, const char*)
    function regulator* devm_regulator_get_optional(device*, const char*)
    function void devm_regulator_put(regulator*)
    function regulator_dev* devm_regulator_register(device*, const regulator_desc*, const regulator_config*)
    function int devm_request_any_context_irq(device*, unsigned int, void ()*, unsigned long int, const char*, void*)
    function int devm_request_threaded_irq(device*, unsigned int, void ()*, void ()*, unsigned long int, const char*, void*)
    function reset_control* devm_reset_control_array_get(device*, bool, bool)
    function int devm_reset_controller_register(device*, reset_controller_dev*)
    function rtc_device* devm_rtc_allocate_device(device*)
    function rtc_device* devm_rtc_device_register(device*, const char*, const rtc_class_ops*, module*)
    function int devm_snd_soc_register_card(device*, snd_soc_card*)
    function int devm_snd_soc_register_component(device*, const snd_soc_component_driver*, snd_soc_dai_driver*, int)
    function void devres_add(device*, void*)
    function int devres_destroy(device*, void ()*, void ()*, void*)
    function int devres_release(device*, void ()*, void ()*, void*)
    function void* dma_alloc_attrs(device*, unsigned long int, long long unsigned int*, unsigned int, unsigned long int)
    function dma_buf_attachment* dma_buf_attach(dma_buf*, device*)
    function int dma_buf_begin_cpu_access(dma_buf*, dma_data_direction)
    function void dma_buf_detach(dma_buf*, dma_buf_attachment*)
    function int dma_buf_end_cpu_access(dma_buf*, dma_data_direction)
    function dma_buf* dma_buf_export(const dma_buf_export_info*)
    function int dma_buf_fd(dma_buf*, int)
    function dma_buf* dma_buf_get(int)
    function void* dma_buf_kmap(dma_buf*, unsigned long int)
    function void dma_buf_kunmap(dma_buf*, unsigned long int, void*)
    function sg_table* dma_buf_map_attachment(dma_buf_attachment*, dma_data_direction)
    function int dma_buf_mmap(dma_buf*, vm_area_struct*, unsigned long int)
    function void dma_buf_put(dma_buf*)
    function void dma_buf_unmap_attachment(dma_buf_attachment*, sg_table*, dma_data_direction)
    function void* dma_buf_vmap(dma_buf*)
    function void dma_buf_vunmap(dma_buf*, void*)
    function long long unsigned int dma_direct_map_page(device*, page*, unsigned long int, unsigned long int, dma_data_direction, unsigned long int)
    function int dma_direct_map_sg(device*, scatterlist*, int, dma_data_direction, unsigned long int)
    function void dma_direct_sync_sg_for_device(device*, scatterlist*, int, dma_data_direction)
    function void dma_direct_sync_single_for_cpu(device*, long long unsigned int, unsigned long int, dma_data_direction)
    function void dma_direct_sync_single_for_device(device*, long long unsigned int, unsigned long int, dma_data_direction)
    function void dma_direct_unmap_page(device*, long long unsigned int, unsigned long int, dma_data_direction, unsigned long int)
    function void dma_direct_unmap_sg(device*, scatterlist*, int, dma_data_direction, unsigned long int)
    function void dma_free_attrs(device*, unsigned long int, void*, long long unsigned int, unsigned long int)
    function int dma_get_sgtable_attrs(device*, sg_table*, void*, dma_addr_t, size_t, unsigned long int)
    function size_t dma_max_mapping_size(device*)
    function int dma_mmap_attrs(device*, vm_area_struct*, void*, dma_addr_t, size_t, unsigned long int)
    function void* dma_pool_alloc(dma_pool*, gfp_t, dma_addr_t*)
    function dma_pool* dma_pool_create(const char*, device*, size_t, size_t, size_t)
    function void dma_pool_destroy(dma_pool*)
    function void dma_pool_free(dma_pool*, void*, dma_addr_t)
    function void dma_release_channel(dma_chan*)
    function dma_chan* dma_request_chan(device*, const char*)
    function int dma_set_coherent_mask(device*, long long unsigned int)
    function int dma_set_mask(device*, long long unsigned int)
    function void* dmam_alloc_attrs(device*, size_t, dma_addr_t*, gfp_t, unsigned long int)
    function void dmam_free_coherent(device*, size_t, void*, dma_addr_t)
    function void do_SAK(tty_struct*)
    function void dput(dentry*)
    function int driver_attach(device_driver*)
    function int driver_register(device_driver*)
    function void driver_unregister(device_driver*)
    function int drm_add_edid_modes(drm_connector*, edid*)
    function int drm_add_modes_noedid(drm_connector*, int, int)
    function drm_private_state* drm_atomic_get_private_obj_state(drm_atomic_state*, drm_private_obj*)
    function void drm_atomic_helper_async_commit(drm_device*, drm_atomic_state*)
    function int drm_atomic_helper_check(drm_device*, drm_atomic_state*)
    function int drm_atomic_helper_check_plane_state(drm_plane_state*, const drm_crtc_state*, int, int, bool, bool)
    function void drm_atomic_helper_cleanup_planes(drm_device*, drm_atomic_state*)
    function int drm_atomic_helper_commit(drm_device*, drm_atomic_state*, bool)
    function void drm_atomic_helper_commit_cleanup_done(drm_atomic_state*)
    function void drm_atomic_helper_commit_hw_done(drm_atomic_state*)
    function void drm_atomic_helper_commit_modeset_disables(drm_device*, drm_atomic_state*)
    function void drm_atomic_helper_commit_modeset_enables(drm_device*, drm_atomic_state*)
    function void drm_atomic_helper_commit_planes(drm_device*, drm_atomic_state*, unsigned int)
    function void drm_atomic_helper_commit_tail(drm_atomic_state*)
    function void drm_atomic_helper_connector_destroy_state(drm_connector*, drm_connector_state*)
    function drm_connector_state* drm_atomic_helper_connector_duplicate_state(drm_connector*)
    function void drm_atomic_helper_connector_reset(drm_connector*)
    function void drm_atomic_helper_crtc_destroy_state(drm_crtc*, drm_crtc_state*)
    function drm_crtc_state* drm_atomic_helper_crtc_duplicate_state(drm_crtc*)
    function void drm_atomic_helper_crtc_reset(drm_crtc*)
    function int drm_atomic_helper_dirtyfb(drm_framebuffer*, drm_file*, unsigned int, unsigned int, drm_clip_rect*, unsigned int)
    function int drm_atomic_helper_disable_plane(drm_plane*, drm_modeset_acquire_ctx*)
    function int drm_atomic_helper_page_flip(drm_crtc*, drm_framebuffer*, drm_pending_vblank_event*, uint32_t, drm_modeset_acquire_ctx*)
    function void drm_atomic_helper_plane_destroy_state(drm_plane*, drm_plane_state*)
    function drm_plane_state* drm_atomic_helper_plane_duplicate_state(drm_plane*)
    function void drm_atomic_helper_plane_reset(drm_plane*)
    function int drm_atomic_helper_prepare_planes(drm_device*, drm_atomic_state*)
    function int drm_atomic_helper_resume(drm_device*, drm_atomic_state*)
    function int drm_atomic_helper_set_config(drm_mode_set*, drm_modeset_acquire_ctx*)
    function void drm_atomic_helper_shutdown(drm_device*)
    function drm_atomic_state* drm_atomic_helper_suspend(drm_device*)
    function int drm_atomic_helper_swap_state(drm_atomic_state*, bool)
    function int drm_atomic_helper_update_plane(drm_plane*, drm_crtc*, drm_framebuffer*, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, drm_modeset_acquire_ctx*)
    function void drm_atomic_helper_wait_for_dependencies(drm_atomic_state*)
    function void drm_atomic_helper_wait_for_vblanks(drm_device*, drm_atomic_state*)
    function void drm_atomic_private_obj_fini(drm_private_obj*)
    function void drm_atomic_private_obj_init(drm_device*, drm_private_obj*, drm_private_state*, const drm_private_state_funcs*)
    function void drm_bridge_add(drm_bridge*)
    function int drm_bridge_attach(drm_encoder*, drm_bridge*, drm_bridge*)
    function void drm_bridge_remove(drm_bridge*)
    function bool drm_calc_vbltimestamp_from_scanoutpos(drm_device*, unsigned int, int*, ktime_t*, bool)
    function int drm_class_device_register(device*)
    function void drm_class_device_unregister(device*)
    function long int drm_compat_ioctl(file*, unsigned int, unsigned long int)
    function void drm_connector_attach_edid_property(drm_connector*)
    function int drm_connector_attach_encoder(drm_connector*, drm_encoder*)
    function void drm_connector_cleanup(drm_connector*)
    function bool drm_connector_has_possible_encoder(drm_connector*, drm_encoder*)
    function int drm_connector_init(drm_device*, drm_connector*, const drm_connector_funcs*, int)
    function int drm_connector_register(drm_connector*)
    function void drm_connector_unregister(drm_connector*)
    function int drm_connector_update_edid_property(drm_connector*, const edid*)
    function void drm_crtc_cleanup(drm_crtc*)
    function bool drm_crtc_handle_vblank(drm_crtc*)
    function int drm_crtc_init_with_planes(drm_device*, drm_crtc*, drm_plane*, drm_plane*, const drm_crtc_funcs*, const char*, ...)
    function void drm_crtc_send_vblank_event(drm_crtc*, drm_pending_vblank_event*)
    function void drm_crtc_set_max_vblank_count(drm_crtc*, u32)
    function int drm_crtc_vblank_get(drm_crtc*)
    function void drm_crtc_vblank_off(drm_crtc*)
    function void drm_crtc_vblank_on(drm_crtc*)
    function void drm_crtc_vblank_put(drm_crtc*)
    function void drm_crtc_vblank_reset(drm_crtc*)
    function drm_display_mode* drm_cvt_mode(drm_device*, int, int, int, bool, bool, bool)
    function drm_device* drm_dev_alloc(drm_driver*, device*)
    function void drm_dev_dbg(const device*, unsigned int, const char*, ...)
    function void drm_dev_printk(const device*, const char*, const char*, ...)
    function void drm_dev_put(drm_device*)
    function int drm_dev_register(drm_device*, unsigned long int)
    function int drm_dev_set_unique(drm_device*, const char*)
    function void drm_dev_unregister(drm_device*)
    function edid* drm_do_get_edid(drm_connector*, void ()*, void*)
    function int drm_dp_aux_register(drm_dp_aux*)
    function void drm_dp_aux_unregister(drm_dp_aux*)
    function ssize_t drm_dp_dpcd_read(drm_dp_aux*, unsigned int, void*, size_t)
    function int drm_dp_dpcd_read_link_status(drm_dp_aux*, u8*)
    function ssize_t drm_dp_dpcd_write(drm_dp_aux*, unsigned int, void*, size_t)
    function int drm_dp_link_configure(drm_dp_aux*, drm_dp_link*)
    function int drm_dp_link_power_down(drm_dp_aux*, drm_dp_link*)
    function int drm_dp_link_power_up(drm_dp_aux*, drm_dp_link*)
    function int drm_dp_link_probe(drm_dp_aux*, drm_dp_link*)
    function void drm_encoder_cleanup(drm_encoder*)
    function int drm_encoder_init(drm_device*, drm_encoder*, const drm_encoder_funcs*, int, const char*, ...)
    function int drm_framebuffer_init(drm_device*, drm_framebuffer*, const drm_framebuffer_funcs*)
    function int drm_gem_create_mmap_offset(drm_gem_object*)
    function drm_framebuffer* drm_gem_fb_create(drm_device*, drm_file*, const drm_mode_fb_cmd2*)
    function int drm_gem_fb_create_handle(drm_framebuffer*, drm_file*, unsigned int*)
    function void drm_gem_fb_destroy(drm_framebuffer*)
    function drm_gem_object* drm_gem_fb_get_obj(drm_framebuffer*, unsigned int)
    function int drm_gem_fb_prepare_fb(drm_plane*, drm_plane_state*)
    function void drm_gem_free_mmap_offset(drm_gem_object*)
    function page** drm_gem_get_pages(drm_gem_object*)
    function int drm_gem_handle_create(drm_file*, drm_gem_object*, unsigned int*)
    function int drm_gem_mmap(file*, vm_area_struct*)
    function int drm_gem_mmap_obj(drm_gem_object*, unsigned long int, vm_area_struct*)
    function int drm_gem_object_init(drm_device*, drm_gem_object*, size_t)
    function drm_gem_object* drm_gem_object_lookup(drm_file*, unsigned int)
    function void drm_gem_object_put(drm_gem_object*)
    function void drm_gem_object_put_unlocked(drm_gem_object*)
    function void drm_gem_object_release(drm_gem_object*)
    function int drm_gem_prime_fd_to_handle(drm_device*, drm_file*, int, uint32_t*)
    function int drm_gem_prime_handle_to_fd(drm_device*, drm_file*, uint32_t, uint32_t, int*)
    function drm_gem_object* drm_gem_prime_import(drm_device*, dma_buf*)
    function int drm_gem_prime_mmap(drm_gem_object*, vm_area_struct*)
    function void drm_gem_private_object_init(drm_device*, drm_gem_object*, unsigned long int)
    function void drm_gem_put_pages(drm_gem_object*, page**, bool, bool)
    function edid* drm_get_edid(drm_connector*, i2c_adapter*)
    function const drm_format_info* drm_get_format_info(drm_device*, const drm_mode_fb_cmd2*)
    function bool drm_handle_vblank(drm_device*, unsigned int)
    function int drm_hdmi_avi_infoframe_from_display_mode(hdmi_avi_infoframe*, drm_connector*, const drm_display_mode*)
    function bool drm_helper_hpd_irq_event(drm_device*)
    function void drm_helper_mode_fill_fb_struct(drm_device*, drm_framebuffer*, const drm_mode_fb_cmd2*)
    function int drm_helper_probe_single_connector_modes(drm_connector*, uint32_t, uint32_t)
    function long int drm_ioctl(file*, unsigned int, unsigned long int)
    function int drm_irq_install(drm_device*, int)
    function int drm_irq_uninstall(drm_device*)
    function void drm_kms_helper_hotplug_event(drm_device*)
    function void drm_kms_helper_poll_fini(drm_device*)
    function void drm_kms_helper_poll_init(drm_device*)
    function void drm_mode_config_cleanup(drm_device*)
    function void drm_mode_config_init(drm_device*)
    function void drm_mode_config_reset(drm_device*)
    function drm_display_mode* drm_mode_create(drm_device*)
    function int drm_mode_crtc_set_gamma_size(drm_crtc*, int)
    function void drm_mode_destroy(drm_device*, drm_display_mode*)
    function drm_display_mode* drm_mode_duplicate(drm_device*, const drm_display_mode*)
    function drm_mode_object* drm_mode_object_find(drm_device*, drm_file*, unsigned int, unsigned int)
    function void drm_mode_probed_add(drm_connector*, drm_display_mode*)
    function void drm_object_attach_property(drm_mode_object*, drm_property*, long long unsigned int)
    function void drm_of_component_match_add(device*, component_match**, void ()*, device_node*)
    function int drm_open(inode*, file*)
    function int drm_panel_add(drm_panel*)
    function int drm_panel_attach(drm_panel*, drm_connector*)
    function void drm_panel_detach(drm_panel*)
    function int drm_panel_disable(drm_panel*)
    function int drm_panel_enable(drm_panel*)
    function int drm_panel_get_modes(drm_panel*)
    function void drm_panel_init(drm_panel*)
    function int drm_panel_prepare(drm_panel*)
    function void drm_panel_remove(drm_panel*)
    function int drm_panel_unprepare(drm_panel*)
    function void drm_plane_cleanup(drm_plane*)
    function int drm_plane_create_alpha_property(drm_plane*)
    function int drm_plane_create_blend_mode_property(drm_plane*, unsigned int)
    function int drm_plane_create_rotation_property(drm_plane*, unsigned int, unsigned int)
    function int drm_plane_create_zpos_immutable_property(drm_plane*, unsigned int)
    function int drm_plane_create_zpos_property(drm_plane*, unsigned int, unsigned int, unsigned int)
    function void drm_plane_enable_fb_damage_clips(drm_plane*)
    function __poll_t drm_poll(file*, poll_table_struct*)
    function void drm_prime_gem_destroy(drm_gem_object*, sg_table*)
    function drm_property* drm_property_create(drm_device*, unsigned int, const char*, int)
    function drm_property_blob* drm_property_create_blob(drm_device*, unsigned long int, void*)
    function drm_property* drm_property_create_range(drm_device*, unsigned int, const char*, long long unsigned int, long long unsigned int)
    function void drm_put_dev(drm_device*)
    function ssize_t drm_read(file*, char*, size_t, loff_t*)
    function int drm_release(inode*, file*)
    function void drm_set_preferred_mode(drm_connector*, int, int)
    function void drm_state_dump(drm_device*, drm_printer*)
    function int drm_universal_plane_init(drm_device*, drm_plane*, unsigned int, const drm_plane_funcs*, const unsigned int*, unsigned int, const long long unsigned int*, drm_plane_type, const char*, ...)
    function int drm_vblank_init(drm_device*, unsigned int)
    function void drop_nlink(inode*)
    function void dst_release(dst_entry*)
    function int dw_pcie_host_init(pcie_port*)
    function void dw_pcie_msi_init(pcie_port*)
    function void dw_pcie_setup_rc(pcie_port*)
    function int dw_pcie_wait_for_link(dw_pcie*)
    function void eth_commit_mac_addr_change(net_device*, void*)
    function int eth_mac_addr(net_device*, void*)
    function int eth_platform_get_mac_address(device*, u8*)
    function int eth_prepare_mac_addr_change(net_device*, void*)
    function unsigned short int eth_type_trans(sk_buff*, net_device*)
    function int eth_validate_addr(net_device*)
    function void ether_setup(net_device*)
    function unsigned int ethtool_op_get_link(net_device*)
    function int ethtool_op_get_ts_info(net_device*, ethtool_ts_info*)
    function event_trigger_type event_triggers_call(trace_event_file*, void*, ring_buffer_event*)
    function extcon_dev* extcon_find_edev_by_node(device_node*)
    function extcon_dev* extcon_get_edev_by_phandle(device*, int)
    function extcon_dev* extcon_get_extcon_dev(const char*)
    function int extcon_get_state(extcon_dev*, const unsigned int)
    function int extcon_register_notifier(extcon_dev*, unsigned int, notifier_block*)
    function int extcon_set_state_sync(extcon_dev*, unsigned int, bool)
    function int extcon_unregister_notifier(extcon_dev*, unsigned int, notifier_block*)
    function void fd_install(unsigned int, file*)
    function file* fget(unsigned int)
    function int filp_close(file*, void*)
    function void fput(file*)
    function void free_netdev(net_device*)
    function const ieee80211_reg_rule* freq_reg_info(wiphy*, u32)
    function void* fwnode_connection_find_match(fwnode_handle*, const char*, void*, devcon_match_fn_t)
    function fwnode_handle* fwnode_get_parent(const fwnode_handle*)
    function void fwnode_handle_put(fwnode_handle*)
    function bool fwnode_property_present(const fwnode_handle*, const char*)
    function int fwnode_property_read_string(const fwnode_handle*, const char*, const char**)
    function int fwnode_property_read_u16_array(const fwnode_handle*, const char*, unsigned short int*, unsigned long int)
    function int fwnode_property_read_u32_array(const fwnode_handle*, const char*, unsigned int*, unsigned long int)
    function loff_t generic_file_llseek(file*, loff_t, int)
    function int generic_mii_ioctl(mii_if_info*, mii_ioctl_data*, int, unsigned int*)
    function int genl_register_family(genl_family*)
    function int genl_unregister_family(const genl_family*)
    function void* genlmsg_put(sk_buff*, unsigned int, unsigned int, const genl_family*, int, unsigned char)
    function int genphy_resume(phy_device*)
    function device* get_device(device*)
    function int get_tree_single(fs_context*, void ()*)
    function gnss_device* gnss_allocate_device(device*)
    function void gnss_deregister_device(gnss_device*)
    function int gnss_insert_raw(gnss_device*, const unsigned char*, size_t)
    function void gnss_put_device(gnss_device*)
    function int gnss_register_device(gnss_device*)
    function int gpiochip_add_data_with_key(gpio_chip*, void*, lock_class_key*, lock_class_key*)
    function int gpiochip_add_pin_range(gpio_chip*, const char*, unsigned int, unsigned int, unsigned int)
    function void gpiochip_generic_free(gpio_chip*, unsigned int)
    function int gpiochip_generic_request(gpio_chip*, unsigned int)
    function void* gpiochip_get_data(gpio_chip*)
    function void gpiochip_populate_parent_fwspec_fourcell(gpio_chip*, irq_fwspec*, unsigned int, unsigned int)
    function void gpiochip_remove(gpio_chip*)
    function void handle_edge_irq(irq_desc*)
    function void handle_level_irq(irq_desc*)
    function hci_dev* hci_alloc_dev()
    function void hci_free_dev(hci_dev*)
    function int hci_recv_diag(hci_dev*, sk_buff*)
    function int hci_recv_frame(hci_dev*, sk_buff*)
    function int hci_register_dev(hci_dev*)
    function void hci_unregister_dev(hci_dev*)
    function int hid_hw_start(hid_device*, unsigned int)
    function const hid_device_id* hid_match_device(hid_device*, hid_driver*)
    function int hid_open_report(hid_device*)
    function void hid_unregister_driver(hid_driver*)
    function int hwspin_lock_register(hwspinlock_device*, device*, const hwspinlock_ops*, int, int)
    function int hwspin_lock_unregister(hwspinlock_device*)
    function int i2c_add_adapter(i2c_adapter*)
    function void i2c_del_adapter(i2c_adapter*)
    function void i2c_del_driver(i2c_driver*)
    function i2c_client* i2c_new_probed_device(i2c_adapter*, i2c_board_info*, const unsigned short int*, void ()*)
    function int i2c_register_driver(module*, i2c_driver*)
    function int i2c_smbus_read_byte_data(const i2c_client*, unsigned char)
    function int i2c_smbus_write_byte_data(const i2c_client*, unsigned char, unsigned char)
    function int i2c_transfer(i2c_adapter*, i2c_msg*, int)
    function int icc_link_create(icc_node*, const int)
    function void icc_node_add(icc_node*, icc_provider*)
    function icc_node* icc_node_create(int)
    function void icc_node_del(icc_node*)
    function int icc_provider_add(icc_provider*)
    function int icc_provider_del(icc_provider*)
    function void icc_put(icc_path*)
    function int icc_set_bw(icc_path*, u32, u32)
    function ieee80211_channel* ieee80211_get_channel(wiphy*, int)
    function iio_channel* iio_channel_get(device*, const char*)
    function iio_dev* iio_device_alloc(int)
    function void iio_device_free(iio_dev*)
    function void iio_device_unregister(iio_dev*)
    function int iio_read_channel_processed(iio_channel*, int*)
    function int iio_read_channel_raw(iio_channel*, int*)
    function int iio_write_channel_attribute(iio_channel*, int, int, iio_chan_info_enum)
    function unsigned int inet_select_addr(const net_device*, unsigned int, int)
    function void input_alloc_absinfo(input_dev*)
    function input_dev* input_allocate_device()
    function void input_event(input_dev*, unsigned int, unsigned int, int)
    function void input_free_device(input_dev*)
    function int input_mt_init_slots(input_dev*, unsigned int, unsigned int)
    function bool input_mt_report_slot_state(input_dev*, unsigned int, bool)
    function int input_register_device(input_dev*)
    function void input_set_abs_params(input_dev*, unsigned int, int, int, int, int)
    function void input_set_capability(input_dev*, unsigned int, unsigned int)
    function void input_unregister_device(input_dev*)
    function unsigned long int invalidate_mapping_pages(address_space*, unsigned long int, unsigned long int)
    function int iommu_attach_device(iommu_domain*, device*)
    function void iommu_detach_device(iommu_domain*, device*)
    function iommu_domain* iommu_domain_alloc(bus_type*)
    function void iommu_domain_free(iommu_domain*)
    function int iommu_map(iommu_domain*, unsigned long int, phys_addr_t, size_t, int)
    function size_t iommu_map_sg(iommu_domain*, unsigned long int, scatterlist*, unsigned int, int)
    function bool iommu_present(bus_type*)
    function void iommu_set_fault_handler(iommu_domain*, iommu_fault_handler_t, void*)
    function unsigned long int iommu_unmap(iommu_domain*, unsigned long int, unsigned long int)
    function int ip6_local_out(net*, sock*, sk_buff*)
    function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int)
    function int ip_local_out(net*, sock*, sk_buff*)
    function rtable* ip_route_output_flow(net*, flowi4*, const sock*)
    function void iput(inode*)
    function int ipv6_dev_get_saddr(net*, const net_device*, const in6_addr*, unsigned int, in6_addr*)
    function void irq_chip_ack_parent(irq_data*)
    function void irq_chip_mask_parent(irq_data*)
    function int irq_chip_set_type_parent(irq_data*, unsigned int)
    function int irq_chip_set_wake_parent(irq_data*, unsigned int)
    function void irq_chip_unmask_parent(irq_data*)
    function unsigned int irq_create_of_mapping(of_phandle_args*)
    function void irq_domain_free_irqs_common(irq_domain*, unsigned int, unsigned int)
    function void irq_domain_remove(irq_domain*)
    function void irq_domain_set_info(irq_domain*, unsigned int, unsigned long int, irq_chip*, void*, void ()*, void*, const char*)
    function int irq_domain_xlate_onecell(irq_domain*, device_node*, const u32*, unsigned int, unsigned long int*, unsigned int*)
    function int irq_domain_xlate_twocell(irq_domain*, device_node*, const u32*, unsigned int, irq_hw_number_t*, unsigned int*)
    function unsigned int irq_find_mapping(irq_domain*, unsigned long int)
    function irq_domain* irq_find_matching_fwspec(irq_fwspec*, irq_domain_bus_token)
    function irq_data* irq_get_irq_data(unsigned int)
    function unsigned int irq_of_parse_and_map(device_node*, int)
    function void irq_set_chained_handler_and_data(unsigned int, void ()*, void*)
    function void irq_set_chip_and_handler_name(unsigned int, irq_chip*, void ()*, const char*)
    function irq_desc* irq_to_desc(unsigned int)
    function long int kernel_read(file*, void*, unsigned long int, long long int*)
    function long int kernel_write(file*, void*, unsigned long int, long long int*)
    function void kill_litter_super(super_block*)
    function void lock_sock_nested(sock*, int)
    function dentry* lookup_one_len(const char*, dentry*, int)
    function mii_bus* mdiobus_alloc_size(size_t)
    function void mdiobus_free(mii_bus*)
    function void mdiobus_unregister(mii_bus*)
    function int mfd_add_devices(device*, int, const mfd_cell*, int, resource*, int, irq_domain*)
    function unsigned int mii_check_media(mii_if_info*, unsigned int, unsigned int)
    function void mii_ethtool_get_link_ksettings(mii_if_info*, ethtool_link_ksettings*)
    function int mii_ethtool_gset(mii_if_info*, ethtool_cmd*)
    function int mii_ethtool_set_link_ksettings(mii_if_info*, const ethtool_link_ksettings*)
    function int mii_link_ok(mii_if_info*)
    function int mii_nway_restart(mii_if_info*)
    function int mipi_dsi_attach(mipi_dsi_device*)
    function ssize_t mipi_dsi_dcs_read(mipi_dsi_device*, u8, void*, size_t)
    function ssize_t mipi_dsi_dcs_write_buffer(mipi_dsi_device*, void*, size_t)
    function int mipi_dsi_detach(mipi_dsi_device*)
    function mipi_dsi_device* mipi_dsi_device_register_full(mipi_dsi_host*, const mipi_dsi_device_info*)
    function void mipi_dsi_device_unregister(mipi_dsi_device*)
    function int mipi_dsi_driver_register_full(mipi_dsi_driver*, module*)
    function void mipi_dsi_driver_unregister(mipi_dsi_driver*)
    function ssize_t mipi_dsi_generic_read(mipi_dsi_device*, void*, size_t, void*, size_t)
    function ssize_t mipi_dsi_generic_write(mipi_dsi_device*, void*, size_t)
    function int mipi_dsi_host_register(mipi_dsi_host*)
    function void mipi_dsi_host_unregister(mipi_dsi_host*)
    function int mipi_dsi_set_maximum_return_packet_size(mipi_dsi_device*, u16)
    function void misc_deregister(miscdevice*)
    function int misc_register(miscdevice*)
    function void mmc_detect_change(mmc_host*, unsigned long int)
    function int mmc_of_parse(mmc_host*)
    function int mmc_send_tuning(mmc_host*, u32, int*)
    function void mmc_set_data_timeout(mmc_data*, const mmc_card*)
    function void mmc_wait_for_req(mmc_host*, mmc_request*)
    function void module_put(module*)
    function int msm_pinctrl_probe(platform_device*, const msm_pinctrl_soc_data*)
    function int msm_pinctrl_remove(platform_device*)
    function int n_tty_ioctl_helper(tty_struct*, file*, unsigned int, unsigned long int)
    function bool napi_complete_done(napi_struct*, int)
    function void napi_disable(napi_struct*)
    function gro_result napi_gro_receive(napi_struct*, sk_buff*)
    function bool napi_hash_del(napi_struct*)
    function bool napi_schedule_prep(napi_struct*)
    function void neigh_destroy(neighbour*)
    function void netdev_change_features(net_device*)
    function void netdev_err(const net_device*, const char*, ...)
    function void netdev_info(const net_device*, const char*, ...)
    function void netdev_lower_state_changed(net_device*, void*)
    function int netdev_master_upper_dev_link(net_device*, net_device*, void*, void*, netlink_ext_ack*)
    function void netdev_notify_peers(net_device*)
    function u16 netdev_pick_tx(net_device*, sk_buff*, net_device*)
    function int netdev_rx_handler_register(net_device*, rx_handler_func_t*, void*)
    function void netdev_rx_handler_unregister(net_device*)
    function int netdev_upper_dev_link(net_device*, net_device*, netlink_ext_ack*)
    function void netdev_upper_dev_unlink(net_device*, net_device*)
    function void netdev_warn(const net_device*, const char*, ...)
    function void netif_carrier_off(net_device*)
    function void netif_carrier_on(net_device*)
    function void netif_device_attach(net_device*)
    function void netif_device_detach(net_device*)
    function void netif_napi_add(net_device*, napi_struct*, void ()*, int)
    function void netif_napi_del(napi_struct*)
    function void netif_schedule_queue(netdev_queue*)
    function int netif_set_real_num_rx_queues(net_device*, unsigned int)
    function int netif_set_real_num_tx_queues(net_device*, unsigned int)
    function void netif_stacked_transfer_operstate(const net_device*, net_device*)
    function void netif_tx_stop_all_queues(net_device*)
    function void netif_tx_wake_queue(netdev_queue*)
    function int netlink_unicast(sock*, sk_buff*, unsigned int, int)
    function inode* new_inode(super_block*)
    function nf_conntrack_tuple_hash* nf_conntrack_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
    function bool nf_ct_get_tuplepr(const sk_buff*, unsigned int, unsigned short int, net*, nf_conntrack_tuple*)
    function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int)
    function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int)
    function loff_t no_llseek(file*, loff_t, int)
    function int nonseekable_open(inode*, file*)
    function loff_t noop_llseek(file*, loff_t, int)
    function nvdimm_bus* nvdimm_bus_register(device*, nvdimm_bus_descriptor*)
    function nd_region* nvdimm_pmem_region_create(nvdimm_bus*, nd_region_desc*)
    function nvmem_cell* nvmem_cell_get(device*, const char*)
    function void nvmem_cell_put(nvmem_cell*)
    function void* nvmem_cell_read(nvmem_cell*, size_t*)
    function int of_address_to_resource(device_node*, int, resource*)
    function int of_alias_get_id(device_node*, const char*)
    function int of_clk_add_hw_provider(device_node*, void ()*, void*)
    function void of_clk_del_provider(device_node*)
    function clk* of_clk_get(device_node*, int)
    function unsigned int of_clk_get_parent_count(device_node*)
    function clk_hw* of_clk_hw_onecell_get(of_phandle_args*, void*)
    function clk_hw* of_clk_hw_simple_get(of_phandle_args*, void*)
    function int of_clk_set_defaults(device_node*, bool)
    function thermal_cooling_device* of_devfreq_cooling_register_power(device_node*, devfreq*, devfreq_cooling_power*)
    function void* of_device_get_match_data(const device*)
    function bool of_device_is_available(const device_node*)
    function int of_device_is_compatible(const device_node*, const char*)
    function long int of_device_modalias(device*, char*, long int)
    function int of_device_request_module(device*)
    function int of_device_uevent_modalias(device*, kobj_uevent_env*)
    function int of_dma_configure(device*, device_node*, bool)
    function dma_chan* of_dma_request_slave_channel(device_node*, const char*)
    function drm_bridge* of_drm_find_bridge(device_node*)
    function drm_panel* of_drm_find_panel(const device_node*)
    function void* of_fdt_unflatten_tree(const unsigned long int*, device_node*, device_node**)
    function backlight_device* of_find_backlight_by_node(device_node*)
    function device_node* of_find_compatible_node(device_node*, const char*, const char*)
    function platform_device* of_find_device_by_node(device_node*)
    function i2c_adapter* of_find_i2c_adapter_by_node(device_node*)
    function device_node* of_find_matching_node_and_match(device_node*, const of_device_id*, const of_device_id**)
    function mipi_dsi_host* of_find_mipi_dsi_host_by_node(device_node*)
    function device_node* of_find_node_by_name(device_node*, const char*)
    function device_node* of_find_node_opts_by_path(const char*, const char**)
    function property* of_find_property(const device_node*, const char*, int*)
    function int of_genpd_add_provider_simple(device_node*, generic_pm_domain*)
    function device_node* of_get_child_by_name(const device_node*, const char*)
    function device_node* of_get_compatible_child(const device_node*, const char*)
    function int of_get_drm_display_mode(device_node*, drm_display_mode*, u32*, int)
    function int of_get_named_gpio_flags(device_node*, const char*, int, of_gpio_flags*)
    function device_node* of_get_next_available_child(const device_node*, device_node*)
    function device_node* of_get_next_child(const device_node*, device_node*)
    function device_node* of_get_parent(const device_node*)
    function void* of_get_property(const device_node*, const char*, int*)
    function regulator_init_data* of_get_regulator_init_data(device*, device_node*, const regulator_desc*)
    function device_node* of_graph_get_endpoint_by_regs(const device_node*, int, int)
    function device_node* of_graph_get_next_endpoint(const device_node*, device_node*)
    function device_node* of_graph_get_remote_node(const device_node*, unsigned int, unsigned int)
    function device_node* of_graph_get_remote_port_parent(const device_node*)
    function int of_graph_parse_endpoint(const device_node*, of_endpoint*)
    function int of_hwspin_lock_get_id(device_node*, int)
    function icc_path* of_icc_get(device*, const char*)
    function icc_node* of_icc_xlate_onecell(of_phandle_args*, void*)
    function void* of_iomap(device_node*, int)
    function device_node* of_irq_find_parent(device_node*)
    function const of_device_id* of_match_device(const of_device_id*, const device*)
    function const of_device_id* of_match_node(const of_device_id*, const device_node*)
    function bool of_node_name_eq(const device_node*, const char*)
    function device_node* of_parse_phandle(const device_node*, const char*, int)
    function int of_parse_phandle_with_args(const device_node*, const char*, const char*, int, of_phandle_args*)
    function phy* of_phy_simple_xlate(device*, of_phandle_args*)
    function void of_platform_depopulate(device*)
    function int of_platform_populate(device_node*, const of_device_id*, const of_dev_auxdata*, device*)
    function int of_property_count_elems_of_size(const device_node*, const char*, int)
    function int of_property_match_string(const device_node*, const char*, const char*)
    function int of_property_read_string(const device_node*, const char*, const char**)
    function int of_property_read_string_helper(const device_node*, const char*, const char**, unsigned long int, int)
    function int of_property_read_u32_index(const device_node*, const char*, unsigned int, unsigned int*)
    function int of_property_read_variable_u32_array(const device_node*, const char*, unsigned int*, unsigned long int, unsigned long int)
    function int of_property_read_variable_u8_array(const device_node*, const char*, u8*, size_t, size_t)
    function pwm_device* of_pwm_get(device*, device_node*, const char*)
    function reserved_mem* of_reserved_mem_lookup(device_node*)
    function reset_control* of_reset_control_array_get(device_node*, bool, bool, bool)
    function usb_phy_interface of_usb_get_phy_mode(device_node*)
    function bool of_usb_host_tpl_support(device_node*)
    function file* open_exec(const char*)
    function netdev_features_t passthru_features_check(sk_buff*, net_device*, netdev_features_t)
    function int pci_alloc_irq_vectors_affinity(pci_dev*, unsigned int, unsigned int, unsigned int, irq_affinity*)
    function void pci_assign_unassigned_bus_resources(pci_bus*)
    function void pci_bus_add_devices(const pci_bus*)
    function void pci_clear_mwi(pci_dev*)
    function void pci_d3cold_disable(pci_dev*)
    function pci_dev* pci_dev_get(pci_dev*)
    function void pci_dev_put(pci_dev*)
    function void pci_disable_device(pci_dev*)
    function int pci_enable_device(pci_dev*)
    function int pci_find_capability(pci_dev*, int)
    function int pci_find_ext_capability(pci_dev*, int)
    function int pci_find_next_capability(pci_dev*, u8, int)
    function void pci_free_irq_vectors(pci_dev*)
    function pci_dev* pci_get_slot(pci_bus*, unsigned int)
    function void* pci_iomap(pci_dev*, int, unsigned long int)
    function void* pci_iomap_range(pci_dev*, int, unsigned long int, unsigned long int)
    function const cpumask* pci_irq_get_affinity(pci_dev*, int)
    function int pci_irq_vector(pci_dev*, unsigned int)
    function const pci_device_id* pci_match_id(const pci_device_id*, pci_dev*)
    function int pci_read_config_byte(const pci_dev*, int, u8*)
    function int pci_read_config_dword(const pci_dev*, int, unsigned int*)
    function int pci_read_config_word(const pci_dev*, int, unsigned short int*)
    function void pci_release_regions(pci_dev*)
    function void pci_release_selected_regions(pci_dev*, int)
    function int pci_request_regions(pci_dev*, const char*)
    function int pci_request_selected_regions(pci_dev*, int, const char*)
    function void pci_restore_state(pci_dev*)
    function int pci_save_state(pci_dev*)
    function unsigned int pci_scan_child_bus(pci_bus*)
    function void pci_set_master(pci_dev*)
    function int pci_set_mwi(pci_dev*)
    function int pci_set_power_state(pci_dev*, pci_power_t)
    function void pci_stop_and_remove_bus_device(pci_dev*)
    function void pci_unregister_driver(pci_driver*)
    function int pci_write_config_byte(const pci_dev*, int, u8)
    function int pci_write_config_dword(const pci_dev*, int, unsigned int)
    function void pcie_bus_configure_settings(pci_bus*)
    function int pcim_enable_device(pci_dev*)
    function void perf_trace_run_bpf_submit(void*, int, int, trace_event_call*, long long unsigned int, pt_regs*, hlist_head*, task_struct*)
    function phy_device* phy_connect(net_device*, const char*, void ()*, phy_interface_t)
    function void phy_disconnect(phy_device*)
    function int phy_ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function int phy_ethtool_nway_reset(net_device*)
    function int phy_ethtool_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
    function int phy_exit(phy*)
    function int phy_init(phy*)
    function int phy_mii_ioctl(phy_device*, ifreq*, int)
    function int phy_pm_runtime_get_sync(phy*)
    function int phy_pm_runtime_put_sync(phy*)
    function int phy_power_off(phy*)
    function int phy_power_on(phy*)
    function void phy_print_status(phy_device*)
    function int phy_set_mode_ext(phy*, phy_mode, int)
    function void phy_start(phy_device*)
    function void phy_stop(phy_device*)
    function int pinconf_generic_dt_node_to_map(pinctrl_dev*, device_node*, pinctrl_map**, unsigned int*, pinctrl_map_type)
    function void* pinctrl_dev_get_drvdata(pinctrl_dev*)
    function pinctrl_state* pinctrl_lookup_state(pinctrl*, const char*)
    function int pinctrl_pm_select_default_state(device*)
    function int pinctrl_pm_select_sleep_state(device*)
    function pinctrl_dev* pinctrl_register(pinctrl_desc*, device*, void*)
    function int pinctrl_select_state(pinctrl*, pinctrl_state*)
    function void pinctrl_unregister(pinctrl_dev*)
    function int pinctrl_utils_add_map_configs(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, const char*, unsigned long int*, unsigned int, pinctrl_map_type)
    function int pinctrl_utils_add_map_mux(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, const char*, const char*)
    function void pinctrl_utils_free_map(pinctrl_dev*, pinctrl_map*, unsigned int)
    function int pinctrl_utils_reserve_map(pinctrl_dev*, pinctrl_map**, unsigned int*, unsigned int*, unsigned int)
    function int platform_device_add(platform_device*)
    function int platform_device_add_data(platform_device*, void*, size_t)
    function int platform_device_add_properties(platform_device*, const property_entry*)
    function int platform_device_add_resources(platform_device*, const resource*, unsigned int)
    function platform_device* platform_device_alloc(const char*, int)
    function void platform_device_del(platform_device*)
    function void platform_device_put(platform_device*)
    function int platform_device_register(platform_device*)
    function platform_device* platform_device_register_full(const platform_device_info*)
    function void platform_device_unregister(platform_device*)
    function void platform_driver_unregister(platform_driver*)
    function int platform_get_irq(platform_device*, unsigned int)
    function int platform_get_irq_byname(platform_device*, const char*)
    function int platform_get_irq_byname_optional(platform_device*, const char*)
    function resource* platform_get_resource(platform_device*, unsigned int, unsigned int)
    function resource* platform_get_resource_byname(platform_device*, unsigned int, const char*)
    function int platform_irq_count(platform_device*)
    function void platform_unregister_drivers(platform_driver* const*, unsigned int)
    function int pm_genpd_init(generic_pm_domain*, dev_power_governor*, bool)
    function int pm_genpd_remove(generic_pm_domain*)
    function void pm_runtime_allow(device*)
    function void pm_runtime_enable(device*)
    function void pm_runtime_forbid(device*)
    function int pm_runtime_force_resume(device*)
    function int pm_runtime_force_suspend(device*)
    function void pm_runtime_set_autosuspend_delay(device*, int)
    function void pm_wakeup_dev_event(device*, unsigned int, bool)
    function void pm_wakeup_ws_event(wakeup_source*, unsigned int, bool)
    function void power_supply_changed(power_supply*)
    function int power_supply_get_battery_info(power_supply*, power_supply_battery_info*)
    function power_supply* power_supply_get_by_name(const char*)
    function void* power_supply_get_drvdata(power_supply*)
    function int power_supply_get_property(power_supply*, power_supply_property, power_supply_propval*)
    function void power_supply_put(power_supply*)
    function void power_supply_put_battery_info(power_supply*, power_supply_battery_info*)
    function power_supply* power_supply_register(device*, const power_supply_desc*, const power_supply_config*)
    function void power_supply_unregister(power_supply*)
    function int prepare_binprm(linux_binprm*)
    function proc_dir_entry* proc_create(const char*, unsigned short int, proc_dir_entry*, const file_operations*)
    function proc_dir_entry* proc_create_data(const char*, unsigned short int, proc_dir_entry*, const file_operations*, void*)
    function int proto_register(proto*, int)
    function void proto_unregister(proto*)
    function void put_device(device*)
    function void put_disk(gendisk*)
    function void put_tty_driver(tty_driver*)
    function int pwm_apply_state(pwm_device*, const pwm_state*)
    function qcom_smem_state* qcom_smem_state_register(device_node*, const qcom_smem_state_ops*, void*)
    function void qcom_smem_state_unregister(qcom_smem_state*)
    function void* rdev_get_drvdata(regulator_dev*)
    function int register_filesystem(file_system_type*)
    function ctl_table_header* register_net_sysctl(net*, const char*, ctl_table*)
    function int register_netdev(net_device*)
    function int register_netdevice(net_device*)
    function int register_pernet_subsys(pernet_operations*)
    function int register_shrinker(shrinker*)
    function irq_domain* regmap_irq_get_domain(regmap_irq_chip_data*)
    function int regulator_disable_regmap(regulator_dev*)
    function int regulator_enable_regmap(regulator_dev*)
    function regulator* regulator_get(device*, const char*)
    function unsigned int regulator_get_mode(regulator*)
    function int regulator_get_voltage_sel_regmap(regulator_dev*)
    function int regulator_is_enabled(regulator*)
    function int regulator_is_enabled_regmap(regulator_dev*)
    function int regulator_is_supported_voltage(regulator*, int, int)
    function int regulator_list_voltage_linear(regulator_dev*, unsigned int)
    function int regulator_list_voltage_linear_range(regulator_dev*, unsigned int)
    function int regulator_map_voltage_linear(regulator_dev*, int, int)
    function int regulator_notifier_call_chain(regulator_dev*, unsigned long int, void*)
    function regulator_dev* regulator_register(const regulator_desc*, const regulator_config*)
    function int regulator_set_load(regulator*, int)
    function int regulator_set_mode(regulator*, unsigned int)
    function int regulator_set_voltage(regulator*, int, int)
    function int regulator_set_voltage_sel_regmap(regulator_dev*, unsigned int)
    function void regulator_unregister(regulator_dev*)
    function int regulatory_hint(wiphy*, const char*)
    function void release_sock(sock*)
    function int remove_arg_zero(linux_binprm*)
    function int request_firmware(const firmware**, const char*, device*)
    function int request_firmware_direct(const firmware**, const char*, device*)
    function int request_firmware_into_buf(const firmware**, const char*, device*, void*, size_t)
    function int request_firmware_nowait(module*, bool, const char*, device*, gfp_t, void*, void ()*)
    function int revalidate_disk(gendisk*)
    function rfkill* rfkill_alloc(const char*, device*, rfkill_type, const rfkill_ops*, void*)
    function int rpmh_invalidate(const device*)
    function int rpmh_write(const device*, rpmh_state, const tcs_cmd*, unsigned int)
    function int rpmh_write_async(const device*, rpmh_state, const tcs_cmd*, unsigned int)
    function int rpmh_write_batch(const device*, rpmh_state, const tcs_cmd*, u32*)
    function rt6_info* rt6_lookup(net*, const in6_addr*, const in6_addr*, int, const sk_buff*, int)
    function void rtc_update_irq(rtc_device*, unsigned long int, unsigned long int)
    function int rtnl_register_module(module*, int, int, rtnl_doit_func, rtnl_dumpit_func, unsigned int)
    function void sb800_prefetch(device*, int)
    function int scmi_driver_register(scmi_driver*, module*, const char*)
    function void scmi_driver_unregister(scmi_driver*)
    function int scsi_add_host_with_dma(Scsi_Host*, device*, device*)
    function void scsi_eh_prep_cmnd(scsi_cmnd*, scsi_eh_save*, unsigned char*, int, unsigned int)
    function void scsi_eh_restore_cmnd(scsi_cmnd*, scsi_eh_save*)
    function scsi_device* scsi_get_host_dev(Scsi_Host*)
    function Scsi_Host* scsi_host_alloc(scsi_host_template*, int)
    function void scsi_host_put(Scsi_Host*)
    function int scsi_is_host_device(const device*)
    function void scsi_remove_host(Scsi_Host*)
    function void scsi_report_bus_reset(Scsi_Host*, int)
    function void scsi_report_device_reset(Scsi_Host*, int, int)
    function void scsi_scan_host(Scsi_Host*)
    function int sdhci_add_host(sdhci_host*)
    function void sdhci_enable_clk(sdhci_host*, u16)
    function void sdhci_get_property(platform_device*)
    function void sdhci_pltfm_free(platform_device*)
    function sdhci_host* sdhci_pltfm_init(platform_device*, const sdhci_pltfm_data*, size_t)
    function void sdhci_remove_host(sdhci_host*, int)
    function void sdhci_reset(sdhci_host*, u8)
    function void sdhci_set_bus_width(sdhci_host*, int)
    function void sdio_claim_host(sdio_func*)
    function int sdio_enable_func(sdio_func*)
    function int sdio_memcpy_fromio(sdio_func*, void*, unsigned int, int)
    function int sdio_memcpy_toio(sdio_func*, unsigned int, void*, int)
    function u8 sdio_readb(sdio_func*, unsigned int, int*)
    function u32 sdio_readl(sdio_func*, unsigned int, int*)
    function int sdio_readsb(sdio_func*, void*, unsigned int, int)
    function int sdio_register_driver(sdio_driver*)
    function void sdio_release_host(sdio_func*)
    function int sdio_set_block_size(sdio_func*, unsigned int)
    function void sdio_unregister_driver(sdio_driver*)
    function void sdio_writeb(sdio_func*, u8, unsigned int, int*)
    function void sdio_writel(sdio_func*, u32, unsigned int, int*)
    function int sdio_writesb(sdio_func*, unsigned int, void*, int)
    function int search_binary_handler(linux_binprm*)
    function long long int seq_lseek(file*, long long int, int)
    function int seq_open_private(file*, const seq_operations*, int)
    function void seq_printf(seq_file*, const char*, ...)
    function void seq_putc(seq_file*, char)
    function void seq_puts(seq_file*, const char*)
    function ssize_t seq_read(file*, char*, size_t, loff_t*)
    function int seq_release(inode*, file*)
    function void seq_vprintf(seq_file*, const char*, __va_list)
    function void serdev_device_close(serdev_device*)
    function int serdev_device_open(serdev_device*)
    function unsigned int serdev_device_set_baudrate(serdev_device*, unsigned int)
    function void serdev_device_set_flow_control(serdev_device*, bool)
    function int serdev_device_set_tiocm(serdev_device*, int, int)
    function void serdev_device_wait_until_sent(serdev_device*, long int)
    function int serdev_device_write(serdev_device*, const unsigned char*, size_t, long int)
    function int serdev_device_write_buf(serdev_device*, const unsigned char*, size_t)
    function void serdev_device_write_flush(serdev_device*)
    function void serdev_device_write_wakeup(serdev_device*)
    function void set_disk_ro(gendisk*, int)
    function file* shmem_file_setup(const char*, long long int, unsigned long int)
    function page* shmem_read_mapping_page_gfp(address_space*, unsigned long int, unsigned int)
    function void shmem_truncate_range(inode*, loff_t, loff_t)
    function int simple_attr_open(inode*, file*, void ()*, void ()*, const char*)
    function ssize_t simple_attr_read(file*, char*, size_t, loff_t*)
    function int simple_attr_release(inode*, file*)
    function ssize_t simple_attr_write(file*, const char*, size_t, loff_t*)
    function int simple_fill_super(super_block*, unsigned long int, const tree_descr*)
    function int simple_open(inode*, file*)
    function int simple_pin_fs(file_system_type*, vfsmount**, int*)
    function void simple_release_fs(vfsmount**, int*)
    function int simple_statfs(dentry*, kstatfs*)
    function int single_open(file*, void ()*, void*)
    function int single_release(inode*, file*)
    function sock* sk_alloc(net*, int, unsigned int, proto*, int)
    function void sk_free(sock*)
    function int skb_copy_datagram_iter(const sk_buff*, int, iov_iter*, int)
    function void skb_free_datagram(sock*, sk_buff*)
    function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*)
    function void skb_set_owner_w(sk_buff*, sock*)
    function int snd_card_disconnect(snd_card*)
    function int snd_card_free(snd_card*)
    function int snd_card_new(device*, int, const char*, module*, int, snd_card**)
    function int snd_card_register(snd_card*)
    function int snd_card_rw_proc_new(snd_card*, const char*, void*, void ()*, void ()*)
    function int snd_component_add(snd_card*, const char*)
    function int snd_ctl_add(snd_card*, snd_kcontrol*)
    function snd_kcontrol* snd_ctl_find_id(snd_card*, snd_ctl_elem_id*)
    function int snd_ctl_remove_id(snd_card*, snd_ctl_elem_id*)
    function int snd_device_new(snd_card*, snd_device_type, void*, snd_device_ops*)
    function int snd_dma_alloc_pages(int, device*, unsigned long int, snd_dma_buffer*)
    function void snd_dma_free_pages(snd_dma_buffer*)
    function snd_info_entry* snd_info_create_card_entry(snd_card*, const char*, snd_info_entry*)
    function void snd_info_free_entry(snd_info_entry*)
    function int snd_info_register(snd_info_entry*)
    function int snd_jack_set_key(snd_jack*, snd_jack_types, int)
    function const snd_pci_quirk* snd_pci_quirk_lookup(pci_dev*, const snd_pci_quirk*)
    function int snd_pcm_add_chmap_ctls(snd_pcm*, int, const snd_pcm_chmap_elem*, int, unsigned long int, snd_pcm_chmap**)
    function int snd_pcm_hw_constraint_eld(snd_pcm_runtime*, void*)
    function int snd_pcm_hw_constraint_integer(snd_pcm_runtime*, int)
    function int snd_pcm_hw_constraint_list(snd_pcm_runtime*, unsigned int, snd_pcm_hw_param_t, const snd_pcm_hw_constraint_list*)
    function int snd_pcm_hw_constraint_minmax(snd_pcm_runtime*, int, unsigned int, unsigned int)
    function int snd_pcm_hw_constraint_msbits(snd_pcm_runtime*, unsigned int, unsigned int, unsigned int)
    function int snd_pcm_hw_constraint_step(snd_pcm_runtime*, unsigned int, snd_pcm_hw_param_t, unsigned long int)
    function int snd_pcm_hw_rule_add(snd_pcm_runtime*, unsigned int, int, void ()*, void*, int, ...)
    function int snd_pcm_lib_free_pages(snd_pcm_substream*)
    function int snd_pcm_lib_ioctl(snd_pcm_substream*, unsigned int, void*)
    function int snd_pcm_lib_malloc_pages(snd_pcm_substream*, size_t)
    function void snd_pcm_lib_preallocate_pages_for_all(snd_pcm*, int, void*, unsigned long int, unsigned long int)
    function int snd_pcm_limit_hw_rates(snd_pcm_runtime*)
    function int snd_pcm_new(snd_card*, const char*, int, int, int, snd_pcm**)
    function void snd_pcm_period_elapsed(snd_pcm_substream*)
    function void snd_pcm_set_ops(snd_pcm*, int, const snd_pcm_ops*)
    function int snd_soc_card_jack_new(snd_soc_card*, const char*, int, snd_soc_jack*, snd_soc_jack_pin*, unsigned int)
    function unsigned int snd_soc_component_read32(snd_soc_component*, unsigned int)
    function int snd_soc_component_update_bits(snd_soc_component*, unsigned int, unsigned int, unsigned int)
    function int snd_soc_component_write(snd_soc_component*, unsigned int, unsigned int)
    function int snd_soc_dapm_add_routes(snd_soc_dapm_context*, const snd_soc_dapm_route*, int)
    function int snd_soc_dapm_disable_pin(snd_soc_dapm_context*, const char*)
    function int snd_soc_dapm_enable_pin(snd_soc_dapm_context*, const char*)
    function int snd_soc_dapm_force_enable_pin(snd_soc_dapm_context*, const char*)
    function int snd_soc_dapm_ignore_suspend(snd_soc_dapm_context*, const char*)
    function snd_soc_dapm_context* snd_soc_dapm_kcontrol_dapm(snd_kcontrol*)
    function int snd_soc_dapm_sync(snd_soc_dapm_context*)
    function void snd_soc_jack_report(snd_soc_jack*, int, int)
    function int snd_soc_of_get_dai_name(device_node*, const char**)
    function int snd_soc_of_parse_audio_routing(snd_soc_card*, const char*)
    function int snd_soc_of_parse_audio_simple_widgets(snd_soc_card*, const char*)
    function int snd_soc_of_parse_card_name(snd_soc_card*, const char*)
    function unsigned int snd_soc_of_parse_daifmt(device_node*, const char*, device_node**, device_node**)
    function int snd_soc_of_parse_tdm_slot(device_node*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)
    function int snd_soc_register_component(device*, const snd_soc_component_driver*, snd_soc_dai_driver*, int)
    function snd_soc_component* snd_soc_rtdcom_lookup(snd_soc_pcm_runtime*, const char*)
    function int snd_soc_set_runtime_hwparams(snd_pcm_substream*, const snd_pcm_hardware*)
    function void snd_soc_unregister_component(device*)
    function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*)
    function int sock_diag_register(const sock_diag_handler*)
    function void sock_diag_save_cookie(sock*, unsigned int*)
    function void sock_diag_unregister(const sock_diag_handler*)
    function int sock_gettstamp(socket*, void*, bool, bool)
    function unsigned long int sock_i_ino(sock*)
    function void sock_init_data(socket*, sock*)
    function int sock_no_accept(socket*, socket*, int, bool)
    function int sock_no_getsockopt(socket*, int, int, char*, int*)
    function int sock_no_ioctl(socket*, unsigned int, unsigned long int)
    function int sock_no_listen(socket*, int)
    function int sock_no_mmap(file*, socket*, vm_area_struct*)
    function long int sock_no_sendpage(socket*, page*, int, unsigned long int, int)
    function int sock_no_setsockopt(socket*, int, int, char*, unsigned int)
    function int sock_no_shutdown(socket*, int)
    function int sock_no_socketpair(socket*, socket*)
    function int sock_queue_rcv_skb(sock*, sk_buff*)
    function int sock_register(const net_proto_family*)
    function int spi_sync(spi_device*, spi_message*)
    function int spmi_controller_add(spmi_controller*)
    function spmi_controller* spmi_controller_alloc(device*, size_t)
    function void spmi_controller_remove(spmi_controller*)
    function int spmi_ext_register_read(spmi_device*, u8, u8*, size_t)
    function int spmi_ext_register_readl(spmi_device*, u16, u8*, size_t)
    function int spmi_ext_register_write(spmi_device*, u8, const u8*, size_t)
    function int spmi_ext_register_writel(spmi_device*, u16, const u8*, size_t)
    function int spmi_register_read(spmi_device*, u8, u8*)
    function int spmi_register_write(spmi_device*, u8, u8)
    function int spmi_register_zero_write(spmi_device*, u8)
    function int stream_open(inode*, file*)
    function unsigned int submit_bio(bio*)
    function sync_file* sync_file_create(dma_fence*)
    function regmap* syscon_node_to_regmap(device_node*)
    function regmap* syscon_regmap_lookup_by_phandle(device_node*, const char*)
    function regmap* syscon_regmap_lookup_by_phandle_args(device_node*, const char*, int, unsigned int*)
    function int trace_define_field(trace_event_call*, const char*, const char*, int, int, int, int)
    function void trace_event_buffer_commit(trace_event_buffer*)
    function void* trace_event_buffer_reserve(trace_event_buffer*, trace_event_file*, unsigned long int)
    function bool trace_event_ignore_this_pid(trace_event_file*)
    function int trace_event_raw_init(trace_event_call*)
    function int trace_event_reg(trace_event_call*, trace_reg, void*)
    function bool try_module_get(module*)
    function void tty_driver_flush_buffer(tty_struct*)
    function void tty_flip_buffer_push(tty_port*)
    function void tty_hangup(tty_struct*)
    function int tty_insert_flip_string_fixed_flag(tty_port*, const unsigned char*, char, unsigned long int)
    function void tty_kref_put(tty_struct*)
    function void tty_ldisc_deref(tty_ldisc*)
    function void tty_ldisc_flush(tty_struct*)
    function tty_ldisc* tty_ldisc_ref(tty_struct*)
    function void tty_port_close(tty_port*, tty_struct*, file*)
    function void tty_port_destroy(tty_port*)
    function void tty_port_hangup(tty_port*)
    function void tty_port_init(tty_port*)
    function void tty_port_link_device(tty_port*, tty_driver*, unsigned int)
    function int tty_port_open(tty_port*, tty_struct*, file*)
    function void tty_port_put(tty_port*)
    function device* tty_port_register_device(tty_port*, tty_driver*, unsigned int, device*)
    function tty_struct* tty_port_tty_get(tty_port*)
    function void tty_port_tty_hangup(tty_port*, bool)
    function void tty_port_tty_wakeup(tty_port*)
    function int tty_register_driver(tty_driver*)
    function int tty_register_ldisc(int, tty_ldisc_ops*)
    function void tty_schedule_flip(tty_port*)
    function void tty_set_operations(tty_driver*, const tty_operations*)
    function int tty_set_termios(tty_struct*, ktermios*)
    function int tty_standard_install(tty_driver*, tty_struct*)
    function void tty_unregister_device(tty_driver*, unsigned int)
    function int tty_unregister_driver(tty_driver*)
    function void tty_unthrottle(tty_struct*)
    function void tty_vhangup(tty_struct*)
    function int uart_add_one_port(uart_driver*, uart_port*)
    function tty_driver* uart_console_device(console*, int*)
    function void uart_console_write(uart_port*, const char*, unsigned int, void ()*)
    function unsigned int uart_get_baud_rate(uart_port*, ktermios*, ktermios*, unsigned int, unsigned int)
    function int uart_register_driver(uart_driver*)
    function int uart_remove_one_port(uart_driver*, uart_port*)
    function int uart_resume_port(uart_driver*, uart_port*)
    function int uart_set_options(uart_port*, console*, int, int, int, int)
    function int uart_suspend_port(uart_driver*, uart_port*)
    function void uart_unregister_driver(uart_driver*)
    function void uart_update_timeout(uart_port*, unsigned int, unsigned int)
    function void uart_write_wakeup(uart_port*)
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function int ufshcd_pltfrm_resume(device*)
    function int ufshcd_pltfrm_runtime_idle(device*)
    function int ufshcd_pltfrm_runtime_resume(device*)
    function int ufshcd_pltfrm_runtime_suspend(device*)
    function void ufshcd_pltfrm_shutdown(platform_device*)
    function int ufshcd_pltfrm_suspend(device*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)
    function void unmap_mapping_range(address_space*, long long int, long long int, int)
    function int unregister_filesystem(file_system_type*)
    function void unregister_netdev(net_device*)
    function void unregister_netdevice_queue(net_device*, list_head*)
    function void unregister_pernet_subsys(pernet_operations*)
    function void unregister_shrinker(shrinker*)
    function int usb_add_gadget_udc(device*, usb_gadget*)
    function int usb_add_hcd(usb_hcd*, unsigned int, unsigned long int)
    function void* usb_alloc_coherent(usb_device*, unsigned long int, unsigned int, long long unsigned int*)
    function urb* usb_alloc_urb(int, unsigned int)
    function bool usb_amd_pt_check_port(device*, int)
    function void usb_anchor_urb(urb*, usb_anchor*)
    function void usb_asmedia_modifyflowcontrol(pci_dev*)
    function int usb_autopm_get_interface(usb_interface*)
    function int usb_autopm_get_interface_async(usb_interface*)
    function void usb_autopm_get_interface_no_resume(usb_interface*)
    function void usb_autopm_put_interface(usb_interface*)
    function void usb_autopm_put_interface_async(usb_interface*)
    function void usb_autopm_put_interface_no_suspend(usb_interface*)
    function int usb_clear_halt(usb_device*, int)
    function int usb_control_msg(usb_device*, unsigned int, unsigned char, unsigned char, unsigned short int, unsigned short int, void*, unsigned short int, int)
    function usb_hcd* usb_create_hcd(const hc_driver*, device*, const char*)
    function usb_hcd* usb_create_shared_hcd(const hc_driver*, device*, const char*, usb_hcd*)
    function void usb_del_gadget_udc(usb_gadget*)
    function void usb_deregister(usb_driver*)
    function void usb_disable_xhci_ports(pci_dev*)
    function int usb_driver_claim_interface(usb_driver*, usb_interface*, void*)
    function void usb_driver_release_interface(usb_driver*, usb_interface*)
    function void usb_enable_intel_xhci_ports(pci_dev*)
    function int usb_for_each_dev(void*, void ()*)
    function void usb_free_coherent(usb_device*, unsigned long int, void*, long long unsigned int)
    function void usb_free_urb(urb*)
    function int usb_gadget_map_request_by_dev(device*, usb_request*, int)
    function void usb_gadget_set_state(usb_gadget*, usb_device_state)
    function void usb_gadget_udc_reset(usb_gadget*, usb_gadget_driver*)
    function void usb_gadget_unmap_request_by_dev(device*, usb_request*, int)
    function usb_device* usb_get_dev(usb_device*)
    function usb_dr_mode usb_get_dr_mode(device*)
    function urb* usb_get_from_anchor(usb_anchor*)
    function usb_interface* usb_get_intf(usb_interface*)
    function usb_device_speed usb_get_maximum_speed(device*)
    function void usb_hc_died(usb_hcd*)
    function int usb_hcd_check_unlink_urb(usb_hcd*, urb*, int)
    function void usb_hcd_end_port_resume(usb_bus*, int)
    function void usb_hcd_giveback_urb(usb_hcd*, urb*, int)
    function int usb_hcd_is_primary_hcd(usb_hcd*)
    function int usb_hcd_link_urb_to_ep(usb_hcd*, urb*)
    function int usb_hcd_map_urb_for_dma(usb_hcd*, urb*, gfp_t)
    function int usb_hcd_pci_probe(pci_dev*, const pci_device_id*)
    function void usb_hcd_pci_remove(pci_dev*)
    function void usb_hcd_pci_shutdown(pci_dev*)
    function void usb_hcd_platform_shutdown(platform_device*)
    function void usb_hcd_poll_rh_status(usb_hcd*)
    function void usb_hcd_resume_root_hub(usb_hcd*)
    function void usb_hcd_start_port_resume(usb_bus*, int)
    function void usb_hcd_unlink_urb_from_ep(usb_hcd*, urb*)
    function void usb_hcd_unmap_urb_for_dma(usb_hcd*, urb*)
    function int usb_hub_clear_tt_buffer(urb*)
    function usb_interface* usb_ifnum_to_if(const usb_device*, unsigned int)
    function void usb_kill_urb(urb*)
    function int usb_lock_device_for_reset(usb_device*, const usb_interface*)
    function const usb_device_id* usb_match_id(usb_interface*, const usb_device_id*)
    function int usb_match_one_id(usb_interface*, const usb_device_id*)
    function device* usb_of_get_companion_dev(device*)
    function void usb_poison_urb(urb*)
    function void usb_put_dev(usb_device*)
    function void usb_put_hcd(usb_hcd*)
    function void usb_put_intf(usb_interface*)
    function int usb_register_driver(usb_driver*, module*, const char*)
    function void usb_remove_hcd(usb_hcd*)
    function int usb_reset_device(usb_device*)
    function void usb_reset_endpoint(usb_device*, unsigned int)
    function void usb_root_hub_lost_power(usb_device*)
    function void usb_sg_cancel(usb_sg_request*)
    function int usb_sg_init(usb_sg_request*, usb_device*, unsigned int, unsigned int, scatterlist*, int, size_t, gfp_t)
    function void usb_sg_wait(usb_sg_request*)
    function ssize_t usb_store_new_id(usb_dynids*, const usb_device_id*, device_driver*, const char*, size_t)
    function int usb_submit_urb(urb*, unsigned int)
    function int usb_unlink_urb(urb*)
    function void usb_unpoison_urb(urb*)
    function void usb_wakeup_notification(usb_device*, unsigned int)
    function int usbnet_change_mtu(net_device*, int)
    function void usbnet_disconnect(usb_interface*)
    function void usbnet_get_drvinfo(net_device*, ethtool_drvinfo*)
    function int usbnet_get_endpoints(usbnet*, usb_interface*)
    function u32 usbnet_get_link(net_device*)
    function int usbnet_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function u32 usbnet_get_msglevel(net_device*)
    function void usbnet_get_stats64(net_device*, rtnl_link_stats64*)
    function void usbnet_link_change(usbnet*, bool, bool)
    function int usbnet_nway_reset(net_device*)
    function int usbnet_open(net_device*)
    function int usbnet_probe(usb_interface*, const usb_device_id*)
    function int usbnet_read_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_read_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_resume(usb_interface*)
    function int usbnet_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
    function void usbnet_set_msglevel(net_device*, u32)
    function void usbnet_skb_return(usbnet*, sk_buff*)
    function netdev_tx_t usbnet_start_xmit(sk_buff*, net_device*)
    function int usbnet_stop(net_device*)
    function int usbnet_suspend(usb_interface*, pm_message_t)
    function void usbnet_tx_timeout(net_device*)
    function void usbnet_unlink_rx_urbs(usbnet*)
    function void usbnet_update_max_qlen(usbnet*)
    function int usbnet_write_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_write_cmd_async(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_write_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
    function int vfs_getattr(const path*, kstat*, u32, unsigned int)
    function long long int vfs_llseek(file*, long long int, int)
    function long int vfs_read(file*, char*, unsigned long int, long long int*)
    function long int vfs_write(file*, const char*, unsigned long int, long long int*)
    function void wakeup_source_add(wakeup_source*)
    function wakeup_source* wakeup_source_create(const char*)
    function void wakeup_source_destroy(wakeup_source*)
    function wakeup_source* wakeup_source_register(device*, const char*)
    function void wakeup_source_remove(wakeup_source*)
    function void wakeup_source_unregister(wakeup_source*)
    function void wiphy_free(wiphy*)
    function wiphy* wiphy_new_nm(const cfg80211_ops*, int, const char*)
    function int wiphy_register(wiphy*)
    function void wiphy_unregister(wiphy*)
    function void would_dump(linux_binprm*, file*)
    function xdp_frame* xdp_convert_zc_to_xdp_frame(xdp_buff*)
    function int xdp_do_redirect(net_device*, xdp_buff*, bpf_prog*)
    function void xdp_return_frame(xdp_frame*)
    function void xdp_return_frame_rx_napi(xdp_frame*)
    function int xdp_rxq_info_reg(xdp_rxq_info*, net_device*, unsigned int)
    function int xdp_rxq_info_reg_mem_model(xdp_rxq_info*, xdp_mem_type, void*)
    function void xdp_rxq_info_unreg(xdp_rxq_info*)
    function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int)

'struct ufs_dev_info at ufs.h:530:1' changed:
  type size changed from 64 to 192 (in bits)
  2 data member insertions:
    'u16 ufs_dev_info::wmanufacturerid', at offset 16 (in bits) at ufs.h:534:1
    'u8* ufs_dev_info::model', at offset 64 (in bits) at ufs.h:536:1
  there are data member changes:
   'u16 ufs_dev_info::spec_version' offset changed from 16 to 128 (in bits) (by +112 bits)
   'u32 ufs_dev_info::clk_gating_wait_us' offset changed from 32 to 160 (in bits) (by +128 bits)

  10 impacted interfaces:
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

'struct ufs_hba at ufshcd.h:559:1' changed:
  type size changed from 27520 to 27648 (in bits)
  there are data member changes:
   type 'struct ufs_dev_info' of 'ufs_hba::dev_info' changed as reported earlier
   and size changed from 64 to 192 (in bits) (by +128 bits)
   'bool ufs_hba::auto_bkops_enabled' offset changed from 16000 to 16128 (in bits) (by +128 bits)
   'ufs_vreg_info ufs_hba::vreg_info' offset changed from 16064 to 16192 (in bits) (by +128 bits)
   'list_head ufs_hba::clk_list_head' offset changed from 16320 to 16448 (in bits) (by +128 bits)
   'bool ufs_hba::wlun_dev_clr_ua' offset changed from 16448 to 16576 (in bits) (by +128 bits)
   'int ufs_hba::req_abort_count' offset changed from 16480 to 16608 (in bits) (by +128 bits)
   'u32 ufs_hba::lanes_per_direction' offset changed from 16512 to 16640 (in bits) (by +128 bits)
   'ufs_pa_layer_attr ufs_hba::pwr_info' offset changed from 16544 to 16672 (in bits) (by +128 bits)
   'ufs_pwr_mode_info ufs_hba::max_pwr_info' offset changed from 16768 to 16896 (in bits) (by +128 bits)
   'ufs_clk_gating ufs_hba::clk_gating' offset changed from 17024 to 17152 (in bits) (by +128 bits)
   'u32 ufs_hba::caps' offset changed from 18816 to 18944 (in bits) (by +128 bits)
   'devfreq* ufs_hba::devfreq' offset changed from 18880 to 19008 (in bits) (by +128 bits)
   'ufs_clk_scaling ufs_hba::clk_scaling' offset changed from 18944 to 19072 (in bits) (by +128 bits)
   'bool ufs_hba::is_sys_suspended' offset changed from 20352 to 20480 (in bits) (by +128 bits)
   'bkops_status ufs_hba::urgent_bkops_lvl' offset changed from 20384 to 20512 (in bits) (by +128 bits)
   'bool ufs_hba::is_urgent_bkops_lvl_checked' offset changed from 20416 to 20544 (in bits) (by +128 bits)
   'rw_semaphore ufs_hba::clk_scaling_lock' offset changed from 20480 to 20608 (in bits) (by +128 bits)
   'ufs_desc_size ufs_hba::desc_size' offset changed from 20800 to 20928 (in bits) (by +128 bits)
   'atomic_t ufs_hba::scsi_block_reqs_cnt' offset changed from 21024 to 21152 (in bits) (by +128 bits)
   'device ufs_hba::bsg_dev' offset changed from 21056 to 21184 (in bits) (by +128 bits)
   'request_queue* ufs_hba::bsg_queue' offset changed from 27200 to 27328 (in bits) (by +128 bits)
   'ufs_crypto_capabilities ufs_hba::crypto_capabilities' offset changed from 27264 to 27392 (in bits) (by +128 bits)
   'ufs_crypto_cap_entry* ufs_hba::crypto_cap_array' offset changed from 27328 to 27456 (in bits) (by +128 bits)
   'u32 ufs_hba::crypto_cfg_register' offset changed from 27392 to 27520 (in bits) (by +128 bits)
   'keyslot_manager* ufs_hba::ksm' offset changed from 27456 to 27584 (in bits) (by +128 bits)

  10 impacted interfaces:
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

Bug: 149659981
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: Ie0a8e835bca8c7111f74440b1a44680856aae182
2020-03-04 14:29:00 -08:00
Can Guo
dfa8232926 FROMGIT: scsi: ufs: Select INITIAL ADAPT type for HS Gear4
ADAPT is added specifically for HS Gear4 mode only. Select INITIAL ADAPT
before power mode change to G4 and select NO ADAPT before switch to non-G4
modes.

[mkp: fixed typo in header file]

Link: https://lore.kernel.org/r/1581485910-8307-3-git-send-email-cang@codeaurora.org
Signed-off-by: Can Guo <cang@codeaurora.org>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

Bug: 150731199
Change-Id: I6226b91826e139f9b8e99523da4861b01254fea8
(cherry picked from commit 518b32f1ddf5830698f270272d2ca465e788a273
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-03-04 19:38:23 +00:00
Can Guo
1bd769d7bc FROMLIST: scsi: ufs: Use ufshcd_config_pwr_mode() when scale gear
When scale gear, use ufshcd_config_pwr_mode() instead of
ufshcd_change_power_mode() so that vops_pwr_change_notify(PRE_CHANGE)
can be utilized to allow vendors use customized settings before change
the power mode.

Bug: 150731199
Link: https://lore.kernel.org/linux-scsi/1581485910-8307-2-git-send-email-cang@codeaurora.org/
Change-Id: I8c8602b8ce3fd9fa4644e126fbd84bf564bf11e7
Signed-off-by: Can Guo <cang@codeaurora.org>
2020-03-04 19:38:06 +00:00
Can Guo
ba4540b7ed FROMGIT: scsi: ufs-qcom: Apply QUIRK_HOST_TACTIVATE for WDC UFS devices
Western Digital UFS devices require host's PA_TACTIVATE to be lower than
device's PA_TACTIVATE, otherwise it may get stuck during hibern8 sequence.

Link: https://lore.kernel.org/r/1582517363-11536-3-git-send-email-cang@codeaurora.org
Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
Acked-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

Bug: 150731199
Change-Id: I3dbe4ff9b452b2ea970af624ca685939c24c2d15
(cherry picked from commit 27ff2c60e095fb541251d0f90f9ea41f2b5f0f4f
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-03-04 19:37:51 +00:00
Can Guo
acc625f7c0 FROMGIT: scsi: ufs: Allow vendor device quirks to be applied early
Currently ufshcd_vops_apply_dev_quirks() comes after all UniPro parameters
have been tuned. Move it up so that vendors have a chance to apply device
quirks in advance.

Link: https://lore.kernel.org/r/1582517363-11536-2-git-send-email-cang@codeaurora.org
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: 150731199
Change-Id: Ib4bb3001f253d6f25666b008f9f3072a49c42ac0
(cherry picked from commit e91ed9e0e4fa4ff913edb6e29c53f6a365e95609
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-03-04 19:37:41 +00:00
Bean Huo
76afd21e10 BACKPORT: scsi: ufs: Delete struct ufs_dev_desc
In consideration of UFS host driver uses parameters of struct ufs_dev_desc,
move its parameters to struct ufs_dev_info, delete struct ufs_dev_desc.

Link: https://lore.kernel.org/r/20200120130820.1737-3-huobean@gmail.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

Bug: 150731199
Change-Id: I43899adc1f4112d1069d2a3b93333325e1bca119
(cherry picked from commit 097500666ec9912a9245160e0e53c1e3944d80d9)
[cang@codeaurora.org: fixed minor conflicts]
Signed-off-by: Can Guo <cang@codeaurora.org>
2020-03-04 19:37:33 +00:00
Todd Kjos
da3eb3b7b6 ANDROID: gki_defconfig: enable IOMMU_LIMIT_IOVA_ALIGNMENT
Enable IOMMU_LIMIT_IOVA_ALIGNMENT with the default setting
of IOMMU_IOVA_ALIGNMENT (2MB alignment)

Bug: 148141615
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I1e92fb14dd0518746e5e53fab80234915a7f0d68
2020-03-04 17:28:45 +00:00
Liam Mark
6a3ea3c63c FROMLIST: iommu/iova: Support limiting IOVA alignment
When the IOVA framework applies IOVA alignment it aligns all
IOVAs to the smallest PAGE_SIZE order which is greater than or
equal to the requested IOVA size.

We support use cases that requires large buffers (> 64 MB in
size) to be allocated and mapped in their stage 1 page tables.
However, with this alignment scheme we find ourselves running
out of IOVA space for 32 bit devices, so we are proposing this
config, along the similar vein as CONFIG_CMA_ALIGNMENT for CMA
allocations.

Add CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT to limit the alignment of
IOVAs to some desired PAGE_SIZE order, specified by
CONFIG_IOMMU_IOVA_ALIGNMENT. This helps reduce the impact of
fragmentation caused by the current IOVA alignment scheme, and
gives better IOVA space utilization.

Bug: 148141615
Link: https://lore.kernel.org/lkml/alpine.DEB.2.10.2002141223510.27047@lmark-linux.qualcomm.com/
Change-Id: I511ac685d5855e1b9feb5025e025ebbebee7f40d
Signed-off-by: Liam Mark <lmark@codeaurora.org>
2020-03-04 09:01:27 -08:00
Liam Mark
5e25537af7 FROMLIST: iommu/iova: Add a best-fit algorithm
Using the best-fit algorithm, instead of the first-fit
algorithm, may reduce fragmentation when allocating
IOVAs.

Bug: 149544392
Link: https://lore.kernel.org/lkml/7239ddd532e94a4371289f3be23c66a3@codeaurora.org/
Change-Id: Icfbac0cc7be972a092915335508cbc73c47471cf
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
2020-03-04 09:01:27 -08:00
Liam Mark
741f92f5cb FROMLIST: iommu/dma: Allow drivers to reserve an iova range
Some devices have a memory map which contains gaps or holes.
In order for the device to have as much IOVA space as possible,
allow its driver to inform the DMA-IOMMU layer that it should
not allocate addresses from these holes.

Bug: 149544395
Link: https://lore.kernel.org/lkml/20200220185728.GA32137@pratikp-lnx/
Change-Id: I15bd1d313d889c2572d0eb2adecf6bebde3267f7
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
2020-03-04 09:01:27 -08:00
Alistair Delva
15b06f4982 ANDROID: Unconditionally create bridge tracepoints
Even if the bridge module is not enabled, we may need the tracepoints
downstream in products that enable bridge.ko, so avoid defining the
export of these symbols based on a config option.

Bug: 150625937
Change-Id: Ib961fd6e353fe3bdfde11a38488568f42f1dbe7a
Signed-off-by: Alistair Delva <adelva@google.com>
2020-03-04 07:57:24 +00:00
Alistair Delva
04f7ce5d3d ANDROID: gki_defconfig: Enable MFD_SYSCON on x86
This option was accidentally skipped when it was added on arm64.

Bug: 144867487
Change-Id: Ifa87a894954ec9a26d5ab40e7d18e2f2f5e4f416
Signed-off-by: Alistair Delva <adelva@google.com>
2020-03-04 06:56:24 +00:00
Todd Kjos
f305a5bbd3 ANDROID: update ABI for CONFIG_IIO_* changes
Leaf changes summary: 2 artifacts changed
Changed leaf types summary: 2 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 ufs_hba at ufshcd.h:558:1' changed:
  type size changed from 27456 to 27520 (in bits)
  1 data member insertion:
    'size_t ufs_hba::sg_entry_size', at offset 1920 (in bits) at ufshcd.h:606:1
  there are data member changes:
   'unsigned int ufs_hba::irq' offset changed from 1920 to 1984 (in bits) (by +64 bits)
   'bool ufs_hba::is_irq_enabled' offset changed from 1952 to 2016 (in bits) (by +64 bits)
   'ufs_ref_clk_freq ufs_hba::dev_ref_clk_freq' offset changed from 1984 to 2048 (in bits) (by +64 bits)
   'unsigned int ufs_hba::quirks' offset changed from 2016 to 2080 (in bits) (by +64 bits)
   'unsigned int ufs_hba::dev_quirks' offset changed from 2048 to 2112 (in bits) (by +64 bits)
   'wait_queue_head_t ufs_hba::tm_wq' offset changed from 2112 to 2176 (in bits) (by +64 bits)
   'wait_queue_head_t ufs_hba::tm_tag_wq' offset changed from 2304 to 2368 (in bits) (by +64 bits)
   'unsigned long int ufs_hba::tm_condition' offset changed from 2496 to 2560 (in bits) (by +64 bits)
   'unsigned long int ufs_hba::tm_slots_in_use' offset changed from 2560 to 2624 (in bits) (by +64 bits)
   'uic_command* ufs_hba::active_uic_cmd' offset changed from 2624 to 2688 (in bits) (by +64 bits)
   'mutex ufs_hba::uic_cmd_mutex' offset changed from 2688 to 2752 (in bits) (by +64 bits)
   'completion* ufs_hba::uic_async_done' offset changed from 2944 to 3008 (in bits) (by +64 bits)
   'u32 ufs_hba::ufshcd_state' offset changed from 3008 to 3072 (in bits) (by +64 bits)
   'u32 ufs_hba::eh_flags' offset changed from 3040 to 3104 (in bits) (by +64 bits)
   'u32 ufs_hba::intr_mask' offset changed from 3072 to 3136 (in bits) (by +64 bits)
   'u16 ufs_hba::ee_ctrl_mask' offset changed from 3104 to 3168 (in bits) (by +64 bits)
   'bool ufs_hba::is_powered' offset changed from 3120 to 3184 (in bits) (by +64 bits)
   'work_struct ufs_hba::eh_work' offset changed from 3136 to 3200 (in bits) (by +64 bits)
   'work_struct ufs_hba::eeh_work' offset changed from 3392 to 3456 (in bits) (by +64 bits)
   'u32 ufs_hba::errors' offset changed from 3648 to 3712 (in bits) (by +64 bits)
   'u32 ufs_hba::uic_error' offset changed from 3680 to 3744 (in bits) (by +64 bits)
   'u32 ufs_hba::saved_err' offset changed from 3712 to 3776 (in bits) (by +64 bits)
   'u32 ufs_hba::saved_uic_err' offset changed from 3744 to 3808 (in bits) (by +64 bits)
   'ufs_stats ufs_hba::ufs_stats' offset changed from 3776 to 3840 (in bits) (by +64 bits)
   'bool ufs_hba::silence_err_logs' offset changed from 14720 to 14784 (in bits) (by +64 bits)
   'ufs_dev_cmd ufs_hba::dev_cmd' offset changed from 14784 to 14848 (in bits) (by +64 bits)
   'ktime_t ufs_hba::last_dme_cmd_tstamp' offset changed from 15808 to 15872 (in bits) (by +64 bits)
   'ufs_dev_info ufs_hba::dev_info' offset changed from 15872 to 15936 (in bits) (by +64 bits)
   'bool ufs_hba::auto_bkops_enabled' offset changed from 15936 to 16000 (in bits) (by +64 bits)
   'ufs_vreg_info ufs_hba::vreg_info' offset changed from 16000 to 16064 (in bits) (by +64 bits)
   'list_head ufs_hba::clk_list_head' offset changed from 16256 to 16320 (in bits) (by +64 bits)
   'bool ufs_hba::wlun_dev_clr_ua' offset changed from 16384 to 16448 (in bits) (by +64 bits)
   'int ufs_hba::req_abort_count' offset changed from 16416 to 16480 (in bits) (by +64 bits)
   'u32 ufs_hba::lanes_per_direction' offset changed from 16448 to 16512 (in bits) (by +64 bits)
   'ufs_pa_layer_attr ufs_hba::pwr_info' offset changed from 16480 to 16544 (in bits) (by +64 bits)
   'ufs_pwr_mode_info ufs_hba::max_pwr_info' offset changed from 16704 to 16768 (in bits) (by +64 bits)
   'ufs_clk_gating ufs_hba::clk_gating' offset changed from 16960 to 17024 (in bits) (by +64 bits)
   'u32 ufs_hba::caps' offset changed from 18752 to 18816 (in bits) (by +64 bits)
   'devfreq* ufs_hba::devfreq' offset changed from 18816 to 18880 (in bits) (by +64 bits)
   'ufs_clk_scaling ufs_hba::clk_scaling' offset changed from 18880 to 18944 (in bits) (by +64 bits)
   'bool ufs_hba::is_sys_suspended' offset changed from 20288 to 20352 (in bits) (by +64 bits)
   'bkops_status ufs_hba::urgent_bkops_lvl' offset changed from 20320 to 20384 (in bits) (by +64 bits)
   'bool ufs_hba::is_urgent_bkops_lvl_checked' offset changed from 20352 to 20416 (in bits) (by +64 bits)
   'rw_semaphore ufs_hba::clk_scaling_lock' offset changed from 20416 to 20480 (in bits) (by +64 bits)
   'ufs_desc_size ufs_hba::desc_size' offset changed from 20736 to 20800 (in bits) (by +64 bits)
   'atomic_t ufs_hba::scsi_block_reqs_cnt' offset changed from 20960 to 21024 (in bits) (by +64 bits)
   'device ufs_hba::bsg_dev' offset changed from 20992 to 21056 (in bits) (by +64 bits)
   'request_queue* ufs_hba::bsg_queue' offset changed from 27136 to 27200 (in bits) (by +64 bits)
   'ufs_crypto_capabilities ufs_hba::crypto_capabilities' offset changed from 27200 to 27264 (in bits) (by +64 bits)
   'ufs_crypto_cap_entry* ufs_hba::crypto_cap_array' offset changed from 27264 to 27328 (in bits) (by +64 bits)
   'u32 ufs_hba::crypto_cfg_register' offset changed from 27328 to 27392 (in bits) (by +64 bits)
   'keyslot_manager* ufs_hba::ksm' offset changed from 27392 to 27456 (in bits) (by +64 bits)

  10 impacted interfaces:
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

'struct utp_transfer_cmd_desc at ufshci.h:453:1' changed:
  type size changed from 24576 to 8192 (in bits)
  there are data member changes:
   type 'ufshcd_sg_entry[128]' of 'utp_transfer_cmd_desc::prd_table' changed:
     type name changed from 'ufshcd_sg_entry[128]' to 'u8[]'
     array type size changed from 16384 to infinity
     array type subrange 1 changed length from 128 to infinity
     array element type 'struct ufshcd_sg_entry' changed:
       entity changed from 'struct ufshcd_sg_entry' to 'typedef u8' at int-ll64.h:17:1
       type size changed from 128 to 8 (in bits)
   and size changed from 16384 to 0 (in bits) (by -16384 bits)

  10 impacted interfaces:
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

Bug: 150277239
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I02449d5012734c78510d316eb2bacf736414fecc
2020-03-04 02:01:55 +00:00
Todd Kjos
bf3dd067d7 ANDROID: gki_defconfig: add CONFIG_IIO_BUFFER and CONFIG_IIO_TRIGGER
Add configs to provide framework for partner sensor-hub drivers

Bug: 150277239
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I04a873c249e1871fd8b2c03ee3737bc645888a8f
2020-03-03 17:23:08 -08:00
Orson Zhai
c24d7797ab ANDROID: gki: set CONFIG_SERIAL_SPRD_CONSOLE for earlycon
Bug: 150653429
Change-Id: I13abca7a9be21efdbb4a158334691c7e33d1d92b
Signed-off-by: Orson Zhai <orson.zhai@unisoc.com>
2020-03-04 00:37:32 +00:00
Ram Muthiah
175afe8501 ANDROID: Re-add default y for VIRTIO_PCI_LEGACY
This is a partial revert of commit 64b9a2067308c5b3e6ff718.

Bug: 139431025
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I2ebbe2f20e318cb01206ccbd8c6a5803f7f503b6
2020-03-03 23:06:12 +00:00
Ram Muthiah
c7e20e359a ANDROID: GKI: build in HVC_DRIVER
Cuttlefish and Goldfish both rely on the virtio console and
HVC_DRIVER is a binary config which is a dep for that driver.

Bug: 150620456
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I54e7d95da4fcddd534d0f0f48b5c546cd2f2718d
2020-03-03 14:23:35 -08:00
Ram Muthiah
dc6a13e000 ANDROID: Removed default m for virtual sw crypto device
Goldfish and Cuttlefish already use software encrytion drivers and
don't use this one.

Bug: 150620456
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I72b0155b5db9bc54bfca0ed99734b7c2c513ceac
2020-03-03 14:23:34 -08:00
Ram Muthiah
17a1b5d7c9 ANDROID: Remove default y on BRIDGE_IGMP_SNOOPING
This binary module gets enabled if BRIDGE, a tristate config, gets
enabled as either a builtin or y. This dependent config should also
be tristate but it seems like that hasn't been done upstream yet.

Bug: 150620456
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I699b73bfac8a0c6cb5e14fefe56b6c013e2410a8
2020-03-03 14:23:34 -08:00
Ram Muthiah
b5ba087edd ANDROID: GKI: Added missing SND configs
Bug: 150620456
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: I809392ffe06327839be7574195b1f080db2d1f2e
2020-03-03 14:23:34 -08:00
Eric Biggers
d263f1c80d ANDROID: scsi: ufs: allow ufs variants to override sg entry size
Modify the UFSHCD core to allow 'struct ufshcd_sg_entry' to be
variable-length.  The default is the standard length, but variants can
override ufs_hba::sg_entry_size with a larger value if there are
vendor-specific fields following the standard ones.

This is needed to support inline encryption with ufs-exynos (FMP).

Bug: 129991660
Change-Id: I6ab9458d5c23331013e6b736d6fea378a6b5b86c
Signed-off-by: Eric Biggers <ebiggers@google.com>
2020-03-03 12:57:53 -08:00
Greg Kroah-Hartman
2c2101d181 This is the 5.4.23 stable release
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl5ZPksACgkQONu9yGCS
 aT4X0A//YvcKCCLgtWdQsWVJ0PEf5YE2KQI4rvbbD7wKkE5S6AWMhL3D+t46cWVe
 EgBtZLJYFkfqhdfF4JqjPsof/3CYS4o/LnAqzo0BgnnFccLV25SsGqDMn1b5Z6K2
 2vUs3gRydFk8iAWFs6XxrxScUbYrqr+6rQcLvgWHuMXjOInYPBUdc6b+vYMRsY79
 Eil6ROUy0daQPDJzfFrODW+OiUQ8uUx0F9Mq3fhuzNwx8E1QBv0qoH6fFkCYOzNa
 rmyjETil09hjLFMVThGjJoUPEzog6135T/s+eRo7vR13XdHPLo8lvrRJNGnuFBct
 CPVEZBNDVE20TRXGCaKDM/T8BMgqZ3V4Kx9BFwCyP34LdGebKvOsNvoNX7AxlyvQ
 lfOEpJU3rBuEUaM32J842NoMaSbIrOYBwtrA/0XEMQhIyA26FjJsE9foJFog68gQ
 2fekQSKpzWHcw1k3kUPH5iYHjD4oEz3mVM+C12klszMeoGYmnkGpmW0GzhtDJZiL
 94LxhUo3vNzBN5ut1am5FrYMaw5YF0Ptnk6n4CWvU9NnvHesFNE/BFzok7yv03M+
 Mm0XDyGKO4xWnCIbj2nTfbKDoY3FL7nJJ1GhwmHb36V2ZURIkkSob4In2/JM18Gw
 ltYJTEPsK3SeomLQDNCpoSdRcp3G615b7k8H9agz14Loh4Tydh0=
 =ScbK
 -----END PGP SIGNATURE-----

Merge 5.4.23 into android-5.4

Changes in 5.4.23
	iommu/qcom: Fix bogus detach logic
	ALSA: hda: Use scnprintf() for printing texts for sysfs/procfs
	ALSA: hda/realtek - Apply quirk for MSI GP63, too
	ALSA: hda/realtek - Apply quirk for yet another MSI laptop
	ASoC: codec2codec: avoid invalid/double-free of pcm runtime
	ASoC: sun8i-codec: Fix setting DAI data format
	tpm: Initialize crypto_id of allocated_banks to HASH_ALGO__LAST
	ecryptfs: fix a memory leak bug in parse_tag_1_packet()
	ecryptfs: fix a memory leak bug in ecryptfs_init_messaging()
	btrfs: handle logged extent failure properly
	thunderbolt: Prevent crash if non-active NVMem file is read
	USB: misc: iowarrior: add support for 2 OEMed devices
	USB: misc: iowarrior: add support for the 28 and 28L devices
	USB: misc: iowarrior: add support for the 100 device
	e1000e: Use rtnl_lock to prevent race conditions between net and pci/pm
	floppy: check FDC index for errors before assigning it
	vt: fix scrollback flushing on background consoles
	vt: selection, handle pending signals in paste_selection
	vt: vt_ioctl: fix race in VT_RESIZEX
	staging: android: ashmem: Disallow ashmem memory from being remapped
	staging: vt6656: fix sign of rx_dbm to bb_pre_ed_rssi.
	xhci: Force Maximum Packet size for Full-speed bulk devices to valid range.
	xhci: fix runtime pm enabling for quirky Intel hosts
	xhci: apply XHCI_PME_STUCK_QUIRK to Intel Comet Lake platforms
	xhci: Fix memory leak when caching protocol extended capability PSI tables - take 2
	usb: host: xhci: update event ring dequeue pointer on purpose
	USB: core: add endpoint-blacklist quirk
	USB: quirks: blacklist duplicate ep on Sound Devices USBPre2
	usb: uas: fix a plug & unplug racing
	USB: Fix novation SourceControl XL after suspend
	USB: hub: Don't record a connect-change event during reset-resume
	USB: hub: Fix the broken detection of USB3 device in SMSC hub
	usb: dwc2: Fix SET/CLEAR_FEATURE and GET_STATUS flows
	usb: dwc3: gadget: Check for IOC/LST bit in TRB->ctrl fields
	usb: dwc3: debug: fix string position formatting mixup with ret and len
	scsi: Revert "target/core: Inline transport_lun_remove_cmd()"
	staging: rtl8188eu: Fix potential security hole
	staging: rtl8188eu: Fix potential overuse of kernel memory
	staging: rtl8723bs: Fix potential security hole
	staging: rtl8723bs: Fix potential overuse of kernel memory
	drm/panfrost: perfcnt: Reserve/use the AS attached to the perfcnt MMU context
	powerpc/8xx: Fix clearing of bits 20-23 in ITLB miss
	powerpc/eeh: Fix deadlock handling dead PHB
	powerpc/tm: Fix clearing MSR[TS] in current when reclaiming on signal delivery
	powerpc/entry: Fix an #if which should be an #ifdef in entry_32.S
	powerpc/hugetlb: Fix 512k hugepages on 8xx with 16k page size
	powerpc/hugetlb: Fix 8M hugepages on 8xx
	arm64: memory: Add missing brackets to untagged_addr() macro
	jbd2: fix ocfs2 corrupt when clearing block group bits
	x86/ima: use correct identifier for SetupMode variable
	x86/mce/amd: Publish the bank pointer only after setup has succeeded
	x86/mce/amd: Fix kobject lifetime
	x86/cpu/amd: Enable the fixed Instructions Retired counter IRPERF
	serial: 8250: Check UPF_IRQ_SHARED in advance
	tty/serial: atmel: manage shutdown in case of RS485 or ISO7816 mode
	tty: serial: imx: setup the correct sg entry for tx dma
	tty: serial: qcom_geni_serial: Fix RX cancel command failure
	serdev: ttyport: restore client ops on deregistration
	MAINTAINERS: Update drm/i915 bug filing URL
	ACPI: PM: s2idle: Check fixed wakeup events in acpi_s2idle_wake()
	Revert "ipc,sem: remove uneeded sem_undo_list lock usage in exit_sem()"
	mm/memcontrol.c: lost css_put in memcg_expand_shrinker_maps()
	nvme-multipath: Fix memory leak with ana_log_buf
	genirq/irqdomain: Make sure all irq domain flags are distinct
	mm/vmscan.c: don't round up scan size for online memory cgroup
	mm/sparsemem: pfn_to_page is not valid yet on SPARSEMEM
	lib/stackdepot.c: fix global out-of-bounds in stack_slabs
	mm: Avoid creating virtual address aliases in brk()/mmap()/mremap()
	drm/amdgpu/soc15: fix xclk for raven
	drm/amdgpu/gfx9: disable gfxoff when reading rlc clock
	drm/amdgpu/gfx10: disable gfxoff when reading rlc clock
	drm/nouveau/kms/gv100-: Re-set LUT after clearing for modesets
	drm/i915: Wean off drm_pci_alloc/drm_pci_free
	drm/i915: Update drm/i915 bug filing URL
	sched/psi: Fix OOB write when writing 0 bytes to PSI files
	KVM: nVMX: Don't emulate instructions in guest mode
	KVM: x86: don't notify userspace IOAPIC on edge-triggered interrupt EOI
	ext4: fix a data race in EXT4_I(inode)->i_disksize
	ext4: add cond_resched() to __ext4_find_entry()
	ext4: fix potential race between online resizing and write operations
	ext4: fix potential race between s_group_info online resizing and access
	ext4: fix potential race between s_flex_groups online resizing and access
	ext4: fix mount failure with quota configured as module
	ext4: rename s_journal_flag_rwsem to s_writepages_rwsem
	ext4: fix race between writepages and enabling EXT4_EXTENTS_FL
	KVM: nVMX: Refactor IO bitmap checks into helper function
	KVM: nVMX: Check IO instruction VM-exit conditions
	KVM: nVMX: clear PIN_BASED_POSTED_INTR from nested pinbased_ctls only when apicv is globally disabled
	KVM: nVMX: handle nested posted interrupts when apicv is disabled for L1
	KVM: apic: avoid calculating pending eoi from an uninitialized val
	btrfs: destroy qgroup extent records on transaction abort
	btrfs: fix bytes_may_use underflow in prealloc error condtition
	btrfs: reset fs_root to NULL on error in open_ctree
	btrfs: do not check delayed items are empty for single transaction cleanup
	Btrfs: fix btrfs_wait_ordered_range() so that it waits for all ordered extents
	Btrfs: fix race between shrinking truncate and fiemap
	btrfs: don't set path->leave_spinning for truncate
	Btrfs: fix deadlock during fast fsync when logging prealloc extents beyond eof
	Revert "dmaengine: imx-sdma: Fix memory leak"
	drm/i915/gt: Detect if we miss WaIdleLiteRestore
	drm/i915/execlists: Always force a context reload when rewinding RING_TAIL
	drm/i915/gvt: more locking for ppgtt mm LRU list
	drm/bridge: tc358767: fix poll timeouts
	drm/i915/gt: Protect defer_request() from new waiters
	drm/msm/dpu: fix BGR565 vs RGB565 confusion
	scsi: Revert "RDMA/isert: Fix a recently introduced regression related to logout"
	scsi: Revert "target: iscsi: Wait for all commands to finish before freeing a session"
	usb: gadget: composite: Fix bMaxPower for SuperSpeedPlus
	usb: dwc2: Fix in ISOC request length checking
	staging: rtl8723bs: fix copy of overlapping memory
	staging: greybus: use after free in gb_audio_manager_remove_all()
	ASoC: atmel: fix atmel_ssc_set_audio link failure
	ASoC: fsl_sai: Fix exiting path on probing failure
	ecryptfs: replace BUG_ON with error handling code
	iommu/vt-d: Fix compile warning from intel-svm.h
	crypto: rename sm3-256 to sm3 in hash_algo_name
	genirq/proc: Reject invalid affinity masks (again)
	bpf, offload: Replace bitwise AND by logical AND in bpf_prog_offload_info_fill
	arm64: lse: Fix LSE atomics with LLVM
	io_uring: fix __io_iopoll_check deadlock in io_sq_thread
	ALSA: rawmidi: Avoid bit fields for state flags
	ALSA: seq: Avoid concurrent access to queue flags
	ALSA: seq: Fix concurrent access to queue current tick/time
	netfilter: xt_hashlimit: limit the max size of hashtable
	rxrpc: Fix call RCU cleanup using non-bh-safe locks
	io_uring: prevent sq_thread from spinning when it should stop
	ata: ahci: Add shutdown to freeze hardware resources of ahci
	xen: Enable interrupts when calling _cond_resched()
	net/mlx5e: Reset RQ doorbell counter before moving RQ state from RST to RDY
	net/mlx5: Fix sleep while atomic in mlx5_eswitch_get_vepa
	net/mlx5e: Fix crash in recovery flow without devlink reporter
	s390/kaslr: Fix casts in get_random
	s390/mm: Explicitly compare PAGE_DEFAULT_KEY against zero in storage_key_init_range
	bpf: Selftests build error in sockmap_basic.c
	ASoC: SOF: Intel: hda: Add iDisp4 DAI
	Linux 5.4.23

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I1d60f06bcb6ee74e5601976c7af79153c41af11c
2020-03-01 10:17:44 +01:00
Ram Muthiah
aeb2afab7c ANDROID: GKI: Remove CONFIG_BRIDGE from arm64 config
CONFIG_BRIDGE is not needed at boot time and is tristate.
Any GKI device which requires this config can load the bridge module
during init.

Bug: 135666008
Test: Treehugger
Signed-off-by: Ram Muthiah <rammuthiah@google.com>
Change-Id: If22ceac2982a0f6b7a922393fb1dd08c68f6bc70
2020-02-28 18:04:05 -08:00
Siarhei Vishniakou
e03073f66f ANDROID: Enable HID_NINTENDO as y
This config will enable the Nintendo Switch Pro controller driver.

Change-Id: I50645a611566928e20a1afd4024f71803ed5fefa
Signed-off-by: Siarhei Vishniakou <svv@google.com>
Bug: 135136477
Test: tested via custom test app
Test: atest NintendoSwitchProTest
2020-02-28 21:32:30 +00:00
Daniel J. Ogorchock
e63d243880 FROMLIST: HID: nintendo: add nintendo switch controller driver
The hid-nintendo driver supports the Nintendo Switch Pro Controllers and
the Joy-Cons. The Pro Controllers can be used over USB or Bluetooth.

The Joy-Cons each create their own, independent input devices, so it is
up to userspace to combine them if desired.

Signed-off-by: Daniel J. Ogorchock <djogorchock@gmail.com>

Test: tested via custom test app
Test: atest NintendoSwitchProTest

Bug: 135136477
Link: https://patchwork.kernel.org/patch/11312547/
Link: https://lore.kernel.org/linux-input/20191230012720.2368987-2-djogorchock@gmail.com/
Change-Id: I179da1092faedc2ad25336224cf5ec8ff00e0d3f
Signed-off-by: Siarhei Vishniakou <svv@google.com>
2020-02-28 21:32:21 +00:00
Will Deacon
3975a38d52 UPSTREAM: iommu/arm-smmu: Restore naming of driver parameter prefix
Extending the Arm SMMU driver to allow for modular builds changed
KBUILD_MODNAME to be "arm_smmu_mod" so that a single module could be
built from the multiple existing object files without the need to rename
any source files.

This inadvertently changed the name of the driver parameters, which may
lead to runtime issues if bootloaders are relying on the old names for
correctness (e.g. "arm-smmu.disable_bypass=0").

Although MODULE_PARAM_PREFIX can be overridden to restore the old naming
for builtin parameters, only the new name is matched by modprobe and so
loading the driver as a module would cause parameters specified on the
kernel command line to be ignored. Instead, rename "arm_smmu_mod" to
"arm_smmu". Whilst it's a bit of a bodge, this allows us to create a
single module without renaming any files and makes use of the fact that
underscores and hyphens can be used interchangeably in parameter names.

Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Reported-by: Li Yang <leoyang.li@nxp.com>
Fixes: cd221bd24ff5 ("iommu/arm-smmu: Allow building as a module")
Signed-off-by: Will Deacon <will@kernel.org>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Change-Id: I13643e83944c5033bf0541992981a1d85d68273d
(cherry picked from commit ab362fffa0fe)
Signed-off-by: Will Deacon <willdeacon@google.com>
2020-02-28 19:43:29 +00:00
Roman Kiryanov
44f6840563 ANDROID: gki_defconfig: Remove 'BRIDGE_NETFILTER is not set'
BRIDGE_NETFILTER is disabled by default now.

Bug: 147493341
Bug: 150463745
Test: presubmit
Signed-off-by: Roman Kiryanov <rkir@google.com>
Change-Id: Ife8bb0bf2aacf64ad2594a449389e3706e54c5b5
2020-02-28 18:38:08 +00:00
Roman Kiryanov
2dff806c03 UPSTREAM: net: disable BRIDGE_NETFILTER by default
The description says 'If unsure, say N.' but
the module is built as M by default (once
the dependencies are satisfied).

When the module is selected (Y or M), it enables
NETFILTER_FAMILY_BRIDGE and SKB_EXTENSIONS
which alter kernel internal structures.

We (Android Studio Emulator) currently do not
use this module and think this it is more consistent
to have it disabled by default as opposite to
disabling it explicitly to prevent enabling
NETFILTER_FAMILY_BRIDGE and SKB_EXTENSIONS.

Signed-off-by: Roman Kiryanov <rkir@google.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 98bda63e20daab95bdc084ce00459a4f622a0505)
Bug: 150463745
Change-Id: I664d752f504598d21747d046930e6d7257c31253
2020-02-28 18:37:10 +00:00
Greg Kroah-Hartman
bfe3046eca Linux 5.4.23 2020-02-28 17:22:29 +01:00
Sathyanarayana Nujella
bb7ffcbec2 ASoC: SOF: Intel: hda: Add iDisp4 DAI
commit e68d6696575e1af3f92125e842f2853708f34589 upstream.

TGL supports more than three iDisp DAI's.
Add support for iDisp4 CPU DAI.

Without this patch, we saw the below error on our TGL DUT:
   sof_rt5682 tgl_max98357a_rt5682: ASoC: CPU DAI iDisp4 Pin not registered

Signed-off-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
Signed-off-by: Jairaj Arava <jairaj.arava@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191220171037.10689-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:29 +01:00
John Fastabend
fb81480206 bpf: Selftests build error in sockmap_basic.c
commit f2e97dc126b712c0d21219ed0c42710006c1cf52 upstream.

Fix following build error. We could push a tcp.h header into one of the
include paths, but I think its easy enough to simply pull in the three
defines we need here. If we end up using more of tcp.h at some point
we can pull it in later.

/home/john/git/bpf/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c: In function ‘connected_socket_v4’:
/home/john/git/bpf/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c:20:11: error: ‘TCP_REPAIR_ON’ undeclared (first use in this function)
  repair = TCP_REPAIR_ON;
           ^
/home/john/git/bpf/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c:20:11: note: each undeclared identifier is reported only once for each function it appears in
/home/john/git/bpf/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c:29:11: error: ‘TCP_REPAIR_OFF_NO_WP’ undeclared (first use in this function)
  repair = TCP_REPAIR_OFF_NO_WP;

Then with fix,

$ ./test_progs -n 44
#44/1 sockmap create_update_free:OK
#44/2 sockhash create_update_free:OK
#44 sockmap_basic:OK

Fixes: 5d3919a953c3c ("selftests/bpf: Test freeing sockmap/sockhash with a socket in it")
Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
Link: https://lore.kernel.org/bpf/158131347731.21414.12120493483848386652.stgit@john-Precision-5820-Tower
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Nathan Chancellor
19be2b3eea s390/mm: Explicitly compare PAGE_DEFAULT_KEY against zero in storage_key_init_range
commit 380324734956c64cd060e1db4304f3117ac15809 upstream.

Clang warns:

 In file included from ../arch/s390/purgatory/purgatory.c:10:
 In file included from ../include/linux/kexec.h:18:
 In file included from ../include/linux/crash_core.h:6:
 In file included from ../include/linux/elfcore.h:5:
 In file included from ../include/linux/user.h:1:
 In file included from ../arch/s390/include/asm/user.h:11:
 ../arch/s390/include/asm/page.h:45:6: warning: converting the result of
 '<<' to a boolean always evaluates to false
 [-Wtautological-constant-compare]
         if (PAGE_DEFAULT_KEY)
            ^
 ../arch/s390/include/asm/page.h:23:44: note: expanded from macro
 'PAGE_DEFAULT_KEY'
 #define PAGE_DEFAULT_KEY        (PAGE_DEFAULT_ACC << 4)
                                                  ^
 1 warning generated.

Explicitly compare this against zero to silence the warning as it is
intended to be used in a boolean context.

Fixes: de3fa841e4 ("s390/mm: fix compile for PAGE_DEFAULT_KEY != 0")
Link: https://github.com/ClangBuiltLinux/linux/issues/860
Link: https://lkml.kernel.org/r/20200214064207.10381-1-natechancellor@gmail.com
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Nathan Chancellor
148c8531b6 s390/kaslr: Fix casts in get_random
commit 788d671517b5c81efbed9310ccbadb8cca86a08e upstream.

Clang warns:

../arch/s390/boot/kaslr.c:78:25: warning: passing 'char *' to parameter
of type 'const u8 *' (aka 'const unsigned char *') converts between
pointers to integer
types with different sign [-Wpointer-sign]
                                  (char *) entropy, (char *) entropy,
                                                    ^~~~~~~~~~~~~~~~
../arch/s390/include/asm/cpacf.h:280:28: note: passing argument to
parameter 'src' here
                            u8 *dest, const u8 *src, long src_len)
                                                ^
2 warnings generated.

Fix the cast to match what else is done in this function.

Fixes: b2d24b97b2 ("s390/kernel: add support for kernel address space layout randomization (KASLR)")
Link: https://github.com/ClangBuiltLinux/linux/issues/862
Link: https://lkml.kernel.org/r/20200208141052.48476-1-natechancellor@gmail.com
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Aya Levin
e26be26673 net/mlx5e: Fix crash in recovery flow without devlink reporter
commit 1ad6c43c6a7b8627240c6cc19c69e31fedc596a7 upstream.

When health reporters are not supported, recovery function is invoked
directly, not via devlink health reporters.

In this direct flow, the recover function input parameter was passed
incorrectly and is causing a kernel oops. This patch is fixing the input
parameter.

Following call trace is observed on rx error health reporting.

Internal error: Oops: 96000007 [#1] PREEMPT SMP
Process kworker/u16:4 (pid: 4584, stack limit = 0x00000000c9e45703)
Call trace:
mlx5e_rx_reporter_err_rq_cqe_recover+0x30/0x164 [mlx5_core]
mlx5e_health_report+0x60/0x6c [mlx5_core]
mlx5e_reporter_rq_cqe_err+0x6c/0x90 [mlx5_core]
mlx5e_rq_err_cqe_work+0x20/0x2c [mlx5_core]
process_one_work+0x168/0x3d0
worker_thread+0x58/0x3d0
kthread+0x108/0x134

Fixes: c50de4af1d ("net/mlx5e: Generalize tx reporter's functionality")
Signed-off-by: Aya Levin <ayal@mellanox.com>
Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Huy Nguyen
fca1cdd341 net/mlx5: Fix sleep while atomic in mlx5_eswitch_get_vepa
commit 3d9c5e023a0dbf3e117bb416cfefd9405bf5af0c upstream.

rtnl_bridge_getlink is protected by rcu lock, so mlx5_eswitch_get_vepa
cannot take mutex lock. Two possible issues can happen:
1. User at the same time change vepa mode via RTM_SETLINK command.
2. User at the same time change the switchdev mode via devlink netlink
interface.

Case 1 cannot happen because rtnl executes one message in order.
Case 2 can happen but we do not expect user to change the switchdev mode
when changing vepa. Even if a user does it, so he will read a value
which is no longer valid.

Fixes: 8da202b249 ("net/mlx5: E-Switch, Add support for VEPA in legacy mode.")
Signed-off-by: Huy Nguyen <huyn@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Aya Levin
06320052ee net/mlx5e: Reset RQ doorbell counter before moving RQ state from RST to RDY
commit 5ee090ed0da649b1febae2b7c285ac77d1e55a0c upstream.

Initialize RQ doorbell counters to zero prior to moving an RQ from RST
to RDY state. Per HW spec, when RQ is back to RDY state, the descriptor
ID on the completion is reset. The doorbell record must comply.

Fixes: 8276ea1353 ("net/mlx5e: Report and recover from CQE with error on RQ")
Signed-off-by: Aya Levin <ayal@mellanox.com>
Reported-by: Tariq Toukan <tariqt@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Thomas Gleixner
773dfd2223 xen: Enable interrupts when calling _cond_resched()
commit 8645e56a4ad6dcbf504872db7f14a2f67db88ef2 upstream.

xen_maybe_preempt_hcall() is called from the exception entry point
xen_do_hypervisor_callback with interrupts disabled.

_cond_resched() evades the might_sleep() check in cond_resched() which
would have caught that and schedule_debug() unfortunately lacks a check
for irqs_disabled().

Enable interrupts around the call and use cond_resched() to catch future
issues.

Fixes: fdfd811ddd ("x86/xen: allow privcmd hypercalls to be preempted")
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/878skypjrh.fsf@nanos.tec.linutronix.de
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Prabhakar Kushwaha
9724b3f28d ata: ahci: Add shutdown to freeze hardware resources of ahci
commit 10a663a1b15134a5a714aa515e11425a44d4fdf7 upstream.

device_shutdown() called from reboot or power_shutdown expect
all devices to be shutdown. Same is true for even ahci pci driver.
As no ahci shutdown function is implemented, the ata subsystem
always remains alive with DMA & interrupt support. File system
related calls should not be honored after device_shutdown().

So defining ahci pci driver shutdown to freeze hardware (mask
interrupt, stop DMA engine and free DMA resources).

Signed-off-by: Prabhakar Kushwaha <pkushwaha@marvell.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:28 +01:00
Stefano Garzarella
8eb92c1228 io_uring: prevent sq_thread from spinning when it should stop
commit 7143b5ac5750f404ff3a594b34fdf3fc2f99f828 upstream.

This patch drops 'cur_mm' before calling cond_resched(), to prevent
the sq_thread from spinning even when the user process is finished.

Before this patch, if the user process ended without closing the
io_uring fd, the sq_thread continues to spin until the
'sq_thread_idle' timeout ends.

In the worst case where the 'sq_thread_idle' parameter is bigger than
INT_MAX, the sq_thread will spin forever.

Fixes: 6c271ce2f1 ("io_uring: add submission polling")
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
David Howells
b0f5f25c55 rxrpc: Fix call RCU cleanup using non-bh-safe locks
commit 963485d436ccc2810177a7b08af22336ec2af67b upstream.

rxrpc_rcu_destroy_call(), which is called as an RCU callback to clean up a
put call, calls rxrpc_put_connection() which, deep in its bowels, takes a
number of spinlocks in a non-BH-safe way, including rxrpc_conn_id_lock and
local->client_conns_lock.  RCU callbacks, however, are normally called from
softirq context, which can cause lockdep to notice the locking
inconsistency.

To get lockdep to detect this, it's necessary to have the connection
cleaned up on the put at the end of the last of its calls, though normally
the clean up is deferred.  This can be induced, however, by starting a call
on an AF_RXRPC socket and then closing the socket without reading the
reply.

Fix this by having rxrpc_rcu_destroy_call() punt the destruction to a
workqueue if in softirq-mode and defer the destruction to process context.

Note that another way to fix this could be to add a bunch of bh-disable
annotations to the spinlocks concerned - and there might be more than just
those two - but that means spending more time with BHs disabled.

Note also that some of these places were covered by bh-disable spinlocks
belonging to the rxrpc_transport object, but these got removed without the
_bh annotation being retained on the next lock in.

Fixes: 999b69f892 ("rxrpc: Kill the client connection bundle concept")
Reported-by: syzbot+d82f3ac8d87e7ccbb2c9@syzkaller.appspotmail.com
Reported-by: syzbot+3f1fd6b8cbf8702d134e@syzkaller.appspotmail.com
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Hillf Danton <hdanton@sina.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Cong Wang
829e0a0ae2 netfilter: xt_hashlimit: limit the max size of hashtable
commit 8d0015a7ab76b8b1e89a3e5f5710a6e5103f2dd5 upstream.

The user-specified hashtable size is unbound, this could
easily lead to an OOM or a hung task as we hold the global
mutex while allocating and initializing the new hashtable.

Add a max value to cap both cfg->size and cfg->max, as
suggested by Florian.

Reported-and-tested-by: syzbot+adf6c6c2be1c3a718121@syzkaller.appspotmail.com
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Reviewed-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Takashi Iwai
86502c68b8 ALSA: seq: Fix concurrent access to queue current tick/time
commit dc7497795e014d84699c3b8809ed6df35352dd74 upstream.

snd_seq_check_queue() passes the current tick and time of the given
queue as a pointer to snd_seq_prioq_cell_out(), but those might be
updated concurrently by the seq timer update.

Fix it by retrieving the current tick and time via the proper helper
functions at first, and pass those values to snd_seq_prioq_cell_out()
later in the loops.

snd_seq_timer_get_cur_time() takes a new argument and adjusts with the
current system time only when it's requested so; this update isn't
needed for snd_seq_check_queue(), as it's called either from the
interrupt handler or right after queuing.

Also, snd_seq_timer_get_cur_tick() is changed to read the value in the
spinlock for the concurrency, too.

Reported-by: syzbot+fd5e0eaa1a32999173b2@syzkaller.appspotmail.com
Link: https://lore.kernel.org/r/20200214111316.26939-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Takashi Iwai
2b550d1c7a ALSA: seq: Avoid concurrent access to queue flags
commit bb51e669fa49feb5904f452b2991b240ef31bc97 upstream.

The queue flags are represented in bit fields and the concurrent
access may result in unexpected results.  Although the current code
should be mostly OK as it's only reading a field while writing other
fields as KCSAN reported, it's safer to cover both with a proper
spinlock protection.

This patch fixes the possible concurrent read by protecting with
q->owner_lock.  Also the queue owner field is protected as well since
it's the field to be protected by the lock itself.

Reported-by: syzbot+65c6c92d04304d0a8efc@syzkaller.appspotmail.com
Reported-by: syzbot+e60ddfa48717579799dd@syzkaller.appspotmail.com
Link: https://lore.kernel.org/r/20200214111316.26939-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Takashi Iwai
84e041a5df ALSA: rawmidi: Avoid bit fields for state flags
commit dfa9a5efe8b932a84b3b319250aa3ac60c20f876 upstream.

The rawmidi state flags (opened, append, active_sensing) are stored in
bit fields that can be potentially racy when concurrently accessed
without any locks.  Although the current code should be fine, there is
also no any real benefit by keeping the bitfields for this kind of
short number of members.

This patch changes those bit fields flags to the simple bool fields.
There should be no size increase of the snd_rawmidi_substream by this
change.

Reported-by: syzbot+576cc007eb9f2c968200@syzkaller.appspotmail.com
Link: https://lore.kernel.org/r/20200214111316.26939-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Xiaoguang Wang
c7deb9612e io_uring: fix __io_iopoll_check deadlock in io_sq_thread
commit c7849be9cc2dd2754c48ddbaca27c2de6d80a95d upstream.

Since commit a3a0e43fd7 ("io_uring: don't enter poll loop if we have
CQEs pending"), if we already events pending, we won't enter poll loop.
In case SETUP_IOPOLL and SETUP_SQPOLL are both enabled, if app has
been terminated and don't reap pending events which are already in cq
ring, and there are some reqs in poll_list, io_sq_thread will enter
__io_iopoll_check(), and find pending events, then return, this loop
will never have a chance to exit.

I have seen this issue in fio stress tests, to fix this issue, let
io_sq_thread call io_iopoll_getevents() with argument 'min' being zero,
and remove __io_iopoll_check().

Fixes: a3a0e43fd7 ("io_uring: don't enter poll loop if we have CQEs pending")
Signed-off-by: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Vincenzo Frascino
d562fdad84 arm64: lse: Fix LSE atomics with LLVM
commit dd1f6308b28edf0452dd5dc7877992903ec61e69 upstream.

Commit e0d5896bd356 ("arm64: lse: fix LSE atomics with LLVM's integrated
assembler") broke the build when clang is used in connjunction with the
binutils assembler ("-no-integrated-as"). This happens because
__LSE_PREAMBLE is defined as ".arch armv8-a+lse", which overrides the
version of the CPU architecture passed via the "-march" paramter to gas:

$ aarch64-none-linux-gnu-as -EL -I ./arch/arm64/include
                                -I ./arch/arm64/include/generated
                                -I ./include -I ./include
                                -I ./arch/arm64/include/uapi
                                -I ./arch/arm64/include/generated/uapi
                                -I ./include/uapi -I ./include/generated/uapi
                                -I ./init -I ./init
                                -march=armv8.3-a -o init/do_mounts.o
                                /tmp/do_mounts-d7992a.s
/tmp/do_mounts-d7992a.s: Assembler messages:
/tmp/do_mounts-d7992a.s:1959: Error: selected processor does not support `autiasp'
/tmp/do_mounts-d7992a.s:2021: Error: selected processor does not support `paciasp'
/tmp/do_mounts-d7992a.s:2157: Error: selected processor does not support `autiasp'
/tmp/do_mounts-d7992a.s:2175: Error: selected processor does not support `paciasp'
/tmp/do_mounts-d7992a.s:2494: Error: selected processor does not support `autiasp'

Fix the issue by replacing ".arch armv8-a+lse" with ".arch_extension lse".
Sami confirms that the clang integrated assembler does now support the
'.arch_extension' directive, so this change will be fine even for LTO
builds in future.

Fixes: e0d5896bd356cd ("arm64: lse: fix LSE atomics with LLVM's integrated assembler")
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Reported-by: Amit Kachhap <Amit.Kachhap@arm.com>
Tested-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Johannes Krude
8132323eb3 bpf, offload: Replace bitwise AND by logical AND in bpf_prog_offload_info_fill
commit e20d3a055a457a10a4c748ce5b7c2ed3173a1324 upstream.

This if guards whether user-space wants a copy of the offload-jited
bytecode and whether this bytecode exists. By erroneously doing a bitwise
AND instead of a logical AND on user- and kernel-space buffer-size can lead
to no data being copied to user-space especially when user-space size is a
power of two and bigger then the kernel-space buffer.

Fixes: fcfb126def ("bpf: add new jited info fields in bpf_dev_offload and bpf_prog_info")
Signed-off-by: Johannes Krude <johannes@krude.de>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/bpf/20200212193227.GA3769@phlox.h.transitiv.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:27 +01:00
Thomas Gleixner
2463a30f66 genirq/proc: Reject invalid affinity masks (again)
commit cba6437a1854fde5934098ec3bd0ee83af3129f5 upstream.

Qian Cai reported that the WARN_ON() in the x86/msi affinity setting code,
which catches cases where the affinity setting is not done on the CPU which
is the current target of the interrupt, triggers during CPU hotplug stress
testing.

It turns out that the warning which was added with the commit addressing
the MSI affinity race unearthed yet another long standing bug.

If user space writes a bogus affinity mask, i.e. it contains no online CPUs,
then it calls irq_select_affinity_usr(). This was introduced for ALPHA in

  eee45269b0 ("[PATCH] Alpha: convert to generic irq framework (generic part)")

and subsequently made available for all architectures in

  1840475676 ("genirq: Expose default irq affinity mask (take 3)")

which introduced the circumvention of the affinity setting restrictions for
interrupt which cannot be moved in process context.

The whole exercise is bogus in various aspects:

  1) If the interrupt is already started up then there is absolutely
     no point to honour a bogus interrupt affinity setting from user
     space. The interrupt is already assigned to an online CPU and it
     does not make any sense to reassign it to some other randomly
     chosen online CPU.

  2) If the interupt is not yet started up then there is no point
     either. A subsequent startup of the interrupt will invoke
     irq_setup_affinity() anyway which will chose a valid target CPU.

So the only correct solution is to just return -EINVAL in case user space
wrote an affinity mask which does not contain any online CPUs, except for
ALPHA which has it's own magic sauce for this.

Fixes: 1840475676 ("genirq: Expose default irq affinity mask (take 3)")
Reported-by: Qian Cai <cai@lca.pw>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Qian Cai <cai@lca.pw>
Link: https://lkml.kernel.org/r/878sl8xdbm.fsf@nanos.tec.linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:26 +01:00
Tianjia Zhang
c23074e209 crypto: rename sm3-256 to sm3 in hash_algo_name
commit 6a30e1b1dcad0ba94fae757f797812d7d8dcb72c upstream.

The name sm3-256 is defined in hash_algo_name in hash_info, but the
algorithm name implemented in sm3_generic.c is sm3, which will cause
the sm3-256 algorithm to be not found in some application scenarios of
the hash algorithm, and an ENOENT error will occur. For example,
IMA, keys, and other subsystems that reference hash_algo_name all use
the hash algorithm of sm3.

Fixes: 5ca4c20cfd ("keys, trusted: select hash algorithm for TPM2 chips")
Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Reviewed-by: Pascal van Leeuwen <pvanleeuwen@rambus.com>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:26 +01:00
Joerg Roedel
8278f34f6c iommu/vt-d: Fix compile warning from intel-svm.h
commit e7598fac323aad0e502415edeffd567315994dd6 upstream.

The intel_svm_is_pasid_valid() needs to be marked inline, otherwise it
causes the compile warning below:

  CC [M]  drivers/dma/idxd/cdev.o
In file included from drivers/dma/idxd/cdev.c:9:0:
./include/linux/intel-svm.h:125:12: warning: ‘intel_svm_is_pasid_valid’ defined but not used [-Wunused-function]
 static int intel_svm_is_pasid_valid(struct device *dev, int pasid)
            ^~~~~~~~~~~~~~~~~~~~~~~~

Reported-by: Borislav Petkov <bp@alien8.de>
Fixes: 15060aba71 ('iommu/vt-d: Helper function to query if a pasid has any active users')
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-28 17:22:26 +01:00