*参照元 [#l0e4918f] #backlinks *説明 [#e423bb9c] -パス: [[linux-4.4.1/drivers/staging/android/ion/ion_heap.c]] -FIXME: これは何? --ION バッファの遅延削除を行うカーネルスレッドのメイン関数。 **引数 [#eb2dd8a0] -void *data -- --ION ヒープへのポインタ **返り値 [#b32b0d88] -int --常に 0 だが、このカーネルスレッドは終了しないので意味なし **参考 [#uadfa1c7] free_list に ION バッファを追加する(つまり ION バッファの遅延削除を要請する)関数 -[[linux-4.4.1/ion_heap_freelist_add()]] *実装 [#adbf127e] static int ion_heap_deferred_free(void *data) { struct ion_heap *heap = data; -スレッドの引数(kthread_run の第二引数など)を参照。 --[[linux-4.4.1/ion_heap]] while (true) { struct ion_buffer *buffer; - --[[linux-4.4.1/ion_buffer]] wait_event_freezable(heap->waitqueue, ion_heap_freelist_size(heap) > 0); -free_list にバッファが追加されるまで待つ。 --[[linux-4.4.1/wait_event_freezable()]] --[[linux-4.4.1/ion_heap_freelist_size()]] spin_lock(&heap->free_lock); if (list_empty(&heap->free_list)) { spin_unlock(&heap->free_lock); continue; } buffer = list_first_entry(&heap->free_list, struct ion_buffer, list); list_del(&buffer->list); heap->free_list_size -= buffer->size; spin_unlock(&heap->free_lock); -free_list から遅延削除対象のバッファを 1つ取ってくる。 --[[linux-4.4.1/spin_lock()]] --[[linux-4.4.1/spin_unlock()]] --[[linux-4.4.1/list_empty()]] --[[linux-4.4.1/list_first_entry()]] --[[linux-4.4.1/list_del()]] ion_buffer_destroy(buffer); -ION バッファを削除する。 --[[linux-4.4.1/ion_buffer_destroy()]] } return 0; } *コメント [#z3fcf387]