Snap for 9034712 from 45971eed4e to android12-5.10-keystone-qcom-release

Change-Id: Ifa7dd7abe4488f60aa8754f0e24235a2a60307e8
This commit is contained in:
Android Build Coastguard Worker
2022-09-07 16:08:40 +00:00
684 changed files with 9308 additions and 4977 deletions

View File

@@ -76,7 +76,7 @@ The beginning of an extended attribute block is in
- Checksum of the extended attribute block. - Checksum of the extended attribute block.
* - 0x14 * - 0x14
- \_\_u32 - \_\_u32
- h\_reserved[2] - h\_reserved[3]
- Zero. - Zero.
The checksum is calculated against the FS UUID, the 64-bit block number The checksum is calculated against the FS UUID, the 64-bit block number

View File

@@ -3508,14 +3508,15 @@ field must be set, though).
“IEC958 Playback Con Mask” is used to return the bit-mask for the IEC958 “IEC958 Playback Con Mask” is used to return the bit-mask for the IEC958
status bits of consumer mode. Similarly, “IEC958 Playback Pro Mask” status bits of consumer mode. Similarly, “IEC958 Playback Pro Mask”
returns the bitmask for professional mode. They are read-only controls, returns the bitmask for professional mode. They are read-only controls.
and are defined as MIXER controls (iface =
``SNDRV_CTL_ELEM_IFACE_MIXER``).
Meanwhile, “IEC958 Playback Default” control is defined for getting and Meanwhile, “IEC958 Playback Default” control is defined for getting and
setting the current default IEC958 bits. Note that this one is usually setting the current default IEC958 bits.
defined as a PCM control (iface = ``SNDRV_CTL_ELEM_IFACE_PCM``),
although in some places it's defined as a MIXER control. Due to historical reasons, both variants of the Playback Mask and the
Playback Default controls can be implemented on either a
``SNDRV_CTL_ELEM_IFACE_PCM`` or a ``SNDRV_CTL_ELEM_IFACE_MIXER`` iface.
Drivers should expose the mask and default on the same iface though.
In addition, you can define the control switches to enable/disable or to In addition, you can define the control switches to enable/disable or to
set the raw bit mode. The implementation will depend on the chip, but set the raw bit mode. The implementation will depend on the chip, but

View File

@@ -51,8 +51,7 @@ call :c:func:`free_area_init` function. Yet, the mappings array is not
usable until the call to :c:func:`memblock_free_all` that hands all the usable until the call to :c:func:`memblock_free_all` that hands all the
memory to the page allocator. memory to the page allocator.
If an architecture enables `CONFIG_ARCH_HAS_HOLES_MEMORYMODEL` option, An architecture may free parts of the `mem_map` array that do not cover the
it may free parts of the `mem_map` array that do not cover the
actual physical pages. In such case, the architecture specific actual physical pages. In such case, the architecture specific
:c:func:`pfn_valid` implementation should take the holes in the :c:func:`pfn_valid` implementation should take the holes in the
`mem_map` into account. `mem_map` into account.

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 5 VERSION = 5
PATCHLEVEL = 10 PATCHLEVEL = 10
SUBLEVEL = 110 SUBLEVEL = 117
EXTRAVERSION = EXTRAVERSION =
NAME = Dare mighty things NAME = Dare mighty things

File diff suppressed because it is too large Load Diff

View File

@@ -319,6 +319,7 @@
ktime_get ktime_get
ktime_get_mono_fast_ns ktime_get_mono_fast_ns
ktime_get_real_ts64 ktime_get_real_ts64
ktime_get_with_offset
kvfree kvfree
kvfree_call_rcu kvfree_call_rcu
kvmalloc_node kvmalloc_node
@@ -605,6 +606,7 @@
strlen strlen
strncmp strncmp
strncpy strncpy
strnlen
strpbrk strpbrk
strsep strsep
__sw_hweight16 __sw_hweight16
@@ -897,7 +899,9 @@
dma_buf_put dma_buf_put
dma_buf_unmap_attachment dma_buf_unmap_attachment
dma_get_sgtable_attrs dma_get_sgtable_attrs
down_read
find_vma find_vma
up_read
wait_for_completion_interruptible wait_for_completion_interruptible
# required by gpio-regulator.ko # required by gpio-regulator.ko
@@ -1018,7 +1022,6 @@
kernel_param_unlock kernel_param_unlock
kfree_skb_list kfree_skb_list
ktime_get_seconds ktime_get_seconds
ktime_get_with_offset
napi_gro_receive napi_gro_receive
netdev_set_default_ethtool_ops netdev_set_default_ethtool_ops
netif_carrier_off netif_carrier_off
@@ -1413,9 +1416,6 @@
usb_put_hcd usb_put_hcd
usb_remove_hcd usb_remove_hcd
# required by pdr_interface.ko
strnlen
# required by phy-qcom-qmp.ko # required by phy-qcom-qmp.ko
of_clk_get_by_name of_clk_get_by_name
__of_reset_control_get __of_reset_control_get
@@ -1647,6 +1647,8 @@
mmc_regulator_set_vqmmc mmc_regulator_set_vqmmc
mmc_send_tuning mmc_send_tuning
regulator_is_supported_voltage regulator_is_supported_voltage
__reset_control_get
reset_control_put
__sdhci_add_host __sdhci_add_host
sdhci_add_host sdhci_add_host
sdhci_cleanup_host sdhci_cleanup_host

View File

@@ -371,7 +371,10 @@
device_unregister device_unregister
_dev_info _dev_info
__dev_kfree_skb_any __dev_kfree_skb_any
__dev_kfree_skb_irq
devm_add_action
__devm_alloc_percpu __devm_alloc_percpu
devm_alloc_etherdev_mqs
devm_blk_ksm_init devm_blk_ksm_init
devm_clk_bulk_get devm_clk_bulk_get
devm_clk_bulk_get_optional devm_clk_bulk_get_optional
@@ -412,11 +415,13 @@
devm_led_classdev_register_ext devm_led_classdev_register_ext
devm_led_classdev_unregister devm_led_classdev_unregister
devm_mbox_controller_register devm_mbox_controller_register
devm_mdiobus_alloc_size
devm_memremap devm_memremap
devm_mfd_add_devices devm_mfd_add_devices
devm_nvmem_cell_get devm_nvmem_cell_get
devm_nvmem_device_get devm_nvmem_device_get
devm_nvmem_register devm_nvmem_register
devm_of_mdiobus_register
devm_of_phy_get_by_index devm_of_phy_get_by_index
__devm_of_phy_provider_register __devm_of_phy_provider_register
devm_of_platform_populate devm_of_platform_populate
@@ -433,6 +438,7 @@
devm_power_supply_register devm_power_supply_register
devm_rc_allocate_device devm_rc_allocate_device
devm_rc_register_device devm_rc_register_device
devm_register_netdev
devm_regmap_add_irq_chip devm_regmap_add_irq_chip
devm_regmap_field_alloc devm_regmap_field_alloc
devm_regmap_field_bulk_alloc devm_regmap_field_bulk_alloc
@@ -584,6 +590,7 @@
down_write down_write
d_path d_path
dput dput
dql_completed
drain_workqueue drain_workqueue
driver_create_file driver_create_file
driver_remove_file driver_remove_file
@@ -809,7 +816,13 @@
genlmsg_put genlmsg_put
genl_register_family genl_register_family
genl_unregister_family genl_unregister_family
__genphy_config_aneg
genphy_read_abilities
genphy_read_mmd_unsupported
genphy_read_status
genphy_resume genphy_resume
genphy_suspend
genphy_write_mmd_unsupported
gen_pool_add_owner gen_pool_add_owner
gen_pool_alloc_algo_owner gen_pool_alloc_algo_owner
gen_pool_avail gen_pool_avail
@@ -835,6 +848,7 @@
get_kernel_pages get_kernel_pages
get_net_ns_by_fd get_net_ns_by_fd
get_net_ns_by_pid get_net_ns_by_pid
get_pelt_halflife
get_pid_task get_pid_task
get_random_bytes get_random_bytes
get_random_u32 get_random_u32
@@ -957,11 +971,13 @@
init_uts_ns init_uts_ns
init_wait_entry init_wait_entry
__init_waitqueue_head __init_waitqueue_head
input_alloc_absinfo
input_allocate_device input_allocate_device
input_event input_event
input_free_device input_free_device
input_mt_init_slots input_mt_init_slots
input_mt_report_slot_state input_mt_report_slot_state
input_mt_sync_frame
input_register_device input_register_device
input_set_abs_params input_set_abs_params
input_set_capability input_set_capability
@@ -1169,8 +1185,12 @@
mbox_send_message mbox_send_message
mdiobus_alloc_size mdiobus_alloc_size
mdiobus_free mdiobus_free
__mdiobus_read
mdiobus_read
__mdiobus_register __mdiobus_register
mdiobus_unregister mdiobus_unregister
__mdiobus_write
mdiobus_write
media_create_intf_link media_create_intf_link
media_create_pad_link media_create_pad_link
media_device_cleanup media_device_cleanup
@@ -1270,10 +1290,12 @@
mutex_lock_killable mutex_lock_killable
mutex_trylock mutex_trylock
mutex_unlock mutex_unlock
napi_complete_done
napi_disable napi_disable
napi_gro_flush napi_gro_flush
napi_gro_receive napi_gro_receive
__napi_schedule __napi_schedule
__napi_schedule_irqoff
napi_schedule_prep napi_schedule_prep
__ndelay __ndelay
nd_tbl nd_tbl
@@ -1292,6 +1314,7 @@
netif_receive_skb_list netif_receive_skb_list
netif_rx netif_rx
netif_rx_ni netif_rx_ni
netif_schedule_queue
netif_tx_stop_all_queues netif_tx_stop_all_queues
netif_tx_wake_queue netif_tx_wake_queue
netlink_broadcast netlink_broadcast
@@ -1372,6 +1395,7 @@
of_get_next_child of_get_next_child
of_get_next_parent of_get_next_parent
of_get_parent of_get_parent
of_get_phy_mode
of_get_property of_get_property
of_get_regulator_init_data of_get_regulator_init_data
of_graph_get_next_endpoint of_graph_get_next_endpoint
@@ -1392,6 +1416,7 @@
of_parse_phandle_with_fixed_args of_parse_phandle_with_fixed_args
of_phandle_iterator_init of_phandle_iterator_init
of_phandle_iterator_next of_phandle_iterator_next
of_phy_connect
of_phy_simple_xlate of_phy_simple_xlate
of_platform_depopulate of_platform_depopulate
of_platform_device_create of_platform_device_create
@@ -1459,19 +1484,29 @@
phy_connect phy_connect
phy_disconnect phy_disconnect
phy_do_ioctl_running phy_do_ioctl_running
phy_drivers_register
phy_drivers_unregister
phy_ethtool_get_link_ksettings phy_ethtool_get_link_ksettings
phy_ethtool_nway_reset phy_ethtool_nway_reset
phy_ethtool_set_link_ksettings phy_ethtool_set_link_ksettings
phy_exit phy_exit
phy_get phy_get
phy_init phy_init
phy_mii_ioctl
__phy_modify
phy_modify
phy_modify_paged_changed
phy_power_off phy_power_off
phy_power_on phy_power_on
phy_print_status phy_print_status
phy_put phy_put
phy_read_paged
phy_restore_page
phy_select_page
phy_set_mode_ext phy_set_mode_ext
phy_start phy_start
phy_stop phy_stop
phy_write_paged
pid_task pid_task
pinconf_generic_parse_dt_config pinconf_generic_parse_dt_config
pinctrl_dev_get_drvdata pinctrl_dev_get_drvdata
@@ -1660,6 +1695,7 @@
regmap_raw_read regmap_raw_read
regmap_raw_write regmap_raw_write
regmap_read regmap_read
regmap_test_bits
regmap_update_bits_base regmap_update_bits_base
regmap_write regmap_write
regulator_count_voltages regulator_count_voltages
@@ -2091,6 +2127,8 @@
timer_unstable_counter_workaround timer_unstable_counter_workaround
topology_set_thermal_pressure topology_set_thermal_pressure
_totalram_pages _totalram_pages
touchscreen_parse_properties
touchscreen_report_pos
__trace_bprintk __trace_bprintk
__trace_bputs __trace_bputs
trace_event_buffer_commit trace_event_buffer_commit
@@ -2153,6 +2191,7 @@
__traceiter_android_vh_rwsem_init __traceiter_android_vh_rwsem_init
__traceiter_android_vh_rwsem_wake __traceiter_android_vh_rwsem_wake
__traceiter_android_vh_rwsem_write_finished __traceiter_android_vh_rwsem_write_finished
__traceiter_android_vh_sched_pelt_multiplier
__traceiter_android_vh_scheduler_tick __traceiter_android_vh_scheduler_tick
__traceiter_android_vh_selinux_avc_insert __traceiter_android_vh_selinux_avc_insert
__traceiter_android_vh_selinux_avc_lookup __traceiter_android_vh_selinux_avc_lookup
@@ -2237,6 +2276,7 @@
__tracepoint_android_vh_rwsem_init __tracepoint_android_vh_rwsem_init
__tracepoint_android_vh_rwsem_wake __tracepoint_android_vh_rwsem_wake
__tracepoint_android_vh_rwsem_write_finished __tracepoint_android_vh_rwsem_write_finished
__tracepoint_android_vh_sched_pelt_multiplier
__tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_selinux_avc_insert __tracepoint_android_vh_selinux_avc_insert
__tracepoint_android_vh_selinux_avc_lookup __tracepoint_android_vh_selinux_avc_lookup
@@ -2790,10 +2830,13 @@
fwnode_graph_parse_endpoint fwnode_graph_parse_endpoint
fwnode_property_get_reference_args fwnode_property_get_reference_args
fwnode_property_read_u64_array fwnode_property_read_u64_array
gen_pool_avail
gen_pool_dma_alloc_align gen_pool_dma_alloc_align
gen_pool_has_addr gen_pool_has_addr
gen_pool_size
getboottime64 getboottime64
get_governor_parent_kobj get_governor_parent_kobj
get_pelt_halflife
get_task_exe_file get_task_exe_file
get_vaddr_frames get_vaddr_frames
get_zeroed_page get_zeroed_page
@@ -3070,6 +3113,7 @@
__traceiter_android_vh_rwsem_init __traceiter_android_vh_rwsem_init
__traceiter_android_vh_rwsem_wake __traceiter_android_vh_rwsem_wake
__traceiter_android_vh_rwsem_write_finished __traceiter_android_vh_rwsem_write_finished
__traceiter_android_vh_sched_pelt_multiplier
__traceiter_android_vh_scmi_timeout_sync __traceiter_android_vh_scmi_timeout_sync
__traceiter_android_vh_show_resume_epoch_val __traceiter_android_vh_show_resume_epoch_val
__traceiter_android_vh_show_suspend_epoch_val __traceiter_android_vh_show_suspend_epoch_val
@@ -3123,6 +3167,7 @@
__tracepoint_android_vh_rwsem_init __tracepoint_android_vh_rwsem_init
__tracepoint_android_vh_rwsem_wake __tracepoint_android_vh_rwsem_wake
__tracepoint_android_vh_rwsem_write_finished __tracepoint_android_vh_rwsem_write_finished
__tracepoint_android_vh_sched_pelt_multiplier
__tracepoint_android_vh_scmi_timeout_sync __tracepoint_android_vh_scmi_timeout_sync
__tracepoint_android_vh_show_resume_epoch_val __tracepoint_android_vh_show_resume_epoch_val
__tracepoint_android_vh_show_suspend_epoch_val __tracepoint_android_vh_show_suspend_epoch_val
@@ -3193,6 +3238,7 @@
usb_otg_state_string usb_otg_state_string
usb_phy_set_charger_current usb_phy_set_charger_current
usb_remove_phy usb_remove_phy
usb_role_switch_set_role
v4l2_async_notifier_add_subdev v4l2_async_notifier_add_subdev
v4l2_async_notifier_cleanup v4l2_async_notifier_cleanup
v4l2_async_subdev_notifier_register v4l2_async_subdev_notifier_register

