This commit is contained in:
Jolan Rathelot 2024-04-16 17:20:10 +02:00
parent c2114de992
commit 449e79f65d
10 changed files with 1491 additions and 717 deletions

743
.clang-format Normal file
View File

@ -0,0 +1,743 @@
# SPDX-License-Identifier: GPL-2.0
#
# clang-format configuration file. Intended for clang-format >= 11.
#
# For more information, see:
#
# Documentation/process/clang-format.rst
# https://clang.llvm.org/docs/ClangFormat.html
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
#
---
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: false
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
# Taken from:
# git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ tools/ \
# | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \
# | LC_ALL=C sort -u
ForEachMacros:
- '__ata_qc_for_each'
- '__bio_for_each_bvec'
- '__bio_for_each_segment'
- '__evlist__for_each_entry'
- '__evlist__for_each_entry_continue'
- '__evlist__for_each_entry_from'
- '__evlist__for_each_entry_reverse'
- '__evlist__for_each_entry_safe'
- '__for_each_mem_range'
- '__for_each_mem_range_rev'
- '__for_each_thread'
- '__hlist_for_each_rcu'
- '__map__for_each_symbol_by_name'
- '__pci_bus_for_each_res0'
- '__pci_bus_for_each_res1'
- '__pci_dev_for_each_res0'
- '__pci_dev_for_each_res1'
- '__perf_evlist__for_each_entry'
- '__perf_evlist__for_each_entry_reverse'
- '__perf_evlist__for_each_entry_safe'
- '__rq_for_each_bio'
- '__shost_for_each_device'
- '__sym_for_each'
- 'apei_estatus_for_each_section'
- 'ata_for_each_dev'
- 'ata_for_each_link'
- 'ata_qc_for_each'
- 'ata_qc_for_each_raw'
- 'ata_qc_for_each_with_internal'
- 'ax25_for_each'
- 'ax25_uid_for_each'
- 'bio_for_each_bvec'
- 'bio_for_each_bvec_all'
- 'bio_for_each_folio_all'
- 'bio_for_each_integrity_vec'
- 'bio_for_each_segment'
- 'bio_for_each_segment_all'
- 'bio_list_for_each'
- 'bip_for_each_vec'
- 'bond_for_each_slave'
- 'bond_for_each_slave_rcu'
- 'bpf_for_each'
- 'bpf_for_each_reg_in_vstate'
- 'bpf_for_each_reg_in_vstate_mask'
- 'bpf_for_each_spilled_reg'
- 'bpf_object__for_each_map'
- 'bpf_object__for_each_program'
- 'btree_for_each_safe128'
- 'btree_for_each_safe32'
- 'btree_for_each_safe64'
- 'btree_for_each_safel'
- 'card_for_each_dev'
- 'cgroup_taskset_for_each'
- 'cgroup_taskset_for_each_leader'
- 'cpu_aggr_map__for_each_idx'
- 'cpufreq_for_each_efficient_entry_idx'
- 'cpufreq_for_each_entry'
- 'cpufreq_for_each_entry_idx'
- 'cpufreq_for_each_valid_entry'
- 'cpufreq_for_each_valid_entry_idx'
- 'css_for_each_child'
- 'css_for_each_descendant_post'
- 'css_for_each_descendant_pre'
- 'damon_for_each_region'
- 'damon_for_each_region_from'
- 'damon_for_each_region_safe'
- 'damon_for_each_scheme'
- 'damon_for_each_scheme_safe'
- 'damon_for_each_target'
- 'damon_for_each_target_safe'
- 'damos_for_each_filter'
- 'damos_for_each_filter_safe'
- 'data__for_each_file'
- 'data__for_each_file_new'
- 'data__for_each_file_start'
- 'device_for_each_child_node'
- 'displayid_iter_for_each'
- 'dma_fence_array_for_each'
- 'dma_fence_chain_for_each'
- 'dma_fence_unwrap_for_each'
- 'dma_resv_for_each_fence'
- 'dma_resv_for_each_fence_unlocked'
- 'do_for_each_ftrace_op'
- 'drm_atomic_crtc_for_each_plane'
- 'drm_atomic_crtc_state_for_each_plane'
- 'drm_atomic_crtc_state_for_each_plane_state'
- 'drm_atomic_for_each_plane_damage'
- 'drm_client_for_each_connector_iter'
- 'drm_client_for_each_modeset'
- 'drm_connector_for_each_possible_encoder'
- 'drm_exec_for_each_locked_object'
- 'drm_exec_for_each_locked_object_reverse'
- 'drm_for_each_bridge_in_chain'
- 'drm_for_each_connector_iter'
- 'drm_for_each_crtc'
- 'drm_for_each_crtc_reverse'
- 'drm_for_each_encoder'
- 'drm_for_each_encoder_mask'
- 'drm_for_each_fb'
- 'drm_for_each_legacy_plane'
- 'drm_for_each_plane'
- 'drm_for_each_plane_mask'
- 'drm_for_each_privobj'
- 'drm_gem_for_each_gpuva'
- 'drm_gem_for_each_gpuva_safe'
- 'drm_gpuva_for_each_op'
- 'drm_gpuva_for_each_op_from_reverse'
- 'drm_gpuva_for_each_op_safe'
- 'drm_gpuvm_for_each_va'
- 'drm_gpuvm_for_each_va_range'
- 'drm_gpuvm_for_each_va_range_safe'
- 'drm_gpuvm_for_each_va_safe'
- 'drm_mm_for_each_hole'
- 'drm_mm_for_each_node'
- 'drm_mm_for_each_node_in_range'
- 'drm_mm_for_each_node_safe'
- 'dsa_switch_for_each_available_port'
- 'dsa_switch_for_each_cpu_port'
- 'dsa_switch_for_each_cpu_port_continue_reverse'
- 'dsa_switch_for_each_port'
- 'dsa_switch_for_each_port_continue_reverse'
- 'dsa_switch_for_each_port_safe'
- 'dsa_switch_for_each_user_port'
- 'dsa_tree_for_each_cpu_port'
- 'dsa_tree_for_each_user_port'
- 'dsa_tree_for_each_user_port_continue_reverse'
- 'dso__for_each_symbol'
- 'dsos__for_each_with_build_id'
- 'elf_hash_for_each_possible'
- 'elf_symtab__for_each_symbol'
- 'evlist__for_each_cpu'
- 'evlist__for_each_entry'
- 'evlist__for_each_entry_continue'
- 'evlist__for_each_entry_from'
- 'evlist__for_each_entry_reverse'
- 'evlist__for_each_entry_safe'
- 'flow_action_for_each'
- 'for_each_acpi_consumer_dev'
- 'for_each_acpi_dev_match'
- 'for_each_active_dev_scope'
- 'for_each_active_drhd_unit'
- 'for_each_active_iommu'
- 'for_each_active_route'
- 'for_each_aggr_pgid'
- 'for_each_and_bit'
- 'for_each_andnot_bit'
- 'for_each_available_child_of_node'
- 'for_each_bench'
- 'for_each_bio'
- 'for_each_board_func_rsrc'
- 'for_each_btf_ext_rec'
- 'for_each_btf_ext_sec'
- 'for_each_bvec'
- 'for_each_card_auxs'
- 'for_each_card_auxs_safe'
- 'for_each_card_components'
- 'for_each_card_dapms'
- 'for_each_card_pre_auxs'
- 'for_each_card_prelinks'
- 'for_each_card_rtds'
- 'for_each_card_rtds_safe'
- 'for_each_card_widgets'
- 'for_each_card_widgets_safe'
- 'for_each_cgroup_storage_type'
- 'for_each_child_of_node'
- 'for_each_clear_bit'
- 'for_each_clear_bit_from'
- 'for_each_clear_bitrange'
- 'for_each_clear_bitrange_from'
- 'for_each_cmd'
- 'for_each_cmsghdr'
- 'for_each_collection'
- 'for_each_comp_order'
- 'for_each_compatible_node'
- 'for_each_component_dais'
- 'for_each_component_dais_safe'
- 'for_each_conduit'
- 'for_each_console'
- 'for_each_console_srcu'
- 'for_each_cpu'
- 'for_each_cpu_and'
- 'for_each_cpu_andnot'
- 'for_each_cpu_or'
- 'for_each_cpu_wrap'
- 'for_each_dapm_widgets'
- 'for_each_dedup_cand'
- 'for_each_dev_addr'
- 'for_each_dev_scope'
- 'for_each_dma_cap_mask'
- 'for_each_dpcm_be'
- 'for_each_dpcm_be_rollback'
- 'for_each_dpcm_be_safe'
- 'for_each_dpcm_fe'
- 'for_each_drhd_unit'
- 'for_each_dss_dev'
- 'for_each_efi_memory_desc'
- 'for_each_efi_memory_desc_in_map'
- 'for_each_element'
- 'for_each_element_extid'
- 'for_each_element_id'
- 'for_each_endpoint_of_node'
- 'for_each_event'
- 'for_each_event_tps'
- 'for_each_evictable_lru'
- 'for_each_fib6_node_rt_rcu'
- 'for_each_fib6_walker_rt'
- 'for_each_free_mem_pfn_range_in_zone'
- 'for_each_free_mem_pfn_range_in_zone_from'
- 'for_each_free_mem_range'
- 'for_each_free_mem_range_reverse'
- 'for_each_func_rsrc'
- 'for_each_gpiochip_node'
- 'for_each_group_evsel'
- 'for_each_group_evsel_head'
- 'for_each_group_member'
- 'for_each_group_member_head'
- 'for_each_hstate'
- 'for_each_if'
- 'for_each_inject_fn'
- 'for_each_insn'
- 'for_each_insn_prefix'
- 'for_each_intid'
- 'for_each_iommu'
- 'for_each_ip_tunnel_rcu'
- 'for_each_irq_nr'
- 'for_each_lang'
- 'for_each_link_codecs'
- 'for_each_link_cpus'
- 'for_each_link_platforms'
- 'for_each_lru'
- 'for_each_matching_node'
- 'for_each_matching_node_and_match'
- 'for_each_media_entity_data_link'
- 'for_each_mem_pfn_range'
- 'for_each_mem_range'
- 'for_each_mem_range_rev'
- 'for_each_mem_region'
- 'for_each_member'
- 'for_each_memory'
- 'for_each_migratetype_order'
- 'for_each_missing_reg'
- 'for_each_mle_subelement'
- 'for_each_mod_mem_type'
- 'for_each_net'
- 'for_each_net_continue_reverse'
- 'for_each_net_rcu'
- 'for_each_netdev'
- 'for_each_netdev_continue'
- 'for_each_netdev_continue_rcu'
- 'for_each_netdev_continue_reverse'
- 'for_each_netdev_dump'
- 'for_each_netdev_feature'
- 'for_each_netdev_in_bond_rcu'
- 'for_each_netdev_rcu'
- 'for_each_netdev_reverse'
- 'for_each_netdev_safe'
- 'for_each_new_connector_in_state'
- 'for_each_new_crtc_in_state'
- 'for_each_new_mst_mgr_in_state'
- 'for_each_new_plane_in_state'
- 'for_each_new_plane_in_state_reverse'
- 'for_each_new_private_obj_in_state'
- 'for_each_new_reg'
- 'for_each_node'
- 'for_each_node_by_name'
- 'for_each_node_by_type'
- 'for_each_node_mask'
- 'for_each_node_state'
- 'for_each_node_with_cpus'
- 'for_each_node_with_property'
- 'for_each_nonreserved_multicast_dest_pgid'
- 'for_each_numa_hop_mask'
- 'for_each_of_allnodes'
- 'for_each_of_allnodes_from'
- 'for_each_of_cpu_node'
- 'for_each_of_pci_range'
- 'for_each_old_connector_in_state'
- 'for_each_old_crtc_in_state'
- 'for_each_old_mst_mgr_in_state'
- 'for_each_old_plane_in_state'
- 'for_each_old_private_obj_in_state'
- 'for_each_oldnew_connector_in_state'
- 'for_each_oldnew_crtc_in_state'
- 'for_each_oldnew_mst_mgr_in_state'
- 'for_each_oldnew_plane_in_state'
- 'for_each_oldnew_plane_in_state_reverse'
- 'for_each_oldnew_private_obj_in_state'
- 'for_each_online_cpu'
- 'for_each_online_node'
- 'for_each_online_pgdat'
- 'for_each_or_bit'
- 'for_each_path'
- 'for_each_pci_bridge'
- 'for_each_pci_dev'
- 'for_each_pcm_streams'
- 'for_each_physmem_range'
- 'for_each_populated_zone'
- 'for_each_possible_cpu'
- 'for_each_present_blessed_reg'
- 'for_each_present_cpu'
- 'for_each_prime_number'
- 'for_each_prime_number_from'
- 'for_each_probe_cache_entry'
- 'for_each_process'
- 'for_each_process_thread'
- 'for_each_prop_codec_conf'
- 'for_each_prop_dai_codec'
- 'for_each_prop_dai_cpu'
- 'for_each_prop_dlc_codecs'
- 'for_each_prop_dlc_cpus'
- 'for_each_prop_dlc_platforms'
- 'for_each_property_of_node'
- 'for_each_reg'
- 'for_each_reg_filtered'
- 'for_each_reloc'
- 'for_each_reloc_from'
- 'for_each_requested_gpio'
- 'for_each_requested_gpio_in_range'
- 'for_each_reserved_mem_range'
- 'for_each_reserved_mem_region'
- 'for_each_rtd_codec_dais'
- 'for_each_rtd_components'
- 'for_each_rtd_cpu_dais'
- 'for_each_rtd_dais'
- 'for_each_sband_iftype_data'
- 'for_each_script'
- 'for_each_sec'
- 'for_each_set_bit'
- 'for_each_set_bit_from'
- 'for_each_set_bit_wrap'
- 'for_each_set_bitrange'
- 'for_each_set_bitrange_from'
- 'for_each_set_clump8'
- 'for_each_sg'
- 'for_each_sg_dma_page'
- 'for_each_sg_page'
- 'for_each_sgtable_dma_page'
- 'for_each_sgtable_dma_sg'
- 'for_each_sgtable_page'
- 'for_each_sgtable_sg'
- 'for_each_sibling_event'
- 'for_each_sta_active_link'
- 'for_each_subelement'
- 'for_each_subelement_extid'
- 'for_each_subelement_id'
- 'for_each_sublist'
- 'for_each_subsystem'
- 'for_each_supported_activate_fn'
- 'for_each_supported_inject_fn'
- 'for_each_sym'
- 'for_each_test'
- 'for_each_thread'
- 'for_each_token'
- 'for_each_unicast_dest_pgid'
- 'for_each_valid_link'
- 'for_each_vif_active_link'
- 'for_each_vma'
- 'for_each_vma_range'
- 'for_each_vsi'
- 'for_each_wakeup_source'
- 'for_each_zone'
- 'for_each_zone_zonelist'
- 'for_each_zone_zonelist_nodemask'
- 'func_for_each_insn'
- 'fwnode_for_each_available_child_node'
- 'fwnode_for_each_child_node'
- 'fwnode_for_each_parent_node'
- 'fwnode_graph_for_each_endpoint'
- 'gadget_for_each_ep'
- 'genradix_for_each'
- 'genradix_for_each_from'
- 'genradix_for_each_reverse'
- 'hash_for_each'
- 'hash_for_each_possible'
- 'hash_for_each_possible_rcu'
- 'hash_for_each_possible_rcu_notrace'
- 'hash_for_each_possible_safe'
- 'hash_for_each_rcu'
- 'hash_for_each_safe'
- 'hashmap__for_each_entry'
- 'hashmap__for_each_entry_safe'
- 'hashmap__for_each_key_entry'
- 'hashmap__for_each_key_entry_safe'
- 'hctx_for_each_ctx'
- 'hists__for_each_format'
- 'hists__for_each_sort_list'
- 'hlist_bl_for_each_entry'
- 'hlist_bl_for_each_entry_rcu'
- 'hlist_bl_for_each_entry_safe'
- 'hlist_for_each'
- 'hlist_for_each_entry'
- 'hlist_for_each_entry_continue'
- 'hlist_for_each_entry_continue_rcu'
- 'hlist_for_each_entry_continue_rcu_bh'
- 'hlist_for_each_entry_from'
- 'hlist_for_each_entry_from_rcu'
- 'hlist_for_each_entry_rcu'
- 'hlist_for_each_entry_rcu_bh'
- 'hlist_for_each_entry_rcu_notrace'
- 'hlist_for_each_entry_safe'
- 'hlist_for_each_entry_srcu'
- 'hlist_for_each_safe'
- 'hlist_nulls_for_each_entry'
- 'hlist_nulls_for_each_entry_from'
- 'hlist_nulls_for_each_entry_rcu'
- 'hlist_nulls_for_each_entry_safe'
- 'i3c_bus_for_each_i2cdev'
- 'i3c_bus_for_each_i3cdev'
- 'idr_for_each_entry'
- 'idr_for_each_entry_continue'
- 'idr_for_each_entry_continue_ul'
- 'idr_for_each_entry_ul'
- 'in_dev_for_each_ifa_rcu'
- 'in_dev_for_each_ifa_rtnl'
- 'inet_bind_bucket_for_each'
- 'interval_tree_for_each_span'
- 'intlist__for_each_entry'
- 'intlist__for_each_entry_safe'
- 'kcore_copy__for_each_phdr'
- 'key_for_each'
- 'key_for_each_safe'
- 'klp_for_each_func'
- 'klp_for_each_func_safe'
- 'klp_for_each_func_static'
- 'klp_for_each_object'
- 'klp_for_each_object_safe'
- 'klp_for_each_object_static'
- 'kunit_suite_for_each_test_case'
- 'kvm_for_each_memslot'
- 'kvm_for_each_memslot_in_gfn_range'
- 'kvm_for_each_vcpu'
- 'libbpf_nla_for_each_attr'
- 'list_for_each'
- 'list_for_each_codec'
- 'list_for_each_codec_safe'
- 'list_for_each_continue'
- 'list_for_each_entry'
- 'list_for_each_entry_continue'
- 'list_for_each_entry_continue_rcu'
- 'list_for_each_entry_continue_reverse'
- 'list_for_each_entry_from'
- 'list_for_each_entry_from_rcu'
- 'list_for_each_entry_from_reverse'
- 'list_for_each_entry_lockless'
- 'list_for_each_entry_rcu'
- 'list_for_each_entry_reverse'
- 'list_for_each_entry_safe'
- 'list_for_each_entry_safe_continue'
- 'list_for_each_entry_safe_from'
- 'list_for_each_entry_safe_reverse'
- 'list_for_each_entry_srcu'
- 'list_for_each_from'
- 'list_for_each_prev'
- 'list_for_each_prev_safe'
- 'list_for_each_rcu'
- 'list_for_each_reverse'
- 'list_for_each_safe'
- 'llist_for_each'
- 'llist_for_each_entry'
- 'llist_for_each_entry_safe'
- 'llist_for_each_safe'
- 'lwq_for_each_safe'
- 'map__for_each_symbol'
- 'map__for_each_symbol_by_name'
- 'maps__for_each_entry'
- 'maps__for_each_entry_safe'
- 'mas_for_each'
- 'mci_for_each_dimm'
- 'media_device_for_each_entity'
- 'media_device_for_each_intf'
- 'media_device_for_each_link'
- 'media_device_for_each_pad'
- 'media_entity_for_each_pad'
- 'media_pipeline_for_each_entity'
- 'media_pipeline_for_each_pad'
- 'mlx5_lag_for_each_peer_mdev'
- 'msi_domain_for_each_desc'
- 'msi_for_each_desc'
- 'mt_for_each'
- 'nanddev_io_for_each_page'
- 'netdev_for_each_lower_dev'
- 'netdev_for_each_lower_private'
- 'netdev_for_each_lower_private_rcu'
- 'netdev_for_each_mc_addr'
- 'netdev_for_each_synced_mc_addr'
- 'netdev_for_each_synced_uc_addr'
- 'netdev_for_each_uc_addr'
- 'netdev_for_each_upper_dev_rcu'
- 'netdev_hw_addr_list_for_each'
- 'nft_rule_for_each_expr'
- 'nla_for_each_attr'
- 'nla_for_each_nested'
- 'nlmsg_for_each_attr'
- 'nlmsg_for_each_msg'
- 'nr_neigh_for_each'
- 'nr_neigh_for_each_safe'
- 'nr_node_for_each'
- 'nr_node_for_each_safe'
- 'of_for_each_phandle'
- 'of_property_for_each_string'
- 'of_property_for_each_u32'
- 'pci_bus_for_each_resource'
- 'pci_dev_for_each_resource'
- 'pcl_for_each_chunk'
- 'pcl_for_each_segment'
- 'pcm_for_each_format'
- 'perf_config_items__for_each_entry'
- 'perf_config_sections__for_each_entry'
- 'perf_config_set__for_each_entry'
- 'perf_cpu_map__for_each_cpu'
- 'perf_cpu_map__for_each_idx'
- 'perf_evlist__for_each_entry'
- 'perf_evlist__for_each_entry_reverse'
- 'perf_evlist__for_each_entry_safe'
- 'perf_evlist__for_each_evsel'
- 'perf_evlist__for_each_mmap'
- 'perf_hpp_list__for_each_format'
- 'perf_hpp_list__for_each_format_safe'
- 'perf_hpp_list__for_each_sort_list'
- 'perf_hpp_list__for_each_sort_list_safe'
- 'perf_tool_event__for_each_event'
- 'plist_for_each'
- 'plist_for_each_continue'
- 'plist_for_each_entry'
- 'plist_for_each_entry_continue'
- 'plist_for_each_entry_safe'
- 'plist_for_each_safe'
- 'pnp_for_each_card'
- 'pnp_for_each_dev'
- 'protocol_for_each_card'
- 'protocol_for_each_dev'
- 'queue_for_each_hw_ctx'
- 'radix_tree_for_each_slot'
- 'radix_tree_for_each_tagged'
- 'rb_for_each'
- 'rbtree_postorder_for_each_entry_safe'
- 'rdma_for_each_block'
- 'rdma_for_each_port'
- 'rdma_umem_for_each_dma_block'
- 'resort_rb__for_each_entry'
- 'resource_list_for_each_entry'
- 'resource_list_for_each_entry_safe'
- 'rhl_for_each_entry_rcu'
- 'rhl_for_each_rcu'
- 'rht_for_each'
- 'rht_for_each_entry'
- 'rht_for_each_entry_from'
- 'rht_for_each_entry_rcu'
- 'rht_for_each_entry_rcu_from'
- 'rht_for_each_entry_safe'
- 'rht_for_each_from'
- 'rht_for_each_rcu'
- 'rht_for_each_rcu_from'
- 'rq_for_each_bvec'
- 'rq_for_each_segment'
- 'rq_list_for_each'
- 'rq_list_for_each_safe'
- 'sample_read_group__for_each'
- 'scsi_for_each_prot_sg'
- 'scsi_for_each_sg'
- 'sctp_for_each_hentry'
- 'sctp_skb_for_each'
- 'sec_for_each_insn'
- 'sec_for_each_insn_continue'
- 'sec_for_each_insn_from'
- 'sec_for_each_sym'
- 'shdma_for_each_chan'
- 'shost_for_each_device'
- 'sk_for_each'
- 'sk_for_each_bound'
- 'sk_for_each_bound_bhash2'
- 'sk_for_each_entry_offset_rcu'
- 'sk_for_each_from'
- 'sk_for_each_rcu'
- 'sk_for_each_safe'
- 'sk_nulls_for_each'
- 'sk_nulls_for_each_from'
- 'sk_nulls_for_each_rcu'
- 'snd_array_for_each'
- 'snd_pcm_group_for_each_entry'
- 'snd_soc_dapm_widget_for_each_path'
- 'snd_soc_dapm_widget_for_each_path_safe'
- 'snd_soc_dapm_widget_for_each_sink_path'
- 'snd_soc_dapm_widget_for_each_source_path'
- 'strlist__for_each_entry'
- 'strlist__for_each_entry_safe'
- 'sym_for_each_insn'
- 'sym_for_each_insn_continue_reverse'
- 'symbols__for_each_entry'
- 'tb_property_for_each'
- 'tcf_act_for_each_action'
- 'tcf_exts_for_each_action'
- 'ttm_resource_manager_for_each_res'
- 'twsk_for_each_bound_bhash2'
- 'udp_portaddr_for_each_entry'
- 'udp_portaddr_for_each_entry_rcu'
- 'usb_hub_for_each_child'
- 'v4l2_device_for_each_subdev'
- 'v4l2_m2m_for_each_dst_buf'
- 'v4l2_m2m_for_each_dst_buf_safe'
- 'v4l2_m2m_for_each_src_buf'
- 'v4l2_m2m_for_each_src_buf_safe'
- 'virtio_device_for_each_vq'
- 'while_for_each_ftrace_op'
- 'xa_for_each'
- 'xa_for_each_marked'
- 'xa_for_each_range'
- 'xa_for_each_start'
- 'xas_for_each'
- 'xas_for_each_conflict'
- 'xas_for_each_marked'
- 'xbc_array_for_each_value'
- 'xbc_for_each_key_value'
- 'xbc_node_for_each_array_value'
- 'xbc_node_for_each_child'
- 'xbc_node_for_each_key_value'
- 'xbc_node_for_each_subkey'
- 'zorro_for_each_dev'
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentGotoLabels: false
IndentPPDirectives: None
IndentWidth: 8
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 8
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
# Taken from git's rules
PenaltyBreakAssignment: 10
PenaltyBreakBeforeFirstCallParameter: 30
PenaltyBreakComment: 10
PenaltyBreakFirstLessLess: 0
PenaltyBreakString: 10
PenaltyExcessCharacter: 100
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: false
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp03
TabWidth: 8
UseTab: Always
...

