Only open /proc/bus/pci/devices once. (Ubuntu #029)
This commit is contained in:
parent
c937faadd0
commit
bb5e934df7
|
@ -23,10 +23,11 @@
|
|||
#define PCIADDR_FMT "%lx"
|
||||
#endif
|
||||
|
||||
FILE *xf86OSLinuxPCIFile = NULL;
|
||||
|
||||
Bool
|
||||
xf86GetPciSizeFromOS(PCITAG tag, int index, int* bits)
|
||||
{
|
||||
FILE *file;
|
||||
char c[0x200];
|
||||
char *res;
|
||||
unsigned int bus, devfn, dev, fn;
|
||||
|
@ -37,10 +38,11 @@ xf86GetPciSizeFromOS(PCITAG tag, int index, int* bits)
|
|||
if (index > 7)
|
||||
return FALSE;
|
||||
|
||||
if (!(file = fopen("/proc/bus/pci/devices","r")))
|
||||
if (!xf86OSLinuxPCIFile && \
|
||||
!(xf86OSLinuxPCIFile = fopen("/proc/bus/pci/devices","r")))
|
||||
return FALSE;
|
||||
do {
|
||||
res = fgets(c,0x1ff,file);
|
||||
res = fgets(c,0x1ff,xf86OSLinuxPCIFile);
|
||||
if (res) {
|
||||
num = sscanf(res,
|
||||
/*bus+dev vendorid deviceid irq */
|
||||
|
@ -64,7 +66,7 @@ xf86GetPciSizeFromOS(PCITAG tag, int index, int* bits)
|
|||
&bus,&devfn,&size[0],&size[1],&size[2],&size[3],
|
||||
&size[4],&size[5],&size[6]);
|
||||
if (num != 9) { /* apparantly not 2.3 style */
|
||||
fclose(file);
|
||||
fseek(xf86OSLinuxPCIFile, 0L, SEEK_SET);
|
||||
return FALSE;
|
||||
}
|
||||
dev = devfn >> 3;
|
||||
|
@ -78,13 +80,13 @@ xf86GetPciSizeFromOS(PCITAG tag, int index, int* bits)
|
|||
(*bits)++;
|
||||
}
|
||||
}
|
||||
fclose(file);
|
||||
fseek(xf86OSLinuxPCIFile, 0L, SEEK_SET);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
} while (res);
|
||||
|
||||
fclose(file);
|
||||
fseek(xf86OSLinuxPCIFile, 0L, SEEK_SET);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user