View File

@@ -681,6 +681,7 @@
dma_unmap_sg_attrs dma_unmap_sg_attrs
do_exit do_exit
do_wait_intr_irq do_wait_intr_irq
do_traversal_all_lruvec
down down
down_interruptible down_interruptible
down_read down_read
@@ -1802,10 +1803,12 @@
page_endio page_endio
__page_file_index __page_file_index
__page_file_mapping __page_file_mapping
__page_mapcount
page_get_link page_get_link
page_mapping page_mapping
__page_pinner_migration_failed __page_pinner_migration_failed
page_symlink page_symlink
page_to_lruvec
panic panic
panic_notifier_list panic_notifier_list
panic_timeout panic_timeout
@@ -2802,6 +2805,7 @@
__traceiter_android_vh_ipi_stop __traceiter_android_vh_ipi_stop
__traceiter_android_vh_ipv6_gen_linklocal_addr __traceiter_android_vh_ipv6_gen_linklocal_addr
__traceiter_android_vh_jiffies_update __traceiter_android_vh_jiffies_update
__traceiter_android_vh_killed_process
__traceiter_android_vh_kmalloc_slab __traceiter_android_vh_kmalloc_slab
__traceiter_android_vh_logbuf __traceiter_android_vh_logbuf
__traceiter_android_vh_mem_cgroup_alloc __traceiter_android_vh_mem_cgroup_alloc
@@ -2810,19 +2814,33 @@
__traceiter_android_vh_mem_cgroup_free __traceiter_android_vh_mem_cgroup_free
__traceiter_android_vh_mem_cgroup_id_remove __traceiter_android_vh_mem_cgroup_id_remove
__traceiter_android_vh_meminfo_proc_show __traceiter_android_vh_meminfo_proc_show
__traceiter_android_vh_alloc_pages_slowpath_begin
__traceiter_android_vh_alloc_pages_slowpath_end
__traceiter_android_vh_mutex_unlock_slowpath __traceiter_android_vh_mutex_unlock_slowpath
__traceiter_android_vh_mutex_unlock_slowpath_end
__traceiter_android_vh_mutex_wait_finish __traceiter_android_vh_mutex_wait_finish
__traceiter_android_vh_mutex_wait_start __traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_override_creds __traceiter_android_vh_override_creds
__traceiter_android_vh_page_referenced_check_bypass __traceiter_android_vh_page_referenced_check_bypass
__traceiter_android_vh_page_should_be_protected
__traceiter_android_vh_mark_page_accessed
__traceiter_android_vh_show_mapcount_pages
__traceiter_android_vh_do_traversal_lruvec
__traceiter_android_vh_update_page_mapcount
__traceiter_android_vh_add_page_to_lrulist
__traceiter_android_vh_del_page_from_lrulist
__traceiter_android_vh_pcplist_add_cma_pages_bypass __traceiter_android_vh_pcplist_add_cma_pages_bypass
__traceiter_android_vh_prepare_update_load_avg_se __traceiter_android_vh_prepare_update_load_avg_se
__traceiter_android_vh_printk_hotplug __traceiter_android_vh_printk_hotplug
__traceiter_android_vh_process_killed __traceiter_android_vh_process_killed
__traceiter_android_vh_killed_process
__traceiter_android_vh_revert_creds __traceiter_android_vh_revert_creds
__traceiter_android_vh_rmqueue __traceiter_android_vh_rmqueue
__traceiter_android_vh_rwsem_init __traceiter_android_vh_rwsem_init
__traceiter_android_vh_rwsem_mark_wake_readers
__traceiter_android_vh_rwsem_set_owner
__traceiter_android_vh_rwsem_set_reader_owned
__traceiter_android_vh_rwsem_up_read_end
__traceiter_android_vh_rwsem_up_write_end
__traceiter_android_vh_rwsem_wake __traceiter_android_vh_rwsem_wake
__traceiter_android_vh_rwsem_wake_finish __traceiter_android_vh_rwsem_wake_finish
__traceiter_android_vh_rwsem_write_finished __traceiter_android_vh_rwsem_write_finished
@@ -3010,6 +3028,7 @@
__tracepoint_android_vh_ipi_stop __tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_ipv6_gen_linklocal_addr __tracepoint_android_vh_ipv6_gen_linklocal_addr
__tracepoint_android_vh_jiffies_update __tracepoint_android_vh_jiffies_update
__tracepoint_android_vh_killed_process
__tracepoint_android_vh_kmalloc_slab __tracepoint_android_vh_kmalloc_slab
__tracepoint_android_vh_logbuf __tracepoint_android_vh_logbuf
__tracepoint_android_vh_mem_cgroup_alloc __tracepoint_android_vh_mem_cgroup_alloc
@@ -3018,19 +3037,33 @@
__tracepoint_android_vh_mem_cgroup_free __tracepoint_android_vh_mem_cgroup_free
__tracepoint_android_vh_mem_cgroup_id_remove __tracepoint_android_vh_mem_cgroup_id_remove
__tracepoint_android_vh_meminfo_proc_show __tracepoint_android_vh_meminfo_proc_show
__tracepoint_android_vh_alloc_pages_slowpath_begin
__tracepoint_android_vh_alloc_pages_slowpath_end
__tracepoint_android_vh_mutex_unlock_slowpath __tracepoint_android_vh_mutex_unlock_slowpath
__tracepoint_android_vh_mutex_unlock_slowpath_end
__tracepoint_android_vh_mutex_wait_finish __tracepoint_android_vh_mutex_wait_finish
__tracepoint_android_vh_mutex_wait_start __tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_override_creds __tracepoint_android_vh_override_creds
__tracepoint_android_vh_page_referenced_check_bypass __tracepoint_android_vh_page_referenced_check_bypass
__tracepoint_android_vh_page_should_be_protected
__tracepoint_android_vh_mark_page_accessed
__tracepoint_android_vh_show_mapcount_pages
__tracepoint_android_vh_do_traversal_lruvec
__tracepoint_android_vh_update_page_mapcount
__tracepoint_android_vh_add_page_to_lrulist
__tracepoint_android_vh_del_page_from_lrulist
__tracepoint_android_vh_pcplist_add_cma_pages_bypass __tracepoint_android_vh_pcplist_add_cma_pages_bypass
__tracepoint_android_vh_prepare_update_load_avg_se __tracepoint_android_vh_prepare_update_load_avg_se
__tracepoint_android_vh_printk_hotplug __tracepoint_android_vh_printk_hotplug
__tracepoint_android_vh_process_killed __tracepoint_android_vh_process_killed
__tracepoint_android_vh_killed_process
__tracepoint_android_vh_revert_creds __tracepoint_android_vh_revert_creds
__tracepoint_android_vh_rmqueue __tracepoint_android_vh_rmqueue
__tracepoint_android_vh_rwsem_init __tracepoint_android_vh_rwsem_init
__tracepoint_android_vh_rwsem_mark_wake_readers
__tracepoint_android_vh_rwsem_set_owner
__tracepoint_android_vh_rwsem_set_reader_owned
__tracepoint_android_vh_rwsem_up_read_end
__tracepoint_android_vh_rwsem_up_write_end
__tracepoint_android_vh_rwsem_wake __tracepoint_android_vh_rwsem_wake
__tracepoint_android_vh_rwsem_wake_finish __tracepoint_android_vh_rwsem_wake_finish
__tracepoint_android_vh_rwsem_write_finished __tracepoint_android_vh_rwsem_write_finished

File diff suppressed because it is too large Load Diff

View File

@@ -199,6 +199,7 @@ tracesys_exit:
st r0, [sp, PT_r0] ; sys call return value in pt_regs st r0, [sp, PT_r0] ; sys call return value in pt_regs
;POST Sys Call Ptrace Hook ;POST Sys Call Ptrace Hook
mov r0, sp ; pt_regs needed
bl @syscall_trace_exit bl @syscall_trace_exit
b ret_from_exception ; NOT ret_from_system_call at is saves r0 which b ret_from_exception ; NOT ret_from_system_call at is saves r0 which
; we'd done before calling post hook above ; we'd done before calling post hook above

View File

@@ -25,7 +25,7 @@ config ARM
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
select ARCH_HAVE_CUSTOM_GPIO_H select ARCH_HAVE_CUSTOM_GPIO_H
select ARCH_HAS_GCOV_PROFILE_ALL select ARCH_HAS_GCOV_PROFILE_ALL
select ARCH_KEEP_MEMBLOCK if HAVE_ARCH_PFN_VALID || KEXEC select ARCH_KEEP_MEMBLOCK
select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_PARPORT
select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN
select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
@@ -522,7 +522,6 @@ config ARCH_S3C24XX
config ARCH_OMAP1 config ARCH_OMAP1
bool "TI OMAP1" bool "TI OMAP1"
depends on MMU depends on MMU
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_OMAP select ARCH_OMAP
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select CLKSRC_MMIO select CLKSRC_MMIO
@@ -1482,9 +1481,6 @@ config OABI_COMPAT
UNPREDICTABLE (in fact it can be predicted that it won't work UNPREDICTABLE (in fact it can be predicted that it won't work
at all). If in doubt say N. at all). If in doubt say N.
config ARCH_HAS_HOLES_MEMORYMODEL
bool
config ARCH_SELECT_MEMORY_MODEL config ARCH_SELECT_MEMORY_MODEL
bool bool
@@ -1496,7 +1492,7 @@ config ARCH_SPARSEMEM_ENABLE
select SPARSEMEM_STATIC if SPARSEMEM select SPARSEMEM_STATIC if SPARSEMEM
config HAVE_ARCH_PFN_VALID config HAVE_ARCH_PFN_VALID
def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM def_bool y
config HIGHMEM config HIGHMEM
bool "High Memory Support" bool "High Memory Support"

View File

@@ -161,6 +161,8 @@
/* HS USB Host PHY on PORT 1 */ /* HS USB Host PHY on PORT 1 */
hsusb1_phy: hsusb1_phy { hsusb1_phy: hsusb1_phy {
pinctrl-names = "default";
pinctrl-0 = <&hsusb1_rst_pins>;
compatible = "usb-nop-xceiv"; compatible = "usb-nop-xceiv";
reset-gpios = <&gpio2 25 GPIO_ACTIVE_LOW>; /* gpio_57 */ reset-gpios = <&gpio2 25 GPIO_ACTIVE_LOW>; /* gpio_57 */
#phy-cells = <0>; #phy-cells = <0>;
@@ -168,7 +170,9 @@
}; };
&davinci_emac { &davinci_emac {
status = "okay"; pinctrl-names = "default";
pinctrl-0 = <&ethernet_pins>;
status = "okay";
}; };
&davinci_mdio { &davinci_mdio {
@@ -193,6 +197,8 @@
}; };
&i2c2 { &i2c2 {
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins>;
clock-frequency = <400000>; clock-frequency = <400000>;
/* User DIP swithes [1:8] / User LEDS [1:2] */ /* User DIP swithes [1:8] / User LEDS [1:2] */
tca6416: gpio@21 { tca6416: gpio@21 {
@@ -205,6 +211,8 @@
}; };
&i2c3 { &i2c3 {
pinctrl-names = "default";
pinctrl-0 = <&i2c3_pins>;
clock-frequency = <400000>; clock-frequency = <400000>;
}; };
@@ -223,6 +231,8 @@
}; };
&usbhshost { &usbhshost {
pinctrl-names = "default";
pinctrl-0 = <&hsusb1_pins>;
port1-mode = "ehci-phy"; port1-mode = "ehci-phy";
}; };
@@ -231,8 +241,35 @@
}; };
&omap3_pmx_core { &omap3_pmx_core {
pinctrl-names = "default";
pinctrl-0 = <&hsusb1_rst_pins>; ethernet_pins: pinmux_ethernet_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21fe, PIN_INPUT | MUX_MODE0) /* rmii_mdio_data */
OMAP3_CORE1_IOPAD(0x2200, MUX_MODE0) /* rmii_mdio_clk */
OMAP3_CORE1_IOPAD(0x2202, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_rxd0 */
OMAP3_CORE1_IOPAD(0x2204, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_rxd1 */
OMAP3_CORE1_IOPAD(0x2206, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_crs_dv */
OMAP3_CORE1_IOPAD(0x2208, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_rxer */
OMAP3_CORE1_IOPAD(0x220a, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_txd0 */
OMAP3_CORE1_IOPAD(0x220c, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_txd1 */
OMAP3_CORE1_IOPAD(0x220e, PIN_OUTPUT_PULLDOWN |MUX_MODE0) /* rmii_txen */
OMAP3_CORE1_IOPAD(0x2210, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_50mhz_clk */
>;
};
i2c2_pins: pinmux_i2c2_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c2_scl */
OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c2_sda */
>;
};
i2c3_pins: pinmux_i2c3_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c3_scl */
OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c3_sda */
>;
};
leds_pins: pinmux_leds_pins { leds_pins: pinmux_leds_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
@@ -300,8 +337,6 @@
}; };
&omap3_pmx_core2 { &omap3_pmx_core2 {
pinctrl-names = "default";
pinctrl-0 = <&hsusb1_pins>;
hsusb1_pins: pinmux_hsusb1_pins { hsusb1_pins: pinmux_hsusb1_pins {
pinctrl-single,pins = < pinctrl-single,pins = <

View File

@@ -69,6 +69,8 @@
}; };
&i2c1 { &i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <400000>; clock-frequency = <400000>;
s35390a: s35390a@30 { s35390a: s35390a@30 {
@@ -179,6 +181,13 @@
&omap3_pmx_core { &omap3_pmx_core {
i2c1_pins: pinmux_i2c1_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21ba, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_scl */
OMAP3_CORE1_IOPAD(0x21bc, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c1_sda */
>;
};
wl12xx_buffer_pins: pinmux_wl12xx_buffer_pins { wl12xx_buffer_pins: pinmux_wl12xx_buffer_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x2156, PIN_OUTPUT | MUX_MODE4) /* mmc1_dat7.gpio_129 */ OMAP3_CORE1_IOPAD(0x2156, PIN_OUTPUT | MUX_MODE4) /* mmc1_dat7.gpio_129 */

View File

@@ -91,7 +91,7 @@
spi1: spi@fc018000 { spi1: spi@fc018000 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi0_cs>; pinctrl-0 = <&pinctrl_spi1_cs>;
cs-gpios = <&pioB 21 0>; cs-gpios = <&pioB 21 0>;
status = "okay"; status = "okay";
}; };
@@ -149,7 +149,7 @@
atmel,pins = atmel,pins =
<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; <AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
}; };
pinctrl_spi0_cs: spi0_cs_default { pinctrl_spi1_cs: spi1_cs_default {
atmel,pins = atmel,pins =
<AT91_PIOB 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; <AT91_PIOB 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
}; };

View File

@@ -219,6 +219,12 @@
wm8731: wm8731@1b { wm8731: wm8731@1b {
compatible = "wm8731"; compatible = "wm8731";
reg = <0x1b>; reg = <0x1b>;
/* PCK0 at 12MHz */
clocks = <&pmc PMC_TYPE_SYSTEM 8>;
clock-names = "mclk";
assigned-clocks = <&pmc PMC_TYPE_SYSTEM 8>;
assigned-clock-rates = <12000000>;
}; };
}; };

View File

@@ -286,6 +286,8 @@
codec: sgtl5000@a { codec: sgtl5000@a {
compatible = "fsl,sgtl5000"; compatible = "fsl,sgtl5000";
reg = <0x0a>; reg = <0x0a>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sgtl5000>;
clocks = <&clks IMX6QDL_CLK_CKO>; clocks = <&clks IMX6QDL_CLK_CKO>;
VDDA-supply = <&reg_module_3v3_audio>; VDDA-supply = <&reg_module_3v3_audio>;
VDDIO-supply = <&reg_module_3v3>; VDDIO-supply = <&reg_module_3v3>;
@@ -516,8 +518,6 @@
MX6QDL_PAD_DISP0_DAT21__AUD4_TXD 0x130b0 MX6QDL_PAD_DISP0_DAT21__AUD4_TXD 0x130b0
MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS 0x130b0 MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS 0x130b0
MX6QDL_PAD_DISP0_DAT23__AUD4_RXD 0x130b0 MX6QDL_PAD_DISP0_DAT23__AUD4_RXD 0x130b0
/* SGTL5000 sys_mclk */
MX6QDL_PAD_GPIO_5__CCM_CLKO1 0x130b0
>; >;
}; };
@@ -810,6 +810,12 @@
>; >;
}; };
pinctrl_sgtl5000: sgtl5000grp {
fsl,pins = <
MX6QDL_PAD_GPIO_5__CCM_CLKO1 0x130b0
>;
};
pinctrl_spdif: spdifgrp { pinctrl_spdif: spdifgrp {
fsl,pins = < fsl,pins = <
MX6QDL_PAD_GPIO_16__SPDIF_IN 0x1b0b0 MX6QDL_PAD_GPIO_16__SPDIF_IN 0x1b0b0

View File

@@ -37,7 +37,7 @@
reg_sd1_vmmc: regulator-sd1-vmmc { reg_sd1_vmmc: regulator-sd1-vmmc {
compatible = "regulator-gpio"; compatible = "regulator-gpio";
gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>; gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_snvs_reg_sd>; pinctrl-0 = <&pinctrl_snvs_reg_sd>;
regulator-always-on; regulator-always-on;

View File

@@ -11,3 +11,18 @@
model = "LogicPD Zoom OMAP35xx SOM-LV Development Kit"; model = "LogicPD Zoom OMAP35xx SOM-LV Development Kit";
compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3430", "ti,omap3"; compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3430", "ti,omap3";
}; };
&omap3_pmx_core2 {
pinctrl-names = "default";
pinctrl-0 = <&hsusb2_2_pins>;
hsusb2_2_pins: pinmux_hsusb2_2_pins {
pinctrl-single,pins = <
OMAP3430_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3) /* etk_d10.hsusb2_clk */
OMAP3430_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3) /* etk_d11.hsusb2_stp */
OMAP3430_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d12.hsusb2_dir */
OMAP3430_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d13.hsusb2_nxt */
OMAP3430_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d14.hsusb2_data0 */
OMAP3430_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d15.hsusb2_data1 */
>;
};
};

View File

@@ -11,3 +11,18 @@
model = "LogicPD Zoom DM3730 SOM-LV Development Kit"; model = "LogicPD Zoom DM3730 SOM-LV Development Kit";
compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3630", "ti,omap3"; compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3630", "ti,omap3";
}; };
&omap3_pmx_core2 {
pinctrl-names = "default";
pinctrl-0 = <&hsusb2_2_pins>;
hsusb2_2_pins: pinmux_hsusb2_2_pins {
pinctrl-single,pins = <
OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3) /* etk_d10.hsusb2_clk */
OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3) /* etk_d11.hsusb2_stp */
OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d12.hsusb2_dir */
OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d13.hsusb2_nxt */
OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d14.hsusb2_data0 */
OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d15.hsusb2_data1 */
>;
};
};

