Lines Matching refs:topa
564 struct topa { struct
583 static struct topa *topa_alloc(int cpu, gfp_t gfp) in topa_alloc() argument
586 struct topa *topa; in topa_alloc() local
593 topa = page_address(p); in topa_alloc()
594 topa->last = 0; in topa_alloc()
595 topa->phys = page_to_phys(p); in topa_alloc()
602 TOPA_ENTRY(topa, 1)->base = topa->phys >> TOPA_SHIFT; in topa_alloc()
603 TOPA_ENTRY(topa, 1)->end = 1; in topa_alloc()
606 return topa; in topa_alloc()
613 static void topa_free(struct topa *topa) in topa_free() argument
615 free_page((unsigned long)topa); in topa_free()
627 static void topa_insert_table(struct pt_buffer *buf, struct topa *topa) in topa_insert_table() argument
629 struct topa *last = buf->last; in topa_insert_table()
631 list_add_tail(&topa->list, &buf->tables); in topa_insert_table()
634 buf->first = buf->last = buf->cur = topa; in topa_insert_table()
638 topa->offset = last->offset + last->size; in topa_insert_table()
639 buf->last = topa; in topa_insert_table()
646 TOPA_ENTRY(last, -1)->base = topa->phys >> TOPA_SHIFT; in topa_insert_table()
654 static bool topa_table_full(struct topa *topa) in topa_table_full() argument
658 return !!topa->last; in topa_table_full()
660 return topa->last == TENTS_PER_PAGE - 1; in topa_table_full()
675 struct topa *topa = buf->last; in topa_insert_pages() local
683 if (topa_table_full(topa)) { in topa_insert_pages()
684 topa = topa_alloc(buf->cpu, gfp); in topa_insert_pages()
685 if (!topa) in topa_insert_pages()
688 topa_insert_table(buf, topa); in topa_insert_pages()
691 TOPA_ENTRY(topa, -1)->base = page_to_phys(p) >> TOPA_SHIFT; in topa_insert_pages()
692 TOPA_ENTRY(topa, -1)->size = order; in topa_insert_pages()
694 TOPA_ENTRY(topa, -1)->intr = 1; in topa_insert_pages()
695 TOPA_ENTRY(topa, -1)->stop = 1; in topa_insert_pages()
698 topa->last++; in topa_insert_pages()
699 topa->size += sizes(order); in topa_insert_pages()
712 struct topa *topa; in pt_topa_dump() local
714 list_for_each_entry(topa, &buf->tables, list) { in pt_topa_dump()
717 pr_debug("# table @%p (%016Lx), off %llx size %zx\n", topa->table, in pt_topa_dump()
718 topa->phys, topa->offset, topa->size); in pt_topa_dump()
721 &topa->table[i], in pt_topa_dump()
722 (unsigned long)topa->table[i].base << TOPA_SHIFT, in pt_topa_dump()
723 sizes(topa->table[i].size), in pt_topa_dump()
724 topa->table[i].end ? 'E' : ' ', in pt_topa_dump()
725 topa->table[i].intr ? 'I' : ' ', in pt_topa_dump()
726 topa->table[i].stop ? 'S' : ' ', in pt_topa_dump()
727 *(u64 *)&topa->table[i]); in pt_topa_dump()
729 topa->table[i].stop) || in pt_topa_dump()
730 topa->table[i].end) in pt_topa_dump()
751 buf->cur = list_entry(buf->cur->list.next, struct topa, in pt_buffer_advance()
979 struct topa *cur = buf->first, *prev = buf->last; in pt_buffer_setup_topa_index()
996 cur = list_entry(cur->list.next, struct topa, list); in pt_buffer_setup_topa_index()
1030 buf->cur = (struct topa *)((unsigned long)buf->topa_index[pg] & PAGE_MASK); in pt_buffer_reset_offsets()
1045 struct topa *topa, *iter; in pt_buffer_fini_topa() local
1047 list_for_each_entry_safe(topa, iter, &buf->tables, list) { in pt_buffer_fini_topa()
1052 topa_free(topa); in pt_buffer_fini_topa()
1065 struct topa *topa; in pt_buffer_init_topa() local
1068 topa = topa_alloc(buf->cpu, gfp); in pt_buffer_init_topa()
1069 if (!topa) in pt_buffer_init_topa()
1072 topa_insert_table(buf, topa); in pt_buffer_init_topa()
1484 BUILD_BUG_ON(sizeof(struct topa) > PAGE_SIZE); in pt_init()