63
.idea/workspace.xml generated
View File

@ -17,7 +17,14 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="2686ebbf-1c6c-4484-bb57-dec59a208d53" name="Changes" comment=""> <list default="true" id="2686ebbf-1c6c-4484-bb57-dec59a208d53" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Kbuild" beforeDir="false" afterPath="$PROJECT_DIR$/Kbuild" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Makefile" beforeDir="false" afterPath="$PROJECT_DIR$/Makefile" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/drivers_and_interrupts.h" beforeDir="false" afterPath="$PROJECT_DIR$/src/drivers_and_interrupts.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/keyboard_logger.c" beforeDir="false" afterPath="$PROJECT_DIR$/src/keyboard_logger.c" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main.c" beforeDir="false" afterPath="$PROJECT_DIR$/src/main.c" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/misc_device_fops.c" beforeDir="false" afterPath="$PROJECT_DIR$/src/misc_device_fops.c" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -65,30 +72,31 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent">{ <component name="PropertiesComponent"><![CDATA[{
&quot;keyToString&quot;: { "keyToString": {
&quot;ASKED_ADD_EXTERNAL_FILES&quot;: &quot;true&quot;, "ASKED_ADD_EXTERNAL_FILES": "true",
&quot;ASKED_SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;, "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;, "RunOnceActivity.OpenProjectViewOnStart": "true",
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, "RunOnceActivity.ShowReadmeOnStart": "true",
&quot;RunOnceActivity.cidr.known.project.marker&quot;: &quot;true&quot;, "RunOnceActivity.cidr.known.project.marker": "true",
&quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;, "WebServerToolWindowFactoryState": "false",
&quot;cf.first.check.clang-format&quot;: &quot;false&quot;, "cf.advertisement.text.has.clang-format": "true",
&quot;cidr.known.project.marker&quot;: &quot;true&quot;, "cf.first.check.clang-format": "false",
&quot;git-widget-placeholder&quot;: &quot;master&quot;, "cidr.known.project.marker": "true",
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, "git-widget-placeholder": "master",
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, "node.js.detected.package.eslint": "true",
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, "node.js.detected.package.tslint": "true",
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, "node.js.selected.package.eslint": "(autodetect)",
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, "node.js.selected.package.tslint": "(autodetect)",
&quot;org.rust.cargo.project.model.PROJECT_DISCOVERY&quot;: &quot;true&quot;, "nodejs_package_manager_path": "npm",
&quot;org.rust.hideNoCargoProjectNotifications/root/drivers-and-interrupts/src/fancy_print.rs&quot;: &quot;true&quot;, "org.rust.cargo.project.model.PROJECT_DISCOVERY": "true",
&quot;org.rust.hideNoCargoProjectNotifications/root/drivers-and-interrupts/src/main.rs&quot;: &quot;true&quot;, "org.rust.hideNoCargoProjectNotifications/root/drivers-and-interrupts/src/fancy_print.rs": "true",
&quot;settings.editor.selected.configurable&quot;: &quot;MakefileSettings&quot;, "org.rust.hideNoCargoProjectNotifications/root/drivers-and-interrupts/src/main.rs": "true",
&quot;structure.view.defaults.are.configured&quot;: &quot;true&quot;, "settings.editor.selected.configurable": "MakefileSettings",
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; "structure.view.defaults.are.configured": "true",
"vue.rearranger.settings.migration": "true"
} }
}</component> }]]></component>
<component name="RdControllerToolWindowsLayoutState" isNewUi="true"> <component name="RdControllerToolWindowsLayoutState" isNewUi="true">
<layout> <layout>
<window_info id="Space Code Reviews" /> <window_info id="Space Code Reviews" />
@ -102,7 +110,7 @@
<window_info anchor="bottom" id="CMake" weight="0.22384511" /> <window_info anchor="bottom" id="CMake" weight="0.22384511" />
<window_info anchor="bottom" id="Database Changes" /> <window_info anchor="bottom" id="Database Changes" />
<window_info anchor="bottom" id="TypeScript" /> <window_info anchor="bottom" id="TypeScript" />
<window_info anchor="bottom" id="Build" weight="0.26324728" /> <window_info anchor="bottom" id="Build" weight="0.4296875" />
<window_info anchor="bottom" id="Python Packages" /> <window_info anchor="bottom" id="Python Packages" />
<window_info anchor="bottom" id="TODO" /> <window_info anchor="bottom" id="TODO" />
<window_info anchor="bottom" id="File Transfer" /> <window_info anchor="bottom" id="File Transfer" />
@ -111,7 +119,7 @@
<window_info anchor="bottom" id="clangd" /> <window_info anchor="bottom" id="clangd" />
<window_info anchor="bottom" id="Version Control" order="0" weight="0.32982337" /> <window_info anchor="bottom" id="Version Control" order="0" weight="0.32982337" />
<window_info anchor="bottom" id="Problems View" order="1" /> <window_info anchor="bottom" id="Problems View" order="1" />
<window_info active="true" anchor="bottom" id="Terminal" order="2" visible="true" weight="0.26324728" /> <window_info active="true" anchor="bottom" id="Terminal" order="2" visible="true" weight="0.2734375" />
<window_info anchor="bottom" id="Services" order="3" weight="0.22384511" /> <window_info anchor="bottom" id="Services" order="3" weight="0.22384511" />
<window_info anchor="right" id="make" side_tool="true" /> <window_info anchor="right" id="make" side_tool="true" />
<window_info anchor="right" id="Meet New UI" side_tool="true" /> <window_info anchor="right" id="Meet New UI" side_tool="true" />
@ -155,7 +163,10 @@
<workItem from="1710410734122" duration="3818000" /> <workItem from="1710410734122" duration="3818000" />
<workItem from="1710428742857" duration="5381000" /> <workItem from="1710428742857" duration="5381000" />
<workItem from="1710488169055" duration="12511000" /> <workItem from="1710488169055" duration="12511000" />
<workItem from="1713174090163" duration="3761000" /> <workItem from="1713174090163" duration="4399000" />
<workItem from="1713266987604" duration="1624000" />
<workItem from="1713271998309" duration="1300000" />
<workItem from="1713279749743" duration="1001000" />
</task> </task>
<task id="LOCAL-00001" summary="Removed Rust code, added misc device and irq handle. Began work on correctly formatting print msg and logging files."> <task id="LOCAL-00001" summary="Removed Rust code, added misc device and irq handle. Began work on correctly formatting print msg and logging files.">
<option name="closed" value="true" /> <option name="closed" value="true" />