View File

@@ -265,21 +265,6 @@
}; };
}; };
&omap3_pmx_core2 {
pinctrl-names = "default";
pinctrl-0 = <&hsusb2_2_pins>;
hsusb2_2_pins: pinmux_hsusb2_2_pins {
pinctrl-single,pins = <
OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3) /* etk_d10.hsusb2_clk */
OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3) /* etk_d11.hsusb2_stp */
OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d12.hsusb2_dir */
OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d13.hsusb2_nxt */
OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d14.hsusb2_data0 */
OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d15.hsusb2_data1 */
>;
};
};
&uart2 { &uart2 {
interrupts-extended = <&intc 73 &omap3_pmx_core OMAP3_UART2_RX>; interrupts-extended = <&intc 73 &omap3_pmx_core OMAP3_UART2_RX>;
pinctrl-names = "default"; pinctrl-names = "default";

View File

@@ -31,6 +31,8 @@
aliases { aliases {
display0 = &lcd; display0 = &lcd;
display1 = &tv0; display1 = &tv0;
/delete-property/ mmc2;
/delete-property/ mmc3;
}; };
ldo_3v3: fixedregulator { ldo_3v3: fixedregulator {

View File

@@ -442,6 +442,9 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr);
extern int valid_phys_addr_range(phys_addr_t addr, size_t size); extern int valid_phys_addr_range(phys_addr_t addr, size_t size);
extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size);
extern int devmem_is_allowed(unsigned long pfn); extern int devmem_is_allowed(unsigned long pfn);
extern bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
unsigned long flags);
#define arch_memremap_can_ram_remap arch_memremap_can_ram_remap
#endif #endif
/* /*

View File

@@ -211,7 +211,6 @@ config ARCH_BRCMSTB
select BCM7038_L1_IRQ select BCM7038_L1_IRQ
select BRCMSTB_L2_IRQ select BRCMSTB_L2_IRQ
select BCM7120_L2_IRQ select BCM7120_L2_IRQ
select ARCH_HAS_HOLES_MEMORYMODEL
select ZONE_DMA if ARM_LPAE select ZONE_DMA if ARM_LPAE
select SOC_BRCMSTB select SOC_BRCMSTB
select SOC_BUS select SOC_BUS

View File

@@ -5,7 +5,6 @@ menuconfig ARCH_DAVINCI
depends on ARCH_MULTI_V5 depends on ARCH_MULTI_V5
select DAVINCI_TIMER select DAVINCI_TIMER
select ZONE_DMA select ZONE_DMA
select ARCH_HAS_HOLES_MEMORYMODEL
select PM_GENERIC_DOMAINS if PM select PM_GENERIC_DOMAINS if PM
select PM_GENERIC_DOMAINS_OF if PM && OF select PM_GENERIC_DOMAINS_OF if PM && OF
select REGMAP_MMIO select REGMAP_MMIO

View File

@@ -1101,11 +1101,13 @@ static int __init da850_evm_config_emac(void)
int ret; int ret;
u32 val; u32 val;
struct davinci_soc_info *soc_info = &davinci_soc_info; struct davinci_soc_info *soc_info = &davinci_soc_info;
u8 rmii_en = soc_info->emac_pdata->rmii_en; u8 rmii_en;
if (!machine_is_davinci_da850_evm()) if (!machine_is_davinci_da850_evm())
return 0; return 0;
rmii_en = soc_info->emac_pdata->rmii_en;
cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG);
val = __raw_readl(cfg_chip3_base); val = __raw_readl(cfg_chip3_base);

View File

@@ -8,7 +8,6 @@
menuconfig ARCH_EXYNOS menuconfig ARCH_EXYNOS
bool "Samsung Exynos" bool "Samsung Exynos"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select ARM_AMBA select ARM_AMBA
select ARM_GIC select ARM_GIC
@@ -20,7 +19,6 @@ menuconfig ARCH_EXYNOS
select EXYNOS_PMU select EXYNOS_PMU
select EXYNOS_SROM select EXYNOS_SROM
select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
select GPIOLIB
select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5 select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5
select HAVE_ARM_SCU if SMP select HAVE_ARM_SCU if SMP
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C

View File

@@ -2,7 +2,6 @@
config ARCH_HIGHBANK config ARCH_HIGHBANK
bool "Calxeda ECX-1000/2000 (Highbank/Midway)" bool "Calxeda ECX-1000/2000 (Highbank/Midway)"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select ARM_AMBA select ARM_AMBA
select ARM_ERRATA_764369 if SMP select ARM_ERRATA_764369 if SMP

View File

@@ -93,7 +93,6 @@ config SOC_DRA7XX
config ARCH_OMAP2PLUS config ARCH_OMAP2PLUS
bool bool
select ARCH_HAS_BANDGAP select ARCH_HAS_BANDGAP
select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_HAS_RESET_CONTROLLER select ARCH_HAS_RESET_CONTROLLER
select ARCH_OMAP select ARCH_OMAP
select CLKSRC_MMIO select CLKSRC_MMIO

View File

@@ -314,10 +314,12 @@ void __init omap_gic_of_init(void)
np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic"); np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic");
gic_dist_base_addr = of_iomap(np, 0); gic_dist_base_addr = of_iomap(np, 0);
of_node_put(np);
WARN_ON(!gic_dist_base_addr); WARN_ON(!gic_dist_base_addr);
np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-twd-timer"); np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-twd-timer");
twd_base = of_iomap(np, 0); twd_base = of_iomap(np, 0);
of_node_put(np);
WARN_ON(!twd_base); WARN_ON(!twd_base);
skip_errata_init: skip_errata_init:

View File

@@ -8,7 +8,6 @@
config ARCH_S5PV210 config ARCH_S5PV210
bool "Samsung S5PV210/S5PC110" bool "Samsung S5PV210/S5PC110"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARCH_HAS_HOLES_MEMORYMODEL
select ARM_VIC select ARM_VIC
select CLKSRC_SAMSUNG_PWM select CLKSRC_SAMSUNG_PWM
select COMMON_CLK_SAMSUNG select COMMON_CLK_SAMSUNG

View File

@@ -3,7 +3,6 @@ config ARCH_TANGO
bool "Sigma Designs Tango4 (SMP87xx)" bool "Sigma Designs Tango4 (SMP87xx)"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
# Cortex-A9 MPCore r3p0, PL310 r3p2 # Cortex-A9 MPCore r3p0, PL310 r3p2
select ARCH_HAS_HOLES_MEMORYMODEL
select ARM_ERRATA_754322 select ARM_ERRATA_754322
select ARM_ERRATA_764369 if SMP select ARM_ERRATA_764369 if SMP
select ARM_ERRATA_775420 select ARM_ERRATA_775420

View File

@@ -580,7 +580,7 @@ static int __init ve_spc_clk_init(void)
} }
cluster = topology_physical_package_id(cpu_dev->id); cluster = topology_physical_package_id(cpu_dev->id);
if (init_opp_table[cluster]) if (cluster < 0 || init_opp_table[cluster])
continue; continue;
if (ve_init_opp_table(cpu_dev)) if (ve_init_opp_table(cpu_dev))

View File

@@ -479,3 +479,11 @@ void __init early_ioremap_init(void)
{ {
early_ioremap_setup(); early_ioremap_setup();
} }
bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
unsigned long flags)
{
unsigned long pfn = PHYS_PFN(offset);
return memblock_is_map_memory(pfn);
}

View File

@@ -11,26 +11,6 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp-100000000 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <731000>;
};
opp-250000000 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <731000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <731000>;
};
opp-667000000 {
opp-hz = /bits/ 64 <667000000>;
opp-microvolt = <731000>;
};
opp-1000000000 { opp-1000000000 {
opp-hz = /bits/ 64 <1000000000>; opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <761000>; opp-microvolt = <761000>;
@@ -71,26 +51,6 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp-100000000 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <731000>;
};
opp-250000000 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <731000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <731000>;
};
opp-667000000 {
opp-hz = /bits/ 64 <667000000>;
opp-microvolt = <731000>;
};
opp-1000000000 { opp-1000000000 {
opp-hz = /bits/ 64 <1000000000>; opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <731000>; opp-microvolt = <731000>;

View File

@@ -11,26 +11,6 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp-100000000 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <731000>;
};
opp-250000000 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <731000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <731000>;
};
opp-667000000 {
opp-hz = /bits/ 64 <667000000>;
opp-microvolt = <731000>;
};
opp-1000000000 { opp-1000000000 {
opp-hz = /bits/ 64 <1000000000>; opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <731000>; opp-microvolt = <731000>;
@@ -76,26 +56,6 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp-100000000 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <751000>;
};
opp-250000000 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <751000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <751000>;
};
opp-667000000 {
opp-hz = /bits/ 64 <667000000>;
opp-microvolt = <751000>;
};
opp-1000000000 { opp-1000000000 {
opp-hz = /bits/ 64 <1000000000>; opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <771000>; opp-microvolt = <771000>;

View File

@@ -95,26 +95,6 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp-100000000 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <730000>;
};
opp-250000000 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <730000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <730000>;
};
opp-667000000 {
opp-hz = /bits/ 64 <666666666>;
opp-microvolt = <750000>;
};
opp-1000000000 { opp-1000000000 {
opp-hz = /bits/ 64 <1000000000>; opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <770000>; opp-microvolt = <770000>;

View File

@@ -89,12 +89,12 @@
pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
ti,x-min = /bits/ 16 <125>; ti,x-min = /bits/ 16 <125>;
touchscreen-size-x = /bits/ 16 <4008>; touchscreen-size-x = <4008>;
ti,y-min = /bits/ 16 <282>; ti,y-min = /bits/ 16 <282>;
touchscreen-size-y = /bits/ 16 <3864>; touchscreen-size-y = <3864>;
ti,x-plate-ohms = /bits/ 16 <180>; ti,x-plate-ohms = /bits/ 16 <180>;
touchscreen-max-pressure = /bits/ 16 <255>; touchscreen-max-pressure = <255>;
touchscreen-average-samples = /bits/ 16 <10>; touchscreen-average-samples = <10>;
ti,debounce-tol = /bits/ 16 <3>; ti,debounce-tol = /bits/ 16 <3>;
ti,debounce-rep = /bits/ 16 <1>; ti,debounce-rep = /bits/ 16 <1>;
ti,settle-delay-usec = /bits/ 16 <150>; ti,settle-delay-usec = /bits/ 16 <150>;

View File

@@ -59,6 +59,10 @@
interrupts = <3 IRQ_TYPE_LEVEL_LOW>; interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
rohm,reset-snvs-powered; rohm,reset-snvs-powered;
#clock-cells = <0>;
clocks = <&osc_32k 0>;
clock-output-names = "clk-32k-out";
regulators { regulators {
buck1_reg: BUCK1 { buck1_reg: BUCK1 {
regulator-name = "buck1"; regulator-name = "buck1";

View File

@@ -70,12 +70,12 @@
pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
ti,x-min = /bits/ 16 <125>; ti,x-min = /bits/ 16 <125>;
touchscreen-size-x = /bits/ 16 <4008>; touchscreen-size-x = <4008>;
ti,y-min = /bits/ 16 <282>; ti,y-min = /bits/ 16 <282>;
touchscreen-size-y = /bits/ 16 <3864>; touchscreen-size-y = <3864>;
ti,x-plate-ohms = /bits/ 16 <180>; ti,x-plate-ohms = /bits/ 16 <180>;
touchscreen-max-pressure = /bits/ 16 <255>; touchscreen-max-pressure = <255>;
touchscreen-average-samples = /bits/ 16 <10>; touchscreen-average-samples = <10>;
ti,debounce-tol = /bits/ 16 <3>; ti,debounce-tol = /bits/ 16 <3>;
ti,debounce-rep = /bits/ 16 <1>; ti,debounce-rep = /bits/ 16 <1>;
ti,settle-delay-usec = /bits/ 16 <150>; ti,settle-delay-usec = /bits/ 16 <150>;

View File

@@ -75,6 +75,7 @@
#define ARM_CPU_PART_CORTEX_A77 0xD0D #define ARM_CPU_PART_CORTEX_A77 0xD0D
#define ARM_CPU_PART_NEOVERSE_V1 0xD40 #define ARM_CPU_PART_NEOVERSE_V1 0xD40
#define ARM_CPU_PART_CORTEX_A78 0xD41 #define ARM_CPU_PART_CORTEX_A78 0xD41
#define ARM_CPU_PART_CORTEX_A78AE 0xD42
#define ARM_CPU_PART_CORTEX_X1 0xD44 #define ARM_CPU_PART_CORTEX_X1 0xD44
#define ARM_CPU_PART_CORTEX_A510 0xD46 #define ARM_CPU_PART_CORTEX_A510 0xD46
#define ARM_CPU_PART_CORTEX_A710 0xD47 #define ARM_CPU_PART_CORTEX_A710 0xD47
@@ -123,6 +124,7 @@
#define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77) #define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77)
#define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1) #define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1)
#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78) #define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78)
#define MIDR_CORTEX_A78AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78AE)
#define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1) #define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1)
#define MIDR_CORTEX_A510 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A510) #define MIDR_CORTEX_A510 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A510)
#define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710) #define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710)

View File

@@ -219,4 +219,8 @@ extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size);
extern int devmem_is_allowed(unsigned long pfn); extern int devmem_is_allowed(unsigned long pfn);
extern bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
unsigned long flags);
#define arch_memremap_can_ram_remap arch_memremap_can_ram_remap
#endif /* __ASM_IO_H */ #endif /* __ASM_IO_H */

View File

@@ -1,8 +1,8 @@
#ifdef CONFIG_ARM64_MODULE_PLTS #ifdef CONFIG_ARM64_MODULE_PLTS
SECTIONS { SECTIONS {
.plt 0 (NOLOAD) : { BYTE(0) } .plt 0 : { BYTE(0) }
.init.plt 0 (NOLOAD) : { BYTE(0) } .init.plt 0 : { BYTE(0) }
.text.ftrace_trampoline 0 (NOLOAD) : { BYTE(0) } .text.ftrace_trampoline 0 : { BYTE(0) }
#ifdef CONFIG_CRYPTO_FIPS140 #ifdef CONFIG_CRYPTO_FIPS140
/* /*

View File

@@ -522,13 +522,12 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
#define pmd_none(pmd) (!pmd_val(pmd)) #define pmd_none(pmd) (!pmd_val(pmd))
#define pmd_bad(pmd) (!(pmd_val(pmd) & PMD_TABLE_BIT))
#define pmd_table(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ #define pmd_table(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \
PMD_TYPE_TABLE) PMD_TYPE_TABLE)
#define pmd_sect(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ #define pmd_sect(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \
PMD_TYPE_SECT) PMD_TYPE_SECT)
#define pmd_leaf(pmd) pmd_sect(pmd) #define pmd_leaf(pmd) (pmd_present(pmd) && !pmd_table(pmd))
#define pmd_bad(pmd) (!pmd_table(pmd))
#if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3 #if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3
static inline bool pud_sect(pud_t pud) { return false; } static inline bool pud_sect(pud_t pud) { return false; }
@@ -619,9 +618,9 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
pr_err("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e)) pr_err("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))
#define pud_none(pud) (!pud_val(pud)) #define pud_none(pud) (!pud_val(pud))
#define pud_bad(pud) (!(pud_val(pud) & PUD_TABLE_BIT)) #define pud_bad(pud) (!pud_table(pud))
#define pud_present(pud) pte_present(pud_pte(pud)) #define pud_present(pud) pte_present(pud_pte(pud))
#define pud_leaf(pud) pud_sect(pud) #define pud_leaf(pud) (pud_present(pud) && !pud_table(pud))
#define pud_valid(pud) pte_valid(pud_pte(pud)) #define pud_valid(pud) pte_valid(pud_pte(pud))
static inline void set_pud(pud_t *pudp, pud_t pud) static inline void set_pud(pud_t *pudp, pud_t pud)

View File

@@ -42,7 +42,7 @@ bool alternative_is_applied(u16 cpufeature)
/* /*
* Check if the target PC is within an alternative block. * Check if the target PC is within an alternative block.
*/ */
static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc) static __always_inline bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)
{ {
unsigned long replptr = (unsigned long)ALT_REPL_PTR(alt); unsigned long replptr = (unsigned long)ALT_REPL_PTR(alt);
return !(pc >= replptr && pc <= (replptr + alt->alt_len)); return !(pc >= replptr && pc <= (replptr + alt->alt_len));
@@ -50,7 +50,7 @@ static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)
#define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1)) #define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1))
static u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnptr) static __always_inline u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnptr)
{ {
u32 insn; u32 insn;
@@ -95,7 +95,7 @@ static u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnp
return insn; return insn;
} }
static void patch_alternative(struct alt_instr *alt, static noinstr void patch_alternative(struct alt_instr *alt,
__le32 *origptr, __le32 *updptr, int nr_inst) __le32 *origptr, __le32 *updptr, int nr_inst)
{ {
__le32 *replptr; __le32 *replptr;

View File

@@ -54,6 +54,9 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)
struct acpi_lpi_state *lpi; struct acpi_lpi_state *lpi;
struct acpi_processor *pr = per_cpu(processors, cpu); struct acpi_processor *pr = per_cpu(processors, cpu);
if (unlikely(!pr || !pr->flags.has_lpi))
return -EINVAL;
/* /*
* If the PSCI cpu_suspend function hook has not been initialized * If the PSCI cpu_suspend function hook has not been initialized
* idle states must not be enabled, so bail out * idle states must not be enabled, so bail out
@@ -61,9 +64,6 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)
if (!psci_ops.cpu_suspend) if (!psci_ops.cpu_suspend)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (unlikely(!pr || !pr->flags.has_lpi))
return -EINVAL;
count = pr->power.count - 1; count = pr->power.count - 1;
if (count <= 0) if (count <= 0)
return -ENODEV; return -ENODEV;

View File

@@ -216,8 +216,8 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg)
int i, ret = 0; int i, ret = 0;
struct aarch64_insn_patch *pp = arg; struct aarch64_insn_patch *pp = arg;
/* The first CPU becomes master */ /* The last CPU becomes master */
if (atomic_inc_return(&pp->cpu_count) == 1) { if (atomic_inc_return(&pp->cpu_count) == num_online_cpus()) {
for (i = 0; ret == 0 && i < pp->insn_cnt; i++) for (i = 0; ret == 0 && i < pp->insn_cnt; i++)
ret = aarch64_insn_patch_text_nosync(pp->text_addrs[i], ret = aarch64_insn_patch_text_nosync(pp->text_addrs[i],
pp->new_insns[i]); pp->new_insns[i]);

View File

@@ -1116,17 +1116,32 @@ static int armv8_pmu_init_nogroups(struct arm_pmu *cpu_pmu, char *name,
return armv8_pmu_init(cpu_pmu, name, map_event, NULL, NULL, NULL); return armv8_pmu_init(cpu_pmu, name, map_event, NULL, NULL, NULL);
} }
static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu) #define PMUV3_INIT_SIMPLE(name) \
{ static int name##_pmu_init(struct arm_pmu *cpu_pmu) \
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_pmuv3", { \
armv8_pmuv3_map_event); return armv8_pmu_init_nogroups(cpu_pmu, #name, armv8_pmuv3_map_event);\
} }
static int armv8_a34_pmu_init(struct arm_pmu *cpu_pmu) PMUV3_INIT_SIMPLE(armv8_pmuv3)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a34", PMUV3_INIT_SIMPLE(armv8_cortex_a34)
armv8_pmuv3_map_event); PMUV3_INIT_SIMPLE(armv8_cortex_a55)
} PMUV3_INIT_SIMPLE(armv8_cortex_a65)
PMUV3_INIT_SIMPLE(armv8_cortex_a75)
PMUV3_INIT_SIMPLE(armv8_cortex_a76)
PMUV3_INIT_SIMPLE(armv8_cortex_a77)
PMUV3_INIT_SIMPLE(armv8_cortex_a78)
PMUV3_INIT_SIMPLE(armv9_cortex_a510)
PMUV3_INIT_SIMPLE(armv9_cortex_a710)
PMUV3_INIT_SIMPLE(armv8_cortex_x1)
PMUV3_INIT_SIMPLE(armv9_cortex_x2)
PMUV3_INIT_SIMPLE(armv8_neoverse_e1)
PMUV3_INIT_SIMPLE(armv8_neoverse_n1)
PMUV3_INIT_SIMPLE(armv9_neoverse_n2)
PMUV3_INIT_SIMPLE(armv8_neoverse_v1)
PMUV3_INIT_SIMPLE(armv8_nvidia_carmel)
PMUV3_INIT_SIMPLE(armv8_nvidia_denver)
static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu) static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
{ {
@@ -1140,24 +1155,12 @@ static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
armv8_a53_map_event); armv8_a53_map_event);
} }
static int armv8_a55_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a55",
armv8_pmuv3_map_event);
}
static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu) static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
{ {
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a57", return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a57",
armv8_a57_map_event); armv8_a57_map_event);
} }
static int armv8_a65_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a65",
armv8_pmuv3_map_event);
}
static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu) static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
{ {
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a72", return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a72",
@@ -1170,36 +1173,6 @@ static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
armv8_a73_map_event); armv8_a73_map_event);
} }
static int armv8_a75_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a75",
armv8_pmuv3_map_event);
}
static int armv8_a76_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a76",
armv8_pmuv3_map_event);
}
static int armv8_a77_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a77",
armv8_pmuv3_map_event);
}
static int armv8_e1_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_neoverse_e1",
armv8_pmuv3_map_event);
}
static int armv8_n1_pmu_init(struct arm_pmu *cpu_pmu)
{
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_neoverse_n1",
armv8_pmuv3_map_event);
}
static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu) static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
{ {
return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cavium_thunder", return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cavium_thunder",
@@ -1213,22 +1186,31 @@ static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
} }
static const struct of_device_id armv8_pmu_of_device_ids[] = { static const struct of_device_id armv8_pmu_of_device_ids[] = {
{.compatible = "arm,armv8-pmuv3", .data = armv8_pmuv3_init}, {.compatible = "arm,armv8-pmuv3", .data = armv8_pmuv3_pmu_init},
{.compatible = "arm,cortex-a34-pmu", .data = armv8_a34_pmu_init}, {.compatible = "arm,cortex-a34-pmu", .data = armv8_cortex_a34_pmu_init},
{.compatible = "arm,cortex-a35-pmu", .data = armv8_a35_pmu_init}, {.compatible = "arm,cortex-a35-pmu", .data = armv8_a35_pmu_init},
{.compatible = "arm,cortex-a53-pmu", .data = armv8_a53_pmu_init}, {.compatible = "arm,cortex-a53-pmu", .data = armv8_a53_pmu_init},
{.compatible = "arm,cortex-a55-pmu", .data = armv8_a55_pmu_init}, {.compatible = "arm,cortex-a55-pmu", .data = armv8_cortex_a55_pmu_init},
{.compatible = "arm,cortex-a57-pmu", .data = armv8_a57_pmu_init}, {.compatible = "arm,cortex-a57-pmu", .data = armv8_a57_pmu_init},
{.compatible = "arm,cortex-a65-pmu", .data = armv8_a65_pmu_init}, {.compatible = "arm,cortex-a65-pmu", .data = armv8_cortex_a65_pmu_init},
{.compatible = "arm,cortex-a72-pmu", .data = armv8_a72_pmu_init}, {.compatible = "arm,cortex-a72-pmu", .data = armv8_a72_pmu_init},
{.compatible = "arm,cortex-a73-pmu", .data = armv8_a73_pmu_init}, {.compatible = "arm,cortex-a73-pmu", .data = armv8_a73_pmu_init},
{.compatible = "arm,cortex-a75-pmu", .data = armv8_a75_pmu_init}, {.compatible = "arm,cortex-a75-pmu", .data = armv8_cortex_a75_pmu_init},
{.compatible = "arm,cortex-a76-pmu", .data = armv8_a76_pmu_init}, {.compatible = "arm,cortex-a76-pmu", .data = armv8_cortex_a76_pmu_init},
{.compatible = "arm,cortex-a77-pmu", .data = armv8_a77_pmu_init}, {.compatible = "arm,cortex-a77-pmu", .data = armv8_cortex_a77_pmu_init},
{.compatible = "arm,neoverse-e1-pmu", .data = armv8_e1_pmu_init}, {.compatible = "arm,cortex-a78-pmu", .data = armv8_cortex_a78_pmu_init},
{.compatible = "arm,neoverse-n1-pmu", .data = armv8_n1_pmu_init}, {.compatible = "arm,cortex-a510-pmu", .data = armv9_cortex_a510_pmu_init},
{.compatible = "arm,cortex-a710-pmu", .data = armv9_cortex_a710_pmu_init},
{.compatible = "arm,cortex-x1-pmu", .data = armv8_cortex_x1_pmu_init},
{.compatible = "arm,cortex-x2-pmu", .data = armv9_cortex_x2_pmu_init},
{.compatible = "arm,neoverse-e1-pmu", .data = armv8_neoverse_e1_pmu_init},
{.compatible = "arm,neoverse-n1-pmu", .data = armv8_neoverse_n1_pmu_init},
{.compatible = "arm,neoverse-n2-pmu", .data = armv9_neoverse_n2_pmu_init},
{.compatible = "arm,neoverse-v1-pmu", .data = armv8_neoverse_v1_pmu_init},
{.compatible = "cavium,thunder-pmu", .data = armv8_thunder_pmu_init}, {.compatible = "cavium,thunder-pmu", .data = armv8_thunder_pmu_init},
{.compatible = "brcm,vulcan-pmu", .data = armv8_vulcan_pmu_init}, {.compatible = "brcm,vulcan-pmu", .data = armv8_vulcan_pmu_init},
{.compatible = "nvidia,carmel-pmu", .data = armv8_nvidia_carmel_pmu_init},
{.compatible = "nvidia,denver-pmu", .data = armv8_nvidia_denver_pmu_init},
{}, {},
}; };
@@ -1251,7 +1233,7 @@ static int __init armv8_pmu_driver_init(void)
if (acpi_disabled) if (acpi_disabled)
return platform_driver_register(&armv8_pmu_driver); return platform_driver_register(&armv8_pmu_driver);
else else
return arm_pmu_acpi_probe(armv8_pmuv3_init); return arm_pmu_acpi_probe(armv8_pmuv3_pmu_init);
} }
device_initcall(armv8_pmu_driver_init) device_initcall(armv8_pmu_driver_init)

