Jean_Leo 发表于 2015-03-05 00:12

求教trace_mm_page_free()函数在哪里定义实现的?

最近在看伙伴算法的实现,遇到了个问题,在算法里面间或出现trace_mm_page_free()函数,找了很久都没找到这个函数在哪里实现的,
我估摸应该是个宏定义然后转换过来的。但是一直没找到,盼高人指点一下,小弟感激不尽...

static bool free_pages_prepare(struct page *page, unsigned int order)
{
        int i;
        int bad = 0;

        trace_mm_page_free(page, order);
        kmemcheck_free_shadow(page, order);

        if (PageAnon(page))
                page->mapping = NULL;
        for (i = 0; i < (1 << order); i++)
                bad += free_pages_check(page + i);
        if (bad)
                return false;

        if (!PageHighMem(page)) {
                debug_check_no_locks_freed(page_address(page),
                                           PAGE_SIZE << order);
                debug_check_no_obj_freed(page_address(page),
                                           PAGE_SIZE << order);
        }
        arch_free_page(page, order);
        kernel_map_pages(page, 1 << order, 0);

        return true;
}

Jean_Leo 发表于 2015-03-05 01:29

我突然感觉我是来骗积分的,不好意思,我找到了。。。

就以下几个宏定义实现的:

【file:/include/trace/event/kmem.h】
TRACE_EVENT(mm_page_free,

        TP_PROTO(struct page *page, unsigned int order),

        TP_ARGS(page, order),

        TP_STRUCT__entry(
                __field(        struct page *,        page                )
                __field(        unsigned int,        order                )
        ),

        TP_fast_assign(
                __entry->page                = page;
                __entry->order                = order;
        ),

        TP_printk("page=%p pfn=%lu order=%d",
                        __entry->page,
                        page_to_pfn(__entry->page),
                        __entry->order)
);


【file:/include/linux/tracepoint.h】
#define TRACE_EVENT(name, proto, args, struct, assign, print)        \
        DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))



【file:/include/linux/tracepoint.h】
#define DECLARE_TRACE(name, proto, args)                                \
                __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), 1,        \
                                PARAMS(void *__data, proto),                \
                                PARAMS(__data, args))


【file:/include/linux/tracepoint.h】
#define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
        extern struct tracepoint __tracepoint_##name;                        \
        static inline void trace_##name(proto)                                \
        {                                                                \
                if (static_key_false(&__tracepoint_##name.key))                \
                        __DO_TRACE(&__tracepoint_##name,                \
                                TP_PROTO(data_proto),                        \
                                TP_ARGS(data_args),                        \
                                TP_CONDITION(cond),,);                        \
        }                                                                \
        __DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args),                \
                PARAMS(cond), PARAMS(data_proto), PARAMS(data_args))        \
        static inline int                                                \
        register_trace_##name(void (*probe)(data_proto), void *data)        \
        {                                                                \
                return tracepoint_probe_register(#name, (void *)probe,        \
                                               data);                        \
        }                                                                \
        static inline int                                                \
        unregister_trace_##name(void (*probe)(data_proto), void *data)        \
        {                                                                \
                return tracepoint_probe_unregister(#name, (void *)probe, \
                                                   data);                \
        }                                                                \
        static inline void                                                \
        check_trace_callback_type_##name(void (*cb)(data_proto))        \
        {                                                                \
        }


页: [1]
查看完整版本: 求教trace_mm_page_free()函数在哪里定义实现的?