hi all,
  i found that in kernel 2.6.22 the implementation of "current" macro
of i386 machines is different from previous versions'. and now it became
this:

[include/asm-i386/current.h]
...
#define __percpu_seg "%%fs:"
#else  /* !SMP */
#include <asm-generic/percpu.h>
#define __percpu_seg ""
#endif  /* SMP */
...
DECLARE_PER_CPU(struct task_struct *, current_task);
static __always_inline struct task_struct *get_current(void)
{
        return x86_read_percpu(current_task);
}

#define current get_current()
...

[include/asm-i386/percpu.h]
...
#define percpu_from_op(op,var)                                  \
        ({                                                      \
                typeof(var) ret__;                              \
                switch (sizeof(var)) {                          \
                case 1:                                         \
                        asm(op "b "__percpu_seg"%1,%0"          \
                            : "=r" (ret__)                      \
                            : "m" (var));                       \
                        break;                                  \
                case 2:                                         \
                        asm(op "w "__percpu_seg"%1,%0"          \
                            : "=r" (ret__)                      \
                            : "m" (var));                       \
                        break;                                  \
                case 4:                                         \
                        asm(op "l "__percpu_seg"%1,%0"          \
                            : "=r" (ret__)                      \
                            : "m" (var));                       \
                        break;                                  \
                default: __bad_percpu_size();                   \
                }                                               \
                ret__; })

#define x86_read_percpu(var) percpu_from_op("mov", per_cpu__##var)
...

  can anyone tell me how does the code above give me current task_struct
structure? and what about current_thread_info() function? is it useless now?

-- 
Paul Francisco = pAnk7.yArdbird
http://pank7yardbird.googlepages.com
http://hi.baidu.com/pank7
.' ' ` .           pAnk7.yArdbird    ^_^
: :'   :          pank7yardbird(AT)gmail.com
`. ` '            liyi(AT)net.pku.edu.cn
  `-   Debian GNU/Linux -- The power of reedom

Reply via email to