View File

@@ -850,6 +850,7 @@ u8 spectre_bhb_loop_affected(int scope)
if (scope == SCOPE_LOCAL_CPU) { if (scope == SCOPE_LOCAL_CPU) {
static const struct midr_range spectre_bhb_k32_list[] = { static const struct midr_range spectre_bhb_k32_list[] = {
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78), MIDR_ALL_VERSIONS(MIDR_CORTEX_A78),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78AE),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C), MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C),
MIDR_ALL_VERSIONS(MIDR_CORTEX_X1), MIDR_ALL_VERSIONS(MIDR_CORTEX_X1),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),

View File

@@ -13,6 +13,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/memblock.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
@@ -99,3 +100,11 @@ void __init early_ioremap_init(void)
{ {
early_ioremap_setup(); early_ioremap_setup();
} }
bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
unsigned long flags)
{
unsigned long pfn = PHYS_PFN(offset);
return memblock_is_map_memory(pfn);
}

View File

@@ -167,7 +167,7 @@ void __init plat_mem_setup(void)
dtb = phys_to_virt(fw_arg2); dtb = phys_to_virt(fw_arg2);
else if (fw_passed_dtb) /* UHI interface or appended dtb */ else if (fw_passed_dtb) /* UHI interface or appended dtb */
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
else else
panic("no dtb found"); panic("no dtb found");

