函数逻辑报告 |
Source Code:include\linux\spinlock.h |
Create Date:2022-07-27 06:39:18 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:spin_unlock_irqrestore
函数原型:static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
返回类型:void
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| spinlock_t * | lock | |
| unsigned long | flags |
| 393 | raw_spin_unlock_irqrestore( & rlock, flags) |
| 名称 | 描述 |
|---|---|
| _atomic_dec_and_lock_irqsave | |
| klist_prev | klist_prev - Ante up prev node in list.*@i: Iterator structure.* First grab list lock. Decrement the reference count of the previous* node, if there was one. Grab the prev node, increment its reference* count, drop the lock, and return that prev node. |
| klist_next | 列表的下一个节点 |
| __prandom_reseed | Generate better values after random number generator* is fully initialized. |
| percpu_ref_switch_to_atomic | percpu_ref_switch_to_atomic - switch a percpu_ref to atomic mode*@ref: percpu_ref to switch to atomic mode*@confirm_switch: optional confirmation callback* There's no reason to use this function for the usual reference counting. |
| percpu_ref_switch_to_percpu | percpu_ref_switch_to_percpu - switch a percpu_ref to percpu mode*@ref: percpu_ref to switch to percpu mode* There's no reason to use this function for the usual reference counting.* To re-use an expired ref, use percpu_ref_reinit(). |
| percpu_ref_kill_and_confirm | percpu_ref_kill_and_confirm - drop the initial ref and schedule confirmation*@ref: percpu_ref to kill*@confirm_kill: optional confirmation callback* Equivalent to percpu_ref_kill() but also schedules kill confirmation if*@confirm_kill is not NULL |
| percpu_ref_resurrect | percpu_ref_resurrect - modify a percpu refcount from dead to live*@ref: perpcu_ref to resurrect* Modify @ref so that it's in the same state as before percpu_ref_kill() was* called |
| __do_once_start | |
| __do_once_done | |
| refcount_dec_and_lock_irqsave | _dec_and_lock_irqsave - return holding spinlock with disabled* interrupts if able to decrement refcount to 0*@r: the refcount*@lock: the spinlock to be locked*@flags: saved IRQ-flags if the is acquired* Same as refcount_dec_and_lock() above except that |
| stack_depot_save | stack_depot_save - Save a stack trace from an array*@entries: Pointer to storage array*@nr_entries: Size of the storage array*@alloc_flags: Allocation gfp flags* Return: The handle of the stack struct stored in depot |
| sbitmap_deferred_clear | See if we have deferred clears that we can batch move |
| sbf_write | |
| sbf_read | |
| mach_get_cmos_time | |
| smpboot_setup_warm_reset_vector | |
| smpboot_restore_warm_reset_vector | |
| irq_handler | |
| free_vm86_irq | |
| get_and_reset_irq | |
| amd_flush_garts | |
| alloc_iommu | |
| free_iommu | |
| flush_gart | Use global flush state to avoid races with multiple flushers. |
| do_oops_enter_exit | It just happens that oops_enter() and oops_exit() are identically* implemented... |
| free_user | IRQs are disabled and uidhash_lock is held upon function entry.* IRQ state (as stored in flags) is restored and uidhash_lock released* upon function exit. |
| find_user | Locate the user_struct for the passed UID. If found, take a ref on it. The* caller must undo that ref with free_uid().* If the user_struct could not be found, return NULL. |
| flush_signals | Flush all pending signals for this kthread. |
| force_sig_info_to_task | Force a signal that the process can't ignore: if necessary* we unblock the signal and change any SIG_IGN to SIG_DFL.* Note: If we unblock the signal, we always reset it to SIG_DFL,* since we do not want to have a signal handler that was blocked |
| __lock_task_sighand | |
| force_sigsegv | When things go south during signal handling, we* will force a SIGSEGV. And if the signal that caused* the problem was already a SIGSEGV, we'll want to* make sure we don't even try to deliver the signal.. |
| sigqueue_free | |
| do_notify_parent | Let a parent know about the death of a child.* For a stopped/continued status change, use do_notify_parent_cldstop instead.* Returns true if our parent ignored us and so we've switched to* self-reaping. |
| do_notify_parent_cldstop | do_notify_parent_cldstop - notify parent of stopped/continued state change*@tsk: task reporting the state change*@for_ptracer: the notification is for ptracer*@why: CLD_{CONTINUED|STOPPED|TRAPPED} to report |
| pwq_adjust_max_active | pwq_adjust_max_active - update a pwq's max_active to the current setting*@pwq: target pool_workqueue* If @pwq isn't freezing, set @pwq->max_active to the associated* workqueue's saved_max_active and activate delayed work items* accordingly |
| work_busy | work_busy - test whether a work is currently pending or running*@work: the work to be tested* Test whether @work is currently pending or running. There is no* synchronization around this function and the test result is |
| show_workqueue_state | show_workqueue_state - dump workqueue state* Called from a sysrq handler or try_to_freeze_tasks() and prints out* all busy workqueues and pools. |
| free_pid | |
| atomic_notifier_chain_register | atomic_notifier_chain_register - Add notifier to an atomic notifier chain*@nh: Pointer to head of the atomic notifier chain*@n: New entry in notifier chain* Adds a notifier to an atomic notifier chain.* Currently always returns zero. |
| atomic_notifier_chain_unregister | atomic_notifier_chain_unregister - Remove notifier from an atomic notifier chain*@nh: Pointer to head of the atomic notifier chain*@n: Entry to remove from notifier chain* Removes a notifier from an atomic notifier chain. |
| lowest_in_progress | |
| async_run_entry_fn | pick the first pending entry and run it |
| async_schedule_node_domain | async_schedule_node_domain - NUMA specific version of async_schedule_domain*@func: function to execute asynchronously*@data: data pointer to pass to the function*@node: NUMA node that we want to schedule this on or close to*@domain: the domain |
| put_ucounts | |
| add_wait_queue | |
| add_wait_queue_exclusive | |
| remove_wait_queue | |
| __wake_up_common_lock | |
| prepare_to_wait | Note: we use "set_current_state()" _after_ the wait-queue add,* because we need a memory barrier there on SMP, so that any* wake-function that tests for the wait-queue being active* will be guaranteed to see waitqueue addition _or_ subsequent |
| prepare_to_wait_exclusive | |
| prepare_to_wait_event | |
| finish_wait | sh_wait - clean up after waiting in a queue*@wq_head: waitqueue waited on*@wq_entry: wait descriptor* Sets current thread back to running state and removes* the wait descriptor from the given waitqueue if still* queued. |
| complete | mplete: - signals a single thread waiting on this completion*@x: holds the state of this particular completion* This will wake up a single thread waiting on this completion. Threads will be* awakened in the same order in which they were queued. |
| complete_all | mplete_all: - signals all threads waiting on this completion*@x: holds the state of this particular completion* This will wake up all threads waiting on this particular completion event |
| try_wait_for_completion | ry_wait_for_completion - try to decrement a completion without blocking*@x: completion structure* Return: 0 if a decrement cannot be done without blocking* 1 if a decrement succeeded.* If a completion is being used as a counting completion, |
| completion_done | mpletion_done - Test to see if a completion has any waiters*@x: completion structure* Return: 0 if there are waiters (wait_for_completion() in progress)* 1 if there are no waiters.* Note, this will always return true if complete_all() was called on @X. |
| print_cpu | |
| torture_lock_spin_write_unlock_irq | |
| pm_qos_debug_show | |
| pm_qos_update_target | pm_qos_update_target - manages the constraints list and calls the notifiers* if needed*@c: constraints data struct*@node: request to add to the list, to update or to remove*@action: action to take on the constraints list*@value: value of the request to |
| pm_qos_update_flags | pm_qos_update_flags - Update a set of PM QoS flags |
| pm_qos_power_read | |
| kmsg_dump_register | kmsg_dump_register - register a kernel log dumper.*@dumper: pointer to the kmsg_dumper structure* Adds a kernel log dumper to the system. The dump callback in the* structure will be called when the kernel oopses or panics and must be* set |
| kmsg_dump_unregister | kmsg_dump_unregister - unregister a kmsg dumper.*@dumper: pointer to the kmsg_dumper structure* Removes a dump device from the system. Returns zero on success and* %-EINVAL otherwise. |
| rcu_sync_func | |
| rcu_torture_fwd_cb_cr | Callback function for continuous-flood RCU callbacks. |
| rcu_torture_fwd_prog_cbfree | Free all callbacks on the rcu_fwd_cb_head list, either because the* test is over or because we hit an OOM event. |
| __klp_shadow_get_or_alloc | |
| klp_shadow_free | klp_shadow_free() - detach and free a |
| klp_shadow_free_all | klp_shadow_free_all() - detach and free all <*, id> shadow variables*@id: data identifier*@dtor: custom callback that can be used to unregister the variable* and/or free data that the shadow variable points to (optional)* This function releases the memory |
| __dma_alloc_from_coherent | |
| __dma_release_from_coherent | |
| put_hash_bucket | Give up exclusive access to the hash bucket |
| debug_dma_dump_mappings | Dump mapping entries for debugging purposes |
| active_cacheline_insert | |
| active_cacheline_remove | |
| debug_dma_assert_idle | debug_dma_assert_idle() - assert that a page is not undergoing dma*@page: page to lookup in the dma_active_cacheline tree* Place a call to this routine in cases where the cpu touching the page* before the dma completes (page is dma_unmapped) will lead to |
| dma_entry_alloc | struct dma_entry allocator* The next two functions implement the allocator for* struct dma_debug_entries. |
| dma_entry_free | |
| dump_show | |
| device_dma_allocations | |
| swiotlb_tbl_map_single | |
| swiotlb_tbl_unmap_single | lb_addr is the physical address of the bounce buffer to unmap. |
| freeze_task | ze_task - send a freeze request to given task*@p: task to send the request to* If @p is freezing, the freeze request is sent either by sending a fake* signal (if it's not a kernel thread) or waking it up (if it's a kernel* thread) |
| __thaw_task | |
| alarmtimer_fired | alarmtimer_fired - Handles alarm hrtimer being fired |
| alarm_start | alarm_start - Sets an absolute alarm to fire*@alarm: ptr to alarm to set*@start: time to run the alarm |
| alarm_restart | |
| alarm_try_to_cancel | alarm_try_to_cancel - Tries to cancel an alarm timer*@alarm: ptr to alarm to be canceled* Returns 1 if the timer was canceled, 0 if it was not running,* and -1 if the callback was running |
| unlock_timer | |
| release_posix_timer | |
| __lock_timer | CLOCKs: The POSIX standard calls for a couple of clocks and allows us* to implement others |
| cgroup_file_notify | group_file_notify - generate a file modified event for a cgroup_file*@cfile: target cgroup_file*@cfile must have been obtained by setting cftype->file_offset. |
| cgroup_rstat_flush_irqsafe | group_rstat_flush_irqsafe - irqsafe version of cgroup_rstat_flush()*@cgrp: target cgroup* This function can be called from any context. |
| cpuset_cpus_allowed | puset_cpus_allowed - return cpus_allowed mask from a tasks cpuset |
| cpuset_mems_allowed | puset_mems_allowed - return mems_allowed mask from a tasks cpuset.*@tsk: pointer to task_struct from which to obtain cpuset->mems_allowed.* Description: Returns the nodemask_t mems_allowed of the cpuset* attached to the specified @tsk |
| __cpuset_node_allowed | puset_node_allowed - Can we allocate on a memory node?*@node: is this an allowed node?*@gfp_mask: memory allocation flags* If we're in interrupt, yes, we can always allocate. If @node is set in* current's mems_allowed, yes |
| audit_rate_check | |
| audit_log_lost | audit_log_lost - conditionally log lost audit message event*@message: the message stating reason for lost audit message* Emit at least 1 message per second, even if audit_rate_check is* throttling.* Always increment the lost messages counter. |
| auditd_set | auditd_set - Set/Reset the auditd connection state*@pid: auditd PID*@portid: auditd netlink portid*@net: auditd network namespace pointer* Description:* This function will obtain and drop network namespace references as* necessary |
| auditd_reset | auditd_reset - Disconnect the auditd connection*@ac: auditd connection state* Description:* Break the auditd/kauditd connection and move all the queued records into the* hold queue in case auditd reconnects |
| audit_get_tty | |
| fill_tgid_exit | |
| output_printk | |
| bpf_map_free_id | |
| btf_free_id | |
| dev_map_hash_delete_elem | |
| __dev_map_hash_update_elem | |
| dev_map_hash_remove_netdev | |
| ring_buffer_attach | |
| wake_up_page_bit | |
| add_page_wait_queue | add_page_wait_queue - Add an arbitrary waiter to a page's wait queue*@page: Page defining the wait queue of interest*@waiter: Waiter to add to the queue* Add an arbitrary @waiter to the wait queue for the nominated @page. |
| mempool_resize | mempool_resize - resize an existing memory pool*@pool: pointer to the memory pool which was allocated via* mempool_create().*@new_min_nr: the new minimum number of elements guaranteed to be* allocated for this pool.* This function shrinks/grows the pool |
| mempool_alloc | mempool_alloc - allocate an element from a specific memory pool*@pool: pointer to the memory pool which was allocated via* mempool_create().*@gfp_mask: the usual allocation bitmask.* this function only sleeps if the alloc_fn() function sleeps or |
| mempool_free | mempool_free - return an element to the pool.*@element: pool element pointer.*@pool: pointer to the memory pool which was allocated via* mempool_create().* this function only sleeps if the free_fn() function sleeps. |
| __page_cache_release | This path almost never happens for VM activity - pages are normally* freed via pagevecs. But it gets used by networking. |
| pagevec_lru_move_fn | |
| release_pages | lease_pages - batched put_page()*@pages: array of pages to release*@nr: number of pages* Decrement the reference count on all the pages in @pages. If it* fell to zero, remove the page from the LRU and free it. |
| balance_pgdat | For kswapd, balance_pgdat() will reclaim pages across a node from zones* that are eligible for use by the caller until at least one zone is* balanced.* Returns the order kswapd finished reclaiming at. |
| walk_zones_in_node | Walk zones in a node and print using a callback.* If @assert_populated is true, only use callback for zones that are populated. |
| pcpu_alloc | pcpu_alloc - the percpu allocator*@size: size of area to allocate in bytes*@align: alignment of area (max PAGE_SIZE)*@reserved: allocate from the reserved chunk if available*@gfp: allocation flags* Allocate percpu area of @size bytes aligned at @align |
| free_percpu | 释放内存 |
| compact_unlock_should_abort | Compaction requires the taking of some coarse locks that are potentially* very heavily contended. The lock should be periodically unlocked to avoid* having disabled IRQs for a long time, even when there is nobody waiting on* the lock |
| isolate_freepages_block | Isolate free pages onto a private freelist. If @strict is true, will abort* returning 0 on any invalid PFNs or non-free pages inside of the pageblock* (even though it may still end up isolating some pages). |
| isolate_migratepages_block | solate_migratepages_block() - isolate all migrate-able pages within* a single pageblock*@cc: Compaction control structure.*@low_pfn: The first PFN to isolate*@end_pfn: The one-past-the-last PFN to isolate, within same pageblock |
| reserve_highatomic_pageblock | Reserve a pageblock for exclusive use of high-order atomic allocations if* there are no empty page blocks that contain a page with a suitable order |
| unreserve_highatomic_pageblock | Used when an allocation is about to fail under memory pressure |
| show_free_areas | Show free area list (used inside shift_scroll-lock stuff)* We also calculate the percentage fragmentation |
| __setup_per_zone_wmarks | |
| is_free_buddy_page | |
| set_hwpoison_free_buddy_page | Set PG_hwpoison flag if a given page is confirmed to be a free page. This* test is performed under the zone lock to prevent a race against page* allocation. |
| __shuffle_zone | |
| dma_pool_alloc | dma_pool_alloc - get a block of consistent memory*@pool: dma pool that will produce the block*@mem_flags: GFP_* bitmask*@handle: pointer to dma address of block* Return: the kernel virtual address of a currently unused block, |
| dma_pool_free | dma_pool_free - put block back into dma pool*@pool: the dma pool holding the block*@vaddr: virtual address of block*@dma: dma address of block* Caller promises neither device nor driver will again touch this block* unless it is first re-allocated. |
| slob_alloc | slob_alloc: entry point into the slob allocator. |
| slob_free | slob_free: entry point into the slob allocator. |
| drain_alien_cache | |
| __slab_free | Slow path handling. This may still be called frequently since objects* have a longer lifetime than the cpu slabs in most processing loads.* So we still attempt to reduce cache line usage. Just take the slab* lock and free the item |
| __kmem_cache_shrink | kmem_cache_shrink discards empty slabs and promotes the slabs filled* up most to the head of the partial lists. New allocations will then* fill those up and thus they can be removed from the partial lists.* The slabs with the least items are placed last |
| end_report | |
| __split_huge_page | |
| split_huge_page_to_list | This function splits huge page into normal pages. @page can point to any* subpage of huge page to split. Split doesn't change the position of @page.* Only caller must hold pin on the @page, otherwise split fails with -EBUSY.* The huge page must be locked. |
| free_transhuge_page | |
| deferred_split_huge_page | |
| deferred_split_scan | |
| mem_cgroup_remove_exceeded | |
| mem_cgroup_update_tree | |
| lock_page_memcg | lock_page_memcg - lock a page->mem_cgroup binding*@page: the page* This function protects unlocked LRU pages from being moved to* another cgroup |
| __unlock_page_memcg | __unlock_page_memcg - unlock and unpin a memcg*@memcg: the memcg* Unlock and unpin a memcg returned by lock_page_memcg(). |
| mem_cgroup_move_account | mem_cgroup_move_account - move account of the page*@page: the page*@compound: charge the page as compound or small page*@from: mem_cgroup which the page is moved from.*@to: mem_cgroup which the page is moved to. @from != @to. |
| swap_cgroup_cmpxchg | swap_cgroup_cmpxchg - cmpxchg mem_cgroup's id for this swp_entry.*@ent: swap entry to be cmpxchged*@old: old id*@new: new id* Returns old id at success, 0 at failure.* (There is no mem_cgroup using 0 as its id) |
| swap_cgroup_record | swap_cgroup_record - record mem_cgroup for a set of swap entries*@ent: the first swap entry to be recorded into*@id: mem_cgroup to be recorded*@nr_ents: number of swap entries to be recorded* Returns old value at success, 0 at failure. |
| memory_failure_queue | memory_failure_queue - Schedule handling memory failure of a page.*@pfn: Page Number of the corrupted page*@flags: Flags for memory failure handling* This function is called by the low level hardware error handler |
| memory_failure_work_func | |
| __delete_object | Mark the object as not allocated and schedule RCU freeing via put_object(). |
| paint_it | |
| add_scan_area | Add a scanning area to the object. If at least one such area is added,* kmemleak will only scan these ranges rather than the whole memory block. |
| object_set_excess_ref | Any surplus references (object already gray) to 'ptr' are passed to* 'excess_ref'. This is used in the vmalloc() case where a pointer to* vm_struct may be used as an alternative reference to the vmalloc'ed object* (see free_thread_stack()). |
| object_no_scan | Set the OBJECT_NO_SCAN flag for the object corresponding to the give* pointer. Such object will not be scanned by kmemleak but references to it* are searched. |
| kmemleak_update_trace | kmemleak_update_trace - update object allocation stack trace*@ptr: pointer to beginning of the object* Override the object allocation stack trace for cases where the actual* allocation place is not always useful. |
| scan_object | Scan a memory block corresponding to a kmemleak_object. A condition is* that object->use_count >= 1. |
| kmemleak_scan | Scan data sections and all the referenced memory blocks allocated via the* kernel's standard allocators. This function must be called with the* scan_mutex held. |
| kmemleak_seq_show | Print the information for an unreferenced object to the seq file. |
| dump_str_object_info | |
| kmemleak_clear | We use grey instead of black to ensure we can do future scans on the same* objects. If we did not do future scans these black objects could* potentially contain references to newly allocated objects in the future and* we'd end up with false positives. |
| set_migratetype_isolate | |
| unset_migratetype_isolate | |
| test_pages_isolated | Caller should ensure that requested range is in a single zone |
| balloon_page_list_enqueue | alloon_page_list_enqueue() - inserts a list of pages into the balloon page* list |
| balloon_page_list_dequeue | alloon_page_list_dequeue() - removes pages from balloon's page list and* returns a list of the pages.*@b_dev_info: balloon device decriptor where we will grab a page from.*@pages: pointer to the list of pages that would be returned to the caller. |
| balloon_page_enqueue | alloon_page_enqueue - inserts a new page into the balloon page list |
| balloon_page_dequeue | alloon_page_dequeue - removes a page from balloon's page list and returns* its address to allow the driver to release the page |
| bio_check_pages_dirty | |
| flush_end_io | |
| mq_flush_data_end_io | |
| ioc_release_fn | Slow path for ioc release in put_io_context(). Performs double-lock* dancing to unlink all icq's and then frees ioc. |
| put_io_context | put_io_context - put a reference of io_context*@ioc: io_context to put* Decrement reference count of @ioc and release it if the count reaches* zero. |
| put_io_context_active | put_io_context_active - put active reference on ioc*@ioc: ioc of interest* Undo get_io_context_active(). If active reference reaches zero after* put, @ioc can never issue further IOs and ioscheds are notified. |
| __ioc_clear_queue | |
| blk_mq_add_to_requeue_list | |
| disk_block_events | disk_block_events - block and flush disk event checking*@disk: disk to block events for* On return from this function, it is guaranteed that event checking* isn't in progress and won't happen until unblocked by* disk_unblock_events() |
| __disk_unblock_events | |
| blkg_lookup_create | lkg_lookup_create - find or create a blkg*@blkcg: target block cgroup*@q: target request_queue* This looks up or creates the blkg representing the unique pair* of the blkcg and the request_queue. |
| iolatency_check_latencies | |
| blkiolatency_timer_fn | |
| iocg_waitq_timer_fn | |
| ioc_pd_init | |
| deadline_fifo_request | For the specified data direction, return the next request to* dispatch using arrival ordered lists. |
| deadline_next_request | For the specified data direction, return the next request to* dispatch using sector position sorted lists. |
| dd_finish_request | For zoned block devices, write unlock the target zone of* completed write requests. Do this while holding the zone lock* spinlock so that the zone is never unlocked while deadline_fifo_request()* or deadline_next_request() are executing |
| bfq_bic_lookup | q_bic_lookup - search into @ioc a bic associated to @bfqd.*@bfqd: the lookup key.*@ioc: the io_context of the process doing I/O.*@q: the request queue. |
| bfq_exit_icq_bfqq | |
| bfq_finish_requeue_request | Handle either a requeue or a finish for rq. The things to do are* the same in both cases: all references to rq are to be dropped. In* particular, rq is considered completed from the point of view of* the scheduler. |
| bfq_idle_slice_timer_body | |
| avc_reclaim_node | |
| avc_latest_notif_update | |
| avc_insert | avc_insert - Insert an AVC entry.*@ssid: source security identifier*@tsid: target security identifier*@tclass: target security class*@avd: resulting av decision*@xp_node: resulting extended permissions* Insert an AVC entry for the SID pair |
| avc_update_node | avc_update_node Update an AVC entry*@event : Updating event*@perms : Permission mask bits*@ssid,@tsid,@tclass : identifier of an AVC entry*@seqno : sequence number when decision was made*@xpd: extended_perms_decision to be added to the node |
| avc_flush | avc_flush - Flush the cache |
| sel_ib_pkey_sid_slow | sel_ib_pkey_sid_slow - Lookup the SID of a pkey using the policy*@subnet_prefix: subnet prefix*@pkey_num: pkey number*@sid: pkey SID* Description:* This function determines the SID of a pkey by querying the security* policy |
| sel_ib_pkey_flush | sel_ib_pkey_flush - Flush the entire pkey table* Description:* Remove all entries from the pkey table |
| aa_secid_update | aa_secid_update - update a secid mapping to a new label*@secid: secid to update*@label: label the secid will now map to |
| aa_alloc_secid | aa_alloc_secid - allocate a new secid for a profile*@label: the label to allocate a secid for*@gfp: memory allocation flags* Returns: 0 with @label->secid initialized* <0 returns error with @label->secid set to AA_SECID_INVALID |
| aa_free_secid | aa_free_secid - free a secid*@secid: secid to free |
| sb_mark_inode_writeback | mark an inode as under writeback on the sb |
| sb_clear_inode_writeback | lear an inode as under writeback on the sb |
| dio_bio_end_aio | Asynchronous IO callback. |
| dio_bio_end_io | The BIO completion handler simply queues the BIO up for the process-context* handler.* During I/O bi_private points at the dio. After I/O, bi_private is used to* implement a singly-linked list of completed BIOs, at dio->bio_list. |
| dio_bio_submit | In the AIO read case we speculatively dirty the pages before starting IO.* During IO completion, any of these pages which happen to have been written* back will be redirtied by bio_check_pages_dirty(). |
| dio_await_one | Wait for the next BIO to complete. Remove it and return it. NULL is* returned once all BIOs have been completed. This must only be called once* all bios have been issued so that dio->refcount can only decrease. This |
| dio_bio_reap | A really large O_DIRECT read or write can generate a lot of BIOs. So* to keep the memory consumption sane we periodically reap any completed BIOs* during the BIO generation phase.* This also helps to limit the peak amount of pinned userspace memory. |
| drop_refcount | |
| ep_call_nested | p_call_nested - Perform a bound (possibly) nested call, by checking* that the recursion limit is not exceeded, and that* the same nested call (by the meaning of same cookie) is* no re-entered. |
| timerfd_triggered | This gets called when the timer event triggers. We set the "expired"* flag, but we do not re-arm the timer (in case it's necessary,* tintv != 0) until the timer is accessed. |
| timerfd_clock_was_set | Called when the clock was set to cancel the timers in the cancel* list. This will wake up processes waiting on these timers. The* wake-up requires ctx->ticks to be non zero, therefore we increment* it before calling wake_up_locked(). |
| timerfd_poll | |
| eventfd_signal | ventfd_signal - Adds @n to the eventfd counter |
| eventfd_ctx_remove_wait_queue | ventfd_ctx_remove_wait_queue - Read the current counter and removes wait queue |
| aio_migratepage | |
| kiocb_set_cancel_fn | |
| aio_complete | aio_complete* Called when the io request on the given iocb is complete. |
| aio_remove_iocb | |
| aio_poll_wake | |
| io_cqring_overflow_flush | Returns true if there are no backlogged entries after the flush |
| io_cqring_add_event | |
| __io_free_req | |
| io_fail_links | Called if REQ_F_LINK is set, and we fail the head request |
| io_req_find_next | |
| io_poll_wake | |
| io_timeout_fn | |
| io_async_find_and_cancel | |
| io_link_timeout_fn | |
| io_wqe_enqueue | |
| io_work_cancel | |
| io_wqe_cancel_cb_work | |
| io_wq_worker_cancel | |
| io_wqe_cancel_work | |
| iomap_iop_set_range_uptodate | |
| write_sequnlock_irqrestore | |
| read_sequnlock_excl_irqrestore | |
| pgdat_resize_unlock | |
| unlock_task_sighand | |
| uart_unlock_and_check_sysrq | |
| put_css_set | |
| ptr_ring_full_any | |
| ptr_ring_produce_any | |
| ptr_ring_empty_any | |
| ptr_ring_consume_any | |
| ptr_ring_consume_batched_any | |
| ptr_ring_unconsume | Return entries into ring |
| ptr_ring_resize | Note: producer lock is nested within consumer lock, so if you* resize you must make sure all uses nest correctly.* In particular if you consume ring in interrupt or BH context, you must* disable interrupts/BH when doing so. |
| ptr_ring_resize_multiple | Note: producer lock is nested within consumer lock, so if you* resize you must make sure all uses nest correctly.* In particular if you consume ring in interrupt or BH context, you must* disable interrupts/BH when doing so. |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |