ó
æ”\c           @   s¥  d  d l  Z  d  d l Z d Z d „  Z d „  Z d „  Z d „  Z e e d ƒ Z d Z x e D] Z	 e d	 e	 >BZ q_ We
 e j ƒ d
 k  s« e
 e e j d ƒ ƒ d k râ e j j d e  j j e j d ƒ ƒ e j d	 ƒ n  e j d Z e j ƒ  j d ƒ Z xv e D]n Z	 e j d	 d k r;e d	 e e	 ƒ >BZ qe j d	 d k sae j d	 d k re d	 e e	 ƒ >@Z qqWe j d	 d k re e ƒ n  e e ƒ Z e e d d ƒ Z e j e ƒ e j ƒ  g  e  j e ƒ D]- Z e  j j e  j j e e ƒ ƒ rãe ^ qãZ y e j  d ƒ Wn e! k
 r:n Xy e j  d ƒ Wn e! k
 r_n Xd Z" x+e D]#Z	 e e	 d Z# e e# ƒ Z d Z x e D] Z$ e d	 e$ >BZ qšWxc e D][ Z$ e j d	 d k rée d	 e e$ ƒ >BZ q¹e j d	 d k r¹e d	 e e$ ƒ >@Z q¹q¹We e ƒ Z y* e e# d ƒ Z e j e ƒ e j ƒ  Wqme% k
 rZ& e j j d e e	 ƒ e e& ƒ f ƒ d	 Z" qmXqmWe j e" ƒ d S(   iÿÿÿÿNs
   /proc/irq/c         C   s    |  j  ƒ  j d ƒ } g  } d } xx t t | ƒ d d d ƒ D]Z } t | | d ƒ } x> | d k r— | d @r€ | j | ƒ n  | d L} | d 7} qZ Wq> W| S(   Nt   ,i    i   iÿÿÿÿi   (   t   stript   splitt   ranget   lent   intt   append(   t   linet   fieldst   bitmasklistt   entryt   it   mask(    (    s$   /usr/libexec/tuned/defirqaffinity.pyR	   
   s    #

c         C   s’   g  } d } xX |  rf d } |  d @} | d | 7} | rF | d 7} n  d } |  d L}  | j  | ƒ q Wd } x t | ƒ D] } | | 7} qz W| S(   Ni    t    Iÿÿÿÿ    s   %xR    i   i    (   R   t   reversed(   R   t   groupst   commat
   cpumaskstrt   mt   stringR   (    (    s$   /usr/libexec/tuned/defirqaffinity.pyt   get_cpumask   s    	

c         C   sd   t  j ƒ  d k r d  Sy2 t |  d ƒ  } | j ƒ  } Wd  QXt | ƒ SWn t k
 r_ d g SXd  S(   Ni    t   r(   t   ost   getuidt   opent   readlineR	   t   IOError(   t   fnamet   fR   (    (    s$   /usr/libexec/tuned/defirqaffinity.pyt   parse_def_affinity(   s    c         C   s™  d } t  d } t | ƒ } x | D] } | d | >B} q# W| |  @rs t j j d | | |  f ƒ t j d ƒ n  g  t j t  ƒ D]- } t j j	 t j j
 t  | ƒ ƒ rƒ | ^ qƒ } y | j d ƒ Wn t k
 rÚ n Xy | j d ƒ Wn t k
 rÿ n Xx… | D]} } d } t  | d } t | ƒ } x | D] } | d | >B} q4W| |  @rt j j d | | |  f ƒ t j d ƒ qqWt j d ƒ d  S(   Ni    t   default_smp_affinityi   s@   verify: failed: irqaffinity (%s) inplacemask=%x shouldbemask=%x
t   2t   0s   /smp_affinity(   t   irqpathR   t   syst   stderrt   writet   exitR   t   listdirt   patht   isdirt   joint   removet
   ValueError(   t   shouldbemaskt   inplacemaskR   t   cpulistR   R   t   interruptdirs(    (    s$   /usr/libexec/tuned/defirqaffinity.pyt   verify2   s6    
CR   i    i   i   i   s   %s: invalid arguments
R    t   addR*   R0   t   wbR   R    s   /smp_affinitys*   Failed to set smp_affinity for IRQ %s: %s
('   R   R"   R!   R	   R   R   R0   R.   R   R   R   t   argvt   strR#   R$   R'   t   basenameR%   R   R   R   R   R   R   R   t   fot   closeR&   R   R(   R)   R/   R*   R+   t   retR   t   jR   t   e(    (    (    s$   /usr/libexec/tuned/defirqaffinity.pyt   <module>   sp   			
	%4'&
C&