View File

@@ -429,7 +429,7 @@
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
eth0_addr: eth-mac-addr@0x22 { eth0_addr: eth-mac-addr@22 {
reg = <0x22 0x6>; reg = <0x22 0x6>;
}; };
}; };

View File

@@ -16,7 +16,7 @@ static inline void setup_8250_early_printk_port(unsigned long base,
unsigned int reg_shift, unsigned int timeout) {} unsigned int reg_shift, unsigned int timeout) {}
#endif #endif
extern void set_handler(unsigned long offset, void *addr, unsigned long len); void set_handler(unsigned long offset, const void *addr, unsigned long len);
extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len);
typedef void (*vi_handler_t)(void); typedef void (*vi_handler_t)(void);

View File

@@ -40,9 +40,9 @@
typedef unsigned int cycles_t; typedef unsigned int cycles_t;
/* /*
* On R4000/R4400 before version 5.0 an erratum exists such that if the * On R4000/R4400 an erratum exists such that if the cycle counter is
* cycle counter is read in the exact moment that it is matching the * read in the exact moment that it is matching the compare register,
* compare register, no interrupt will be generated. * no interrupt will be generated.
* *
* There is a suggested workaround and also the erratum can't strike if * There is a suggested workaround and also the erratum can't strike if
* the compare interrupt isn't being used as the clock source device. * the compare interrupt isn't being used as the clock source device.
@@ -63,7 +63,7 @@ static inline int can_use_mips_counter(unsigned int prid)
if (!__builtin_constant_p(cpu_has_counter)) if (!__builtin_constant_p(cpu_has_counter))
asm volatile("" : "=m" (cpu_data[0].options)); asm volatile("" : "=m" (cpu_data[0].options));
if (likely(cpu_has_counter && if (likely(cpu_has_counter &&
prid >= (PRID_IMP_R4000 | PRID_REV_ENCODE_44(5, 0)))) prid > (PRID_IMP_R4000 | PRID_REV_ENCODE_44(15, 15))))
return 1; return 1;
else else
return 0; return 0;

View File

@@ -141,15 +141,10 @@ static __init int cpu_has_mfc0_count_bug(void)
case CPU_R4400MC: case CPU_R4400MC:
/* /*
* The published errata for the R4400 up to 3.0 say the CPU * The published errata for the R4400 up to 3.0 say the CPU
* has the mfc0 from count bug. * has the mfc0 from count bug. This seems the last version
* produced.
*/ */
if ((current_cpu_data.processor_id & 0xff) <= 0x30) return 1;
return 1;
/*
* we assume newer revisions are ok
*/
return 0;
} }
return 0; return 0;

View File

@@ -2097,19 +2097,19 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs)
* If no shadow set is selected then use the default handler * If no shadow set is selected then use the default handler
* that does normal register saving and standard interrupt exit * that does normal register saving and standard interrupt exit
*/ */
extern char except_vec_vi, except_vec_vi_lui; extern const u8 except_vec_vi[], except_vec_vi_lui[];
extern char except_vec_vi_ori, except_vec_vi_end; extern const u8 except_vec_vi_ori[], except_vec_vi_end[];
extern char rollback_except_vec_vi; extern const u8 rollback_except_vec_vi[];
char *vec_start = using_rollback_handler() ? const u8 *vec_start = using_rollback_handler() ?
&rollback_except_vec_vi : &except_vec_vi; rollback_except_vec_vi : except_vec_vi;
#if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN) #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN)
const int lui_offset = &except_vec_vi_lui - vec_start + 2; const int lui_offset = except_vec_vi_lui - vec_start + 2;
const int ori_offset = &except_vec_vi_ori - vec_start + 2; const int ori_offset = except_vec_vi_ori - vec_start + 2;
#else #else
const int lui_offset = &except_vec_vi_lui - vec_start; const int lui_offset = except_vec_vi_lui - vec_start;
const int ori_offset = &except_vec_vi_ori - vec_start; const int ori_offset = except_vec_vi_ori - vec_start;
#endif #endif
const int handler_len = &except_vec_vi_end - vec_start; const int handler_len = except_vec_vi_end - vec_start;
if (handler_len > VECTORSPACING) { if (handler_len > VECTORSPACING) {
/* /*
@@ -2317,7 +2317,7 @@ void per_cpu_trap_init(bool is_boot_cpu)
} }
/* Install CPU exception handler */ /* Install CPU exception handler */
void set_handler(unsigned long offset, void *addr, unsigned long size) void set_handler(unsigned long offset, const void *addr, unsigned long size)
{ {
#ifdef CONFIG_CPU_MICROMIPS #ifdef CONFIG_CPU_MICROMIPS
memcpy((void *)(ebase + offset), ((unsigned char *)addr - 1), size); memcpy((void *)(ebase + offset), ((unsigned char *)addr - 1), size);

View File

@@ -79,7 +79,7 @@ void __init plat_mem_setup(void)
if (fw_passed_dtb) /* UHI interface */ if (fw_passed_dtb) /* UHI interface */
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
else else
panic("no dtb found"); panic("no dtb found");

View File

@@ -28,7 +28,7 @@ static ulong get_fdtaddr(void)
if (fw_passed_dtb && !fw_arg2 && !fw_arg3) if (fw_passed_dtb && !fw_arg2 && !fw_arg3)
return (ulong)fw_passed_dtb; return (ulong)fw_passed_dtb;
if (__dtb_start < __dtb_end) if (&__dtb_start < &__dtb_end)
ftaddr = (ulong)__dtb_start; ftaddr = (ulong)__dtb_start;
return ftaddr; return ftaddr;

View File

@@ -61,6 +61,7 @@ static int __init ill_acc_of_setup(void)
pdev = of_find_device_by_node(np); pdev = of_find_device_by_node(np);
if (!pdev) { if (!pdev) {
pr_err("%pOFn: failed to lookup pdev\n", np); pr_err("%pOFn: failed to lookup pdev\n", np);
of_node_put(np);
return -EINVAL; return -EINVAL;
} }

View File

@@ -77,7 +77,7 @@ void __init plat_mem_setup(void)
*/ */
if (fw_passed_dtb) if (fw_passed_dtb)
dtb = (void *)fw_passed_dtb; dtb = (void *)fw_passed_dtb;
else if (__dtb_start != __dtb_end) else if (&__dtb_start != &__dtb_end)
dtb = (void *)__dtb_start; dtb = (void *)__dtb_start;
__dt_setup_arch(dtb); __dt_setup_arch(dtb);

View File

@@ -40,10 +40,7 @@ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags,
*need_unmap = 1; *need_unmap = 1;
set_fixmap(fixmap, page_to_phys(page)); set_fixmap(fixmap, page_to_phys(page));
if (flags) raw_spin_lock_irqsave(&patch_lock, *flags);
raw_spin_lock_irqsave(&patch_lock, *flags);
else
__acquire(&patch_lock);
return (void *) (__fix_to_virt(fixmap) + (uintaddr & ~PAGE_MASK)); return (void *) (__fix_to_virt(fixmap) + (uintaddr & ~PAGE_MASK));
} }
@@ -52,10 +49,7 @@ static void __kprobes patch_unmap(int fixmap, unsigned long *flags)
{ {
clear_fixmap(fixmap); clear_fixmap(fixmap);
if (flags) raw_spin_unlock_irqrestore(&patch_lock, *flags);
raw_spin_unlock_irqrestore(&patch_lock, *flags);
else
__release(&patch_lock);
} }
void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len) void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
@@ -67,8 +61,9 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
int mapped; int mapped;
/* Make sure we don't have any aliases in cache */ /* Make sure we don't have any aliases in cache */
flush_kernel_vmap_range(addr, len); flush_kernel_dcache_range_asm(start, end);
flush_icache_range(start, end); flush_kernel_icache_range_asm(start, end);
flush_tlb_kernel_range(start, end);
p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags, &mapped); p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags, &mapped);
@@ -81,8 +76,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
* We're crossing a page boundary, so * We're crossing a page boundary, so
* need to remap * need to remap
*/ */
flush_kernel_vmap_range((void *)fixmap, flush_kernel_dcache_range_asm((unsigned long)fixmap,
(p-fixmap) * sizeof(*p)); (unsigned long)p);
flush_tlb_kernel_range((unsigned long)fixmap,
(unsigned long)p);
if (mapped) if (mapped)
patch_unmap(FIX_TEXT_POKE0, &flags); patch_unmap(FIX_TEXT_POKE0, &flags);
p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags, p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags,
@@ -90,10 +87,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
} }
} }
flush_kernel_vmap_range((void *)fixmap, (p-fixmap) * sizeof(*p)); flush_kernel_dcache_range_asm((unsigned long)fixmap, (unsigned long)p);
flush_tlb_kernel_range((unsigned long)fixmap, (unsigned long)p);
if (mapped) if (mapped)
patch_unmap(FIX_TEXT_POKE0, &flags); patch_unmap(FIX_TEXT_POKE0, &flags);
flush_icache_range(start, end);
} }
void __kprobes __patch_text(void *addr, u32 insn) void __kprobes __patch_text(void *addr, u32 insn)

View File

@@ -419,8 +419,7 @@ show_cpuinfo (struct seq_file *m, void *v)
} }
seq_printf(m, " (0x%02lx)\n", boot_cpu_data.pdc.capabilities); seq_printf(m, " (0x%02lx)\n", boot_cpu_data.pdc.capabilities);
seq_printf(m, "model\t\t: %s\n" seq_printf(m, "model\t\t: %s - %s\n",
"model name\t: %s\n",
boot_cpu_data.pdc.sys_model_name, boot_cpu_data.pdc.sys_model_name,
cpuinfo->dev ? cpuinfo->dev ?
cpuinfo->dev->name : "Unknown"); cpuinfo->dev->name : "Unknown");

View File

@@ -139,12 +139,12 @@
fman@400000 { fman@400000 {
ethernet@e6000 { ethernet@e6000 {
phy-handle = <&phy_rgmii_0>; phy-handle = <&phy_rgmii_0>;
phy-connection-type = "rgmii"; phy-connection-type = "rgmii-id";
}; };
ethernet@e8000 { ethernet@e8000 {
phy-handle = <&phy_rgmii_1>; phy-handle = <&phy_rgmii_1>;
phy-connection-type = "rgmii"; phy-connection-type = "rgmii-id";
}; };
mdio0: mdio@fc000 { mdio0: mdio@fc000 {

View File

@@ -132,7 +132,11 @@ static inline bool pfn_valid(unsigned long pfn)
#define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr))
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) #define virt_addr_valid(vaddr) ({ \
unsigned long _addr = (unsigned long)vaddr; \
_addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \
pfn_valid(virt_to_pfn(_addr)); \
})
/* /*
* On Book-E parts we need __va to parse the device tree and we can't * On Book-E parts we need __va to parse the device tree and we can't

View File

@@ -1296,6 +1296,12 @@ int __init early_init_dt_scan_rtas(unsigned long node,
entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL); entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL);
sizep = of_get_flat_dt_prop(node, "rtas-size", NULL); sizep = of_get_flat_dt_prop(node, "rtas-size", NULL);
#ifdef CONFIG_PPC64
/* need this feature to decide the crashkernel offset */
if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL))
powerpc_firmware_features |= FW_FEATURE_LPAR;
#endif
if (basep && entryp && sizep) { if (basep && entryp && sizep) {
rtas.base = *basep; rtas.base = *basep;
rtas.entry = *entryp; rtas.entry = *entryp;

View File

@@ -26,15 +26,18 @@ static ssize_t format_show(struct kobject *kobj, struct kobj_attribute *attr,
const char *format; const char *format;
node = of_find_compatible_node(NULL, NULL, "ibm,secvar-backend"); node = of_find_compatible_node(NULL, NULL, "ibm,secvar-backend");
if (!of_device_is_available(node)) if (!of_device_is_available(node)) {
return -ENODEV; rc = -ENODEV;
goto out;
}
rc = of_property_read_string(node, "format", &format); rc = of_property_read_string(node, "format", &format);
if (rc) if (rc)
return rc; goto out;
rc = sprintf(buf, "%s\n", format); rc = sprintf(buf, "%s\n", format);
out:
of_node_put(node); of_node_put(node);
return rc; return rc;

View File

@@ -147,11 +147,18 @@ void __init reserve_crashkernel(void)
if (!crashk_res.start) { if (!crashk_res.start) {
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
/* /*
* On 64bit we split the RMO in half but cap it at half of * On the LPAR platform place the crash kernel to mid of
* a small SLB (128MB) since the crash kernel needs to place * RMA size (512MB or more) to ensure the crash kernel
* itself and some stacks to be in the first segment. * gets enough space to place itself and some stack to be
* in the first segment. At the same time normal kernel
* also get enough space to allocate memory for essential
* system resource in the first segment. Keep the crash
* kernel starts at 128MB offset on other platforms.
*/ */
crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2)); if (firmware_has_feature(FW_FEATURE_LPAR))
crashk_res.start = ppc64_rma_size / 2;
else
crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
#else #else
crashk_res.start = KDUMP_KERNELBASE; crashk_res.start = KDUMP_KERNELBASE;
#endif #endif

View File

@@ -421,13 +421,19 @@ static void kvmppc_tce_put(struct kvmppc_spapr_tce_table *stt,
tbl[idx % TCES_PER_PAGE] = tce; tbl[idx % TCES_PER_PAGE] = tce;
} }
static void kvmppc_clear_tce(struct mm_struct *mm, struct iommu_table *tbl, static void kvmppc_clear_tce(struct mm_struct *mm, struct kvmppc_spapr_tce_table *stt,
unsigned long entry) struct iommu_table *tbl, unsigned long entry)
{ {
unsigned long hpa = 0; unsigned long i;
enum dma_data_direction dir = DMA_NONE; unsigned long subpages = 1ULL << (stt->page_shift - tbl->it_page_shift);
unsigned long io_entry = entry << (stt->page_shift - tbl->it_page_shift);
iommu_tce_xchg_no_kill(mm, tbl, entry, &hpa, &dir); for (i = 0; i < subpages; ++i) {
unsigned long hpa = 0;
enum dma_data_direction dir = DMA_NONE;
iommu_tce_xchg_no_kill(mm, tbl, io_entry + i, &hpa, &dir);
}
} }
static long kvmppc_tce_iommu_mapped_dec(struct kvm *kvm, static long kvmppc_tce_iommu_mapped_dec(struct kvm *kvm,
@@ -486,6 +492,8 @@ static long kvmppc_tce_iommu_unmap(struct kvm *kvm,
break; break;
} }
iommu_tce_kill(tbl, io_entry, subpages);
return ret; return ret;
} }
@@ -545,6 +553,8 @@ static long kvmppc_tce_iommu_map(struct kvm *kvm,
break; break;
} }
iommu_tce_kill(tbl, io_entry, subpages);
return ret; return ret;
} }
@@ -591,10 +601,9 @@ long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
ret = kvmppc_tce_iommu_map(vcpu->kvm, stt, stit->tbl, ret = kvmppc_tce_iommu_map(vcpu->kvm, stt, stit->tbl,
entry, ua, dir); entry, ua, dir);
iommu_tce_kill(stit->tbl, entry, 1);
if (ret != H_SUCCESS) { if (ret != H_SUCCESS) {
kvmppc_clear_tce(vcpu->kvm->mm, stit->tbl, entry); kvmppc_clear_tce(vcpu->kvm->mm, stt, stit->tbl, entry);
goto unlock_exit; goto unlock_exit;
} }
} }
@@ -670,13 +679,13 @@ long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
*/ */
if (get_user(tce, tces + i)) { if (get_user(tce, tces + i)) {
ret = H_TOO_HARD; ret = H_TOO_HARD;
goto invalidate_exit; goto unlock_exit;
} }
tce = be64_to_cpu(tce); tce = be64_to_cpu(tce);
if (kvmppc_tce_to_ua(vcpu->kvm, tce, &ua)) { if (kvmppc_tce_to_ua(vcpu->kvm, tce, &ua)) {
ret = H_PARAMETER; ret = H_PARAMETER;
goto invalidate_exit; goto unlock_exit;
} }
list_for_each_entry_lockless(stit, &stt->iommu_tables, next) { list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
@@ -685,19 +694,15 @@ long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
iommu_tce_direction(tce)); iommu_tce_direction(tce));
if (ret != H_SUCCESS) { if (ret != H_SUCCESS) {
kvmppc_clear_tce(vcpu->kvm->mm, stit->tbl, kvmppc_clear_tce(vcpu->kvm->mm, stt, stit->tbl,
entry); entry + i);
goto invalidate_exit; goto unlock_exit;
} }
} }
kvmppc_tce_put(stt, entry + i, tce); kvmppc_tce_put(stt, entry + i, tce);
} }
invalidate_exit:
list_for_each_entry_lockless(stit, &stt->iommu_tables, next)
iommu_tce_kill(stit->tbl, entry, npages);
unlock_exit: unlock_exit:
srcu_read_unlock(&vcpu->kvm->srcu, idx); srcu_read_unlock(&vcpu->kvm->srcu, idx);
@@ -736,20 +741,16 @@ long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
continue; continue;
if (ret == H_TOO_HARD) if (ret == H_TOO_HARD)
goto invalidate_exit; return ret;
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
kvmppc_clear_tce(vcpu->kvm->mm, stit->tbl, entry); kvmppc_clear_tce(vcpu->kvm->mm, stt, stit->tbl, entry + i);
} }
} }
for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift)) for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift))
kvmppc_tce_put(stt, ioba >> stt->page_shift, tce_value); kvmppc_tce_put(stt, ioba >> stt->page_shift, tce_value);
invalidate_exit:
list_for_each_entry_lockless(stit, &stt->iommu_tables, next)
iommu_tce_kill(stit->tbl, ioba >> stt->page_shift, npages);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce); EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce);

