|
|
|
@ -719,20 +719,21 @@ class VariableOsNvidiaMask(ReadonlyVariable):
|
|
|
|
|
nvidiacards)))
|
|
|
|
|
if not cardsid:
|
|
|
|
|
return ""
|
|
|
|
|
cardsid = set(cardsid)
|
|
|
|
|
eclassdata = readFile(nvidiaeclass)
|
|
|
|
|
drv_categories = re.findall('^drv_([^=]+)="', eclassdata, re.M)
|
|
|
|
|
drvs = map(lambda x: (x[0], x[1].replace('\\\n', '').split()),
|
|
|
|
|
re.findall(
|
|
|
|
|
'\ndrv_(%s)="(.*?)"' % "|".join(drv_categories),
|
|
|
|
|
eclassdata, re.S))
|
|
|
|
|
mask_categories = re.findall('^mask_([^=]+)="', eclassdata, re.M)
|
|
|
|
|
masks = dict(map(lambda x: (x[0], x[1].replace('\\\n', '')),
|
|
|
|
|
re.findall('\nmask_(%s)="(.*?)"' % "|".join(
|
|
|
|
|
drv_categories),
|
|
|
|
|
eclassdata, re.S)))
|
|
|
|
|
drvsForCardsid = filter(lambda x: set(x[1]) & set(cardsid), drvs)
|
|
|
|
|
if drvsForCardsid and drvsForCardsid[0][0] in masks:
|
|
|
|
|
return masks[drvsForCardsid[0][0]]
|
|
|
|
|
reBlock = re.compile(
|
|
|
|
|
r"if has \$\{nvidia_gpu\}\s+\\([^;]+);\s*then(.*?)fi", re.S)
|
|
|
|
|
reMask = re.compile('>=x11-drivers/nvidia-drivers[^"]+')
|
|
|
|
|
masks = []
|
|
|
|
|
for block in reBlock.findall(eclassdata):
|
|
|
|
|
nvidia_ids, mask_data = block
|
|
|
|
|
nvidia_ids = nvidia_ids.strip().replace('\\','')
|
|
|
|
|
nvidia_ids = {x for x in nvidia_ids.split() if x}
|
|
|
|
|
m = reMask.search(mask_data)
|
|
|
|
|
if m:
|
|
|
|
|
mask_str = m.group()
|
|
|
|
|
if cardsid & nvidia_ids:
|
|
|
|
|
return mask_str
|
|
|
|
|
finally:
|
|
|
|
|
if image:
|
|
|
|
|
image.close()
|
|
|
|
|