get cpu var(name)++;    /*     
name,     */
put cpu_var();          /*       */

     ,    .

per_cpu(name, cpu)++;   /*    name
   */

  per_cpu ()  ,     
       . 
     ,    -
, ,         .
      ,   -
 .  !   
  8, "     ",   9, "
  ".

        ,
  ,   .     -
   ,      ,   -
        ( , .data.percpu).
   ,   ,  
 ,           -
   .

      

   ,   ,   -
   ,   , -
 kmalloc () .       
    .      
<linux/percpu . h>  .

void *alloc_percpu(type); /*  */
void *_alloc_percpu(size_t size, size_t align);

void free_percpu(const void *);

 alloc_percpu ()      (
)     .     
 _alloc_percpu ().      
  ,   ,   ,
       . 
alloc_percpu ()     ,  
   .     -
,     .

struct rabid cheetah = alloc percpu(struct rabid cheetah);,
   .

struct rabid cheetah =   alloc percpu(sizeof (struct rabid_cheetah) ,
alignof_ (struct rabid_cheetah)) ;

  261