View File

@@ -247,13 +247,19 @@ static void iommu_tce_kill_rm(struct iommu_table *tbl,
tbl->it_ops->tce_kill(tbl, entry, pages, true); tbl->it_ops->tce_kill(tbl, entry, pages, true);
} }
static void kvmppc_rm_clear_tce(struct kvm *kvm, struct iommu_table *tbl, static void kvmppc_rm_clear_tce(struct kvm *kvm, struct kvmppc_spapr_tce_table *stt,
unsigned long entry) struct iommu_table *tbl, unsigned long entry)
{ {
unsigned long hpa = 0; unsigned long i;
enum dma_data_direction dir = DMA_NONE; unsigned long subpages = 1ULL << (stt->page_shift - tbl->it_page_shift);
unsigned long io_entry = entry << (stt->page_shift - tbl->it_page_shift);
iommu_tce_xchg_no_kill_rm(kvm->mm, tbl, entry, &hpa, &dir); for (i = 0; i < subpages; ++i) {
unsigned long hpa = 0;
enum dma_data_direction dir = DMA_NONE;
iommu_tce_xchg_no_kill_rm(kvm->mm, tbl, io_entry + i, &hpa, &dir);
}
} }
static long kvmppc_rm_tce_iommu_mapped_dec(struct kvm *kvm, static long kvmppc_rm_tce_iommu_mapped_dec(struct kvm *kvm,
@@ -316,6 +322,8 @@ static long kvmppc_rm_tce_iommu_unmap(struct kvm *kvm,
break; break;
} }
iommu_tce_kill_rm(tbl, io_entry, subpages);
return ret; return ret;
} }
@@ -379,6 +387,8 @@ static long kvmppc_rm_tce_iommu_map(struct kvm *kvm,
break; break;
} }
iommu_tce_kill_rm(tbl, io_entry, subpages);
return ret; return ret;
} }
@@ -424,10 +434,8 @@ long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
ret = kvmppc_rm_tce_iommu_map(vcpu->kvm, stt, ret = kvmppc_rm_tce_iommu_map(vcpu->kvm, stt,
stit->tbl, entry, ua, dir); stit->tbl, entry, ua, dir);
iommu_tce_kill_rm(stit->tbl, entry, 1);
if (ret != H_SUCCESS) { if (ret != H_SUCCESS) {
kvmppc_rm_clear_tce(vcpu->kvm, stit->tbl, entry); kvmppc_rm_clear_tce(vcpu->kvm, stt, stit->tbl, entry);
return ret; return ret;
} }
} }
@@ -569,7 +577,7 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu,
ua = 0; ua = 0;
if (kvmppc_rm_tce_to_ua(vcpu->kvm, tce, &ua)) { if (kvmppc_rm_tce_to_ua(vcpu->kvm, tce, &ua)) {
ret = H_PARAMETER; ret = H_PARAMETER;
goto invalidate_exit; goto unlock_exit;
} }
list_for_each_entry_lockless(stit, &stt->iommu_tables, next) { list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
@@ -578,19 +586,15 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu,
iommu_tce_direction(tce)); iommu_tce_direction(tce));
if (ret != H_SUCCESS) { if (ret != H_SUCCESS) {
kvmppc_rm_clear_tce(vcpu->kvm, stit->tbl, kvmppc_rm_clear_tce(vcpu->kvm, stt, stit->tbl,
entry); entry + i);
goto invalidate_exit; goto unlock_exit;
} }
} }
kvmppc_rm_tce_put(stt, entry + i, tce); kvmppc_rm_tce_put(stt, entry + i, tce);
} }
invalidate_exit:
list_for_each_entry_lockless(stit, &stt->iommu_tables, next)
iommu_tce_kill_rm(stit->tbl, entry, npages);
unlock_exit: unlock_exit:
if (!prereg) if (!prereg)
arch_spin_unlock(&kvm->mmu_lock.rlock.raw_lock); arch_spin_unlock(&kvm->mmu_lock.rlock.raw_lock);
@@ -632,20 +636,16 @@ long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu,
continue; continue;
if (ret == H_TOO_HARD) if (ret == H_TOO_HARD)
goto invalidate_exit; return ret;
WARN_ON_ONCE_RM(1); WARN_ON_ONCE_RM(1);
kvmppc_rm_clear_tce(vcpu->kvm, stit->tbl, entry); kvmppc_rm_clear_tce(vcpu->kvm, stt, stit->tbl, entry + i);
} }
} }
for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift)) for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift))
kvmppc_rm_tce_put(stt, ioba >> stt->page_shift, tce_value); kvmppc_rm_tce_put(stt, ioba >> stt->page_shift, tce_value);
invalidate_exit:
list_for_each_entry_lockless(stit, &stt->iommu_tables, next)
iommu_tce_kill_rm(stit->tbl, ioba >> stt->page_shift, npages);
return ret; return ret;
} }

View File

@@ -5,11 +5,11 @@ ifdef CONFIG_COMPAT
obj-$(CONFIG_PERF_EVENTS) += callchain_32.o obj-$(CONFIG_PERF_EVENTS) += callchain_32.o
endif endif
obj-$(CONFIG_PPC_PERF_CTRS) += core-book3s.o bhrb.o obj-$(CONFIG_PPC_PERF_CTRS) += core-book3s.o
obj64-$(CONFIG_PPC_PERF_CTRS) += ppc970-pmu.o power5-pmu.o \ obj64-$(CONFIG_PPC_PERF_CTRS) += ppc970-pmu.o power5-pmu.o \
power5+-pmu.o power6-pmu.o power7-pmu.o \ power5+-pmu.o power6-pmu.o power7-pmu.o \
isa207-common.o power8-pmu.o power9-pmu.o \ isa207-common.o power8-pmu.o power9-pmu.o \
generic-compat-pmu.o power10-pmu.o generic-compat-pmu.o power10-pmu.o bhrb.o
obj32-$(CONFIG_PPC_PERF_CTRS) += mpc7450-pmu.o obj32-$(CONFIG_PPC_PERF_CTRS) += mpc7450-pmu.o
obj-$(CONFIG_PPC_POWERNV) += imc-pmu.o obj-$(CONFIG_PPC_POWERNV) += imc-pmu.o

View File

@@ -133,11 +133,11 @@ int p9_dd22_bl_ev[] = {
/* Table of alternatives, sorted by column 0 */ /* Table of alternatives, sorted by column 0 */
static const unsigned int power9_event_alternatives[][MAX_ALT] = { static const unsigned int power9_event_alternatives[][MAX_ALT] = {
{ PM_INST_DISP, PM_INST_DISP_ALT },
{ PM_RUN_CYC_ALT, PM_RUN_CYC },
{ PM_RUN_INST_CMPL_ALT, PM_RUN_INST_CMPL },
{ PM_LD_MISS_L1, PM_LD_MISS_L1_ALT },
{ PM_BR_2PATH, PM_BR_2PATH_ALT }, { PM_BR_2PATH, PM_BR_2PATH_ALT },
{ PM_INST_DISP, PM_INST_DISP_ALT },
{ PM_RUN_CYC_ALT, PM_RUN_CYC },
{ PM_LD_MISS_L1, PM_LD_MISS_L1_ALT },
{ PM_RUN_INST_CMPL_ALT, PM_RUN_INST_CMPL },
}; };
static int power9_get_alternatives(u64 event, unsigned int flags, u64 alt[]) static int power9_get_alternatives(u64 event, unsigned int flags, u64 alt[])

View File

@@ -100,7 +100,7 @@ static int patch_text_cb(void *data)
struct patch_insn *patch = data; struct patch_insn *patch = data;
int ret = 0; int ret = 0;
if (atomic_inc_return(&patch->cpu_count) == 1) { if (atomic_inc_return(&patch->cpu_count) == num_online_cpus()) {
ret = ret =
patch_text_nosync(patch->addr, &patch->insn, patch_text_nosync(patch->addr, &patch->insn,
GET_INSN_LENGTH(patch->insn)); GET_INSN_LENGTH(patch->insn));

View File

@@ -32,6 +32,16 @@ KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member) KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g) KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,)) KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
ifdef CONFIG_CC_IS_GCC
ifeq ($(call cc-ifversion, -ge, 1200, y), y)
ifeq ($(call cc-ifversion, -lt, 1300, y), y)
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, array-bounds)
endif
endif
endif
UTS_MACHINE := s390x UTS_MACHINE := s390x
STACK_SIZE := $(if $(CONFIG_KASAN),65536,16384) STACK_SIZE := $(if $(CONFIG_KASAN),65536,16384)
CHECKFLAGS += -D__s390__ -D__s390x__ CHECKFLAGS += -D__s390__ -D__s390x__

View File

@@ -2872,6 +2872,11 @@ config IA32_AOUT
config X86_X32 config X86_X32
bool "x32 ABI for 64-bit mode" bool "x32 ABI for 64-bit mode"
depends on X86_64 depends on X86_64
# llvm-objcopy does not convert x86_64 .note.gnu.property or
# compressed debug sections to x86_x32 properly:
# https://github.com/ClangBuiltLinux/linux/issues/514
# https://github.com/ClangBuiltLinux/linux/issues/1141
depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm)
help help
Include code to run binaries for the x32 native 32-bit ABI Include code to run binaries for the x32 native 32-bit ABI
for 64-bit processors. An x32 process gets access to the for 64-bit processors. An x32 process gets access to the

View File

@@ -29,15 +29,13 @@ typedef u32 compat_caddr_t;
typedef __kernel_fsid_t compat_fsid_t; typedef __kernel_fsid_t compat_fsid_t;
struct compat_stat { struct compat_stat {
compat_dev_t st_dev; u32 st_dev;
u16 __pad1;
compat_ino_t st_ino; compat_ino_t st_ino;
compat_mode_t st_mode; compat_mode_t st_mode;
compat_nlink_t st_nlink; compat_nlink_t st_nlink;
__compat_uid_t st_uid; __compat_uid_t st_uid;
__compat_gid_t st_gid; __compat_gid_t st_gid;
compat_dev_t st_rdev; u32 st_rdev;
u16 __pad2;
u32 st_size; u32 st_size;
u32 st_blksize; u32 st_blksize;
u32 st_blocks; u32 st_blocks;

View File

@@ -1340,8 +1340,9 @@ static inline int kvm_arch_flush_remote_tlb(struct kvm *kvm)
return -ENOTSUPP; return -ENOTSUPP;
} }
int kvm_mmu_module_init(void); void kvm_mmu_x86_module_init(void);
void kvm_mmu_module_exit(void); int kvm_mmu_vendor_module_init(void);
void kvm_mmu_vendor_module_exit(void);
void kvm_mmu_destroy(struct kvm_vcpu *vcpu); void kvm_mmu_destroy(struct kvm_vcpu *vcpu);
int kvm_mmu_create(struct kvm_vcpu *vcpu); int kvm_mmu_create(struct kvm_vcpu *vcpu);

View File

@@ -133,11 +133,13 @@ extern void load_ucode_ap(void);
void reload_early_microcode(void); void reload_early_microcode(void);
extern bool get_builtin_firmware(struct cpio_data *cd, const char *name); extern bool get_builtin_firmware(struct cpio_data *cd, const char *name);
extern bool initrd_gone; extern bool initrd_gone;
void microcode_bsp_resume(void);
#else #else
static inline int __init microcode_init(void) { return 0; }; static inline int __init microcode_init(void) { return 0; };
static inline void __init load_ucode_bsp(void) { } static inline void __init load_ucode_bsp(void) { }
static inline void load_ucode_ap(void) { } static inline void load_ucode_ap(void) { }
static inline void reload_early_microcode(void) { } static inline void reload_early_microcode(void) { }
static inline void microcode_bsp_resume(void) { }
static inline bool static inline bool
get_builtin_firmware(struct cpio_data *cd, const char *name) { return false; } get_builtin_firmware(struct cpio_data *cd, const char *name) { return false; }
#endif #endif

View File

@@ -775,9 +775,9 @@ static struct subsys_interface mc_cpu_interface = {
}; };
/** /**
* mc_bp_resume - Update boot CPU microcode during resume. * microcode_bsp_resume - Update boot CPU microcode during resume.
*/ */
static void mc_bp_resume(void) void microcode_bsp_resume(void)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
struct ucode_cpu_info *uci = ucode_cpu_info + cpu; struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
@@ -789,7 +789,7 @@ static void mc_bp_resume(void)
} }
static struct syscore_ops mc_syscore_ops = { static struct syscore_ops mc_syscore_ops = {
.resume = mc_bp_resume, .resume = microcode_bsp_resume,
}; };
static int mc_cpu_starting(unsigned int cpu) static int mc_cpu_starting(unsigned int cpu)

View File