View File

@ -7,7 +7,8 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
ssize_t read_keyboard_misc_device(struct file *file, char __user *buf, size_t count, loff_t *ppos); ssize_t read_keyboard_misc_device(struct file *file, char __user *buf,
size_t count, loff_t *ppos);
irqreturn_t key_logger_isr(int i, void *dummy); irqreturn_t key_logger_isr(int i, void *dummy);
enum state { enum state {
@ -34,14 +35,12 @@ struct logger {
char capslocked; char capslocked;
}; };
#ifndef EXTERN #ifndef EXTERN
# define EXTERN extern #define EXTERN extern
#endif #endif
extern struct list_head keyboard_log; extern struct list_head keyboard_log;
extern struct mutex lock; extern struct mutex lock;
void print_keyboard_line(struct KeyboardCaptureData data); void print_keyboard_line(struct KeyboardCaptureData data);
size_t calc_node_size(struct linked_list_node *node); size_t calc_node_size(struct linked_list_node *node);

View File

@ -514,13 +514,16 @@ const struct KeyboardCaptureData KEY_DICTIONARY_SHIFTED[DICT_SIZE] = {
{ 0xe11d45e19dc5, "Pause", PRESSED, 0 }, { 0xe11d45e19dc5, "Pause", PRESSED, 0 },
}; };
struct KeyboardCaptureData find_key_from_code(uint64_t code, char is_shifted, char is_capslocked) { struct KeyboardCaptureData find_key_from_code(uint64_t code, char is_shifted,
char is_capslocked)
{
for (size_t i = 0; i < DICT_SIZE; i++) { for (size_t i = 0; i < DICT_SIZE; i++) {
if (KEY_DICTIONARY[i].code == code) { if (KEY_DICTIONARY[i].code == code) {
if (is_capslocked && is_shifted) { if (is_capslocked && is_shifted) {
return KEY_DICTIONARY_SHIFTED[i]; return KEY_DICTIONARY_SHIFTED[i];
} else if (is_capslocked && !is_shifted) { } else if (is_capslocked && !is_shifted) {
if ((code >= 0x2 && code <= 0xd) || (code >= 0x82 && code <= 0x8d)) { if ((code >= 0x2 && code <= 0xd) ||
(code >= 0x82 && code <= 0x8d)) {
return KEY_DICTIONARY[i]; return KEY_DICTIONARY[i];
} else { } else {
return KEY_DICTIONARY_SHIFTED[i]; return KEY_DICTIONARY_SHIFTED[i];
@ -536,11 +539,13 @@ struct KeyboardCaptureData find_key_from_code(uint64_t code, char is_shifted, ch
return dummy; return dummy;
} }
void printk_key_event(struct KeyboardCaptureData key, struct timespec64 now) { void printk_key_event(struct KeyboardCaptureData key, struct timespec64 now)
{
char sec = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) % 60; char sec = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) % 60;
char min = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 % 60; char min = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 % 60;
char hour = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 / 60 % 24; char hour = (now.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 / 60 % 24;
printk(KERN_INFO "%02d:%02d:%02d \"%s\" ", hour, min, sec, key.key_name); printk(KERN_INFO "%02d:%02d:%02d \"%s\" ", hour, min, sec,
key.key_name);
if (key.ascii_value) { if (key.ascii_value) {
printk(KERN_CONT "(0x%02x) ", key.ascii_value); printk(KERN_CONT "(0x%02x) ", key.ascii_value);
} }
@ -551,7 +556,9 @@ void printk_key_event(struct KeyboardCaptureData key, struct timespec64 now) {
} }
} }
int append_node(struct list_head *list, struct KeyboardCaptureData key, struct timespec64 when) { int append_node(struct list_head *list, struct KeyboardCaptureData key,
struct timespec64 when)
{
struct linked_list_node *entry; struct linked_list_node *entry;
entry = kmalloc(sizeof *entry, GFP_KERNEL); entry = kmalloc(sizeof *entry, GFP_KERNEL);
if (!entry) if (!entry)
@ -564,13 +571,15 @@ int append_node(struct list_head *list, struct KeyboardCaptureData key, struct t
return 0; return 0;
} }
irqreturn_t key_logger_isr(int i, void *dummy) { irqreturn_t key_logger_isr(int i, void *dummy)
struct logger* key_logger = (struct logger *) dummy; {
struct logger *key_logger = (struct logger *)dummy;
uint64_t code = inb(0x60); uint64_t code = inb(0x60);
mutex_lock(&lock); mutex_lock(&lock);
struct timespec64 now; struct timespec64 now;
ktime_get_real_ts64(&now); ktime_get_real_ts64(&now);
struct KeyboardCaptureData key = find_key_from_code(code, key_logger->shifted, key_logger->capslocked); struct KeyboardCaptureData key = find_key_from_code(
code, key_logger->shifted, key_logger->capslocked);
if (!key.code) { if (!key.code) {
return IRQ_NONE; return IRQ_NONE;
} }
@ -590,5 +599,3 @@ irqreturn_t key_logger_isr(int i, void *dummy) {
mutex_unlock(&lock); mutex_unlock(&lock);
return IRQ_HANDLED; return IRQ_HANDLED;
} }

View File

@ -26,7 +26,8 @@ static struct miscdevice device = {
struct mutex lock = __MUTEX_INITIALIZER(lock); struct mutex lock = __MUTEX_INITIALIZER(lock);
static struct logger key_logger = { 0, 0 }; static struct logger key_logger = { 0, 0 };
static int __init m_init(void) { static int __init m_init(void)
{
struct linked_list_node *ptr, *tmp; struct linked_list_node *ptr, *tmp;
int err = 0; int err = 0;
printk(KERN_INFO "Drivers and Interrupts (init)\n"); printk(KERN_INFO "Drivers and Interrupts (init)\n");
@ -52,19 +53,20 @@ err_free_linked_list:
return err; return err;
} }
static void __exit m_exit(void) { static void __exit m_exit(void)
{
struct linked_list_node *ptr, *tmp; struct linked_list_node *ptr, *tmp;
misc_deregister(&device); misc_deregister(&device);
size_t len = 0; size_t len = 0;
list_for_each_entry_safe(ptr, tmp, &keyboard_log, list){ list_for_each_entry_safe(ptr, tmp, &keyboard_log, list) {
len++; len++;
list_del(&ptr->list); list_del(&ptr->list);
kfree(ptr); kfree(ptr);
} }
printk(KERN_INFO "Captured %zu Keyboard inputs", len); printk(KERN_INFO "Captured %zu Keyboard inputs", len);
free_irq(1,&key_logger); free_irq(1, &key_logger);
mutex_destroy(&lock); mutex_destroy(&lock);
printk(KERN_INFO "Drivers and Interrupts (exit)\n"); printk(KERN_INFO "Drivers and Interrupts (exit)\n");
} }

View File

@ -4,7 +4,8 @@
#include "drivers_and_interrupts.h" #include "drivers_and_interrupts.h"
size_t calc_node_size(struct linked_list_node *node) { size_t calc_node_size(struct linked_list_node *node)
{
size_t size = 14; size_t size = 14;
if (node->key.state == PRESSED) { if (node->key.state == PRESSED) {
size += 7; size += 7;
@ -19,8 +20,9 @@ size_t calc_node_size(struct linked_list_node *node) {
return size; return size;
} }
ssize_t read_keyboard_misc_device(struct file *file, char __user *buf,
ssize_t read_keyboard_misc_device(struct file *file, char __user *buf, size_t count, loff_t *ppos) { size_t count, loff_t *ppos)
{
struct linked_list_node *tmp; struct linked_list_node *tmp;
loff_t node_offset = *ppos; loff_t node_offset = *ppos;
@ -32,35 +34,45 @@ ssize_t read_keyboard_misc_device(struct file *file, char __user *buf, size_t co
node_offset -= tmp->size; node_offset -= tmp->size;
} }
if (node_offset > tmp->size) { if (node_offset > tmp->size) {
printk("early exit\n"); mutex_unlock(&lock);
return 0; return 0;
} }
// if (count > len - *ppos) { // if (count > len - *ppos) {
// count = len - *ppos; // count = len - *ppos;
// } // }
size_t user_offset = 0; size_t user_offset = 0;
for (; !list_entry_is_head(tmp, &keyboard_log, list); tmp = list_next_entry(tmp, list)) { for (; !list_entry_is_head(tmp, &keyboard_log, list);
char sec = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) % 60; tmp = list_next_entry(tmp, list)) {
char min = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 % 60; char sec =
char hour = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 / 60 % 24; (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) % 60;
char min = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) /
60 % 60;
char hour = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) /
60 / 60 % 24;
char *buffer = kmalloc(sizeof(char) * tmp->size, GFP_KERNEL); char *buffer = kmalloc(sizeof(char) * tmp->size, GFP_KERNEL);
if (!buffer) { if (!buffer) {
mutex_unlock(&lock); mutex_unlock(&lock);
return -ENOMEM; return -ENOMEM;
} }
memset(buffer, 0, tmp->size); memset(buffer, 0, tmp->size);
snprintf(buffer, tmp->size, "%02d:%02d:%02d \"%s\"", hour, min, sec, tmp->key.key_name); snprintf(buffer, tmp->size, "%02d:%02d:%02d \"%s\"", hour, min,
sec, tmp->key.key_name);
if (tmp->key.ascii_value) { if (tmp->key.ascii_value) {
snprintf(buffer + strlen(buffer), tmp->size - strlen(buffer), "(0x%02x) ", tmp->key.ascii_value); snprintf(buffer + strlen(buffer),
tmp->size - strlen(buffer), "(0x%02x) ",
tmp->key.ascii_value);
} }
if (tmp->key.state == PRESSED) { if (tmp->key.state == PRESSED) {
snprintf(buffer + strlen(buffer), tmp->size - strlen(buffer), "PRESSED\n"); snprintf(buffer + strlen(buffer),
tmp->size - strlen(buffer), "PRESSED\n");
} else { } else {
snprintf(buffer + strlen(buffer), tmp->size - strlen(buffer), "RELEASED\n"); snprintf(buffer + strlen(buffer),
tmp->size - strlen(buffer), "RELEASED\n");
} }
if (copy_to_user(buf + user_offset, buffer + node_offset, tmp->size - node_offset)) { if (copy_to_user(buf + user_offset, buffer + node_offset,
tmp->size - node_offset)) {
kfree(buffer); kfree(buffer);
mutex_unlock(&lock); mutex_unlock(&lock);
return -EFAULT; return -EFAULT;