| /linux/drivers/md/dm-vdo/ |
| H A D | completion.h | 19 static inline void vdo_run_completion(struct vdo_completion *completion) in vdo_run_completion() argument 21 if ((completion->result != VDO_SUCCESS) && (completion->error_handler != NULL)) { in vdo_run_completion() 22 completion->error_handler(completion); in vdo_run_completion() 26 completion->callback(completion); in vdo_run_completion() 29 void vdo_set_completion_result(struct vdo_completion *completion, int result); 31 void vdo_initialize_completion(struct vdo_completion *completion, struct vdo *vdo, 38 static inline void vdo_reset_completion(struct vdo_completion *completion) in vdo_reset_completion() argument 40 completion->result = VDO_SUCCESS; in vdo_reset_completion() 41 completion->complete = false; in vdo_reset_completion() 44 void vdo_launch_completion_with_priority(struct vdo_completion *completion, [all …]
|
| H A D | completion.c | 51 void vdo_initialize_completion(struct vdo_completion *completion, in vdo_initialize_completion() argument 55 memset(completion, 0, sizeof(*completion)); in vdo_initialize_completion() 56 completion->vdo = vdo; in vdo_initialize_completion() 57 completion->type = type; in vdo_initialize_completion() 58 vdo_reset_completion(completion); in vdo_initialize_completion() 61 static inline void assert_incomplete(struct vdo_completion *completion) in assert_incomplete() argument 63 VDO_ASSERT_LOG_ONLY(!completion->complete, "completion is not complete"); in assert_incomplete() 73 void vdo_set_completion_result(struct vdo_completion *completion, int result) in vdo_set_completion_result() argument 75 assert_incomplete(completion); in vdo_set_completion_result() 76 if (completion->result == VDO_SUCCESS) in vdo_set_completion_result() [all …]
|
| H A D | repair.c | 58 struct vdo_completion completion; member 197 as_repair_completion(struct vdo_completion *completion) in as_repair_completion() argument 199 vdo_assert_completion_type(completion, VDO_REPAIR_COMPLETION); in as_repair_completion() 200 return container_of(completion, struct repair_completion, completion); in as_repair_completion() 206 struct vdo_completion *completion = &repair->completion; in prepare_repair_completion() local 207 const struct thread_config *thread_config = &completion->vdo->thread_config; in prepare_repair_completion() 214 vdo_reset_completion(completion); in prepare_repair_completion() 215 vdo_set_completion_callback(completion, callback, thread_id); in prepare_repair_completion() 222 vdo_launch_completion(&repair->completion); in launch_repair_completion() 242 repair->completion.vdo->block_map->zones[0].page_cache.rebuilding = false; in free_repair_completion() [all …]
|
| H A D | flush.c | 24 struct vdo_completion completion; member 72 static struct flusher *as_flusher(struct vdo_completion *completion) in as_flusher() argument 74 vdo_assert_completion_type(completion, VDO_FLUSH_NOTIFICATION_COMPLETION); in as_flusher() 75 return container_of(completion, struct flusher, completion); in as_flusher() 84 static inline struct vdo_flush *completion_as_vdo_flush(struct vdo_completion *completion) in completion_as_vdo_flush() argument 86 vdo_assert_completion_type(completion, VDO_FLUSH_COMPLETION); in completion_as_vdo_flush() 87 return container_of(completion, struct vdo_flush, completion); in completion_as_vdo_flush() 117 vdo_initialize_completion(&flush->completion, flusher->vdo, in allocate_flush() 145 vdo_initialize_completion(&vdo->flusher->completion, vdo, in vdo_make_flusher() 192 static void finish_notification(struct vdo_completion *completion) in finish_notification() argument [all …]
|
| H A D | data-vio.c | 161 struct vdo_completion completion; member 216 as_data_vio_pool(struct vdo_completion *completion) in as_data_vio_pool() argument 218 vdo_assert_completion_type(completion, VDO_DATA_VIO_POOL_COMPLETION); in as_data_vio_pool() 219 return container_of(completion, struct data_vio_pool, completion); in as_data_vio_pool() 277 int error = vdo_status_to_errno(data_vio->vio.completion.result); in acknowledge_data_vio() 422 static void attempt_logical_block_lock(struct vdo_completion *completion) in attempt_logical_block_lock() argument 424 struct data_vio *data_vio = as_data_vio(completion); in attempt_logical_block_lock() 467 complete_data_vio(completion); in attempt_logical_block_lock() 493 struct vdo_completion *completion = &data_vio->vio.completion; in launch_data_vio() local 511 vdo_reset_completion(completion); in launch_data_vio() [all …]
|
| H A D | action-manager.c | 54 struct vdo_completion completion; member 66 static inline struct action_manager *as_action_manager(struct vdo_completion *completion) in as_action_manager() argument 68 vdo_assert_completion_type(completion, VDO_ACTION_COMPLETION); in as_action_manager() 69 return container_of(completion, struct action_manager, completion); in as_action_manager() 79 static void no_preamble(void *context __always_unused, struct vdo_completion *completion) in no_preamble() argument 81 vdo_finish_completion(completion); in no_preamble() 128 vdo_initialize_completion(&manager->completion, vdo, VDO_ACTION_COMPLETION); in vdo_make_action_manager() 143 static void finish_action_callback(struct vdo_completion *completion); 144 static void apply_to_zone(struct vdo_completion *completion); 151 static void preserve_error(struct vdo_completion *completion) in preserve_error() argument [all …]
|
| H A D | funnel-workqueue.c | 64 struct completion *started; 111 struct vdo_completion *completion) in enqueue_work_queue_completion() argument 113 VDO_ASSERT_LOG_ONLY(completion->my_queue == NULL, in enqueue_work_queue_completion() 115 completion, completion->callback, queue, completion->my_queue); in enqueue_work_queue_completion() 116 if (completion->priority == VDO_WORK_Q_DEFAULT_PRIORITY) in enqueue_work_queue_completion() 117 completion->priority = queue->common.type->default_priority; in enqueue_work_queue_completion() 119 if (VDO_ASSERT(completion->priority <= queue->common.type->max_priority, in enqueue_work_queue_completion() 121 completion->priority = 0; in enqueue_work_queue_completion() 123 completion->my_queue = &queue->common; in enqueue_work_queue_completion() 126 vdo_funnel_queue_put(queue->priority_lists[completion->priority], in enqueue_work_queue_completion() [all …]
|
| H A D | dm-vdo-target.c | 1176 struct vdo_completion *completion = &vdo->admin.completion; in prepare_admin_completion() local 1182 completion->callback = callback; in prepare_admin_completion() 1183 completion->error_handler = error_handler; in prepare_admin_completion() 1184 completion->callback_thread_id = get_thread_id_for_phase(vdo); in prepare_admin_completion() 1185 completion->requeue = true; in prepare_admin_completion() 1186 return completion; in prepare_admin_completion() 1200 vdo->admin.completion.callback_thread_id = get_thread_id_for_phase(vdo); in advance_phase() 1201 vdo->admin.completion.requeue = true; in advance_phase() 1224 vdo_reset_completion(&admin->completion); in perform_admin_operation() 1236 result = admin->completion.result; in perform_admin_operation() [all …]
|
| H A D | block-map.c | 101 struct vdo_completion *completion; member 165 struct vdo_page_completion *completion; in page_completion_from_waiter() local 170 completion = container_of(waiter, struct vdo_page_completion, waiter); in page_completion_from_waiter() 171 vdo_assert_completion_type(&completion->completion, VDO_PAGE_COMPLETION); in page_completion_from_waiter() 172 return completion; in page_completion_from_waiter() 200 info->vio->completion.callback_thread_id = cache->zone->thread_id; in initialize_info() 499 vdo_fail_completion(&vdo_page_comp->completion, VDO_BAD_PAGE); in complete_with_page() 505 vdo_finish_completion(&vdo_page_comp->completion); in complete_with_page() 519 vdo_fail_completion(&page_completion_from_waiter(waiter)->completion, *result); in complete_waiter_with_error() 603 static int __must_check validate_completed_page(struct vdo_page_completion *completion, in validate_completed_page() argument [all …]
|
| H A D | vdo.c | 64 struct completion completion; member 475 vdo_initialize_completion(&vdo->admin.completion, vdo, VDO_ADMIN_COMPLETION); in initialize_vdo() 744 static void finish_reading_super_block(struct vdo_completion *completion) in finish_reading_super_block() argument 747 container_of(as_vio(completion), struct vdo_super_block, vio); in finish_reading_super_block() 749 vdo_continue_completion(vdo_forget(completion->parent), in finish_reading_super_block() 759 static void handle_super_block_read_error(struct vdo_completion *completion) in handle_super_block_read_error() argument 761 vio_record_metadata_io_error(as_vio(completion)); in handle_super_block_read_error() 762 finish_reading_super_block(completion); in handle_super_block_read_error() 768 struct vdo_completion *parent = vio->completion.parent; in read_super_block_endio() 789 vdo->super_block.vio.completion.parent = parent; in vdo_load_super_block() [all …]
|
| H A D | io-submitter.c | 76 struct atomic_statistics *stats = &vio->completion.vdo->stats; in count_all_bios() 109 struct vdo *vdo = vio->completion.vdo; in send_bio_to_device() 123 void vdo_submit_vio(struct vdo_completion *completion) in vdo_submit_vio() argument 125 struct vio *vio = as_vio(completion); in vdo_submit_vio() 142 struct io_submitter *submitter = vio->completion.vdo->io_submitter; in get_bio_list() 166 static void submit_data_vio(struct vdo_completion *completion) in submit_data_vio() argument 169 struct vio *vio = as_vio(completion); in submit_data_vio() 208 if (vio->completion.priority != vio_merge->completion.priority) in get_mergeable_locked() 275 struct vdo *vdo = vio->completion.vdo; in try_bio_map_merge() 347 struct vdo_completion *completion = &vio->completion; in __submit_metadata_vio() local [all …]
|
| H A D | slab-depot.c | 280 static void finish_update(struct vdo_completion *completion) in finish_update() argument 283 container_of(as_vio(completion), struct slab_summary_block, vio); in finish_update() 293 static void handle_write_error(struct vdo_completion *completion) in handle_write_error() argument 296 container_of(as_vio(completion), struct slab_summary_block, vio); in handle_write_error() 298 vio_record_metadata_io_error(as_vio(completion)); in handle_write_error() 299 vdo_enter_read_only_mode(completion->vdo, completion->result); in handle_write_error() 372 if (vdo_is_read_only(block->vio.completion.vdo)) { in update_slab_summary_entry() 415 static void complete_reaping(struct vdo_completion *completion) in complete_reaping() argument 417 struct slab_journal *journal = completion->parent; in complete_reaping() 419 return_vio_to_pool(vio_as_pooled_vio(as_vio(completion))); in complete_reaping() [all …]
|
| H A D | logical-zone.c | 32 static struct logical_zone *as_logical_zone(struct vdo_completion *completion) in as_logical_zone() argument 34 vdo_assert_completion_type(completion, VDO_GENERATION_FLUSHED_COMPLETION); in as_logical_zone() 35 return container_of(completion, struct logical_zone, completion); in as_logical_zone() 65 vdo_initialize_completion(&zone->completion, vdo, in initialize_zone() 265 static void attempt_generation_complete_notification(struct vdo_completion *completion); 273 static void notify_flusher(struct vdo_completion *completion) in notify_flusher() argument 275 struct logical_zone *zone = as_logical_zone(completion); in notify_flusher() 278 vdo_launch_completion_callback(completion, in notify_flusher() 288 static void attempt_generation_complete_notification(struct vdo_completion *completion) in attempt_generation_complete_notification() argument 290 struct logical_zone *zone = as_logical_zone(completion); in attempt_generation_complete_notification() [all …]
|
| H A D | vio.h | 43 static inline struct vio *as_vio(struct vdo_completion *completion) in as_vio() argument 45 vdo_assert_completion_type(completion, VIO_COMPLETION); in as_vio() 46 return container_of(completion, struct vio, completion); in as_vio() 58 return vio->completion.vdo->thread_config.bio_threads[vio->bio_zone]; in get_vio_bio_zone_thread_id() 120 vdo_initialize_completion(&vio->completion, vdo, VIO_COMPLETION); in initialize_vio() 164 vdo_set_completion_result(&vio->completion, result); in continue_vio() 166 vdo_enqueue_completion(&vio->completion, VDO_WORK_Q_DEFAULT_PRIORITY); in continue_vio() 182 vdo_set_completion_callback(&vio->completion, callback, thread); in continue_vio_after_io()
|
| H A D | block-map.h | 167 struct vdo_completion completion; member 291 struct vdo_completion *completion); 293 static inline struct vdo_page_completion *as_vdo_page_completion(struct vdo_completion *completion) in as_vdo_page_completion() argument 295 vdo_assert_completion_type(completion, VDO_PAGE_COMPLETION); in as_vdo_page_completion() 296 return container_of(completion, struct vdo_page_completion, completion); in as_vdo_page_completion() 299 void vdo_release_page_completion(struct vdo_completion *completion); 306 void vdo_request_page_write(struct vdo_completion *completion); 308 int __must_check vdo_get_cached_page(struct vdo_completion *completion, 331 struct vdo_completion *completion);
|
| H A D | dedupe.c | 286 struct vdo_completion completion; member 309 static inline struct hash_zone *as_hash_zone(struct vdo_completion *completion) in as_hash_zone() argument 311 vdo_assert_completion_type(completion, VDO_HASH_ZONE_COMPLETION); in as_hash_zone() 312 return container_of(completion, struct hash_zone, completion); in as_hash_zone() 315 static inline struct hash_zones *as_hash_zones(struct vdo_completion *completion) in as_hash_zones() argument 317 vdo_assert_completion_type(completion, VDO_HASH_ZONES_COMPLETION); in as_hash_zones() 318 return container_of(completion, struct hash_zones, completion); in as_hash_zones() 484 static void unlock_duplicate_pbn(struct vdo_completion *completion); 498 data_vio->vio.completion.callback = complete_data_vio; in exit_hash_lock() 629 static void finish_unlocking(struct vdo_completion *completion) in finish_unlocking() argument [all …]
|
| /linux/include/linux/ |
| H A D | completion.h | 26 struct completion { struct 32 static inline void complete_acquire(struct completion *x) {} in complete_acquire() argument 33 static inline void complete_release(struct completion *x) {} in complete_release() 53 struct completion work = COMPLETION_INITIALIZER(work) 69 struct completion work = COMPLETION_INITIALIZER_ONSTACK(work) 71 struct completion work = COMPLETION_INITIALIZER_ONSTACK_MAP(work, map) 84 static inline void init_completion(struct completion *x) in init_completion() 97 static inline void reinit_completion(struct completion *x) in reinit_completion() 102 extern void wait_for_completion(struct completion *); 103 extern void wait_for_completion_io(struct completion *); [all …]
|
| /linux/Documentation/translations/zh_CN/scheduler/ |
| H A D | completion.rst | 3 :Original: Documentation/scheduler/completion.rst 26 调用和completion()来代替。 33 事件被简化为 ``struct completion`` 中的一个简单标志,被恰如其名地称为‘done’。 35 由于完成与调度有关,代码可以在kernel/sched/completion.c中找到。 43 - 'struct completion' 同步对象的初始化 51 要使用完成API,你需要#include <linux/completion.h>并创建一个静态或动态的 52 ``struct completion`` 类型的变量,它只有两个字段:: 54 struct completion { 134 void wait_for_completion(struct completion *done) 140 struct completion setup_done; [all …]
|
| /linux/kernel/sched/ |
| H A D | completion.c | 21 static void complete_with_flags(struct completion *x, int wake_flags) in complete_with_flags() 33 void complete_on_current_cpu(struct completion *x) in complete_on_current_cpu() 50 void complete(struct completion *x) in complete() 72 void complete_all(struct completion *x) in complete_all() 86 do_wait_for_common(struct completion *x, in do_wait_for_common() 113 __wait_for_common(struct completion *x, in __wait_for_common() 130 wait_for_common(struct completion *x, long timeout, int state) in wait_for_common() 136 wait_for_common_io(struct completion *x, long timeout, int state) in wait_for_common_io() 151 void __sched wait_for_completion(struct completion *x) in wait_for_completion() 170 wait_for_completion_timeout(struct completion *x, unsigned long timeout) in wait_for_completion_timeout() [all …]
|
| /linux/Documentation/scheduler/ |
| H A D | completion.rst | 2 Completions - "wait for completion" barrier APIs 27 is reduced to a simple flag in 'struct completion', appropriately called "done". 30 kernel/sched/completion.c. 38 - the initialization of the 'struct completion' synchronization object 45 to have marked a completion as 'done' before another thread checks whether 48 To use completions you need to #include <linux/completion.h> and 49 create a static or dynamic variable of type 'struct completion', 52 struct completion { 58 the ->done completion flag for indicating whether it's completed or not. 67 Good, intuitive naming (as always) helps code readability. Naming a completion [all …]
|
| /linux/drivers/net/wwan/iosm/ |
| H A D | iosm_ipc_task_queue.c | 28 if (args->completion) in ipc_task_queue_handler() 29 complete(args->completion); in ipc_task_queue_handler() 42 args->completion = NULL; in ipc_task_queue_handler() 64 if (args->completion) in ipc_task_queue_cleanup() 65 complete(args->completion); in ipc_task_queue_cleanup() 85 struct completion completion; in ipc_task_queue_add_task() local 90 init_completion(&completion); in ipc_task_queue_add_task() 111 ipc_task->args[pos].completion = wait ? &completion : NULL; in ipc_task_queue_add_task() 130 wait_for_completion(&completion); in ipc_task_queue_add_task()
|
| /linux/net/wireless/ |
| H A D | debugfs.c | 160 struct completion completion; in wiphy_locked_debugfs_read() 169 complete(&w->completion); in wiphy_locked_debugfs_read() 178 complete(&w->completion); in wiphy_locked_debugfs_read() 200 .completion = COMPLETION_INITIALIZER_ONSTACK(work.completion), 214 wait_for_completion(&work.completion); in wiphy_locked_debugfs_write_work() 240 struct completion completion; in wiphy_locked_debugfs_write() 249 complete(&w->completion); in wiphy_locked_debugfs_write() 127 struct completion completion; global() member 207 struct completion completion; global() member [all...] |
| /linux/drivers/scsi/aic94xx/ |
| H A D | aic94xx_tmf.c | 67 complete(ascb->completion); in asd_clear_nexus_tasklet_complete() 78 complete(ascb->completion); in asd_clear_nexus_timedout() 85 DECLARE_COMPLETION_ONSTACK(completion); \ 94 ascb->completion = &completion; \ 106 wait_for_completion(&completion); \ 252 complete(ascb->completion); in asd_tmf_timedout() 320 complete(ascb->completion); in asd_tmf_tasklet_complete() 329 DECLARE_COMPLETION_ONSTACK(completion); in asd_clear_nexus() 332 tascb->completion = &completion; in asd_clear_nexus() 339 leftover = wait_for_completion_timeout(&completion, in asd_clear_nexus() [all …]
|
| /linux/Documentation/driver-api/usb/ |
| H A D | URB.rst | 36 - Each URB has a completion handler, which is called after the action 38 context-pointer for passing information to the completion handler. 42 data to an endpoint while your driver handles completion of another. 60 // (IN) all urbs need completion routines 61 void *context; // context for completion routine 62 usb_complete_t complete; // pointer to completion routine 64 // (OUT) status after each completion 110 returned to you in a completion callback. It will automatically be 122 length, the completion handler, and its context. Take a look at the some 156 never look at that value except in your completion callback. [all …]
|
| /linux/drivers/s390/char/ |
| H A D | sclp_cmd.c | 53 struct completion *completion = data; in sclp_sync_callback() local 55 complete(completion); in sclp_sync_callback() 65 struct completion completion; in sclp_sync_request_timeout() local 78 request->callback_data = &completion; in sclp_sync_request_timeout() 79 init_completion(&completion); in sclp_sync_request_timeout() 84 wait_for_completion(&completion); in sclp_sync_request_timeout()
|