@@ -66,6 +66,7 @@ static DEFINE_PER_CPU_DECRYPTED(struct kvm_vcpu_pv_apf_data, apf_reason) __align
DEFINE_PER_CPU_DECRYPTED(struct kvm_steal_time, steal_time) __aligned(64) __visible; DEFINE_PER_CPU_DECRYPTED(struct kvm_steal_time, steal_time) __aligned(64) __visible;
static int has_steal_clock = 0; static int has_steal_clock = 0;
static int has_guest_poll = 0;
/* /*
* No need for any "IO delay" on KVM * No need for any "IO delay" on KVM
*/ */
@@ -624,14 +625,26 @@ static int kvm_cpu_down_prepare(unsigned int cpu)
static int kvm_suspend(void) static int kvm_suspend(void)
{ {
u64 val = 0;
kvm_guest_cpu_offline(false); kvm_guest_cpu_offline(false);
#ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL
if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL))
rdmsrl(MSR_KVM_POLL_CONTROL, val);
has_guest_poll = !(val & 1);
#endif
return 0; return 0;
} }
static void kvm_resume(void) static void kvm_resume(void)
{ {
kvm_cpu_online(raw_smp_processor_id()); kvm_cpu_online(raw_smp_processor_id());
#ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL
if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL) && has_guest_poll)
wrmsrl(MSR_KVM_POLL_CONTROL, 0);
#endif
} }
static struct syscore_ops kvm_syscore_ops = { static struct syscore_ops kvm_syscore_ops = {

View File

@@ -668,6 +668,11 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
union cpuid10_eax eax; union cpuid10_eax eax;
union cpuid10_edx edx; union cpuid10_edx edx;
if (!static_cpu_has(X86_FEATURE_ARCH_PERFMON)) {
entry->eax = entry->ebx = entry->ecx = entry->edx = 0;
break;
}
perf_get_x86_pmu_capability(&cap); perf_get_x86_pmu_capability(&cap);
/* /*

View File

@@ -3611,8 +3611,10 @@ static int em_rdpid(struct x86_emulate_ctxt *ctxt)
{ {
u64 tsc_aux = 0; u64 tsc_aux = 0;
if (ctxt->ops->get_msr(ctxt, MSR_TSC_AUX, &tsc_aux)) if (!ctxt->ops->guest_has_rdpid(ctxt))
return emulate_ud(ctxt); return emulate_ud(ctxt);
ctxt->ops->get_msr(ctxt, MSR_TSC_AUX, &tsc_aux);
ctxt->dst.val = tsc_aux; ctxt->dst.val = tsc_aux;
return X86EMUL_CONTINUE; return X86EMUL_CONTINUE;
} }

View File

@@ -225,6 +225,7 @@ struct x86_emulate_ops {
bool (*guest_has_long_mode)(struct x86_emulate_ctxt *ctxt); bool (*guest_has_long_mode)(struct x86_emulate_ctxt *ctxt);
bool (*guest_has_movbe)(struct x86_emulate_ctxt *ctxt); bool (*guest_has_movbe)(struct x86_emulate_ctxt *ctxt);
bool (*guest_has_fxsr)(struct x86_emulate_ctxt *ctxt); bool (*guest_has_fxsr)(struct x86_emulate_ctxt *ctxt);
bool (*guest_has_rdpid)(struct x86_emulate_ctxt *ctxt);
void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked); void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked);

View File

@@ -113,7 +113,8 @@ static inline u32 kvm_x2apic_id(struct kvm_lapic *apic)
static bool kvm_can_post_timer_interrupt(struct kvm_vcpu *vcpu) static bool kvm_can_post_timer_interrupt(struct kvm_vcpu *vcpu)
{ {
return pi_inject_timer && kvm_vcpu_apicv_active(vcpu); return pi_inject_timer && kvm_vcpu_apicv_active(vcpu) &&
(kvm_mwait_in_guest(vcpu->kvm) || kvm_hlt_in_guest(vcpu->kvm));
} }
bool kvm_can_use_hv_timer(struct kvm_vcpu *vcpu) bool kvm_can_use_hv_timer(struct kvm_vcpu *vcpu)
@@ -2106,10 +2107,9 @@ int kvm_lapic_reg_write(struct kvm_lapic *apic, u32 reg, u32 val)
break; break;
case APIC_SELF_IPI: case APIC_SELF_IPI:
if (apic_x2apic_mode(apic)) { if (apic_x2apic_mode(apic))
kvm_lapic_reg_write(apic, APIC_ICR, kvm_apic_send_ipi(apic, APIC_DEST_SELF | (val & APIC_VECTOR_MASK), 0);
APIC_DEST_SELF | (val & APIC_VECTOR_MASK)); else
} else
ret = 1; ret = 1;
break; break;
default: default:

View File

@@ -3140,6 +3140,8 @@ static void mmu_free_root_page(struct kvm *kvm, hpa_t *root_hpa,
return; return;
sp = to_shadow_page(*root_hpa & PT64_BASE_ADDR_MASK); sp = to_shadow_page(*root_hpa & PT64_BASE_ADDR_MASK);
if (WARN_ON(!sp))
return;
if (kvm_mmu_put_root(kvm, sp)) { if (kvm_mmu_put_root(kvm, sp)) {
if (sp->tdp_mmu_page) if (sp->tdp_mmu_page)
@@ -5176,14 +5178,16 @@ void kvm_mmu_invpcid_gva(struct kvm_vcpu *vcpu, gva_t gva, unsigned long pcid)
uint i; uint i;
if (pcid == kvm_get_active_pcid(vcpu)) { if (pcid == kvm_get_active_pcid(vcpu)) {
mmu->invlpg(vcpu, gva, mmu->root_hpa); if (mmu->invlpg)
mmu->invlpg(vcpu, gva, mmu->root_hpa);
tlb_flush = true; tlb_flush = true;
} }
for (i = 0; i < KVM_MMU_NUM_PREV_ROOTS; i++) { for (i = 0; i < KVM_MMU_NUM_PREV_ROOTS; i++) {
if (VALID_PAGE(mmu->prev_roots[i].hpa) && if (VALID_PAGE(mmu->prev_roots[i].hpa) &&
pcid == kvm_get_pcid(vcpu, mmu->prev_roots[i].pgd)) { pcid == kvm_get_pcid(vcpu, mmu->prev_roots[i].pgd)) {
mmu->invlpg(vcpu, gva, mmu->prev_roots[i].hpa); if (mmu->invlpg)
mmu->invlpg(vcpu, gva, mmu->prev_roots[i].hpa);
tlb_flush = true; tlb_flush = true;
} }
} }
@@ -5876,12 +5880,24 @@ static int set_nx_huge_pages(const char *val, const struct kernel_param *kp)
return 0; return 0;
} }
int kvm_mmu_module_init(void) /*
* nx_huge_pages needs to be resolved to true/false when kvm.ko is loaded, as
* its default value of -1 is technically undefined behavior for a boolean.
*/
void kvm_mmu_x86_module_init(void)
{ {
int ret = -ENOMEM;
if (nx_huge_pages == -1) if (nx_huge_pages == -1)
__set_nx_huge_pages(get_nx_auto_mode()); __set_nx_huge_pages(get_nx_auto_mode());
}
/*
* The bulk of the MMU initialization is deferred until the vendor module is
* loaded as many of the masks/values may be modified by VMX or SVM, i.e. need
* to be reset when a potentially different vendor module is loaded.
*/
int kvm_mmu_vendor_module_init(void)
{
int ret = -ENOMEM;
/* /*
* MMU roles use union aliasing which is, generally speaking, an * MMU roles use union aliasing which is, generally speaking, an
@@ -5955,7 +5971,7 @@ void kvm_mmu_destroy(struct kvm_vcpu *vcpu)
mmu_free_memory_caches(vcpu); mmu_free_memory_caches(vcpu);
} }
void kvm_mmu_module_exit(void) void kvm_mmu_vendor_module_exit(void)
{ {
mmu_destroy_caches(); mmu_destroy_caches();
percpu_counter_destroy(&kvm_total_used_mmu_pages); percpu_counter_destroy(&kvm_total_used_mmu_pages);

View File

@@ -44,6 +44,22 @@ static struct kvm_event_hw_type_mapping amd_event_mapping[] = {
[7] = { 0xd1, 0x00, PERF_COUNT_HW_STALLED_CYCLES_BACKEND }, [7] = { 0xd1, 0x00, PERF_COUNT_HW_STALLED_CYCLES_BACKEND },
}; };
/* duplicated from amd_f17h_perfmon_event_map. */
static struct kvm_event_hw_type_mapping amd_f17h_event_mapping[] = {
[0] = { 0x76, 0x00, PERF_COUNT_HW_CPU_CYCLES },
[1] = { 0xc0, 0x00, PERF_COUNT_HW_INSTRUCTIONS },
[2] = { 0x60, 0xff, PERF_COUNT_HW_CACHE_REFERENCES },
[3] = { 0x64, 0x09, PERF_COUNT_HW_CACHE_MISSES },
[4] = { 0xc2, 0x00, PERF_COUNT_HW_BRANCH_INSTRUCTIONS },
[5] = { 0xc3, 0x00, PERF_COUNT_HW_BRANCH_MISSES },
[6] = { 0x87, 0x02, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND },
[7] = { 0x87, 0x01, PERF_COUNT_HW_STALLED_CYCLES_BACKEND },
};
/* amd_pmc_perf_hw_id depends on these being the same size */
static_assert(ARRAY_SIZE(amd_event_mapping) ==
ARRAY_SIZE(amd_f17h_event_mapping));
static unsigned int get_msr_base(struct kvm_pmu *pmu, enum pmu_type type) static unsigned int get_msr_base(struct kvm_pmu *pmu, enum pmu_type type)
{ {
struct kvm_vcpu *vcpu = pmu_to_vcpu(pmu); struct kvm_vcpu *vcpu = pmu_to_vcpu(pmu);
@@ -128,19 +144,25 @@ static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr,
static unsigned int amd_pmc_perf_hw_id(struct kvm_pmc *pmc) static unsigned int amd_pmc_perf_hw_id(struct kvm_pmc *pmc)
{ {
struct kvm_event_hw_type_mapping *event_mapping;
u8 event_select = pmc->eventsel & ARCH_PERFMON_EVENTSEL_EVENT; u8 event_select = pmc->eventsel & ARCH_PERFMON_EVENTSEL_EVENT;
u8 unit_mask = (pmc->eventsel & ARCH_PERFMON_EVENTSEL_UMASK) >> 8; u8 unit_mask = (pmc->eventsel & ARCH_PERFMON_EVENTSEL_UMASK) >> 8;
int i; int i;
if (guest_cpuid_family(pmc->vcpu) >= 0x17)
event_mapping = amd_f17h_event_mapping;
else
event_mapping = amd_event_mapping;
for (i = 0; i < ARRAY_SIZE(amd_event_mapping); i++) for (i = 0; i < ARRAY_SIZE(amd_event_mapping); i++)
if (amd_event_mapping[i].eventsel == event_select if (event_mapping[i].eventsel == event_select
&& amd_event_mapping[i].unit_mask == unit_mask) && event_mapping[i].unit_mask == unit_mask)
break; break;
if (i == ARRAY_SIZE(amd_event_mapping)) if (i == ARRAY_SIZE(amd_event_mapping))
return PERF_COUNT_HW_MAX; return PERF_COUNT_HW_MAX;
return amd_event_mapping[i].event_type; return event_mapping[i].event_type;
} }
/* return PERF_COUNT_HW_MAX as AMD doesn't have fixed events */ /* return PERF_COUNT_HW_MAX as AMD doesn't have fixed events */
@@ -253,12 +275,10 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
/* MSR_EVNTSELn */ /* MSR_EVNTSELn */
pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL); pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL);
if (pmc) { if (pmc) {
if (data == pmc->eventsel) data &= ~pmu->reserved_bits;
return 0; if (data != pmc->eventsel)
if (!(data & pmu->reserved_bits)) {
reprogram_gp_counter(pmc, data); reprogram_gp_counter(pmc, data);
return 0; return 0;
}
} }
return 1; return 1;

View File

@@ -6875,6 +6875,11 @@ static bool emulator_guest_has_fxsr(struct x86_emulate_ctxt *ctxt)
return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_FXSR); return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_FXSR);
} }
static bool emulator_guest_has_rdpid(struct x86_emulate_ctxt *ctxt)
{
return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_RDPID);
}
static ulong emulator_read_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg) static ulong emulator_read_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg)
{ {
return kvm_register_read(emul_to_vcpu(ctxt), reg); return kvm_register_read(emul_to_vcpu(ctxt), reg);
@@ -6958,6 +6963,7 @@ static const struct x86_emulate_ops emulate_ops = {
.guest_has_long_mode = emulator_guest_has_long_mode, .guest_has_long_mode = emulator_guest_has_long_mode,
.guest_has_movbe = emulator_guest_has_movbe, .guest_has_movbe = emulator_guest_has_movbe,
.guest_has_fxsr = emulator_guest_has_fxsr, .guest_has_fxsr = emulator_guest_has_fxsr,
.guest_has_rdpid = emulator_guest_has_rdpid,
.set_nmi_mask = emulator_set_nmi_mask, .set_nmi_mask = emulator_set_nmi_mask,
.get_hflags = emulator_get_hflags, .get_hflags = emulator_get_hflags,
.set_hflags = emulator_set_hflags, .set_hflags = emulator_set_hflags,
@@ -7999,7 +8005,7 @@ int kvm_arch_init(void *opaque)
goto out_free_x86_emulator_cache; goto out_free_x86_emulator_cache;
} }
r = kvm_mmu_module_init(); r = kvm_mmu_vendor_module_init();
if (r) if (r)
goto out_free_percpu; goto out_free_percpu;
@@ -8059,7 +8065,7 @@ void kvm_arch_exit(void)
cancel_work_sync(&pvclock_gtod_work); cancel_work_sync(&pvclock_gtod_work);
#endif #endif
kvm_x86_ops.hardware_enable = NULL; kvm_x86_ops.hardware_enable = NULL;
kvm_mmu_module_exit(); kvm_mmu_vendor_module_exit();
free_percpu(user_return_msrs); free_percpu(user_return_msrs);
kmem_cache_destroy(x86_emulator_cache); kmem_cache_destroy(x86_emulator_cache);
kmem_cache_destroy(x86_fpu_cache); kmem_cache_destroy(x86_fpu_cache);
@@ -11420,3 +11426,19 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_unaccelerated_access);
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi);
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log);
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_update_request); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_update_request);
static int __init kvm_x86_init(void)
{
kvm_mmu_x86_module_init();
return 0;
}
module_init(kvm_x86_init);
static void __exit kvm_x86_exit(void)
{
/*
* If module_init() is implemented, module_exit() must also be
* implemented to allow module unload.
*/
}
module_exit(kvm_x86_exit);

View File

