diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index dc4eacfe82c1c..5406c6a6d95e5 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -6,12 +6,12 @@ add_wait_queue adjust_managed_page_count alarm_cancel + alarm_expires_remaining alarm_init alarm_start_relative - alarm_expires_remaining + alarmtimer_get_rtcdev alloc_chrdev_region __alloc_disk_node - alarmtimer_get_rtcdev alloc_etherdev_mqs alloc_io_pgtable_ops alloc_netdev_mqs @@ -44,6 +44,7 @@ backlight_device_set_brightness backlight_device_unregister bin2hex + bio_crypt_should_process __bitmap_clear bitmap_find_free_region bitmap_find_next_zero_area_off @@ -109,10 +110,10 @@ bpf_prog_put bpf_prog_sub bpf_stats_enabled_key + bpf_trace_run1 bpf_trace_run10 bpf_trace_run11 bpf_trace_run12 - bpf_trace_run1 bpf_trace_run2 bpf_trace_run3 bpf_trace_run4 @@ -127,8 +128,10 @@ bus_find_device bus_for_each_dev bus_register + bus_register_notifier bus_set_iommu bus_unregister + bus_unregister_notifier call_netdevice_notifiers cancel_delayed_work cancel_delayed_work_sync @@ -318,8 +321,8 @@ csum_tcpudp_nofold _ctype current_time - datagram_poll d_add + datagram_poll d_drop deactivate_locked_super default_llseek @@ -570,14 +573,15 @@ dma_get_slave_channel d_make_root dmam_alloc_attrs - dmam_free_coherent dma_max_mapping_size + dmam_free_coherent dma_mmap_attrs dma_pool_alloc dma_pool_create dma_pool_destroy dma_pool_free dma_release_channel + __dma_request_channel dma_request_slave_channel dma_resv_add_excl_fence dma_resv_add_shared_fence @@ -588,7 +592,6 @@ dma_resv_test_signaled_rcu dma_resv_wait_timeout_rcu dma_set_coherent_mask - __dma_request_channel dma_set_mask do_exit do_wait_intr @@ -882,8 +885,8 @@ drm_vma_offset_manager_destroy drm_vma_offset_manager_init drm_vma_offset_remove - drop_nlink drm_wait_one_vblank + drop_nlink dump_stack enable_irq enable_percpu_irq @@ -943,8 +946,8 @@ freq_qos_add_request freq_qos_remove_request freq_qos_update_request - fsl8250_handle_irq fs_kobj + fsl8250_handle_irq fsstack_copy_attr_all ftrace_set_clr_event full_name_hash @@ -1027,6 +1030,7 @@ gpiochip_line_is_irq gpiochip_line_is_valid gpiochip_remove + gpiochip_set_nested_irqchip gpiod_cansleep gpiod_direction_input gpiod_direction_output @@ -1038,7 +1042,6 @@ gpiod_get_value_cansleep gpiod_is_active_low gpiod_set_debounce - gpiochip_set_nested_irqchip gpiod_set_raw_value gpiod_set_raw_value_cansleep gpiod_set_value @@ -1065,9 +1068,9 @@ hrtimer_forward __hrtimer_get_remaining hrtimer_init + hrtimer_init_sleeper hrtimer_start_range_ns hrtimer_try_to_cancel - hrtimer_init_sleeper hvc_alloc hvc_instantiate hvc_kick @@ -1086,25 +1089,30 @@ i2c_adapter_type i2c_add_adapter i2c_add_numbered_adapter + i2c_bus_type i2c_del_adapter i2c_del_driver + i2c_for_each_dev + i2c_get_adapter i2c_get_device_id i2c_get_dma_safe_msg_buf + i2c_put_adapter i2c_put_dma_safe_msg_buf i2c_register_driver i2c_smbus_read_byte - i2c_smbus_write_byte i2c_smbus_read_byte_data + i2c_smbus_read_byte_data + i2c_smbus_read_i2c_block_data + i2c_smbus_write_byte i2c_smbus_write_byte_data + i2c_smbus_write_byte_data + i2c_smbus_write_i2c_block_data __i2c_smbus_xfer i2c_smbus_xfer __i2c_transfer - i2c_smbus_read_i2c_block_data - i2c_smbus_read_byte_data - i2c_smbus_write_i2c_block_data - i2c_smbus_write_byte_data i2c_transfer i2c_transfer_buffer_flags + i2c_verify_client icc_get icc_link_create icc_node_add @@ -1256,7 +1264,6 @@ irq_get_irq_data irq_modify_status irq_of_parse_and_map - irq_work_queue irq_set_affinity_hint irq_set_affinity_notifier irq_set_chained_handler_and_data @@ -1269,6 +1276,7 @@ irq_set_irq_wake irq_set_parent irq_to_desc + irq_work_queue iterate_dir iterate_fd jiffies @@ -1291,11 +1299,10 @@ kernfs_put kern_path keyslot_manager_create - keyslot_manager_private - keyslot_manager_set_max_dun_bytes - keyslot_manager_reprogram_all_keys keyslot_manager_destroy - bio_crypt_should_process + keyslot_manager_private + keyslot_manager_reprogram_all_keys + keyslot_manager_set_max_dun_bytes __kfifo_in __kfifo_out kfree @@ -1410,8 +1417,8 @@ mdiobus_free __mdiobus_register mdiobus_unregister - media_create_pad_link media_create_intf_link + media_create_pad_link media_device_cleanup media_device_init __media_device_register @@ -1528,8 +1535,8 @@ nf_conntrack_destroy nla_memcpy __nla_parse - nla_put_64bit nla_put + nla_put_64bit __nlmsg_put no_llseek nonseekable_open @@ -1539,8 +1546,8 @@ nr_swap_pages ns_capable nsecs_to_jiffies - ns_to_timespec64 ns_to_timespec + ns_to_timespec64 __num_online_cpus nvmem_cell_get nvmem_cell_put @@ -1598,11 +1605,11 @@ of_get_parent of_get_property of_get_regulator_init_data + of_graph_get_endpoint_by_regs of_graph_get_next_endpoint of_graph_get_remote_node - of_graph_get_remote_port_parent of_graph_get_remote_port - of_graph_get_endpoint_by_regs + of_graph_get_remote_port_parent of_graph_parse_endpoint of_hwspin_lock_get_id of_icc_get @@ -1685,17 +1692,22 @@ pci_common_swizzle pci_d3cold_disable pci_device_group + pci_device_is_present + pci_dev_present pci_disable_device pci_disable_msi pcie_bus_configure_settings + pcie_capability_clear_and_set_word pcie_capability_read_word pci_enable_device + pci_find_bus pci_find_capability pci_find_ext_capability pci_find_next_capability pci_find_pcie_root_port pci_free_irq_vectors pci_get_device + pci_get_slot pci_iomap pci_iomap_range pci_irq_get_affinity @@ -1725,7 +1737,6 @@ pci_walk_bus pci_write_config_dword pci_write_config_word - pci_dev_present PDE_DATA __per_cpu_offset perf_trace_buf_alloc @@ -1930,8 +1941,8 @@ refcount_inc_checked refcount_inc_not_zero_checked __refrigerator - regcache_cache_only regcache_cache_bypass + regcache_cache_only regcache_mark_dirty regcache_sync regcache_sync_region @@ -2107,10 +2118,10 @@ sdev_prefix_printk __sdhci_add_host sdhci_add_host + sdhci_cleanup_host sdhci_cqe_disable sdhci_cqe_enable sdhci_cqe_irq - sdhci_cleanup_host sdhci_dumpregs sdhci_enable_clk sdhci_get_property @@ -2158,6 +2169,7 @@ sg_alloc_table_from_pages sg_copy_from_buffer sg_copy_to_buffer + sget sg_free_table sg_init_one sg_init_table @@ -2173,7 +2185,6 @@ sg_pcopy_from_buffer sg_pcopy_to_buffer sg_scsi_ioctl - sget shmem_file_setup shmem_read_mapping_page_gfp shmem_truncate_range @@ -2382,6 +2393,7 @@ strcmp strcpy strcspn + stream_open strim string_get_size string_unescape @@ -2791,8 +2803,8 @@ vb2_ops_wait_prepare vb2_plane_cookie vb2_plane_vaddr - vb2_prepare_buf vb2_poll + vb2_prepare_buf vb2_qbuf vb2_querybuf vb2_queue_error @@ -2907,7 +2919,3 @@ xdp_rxq_info_reg xdp_rxq_info_reg_mem_model xdp_rxq_info_unreg - pci_get_slot - pcie_capability_clear_and_set_word - pci_device_is_present - pci_find_bus diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 7ac1816d45c80..020aadc4f0a9d 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1965,6 +1965,7 @@ static void binder_deferred_fd_close(int fd) } static void binder_transaction_buffer_release(struct binder_proc *proc, + struct binder_thread *thread, struct binder_buffer *buffer, binder_size_t failed_at, bool is_failure) @@ -2124,8 +2125,16 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, &proc->alloc, &fd, buffer, offset, sizeof(fd)); WARN_ON(err); - if (!err) + if (!err) { binder_deferred_fd_close(fd); + /* + * Need to make sure the thread goes + * back to userspace to complete the + * deferred close + */ + if (thread) + thread->looper_need_return = true; + } } } break; default: @@ -3206,7 +3215,7 @@ err_bad_parent: err_copy_data_failed: binder_free_txn_fixups(t); trace_binder_transaction_failed_buffer_release(t->buffer); - binder_transaction_buffer_release(target_proc, t->buffer, + binder_transaction_buffer_release(target_proc, NULL, t->buffer, buffer_offset, true); if (target_node) binder_dec_node_tmpref(target_node); @@ -3285,7 +3294,9 @@ err_invalid_target_handle: * Cleanup buffer and free it. */ static void -binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer) +binder_free_buf(struct binder_proc *proc, + struct binder_thread *thread, + struct binder_buffer *buffer) { binder_inner_proc_lock(proc); if (buffer->transaction) { @@ -3313,7 +3324,7 @@ binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer) binder_node_inner_unlock(buf_node); } trace_binder_transaction_buffer_release(buffer); - binder_transaction_buffer_release(proc, buffer, 0, false); + binder_transaction_buffer_release(proc, thread, buffer, 0, false); binder_alloc_free_buf(&proc->alloc, buffer); } @@ -3507,7 +3518,7 @@ static int binder_thread_write(struct binder_proc *proc, proc->pid, thread->pid, (u64)data_ptr, buffer->debug_id, buffer->transaction ? "active" : "finished"); - binder_free_buf(proc, buffer); + binder_free_buf(proc, thread, buffer); break; } @@ -4194,7 +4205,7 @@ retry: buffer->transaction = NULL; binder_cleanup_transaction(t, "fd fixups failed", BR_FAILED_REPLY); - binder_free_buf(proc, buffer); + binder_free_buf(proc, thread, buffer); binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, "%d:%d %stransaction %d fd fixups failed %d/%d, line %d\n", proc->pid, thread->pid, diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index b6740ad773ee7..7b020e8c8aef8 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1998,6 +1998,9 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) case BUS_I2C: bus = "I2C"; break; + case BUS_SPI: + bus = "SPI"; + break; case BUS_VIRTUAL: bus = "VIRTUAL"; break; diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 776cdd560eb30..a4e43e0bbddef 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -860,6 +860,8 @@ #define USB_DEVICE_ID_MS_POWER_COVER 0x07da #define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER 0x02fd #define USB_DEVICE_ID_MS_PIXART_MOUSE 0x00cb +#define SPI_DEVICE_ID_MS_SURFACE_D6_0 0x0c1d +#define SPI_DEVICE_ID_MS_SURFACE_D6_1 0x0c42 #define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS 0x02e0 #define USB_VENDOR_ID_MOJO 0x8282 diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c index 8cb1ca1936e42..e449ee9cc04c2 100644 --- a/drivers/hid/hid-microsoft.c +++ b/drivers/hid/hid-microsoft.c @@ -27,6 +27,7 @@ #define MS_DUPLICATE_USAGES BIT(5) #define MS_SURFACE_DIAL BIT(6) #define MS_QUIRK_FF BIT(7) +#define MS_NOHIDINPUT BIT(8) struct ms_data { unsigned long quirks; @@ -370,6 +371,7 @@ static int ms_probe(struct hid_device *hdev, const struct hid_device_id *id) unsigned long quirks = id->driver_data; struct ms_data *ms; int ret; + unsigned int connect_mask; ms = devm_kzalloc(&hdev->dev, sizeof(*ms), GFP_KERNEL); if (ms == NULL) @@ -379,20 +381,25 @@ static int ms_probe(struct hid_device *hdev, const struct hid_device_id *id) hid_set_drvdata(hdev, ms); + connect_mask = HID_CONNECT_DEFAULT | ((quirks & MS_HIDINPUT) ? + HID_CONNECT_HIDINPUT_FORCE : 0); + if (quirks & MS_NOGET) hdev->quirks |= HID_QUIRK_NOGET; if (quirks & MS_SURFACE_DIAL) hdev->quirks |= HID_QUIRK_INPUT_PER_APP; + if (quirks & MS_NOHIDINPUT) + connect_mask &= ~HID_CONNECT_HIDINPUT; + ret = hid_parse(hdev); if (ret) { hid_err(hdev, "parse failed\n"); goto err_free; } - ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT | ((quirks & MS_HIDINPUT) ? - HID_CONNECT_HIDINPUT_FORCE : 0)); + ret = hid_hw_start(hdev, connect_mask); if (ret) { hid_err(hdev, "hw start failed\n"); goto err_free; @@ -451,6 +458,10 @@ static const struct hid_device_id ms_devices[] = { .driver_data = MS_SURFACE_DIAL }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER), .driver_data = MS_QUIRK_FF }, + { HID_SPI_DEVICE(USB_VENDOR_ID_MICROSOFT, SPI_DEVICE_ID_MS_SURFACE_D6_0), + .driver_data = MS_NOHIDINPUT }, + { HID_SPI_DEVICE(USB_VENDOR_ID_MICROSOFT, SPI_DEVICE_ID_MS_SURFACE_D6_1), + .driver_data = MS_NOHIDINPUT }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS), .driver_data = MS_QUIRK_FF }, { } diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c index efc9d0d281709..3192ec4bef939 100644 --- a/drivers/hid/hid-quirks.c +++ b/drivers/hid/hid-quirks.c @@ -513,6 +513,8 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) }, + { HID_SPI_DEVICE(USB_VENDOR_ID_MICROSOFT, SPI_DEVICE_ID_MS_SURFACE_D6_0) }, + { HID_SPI_DEVICE(USB_VENDOR_ID_MICROSOFT, SPI_DEVICE_ID_MS_SURFACE_D6_1) }, #endif #if IS_ENABLED(CONFIG_HID_MONTEREY) { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) }, diff --git a/include/linux/hid.h b/include/linux/hid.h index 85e6f80335c94..2c2b26ac11f6c 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -681,6 +681,8 @@ struct hid_descriptor { .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod) #define HID_I2C_DEVICE(ven, prod) \ .bus = BUS_I2C, .vendor = (ven), .product = (prod) +#define HID_SPI_DEVICE(ven, prod) \ + .bus = BUS_SPI, .vendor = (ven), .product = (prod) #define HID_REPORT_ID(rep) \ .report_type = (rep)