- Unbreak the rom-size patch.
This commit is contained in:
parent
647f70c8bb
commit
62cd196ea9
@ -1,15 +1,73 @@
|
|||||||
diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c
|
diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c
|
||||||
index 8c3cf67..ae9f38e 100644
|
index 8c3cf67..2ea78c1 100644
|
||||||
--- a/src/linux_sysfs.c
|
--- a/src/linux_sysfs.c
|
||||||
+++ b/src/linux_sysfs.c
|
+++ b/src/linux_sysfs.c
|
||||||
@@ -338,6 +338,10 @@ pci_device_linux_sysfs_read_rom( struct pci_device * dev, void * buffer )
|
@@ -227,6 +227,7 @@ pci_device_linux_sysfs_probe( struct pci_device * dev )
|
||||||
if ( rom_size == 0 )
|
pciaddr_t bytes;
|
||||||
rom_size = 0x10000;
|
unsigned i;
|
||||||
|
int err;
|
||||||
|
+ struct stat st;
|
||||||
|
|
||||||
+ /* The caller has allocated dev->rom_size so cap the read amount. */
|
|
||||||
+ if ( rom_size > dev->rom_size )
|
err = pci_device_linux_sysfs_read( dev, config, 0, 256, & bytes );
|
||||||
+ rom_size = dev->rom_size;
|
@@ -293,11 +294,28 @@ pci_device_linux_sysfs_probe( struct pci_device * dev )
|
||||||
|
flags = strtoull( next, & next, 16 );
|
||||||
|
if ( low_addr != 0 ) {
|
||||||
|
priv->rom_base = low_addr;
|
||||||
|
- dev->rom_size = (high_addr - low_addr) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ snprintf( name, 255, "%s/%04x:%02x:%02x.%1u/rom",
|
||||||
|
+ SYS_BUS_PCI,
|
||||||
|
+ dev->domain,
|
||||||
|
+ dev->bus,
|
||||||
|
+ dev->dev,
|
||||||
|
+ dev->func );
|
||||||
+
|
+
|
||||||
|
+ fd = open( name, O_RDWR );
|
||||||
|
+ if ( fd == -1 ) {
|
||||||
|
+ dev->rom_size = 0x10000;
|
||||||
|
+ } else if ( fstat( fd, & st ) == -1 ) {
|
||||||
|
+ close( fd );
|
||||||
|
+ dev->rom_size = 0x10000;
|
||||||
|
+ } else {
|
||||||
|
+ close( fd );
|
||||||
|
+ dev->rom_size = st.st_size == 0 ? 0x10000 : st.st_size;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -309,7 +327,6 @@ pci_device_linux_sysfs_read_rom( struct pci_device * dev, void * buffer )
|
||||||
|
int fd;
|
||||||
|
struct stat st;
|
||||||
|
int err = 0;
|
||||||
|
- size_t rom_size;
|
||||||
|
size_t total_bytes;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -334,10 +351,6 @@ pci_device_linux_sysfs_read_rom( struct pci_device * dev, void * buffer )
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
- rom_size = st.st_size;
|
||||||
|
- if ( rom_size == 0 )
|
||||||
|
- rom_size = 0x10000;
|
||||||
|
-
|
||||||
/* This is a quirky thing on Linux. Even though the ROM and the file
|
/* This is a quirky thing on Linux. Even though the ROM and the file
|
||||||
* for the ROM in sysfs are read-only, the string "1" must be written to
|
* for the ROM in sysfs are read-only, the string "1" must be written to
|
||||||
* the file to enable the ROM. After the data has been read, "0" must be
|
* the file to enable the ROM. After the data has been read, "0" must be
|
||||||
|
@@ -346,9 +359,9 @@ pci_device_linux_sysfs_read_rom( struct pci_device * dev, void * buffer )
|
||||||
|
write( fd, "1", 1 );
|
||||||
|
lseek( fd, 0, SEEK_SET );
|
||||||
|
|
||||||
|
- for ( total_bytes = 0 ; total_bytes < rom_size ; /* empty */ ) {
|
||||||
|
+ for ( total_bytes = 0 ; total_bytes < dev->rom_size ; /* empty */ ) {
|
||||||
|
const int bytes = read( fd, (char *) buffer + total_bytes,
|
||||||
|
- rom_size - total_bytes );
|
||||||
|
+ dev->rom_size - total_bytes );
|
||||||
|
if ( bytes == -1 ) {
|
||||||
|
err = errno;
|
||||||
|
break;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Name: libpciaccess
|
Name: libpciaccess
|
||||||
Version: 0.10.3
|
Version: 0.10.3
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
Summary: PCI access library
|
Summary: PCI access library
|
||||||
|
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
@ -72,6 +72,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{_libdir}/pkgconfig/pciaccess.pc
|
%{_libdir}/pkgconfig/pciaccess.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Feb 15 2009 Kristian Høgsberg <krh@redhat.com> - 0.10.3-5
|
||||||
|
- Unbreak the rom-size patch.
|
||||||
|
|
||||||
* Sun Feb 15 2009 Kristian Høgsberg <krh@redhat.com> - 0.10.3-4
|
* Sun Feb 15 2009 Kristian Høgsberg <krh@redhat.com> - 0.10.3-4
|
||||||
- Don't read more than the advertised rom_size.
|
- Don't read more than the advertised rom_size.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user