@@ -121,7 +121,7 @@ void __memcpy_flushcache(void *_dst, const void *_src, size_t size)
/* cache copy and flush to align dest */ /* cache copy and flush to align dest */
if (!IS_ALIGNED(dest, 8)) { if (!IS_ALIGNED(dest, 8)) {
unsigned len = min_t(unsigned, size, ALIGN(dest, 8) - dest); size_t len = min_t(size_t, size, ALIGN(dest, 8) - dest);
memcpy((void *) dest, (void *) source, len); memcpy((void *) dest, (void *) source, len);
clean_cache_range((void *) dest, len); clean_cache_range((void *) dest, len);

View File

@@ -476,7 +476,6 @@ static __init void xen_setup_pci_msi(void)
xen_msi_ops.setup_msi_irqs = xen_setup_msi_irqs; xen_msi_ops.setup_msi_irqs = xen_setup_msi_irqs;
} }
xen_msi_ops.teardown_msi_irqs = xen_pv_teardown_msi_irqs; xen_msi_ops.teardown_msi_irqs = xen_pv_teardown_msi_irqs;
pci_msi_ignore_mask = 1;
} else if (xen_hvm_domain()) { } else if (xen_hvm_domain()) {
xen_msi_ops.setup_msi_irqs = xen_hvm_setup_msi_irqs; xen_msi_ops.setup_msi_irqs = xen_hvm_setup_msi_irqs;
xen_msi_ops.teardown_msi_irqs = xen_teardown_msi_irqs; xen_msi_ops.teardown_msi_irqs = xen_teardown_msi_irqs;
@@ -490,6 +489,11 @@ static __init void xen_setup_pci_msi(void)
* in allocating the native domain and never use it. * in allocating the native domain and never use it.
*/ */
x86_init.irqs.create_pci_msi_domain = xen_create_pci_msi_domain; x86_init.irqs.create_pci_msi_domain = xen_create_pci_msi_domain;
/*
* With XEN PIRQ/Eventchannels in use PCI/MSI[-X] masking is solely
* controlled by the hypervisor.
*/
pci_msi_ignore_mask = 1;
} }
#else /* CONFIG_PCI_MSI */ #else /* CONFIG_PCI_MSI */

View File

@@ -25,6 +25,7 @@
#include <asm/cpu.h> #include <asm/cpu.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/cpu_device_id.h> #include <asm/cpu_device_id.h>
#include <asm/microcode.h>
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
__visible unsigned long saved_context_ebx; __visible unsigned long saved_context_ebx;
@@ -40,7 +41,8 @@ static void msr_save_context(struct saved_context *ctxt)
struct saved_msr *end = msr + ctxt->saved_msrs.num; struct saved_msr *end = msr + ctxt->saved_msrs.num;
while (msr < end) { while (msr < end) {
msr->valid = !rdmsrl_safe(msr->info.msr_no, &msr->info.reg.q); if (msr->valid)
rdmsrl(msr->info.msr_no, msr->info.reg.q);
msr++; msr++;
} }
} }
@@ -264,11 +266,18 @@ static void notrace __restore_processor_state(struct saved_context *ctxt)
x86_platform.restore_sched_clock_state(); x86_platform.restore_sched_clock_state();
mtrr_bp_restore(); mtrr_bp_restore();
perf_restore_debug_store(); perf_restore_debug_store();
msr_restore_context(ctxt);
c = &cpu_data(smp_processor_id()); c = &cpu_data(smp_processor_id());
if (cpu_has(c, X86_FEATURE_MSR_IA32_FEAT_CTL)) if (cpu_has(c, X86_FEATURE_MSR_IA32_FEAT_CTL))
init_ia32_feat_ctl(c); init_ia32_feat_ctl(c);
microcode_bsp_resume();
/*
* This needs to happen after the microcode has been updated upon resume
* because some of the MSRs are "emulated" in microcode.
*/
msr_restore_context(ctxt);
} }
/* Needed by apm.c */ /* Needed by apm.c */
@@ -440,8 +449,10 @@ static int msr_build_context(const u32 *msr_id, const int num)
} }
for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) { for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) {
u64 dummy;
msr_array[i].info.msr_no = msr_id[j]; msr_array[i].info.msr_no = msr_id[j];
msr_array[i].valid = false; msr_array[i].valid = !rdmsrl_safe(msr_id[j], &dummy);
msr_array[i].info.reg.q = 0; msr_array[i].info.reg.q = 0;
} }
saved_msrs->num = total_num; saved_msrs->num = total_num;
@@ -516,10 +527,24 @@ static int pm_cpu_check(const struct x86_cpu_id *c)
return ret; return ret;
} }
static void pm_save_spec_msr(void)
{
u32 spec_msr_id[] = {
MSR_IA32_SPEC_CTRL,
MSR_IA32_TSX_CTRL,
MSR_TSX_FORCE_ABORT,
MSR_IA32_MCU_OPT_CTRL,
MSR_AMD64_LS_CFG,
};
msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id));
}
static int pm_check_save_msr(void) static int pm_check_save_msr(void)
{ {
dmi_check_system(msr_save_dmi_table); dmi_check_system(msr_save_dmi_table);
pm_cpu_check(msr_save_cpu_table); pm_cpu_check(msr_save_cpu_table);
pm_save_spec_msr();
return 0; return 0;
} }

View File

@@ -19,6 +19,12 @@ static void __init xen_hvm_smp_prepare_boot_cpu(void)
*/ */
xen_vcpu_setup(0); xen_vcpu_setup(0);
/*
* Called again in case the kernel boots on vcpu >= MAX_VIRT_CPUS.
* Refer to comments in xen_hvm_init_time_ops().
*/
xen_hvm_init_time_ops();
/* /*
* The alternative logic (which patches the unlock/lock) runs before * The alternative logic (which patches the unlock/lock) runs before
* the smp bootup up code is activated. Hence we need to set this up * the smp bootup up code is activated. Hence we need to set this up

View File

@@ -556,6 +556,11 @@ static void xen_hvm_setup_cpu_clockevents(void)
void __init xen_hvm_init_time_ops(void) void __init xen_hvm_init_time_ops(void)
{ {
static bool hvm_time_initialized;
if (hvm_time_initialized)
return;
/* /*
* vector callback is needed otherwise we cannot receive interrupts * vector callback is needed otherwise we cannot receive interrupts
* on cpu > 0 and at this point we don't know how many cpus are * on cpu > 0 and at this point we don't know how many cpus are
@@ -565,7 +570,22 @@ void __init xen_hvm_init_time_ops(void)
return; return;
if (!xen_feature(XENFEAT_hvm_safe_pvclock)) { if (!xen_feature(XENFEAT_hvm_safe_pvclock)) {
pr_info("Xen doesn't support pvclock on HVM, disable pv timer"); pr_info_once("Xen doesn't support pvclock on HVM, disable pv timer");
return;
}
/*
* Only MAX_VIRT_CPUS 'vcpu_info' are embedded inside 'shared_info'.
* The __this_cpu_read(xen_vcpu) is still NULL when Xen HVM guest
* boots on vcpu >= MAX_VIRT_CPUS (e.g., kexec), To access
* __this_cpu_read(xen_vcpu) via xen_clocksource_read() will panic.
*
* The xen_hvm_init_time_ops() should be called again later after
* __this_cpu_read(xen_vcpu) is available.
*/
if (!__this_cpu_read(xen_vcpu)) {
pr_info("Delay xen_init_time_common() as kernel is running on vcpu=%d\n",
xen_vcpu_nr(0));
return; return;
} }
@@ -577,6 +597,8 @@ void __init xen_hvm_init_time_ops(void)
x86_platform.calibrate_tsc = xen_tsc_khz; x86_platform.calibrate_tsc = xen_tsc_khz;
x86_platform.get_wallclock = xen_get_wallclock; x86_platform.get_wallclock = xen_get_wallclock;
x86_platform.set_wallclock = xen_set_wallclock; x86_platform.set_wallclock = xen_set_wallclock;
hvm_time_initialized = true;
} }
#endif #endif

View File

@@ -8,19 +8,19 @@
reg = <0x00000000 0x08000000>; reg = <0x00000000 0x08000000>;
bank-width = <2>; bank-width = <2>;
device-width = <2>; device-width = <2>;
partition@0x0 { partition@0 {
label = "data"; label = "data";
reg = <0x00000000 0x06000000>; reg = <0x00000000 0x06000000>;
}; };
partition@0x6000000 { partition@6000000 {
label = "boot loader area"; label = "boot loader area";
reg = <0x06000000 0x00800000>; reg = <0x06000000 0x00800000>;
}; };
partition@0x6800000 { partition@6800000 {
label = "kernel image"; label = "kernel image";
reg = <0x06800000 0x017e0000>; reg = <0x06800000 0x017e0000>;
}; };
partition@0x7fe0000 { partition@7fe0000 {
label = "boot environment"; label = "boot environment";
reg = <0x07fe0000 0x00020000>; reg = <0x07fe0000 0x00020000>;
}; };

View File

@@ -8,19 +8,19 @@
reg = <0x08000000 0x01000000>; reg = <0x08000000 0x01000000>;
bank-width = <2>; bank-width = <2>;
device-width = <2>; device-width = <2>;
partition@0x0 { partition@0 {
label = "boot loader area"; label = "boot loader area";
reg = <0x00000000 0x00400000>; reg = <0x00000000 0x00400000>;
}; };
partition@0x400000 { partition@400000 {
label = "kernel image"; label = "kernel image";
reg = <0x00400000 0x00600000>; reg = <0x00400000 0x00600000>;
}; };
partition@0xa00000 { partition@a00000 {
label = "data"; label = "data";
reg = <0x00a00000 0x005e0000>; reg = <0x00a00000 0x005e0000>;
}; };
partition@0xfe0000 { partition@fe0000 {
label = "boot environment"; label = "boot environment";
reg = <0x00fe0000 0x00020000>; reg = <0x00fe0000 0x00020000>;
}; };

View File

@@ -8,11 +8,11 @@
reg = <0x08000000 0x00400000>; reg = <0x08000000 0x00400000>;
bank-width = <2>; bank-width = <2>;
device-width = <2>; device-width = <2>;
partition@0x0 { partition@0 {
label = "boot loader area"; label = "boot loader area";
reg = <0x00000000 0x003f0000>; reg = <0x00000000 0x003f0000>;
}; };
partition@0x3f0000 { partition@3f0000 {
label = "boot environment"; label = "boot environment";
reg = <0x003f0000 0x00010000>; reg = <0x003f0000 0x00010000>;
}; };

View File

@@ -29,7 +29,7 @@
.if XTENSA_HAVE_COPROCESSOR(x); \ .if XTENSA_HAVE_COPROCESSOR(x); \
.align 4; \ .align 4; \
.Lsave_cp_regs_cp##x: \ .Lsave_cp_regs_cp##x: \
xchal_cp##x##_store a2 a4 a5 a6 a7; \ xchal_cp##x##_store a2 a3 a4 a5 a6; \
jx a0; \ jx a0; \
.endif .endif
@@ -46,7 +46,7 @@
.if XTENSA_HAVE_COPROCESSOR(x); \ .if XTENSA_HAVE_COPROCESSOR(x); \
.align 4; \ .align 4; \
.Lload_cp_regs_cp##x: \ .Lload_cp_regs_cp##x: \
xchal_cp##x##_load a2 a4 a5 a6 a7; \ xchal_cp##x##_load a2 a3 a4 a5 a6; \
jx a0; \ jx a0; \
.endif .endif

View File

@@ -40,7 +40,7 @@ static int patch_text_stop_machine(void *data)
{ {
struct patch *patch = data; struct patch *patch = data;
if (atomic_inc_return(&patch->cpu_count) == 1) { if (atomic_inc_return(&patch->cpu_count) == num_online_cpus()) {
local_patch_text(patch->addr, patch->data, patch->sz); local_patch_text(patch->addr, patch->data, patch->sz);
atomic_inc(&patch->cpu_count); atomic_inc(&patch->cpu_count);
} else { } else {

View File

@@ -2257,7 +2257,17 @@ static void ioc_timer_fn(struct timer_list *timer)
iocg->hweight_donating = hwa; iocg->hweight_donating = hwa;
iocg->hweight_after_donation = new_hwi; iocg->hweight_after_donation = new_hwi;
list_add(&iocg->surplus_list, &surpluses); list_add(&iocg->surplus_list, &surpluses);
} else { } else if (!iocg->abs_vdebt) {
/*
* @iocg doesn't have enough to donate. Reset
* its inuse to active.
*
* Don't reset debtors as their inuse's are
* owned by debt handling. This shouldn't affect
* donation calculuation in any meaningful way
* as @iocg doesn't have a meaningful amount of
* share anyway.
*/
TRACE_IOCG_PATH(inuse_shortage, iocg, &now, TRACE_IOCG_PATH(inuse_shortage, iocg, &now,
iocg->inuse, iocg->active, iocg->inuse, iocg->active,
iocg->hweight_inuse, new_hwi); iocg->hweight_inuse, new_hwi);

View File

@@ -488,7 +488,7 @@ static struct bio *bio_copy_kern(struct request_queue *q, void *data,
if (bytes > len) if (bytes > len)
bytes = len; bytes = len;
page = alloc_page(q->bounce_gfp | gfp_mask); page = alloc_page(q->bounce_gfp | __GFP_ZERO | gfp_mask);
if (!page) if (!page)
goto cleanup; goto cleanup;

View File

@@ -679,7 +679,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
(bdev->bd_bdi->ra_pages * PAGE_SIZE) / 512); (bdev->bd_bdi->ra_pages * PAGE_SIZE) / 512);
case BLKGETSIZE: case BLKGETSIZE:
size = i_size_read(bdev->bd_inode); size = i_size_read(bdev->bd_inode);
if ((size >> 9) > ~0UL) if ((size >> 9) > ~(compat_ulong_t)0)
return -EFBIG; return -EFBIG;
return compat_put_ulong(argp, size >> 9); return compat_put_ulong(argp, size >> 9);

View File

@@ -1080,6 +1080,11 @@ static int flatten_lpi_states(struct acpi_processor *pr,
return 0; return 0;
} }
int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
{
return -EOPNOTSUPP;
}
static int acpi_processor_get_lpi_info(struct acpi_processor *pr) static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
{ {
int ret, i; int ret, i;
@@ -1088,6 +1093,11 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
struct acpi_device *d = NULL; struct acpi_device *d = NULL;
struct acpi_lpi_states_array info[2], *tmp, *prev, *curr; struct acpi_lpi_states_array info[2], *tmp, *prev, *curr;
/* make sure our architecture has support */
ret = acpi_processor_ffh_lpi_probe(pr->id);
if (ret == -EOPNOTSUPP)
return ret;
if (!osc_pc_lpi_support_confirmed) if (!osc_pc_lpi_support_confirmed)
return -EOPNOTSUPP; return -EOPNOTSUPP;
@@ -1139,11 +1149,6 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
return 0; return 0;
} }
int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
{
return -ENODEV;
}
int __weak acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi) int __weak acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi)
{ {
return -ENODEV; return -ENODEV;

View File

@@ -271,7 +271,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_from_fragment_pool); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_from_fragment_pool);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exclude_reserved_zone); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exclude_reserved_zone);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_include_reserved_zone); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_include_reserved_zone);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_slowpath_begin);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_slowpath_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mapcount_pages);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_traversal_lruvec);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpci_override_toggling); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpci_override_toggling);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_typec_tcpci_chk_contaminant); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_typec_tcpci_chk_contaminant);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_typec_tcpci_get_vbus); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_typec_tcpci_get_vbus);
@@ -336,6 +340,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_attach_sd);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sdhci_get_cd); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sdhci_get_cd);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_gpio_cd_irqt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_gpio_cd_irqt);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_remove_vmalloc_stack);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmpressure); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmpressure);
@@ -390,6 +395,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg_stat);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pci_d3_sleep); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pci_d3_sleep);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kmalloc_slab); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kmalloc_slab);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmap_region); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmap_region);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_page_mapcount);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_page_to_lrulist);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mark_page_accessed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_id_remove); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_id_remove);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline);
@@ -431,3 +441,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_swapinfo);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_si); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_si);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_shmem_page_flag); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_shmem_page_flag);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pidfd_open);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmput);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_pelt_multiplier);

Some files were not shown because too many files have changed in this diff Show More