Message ID | 20211220192843.15052-1-pali@kernel.org (mailing list archive) |
---|---|
State | Handled Elsewhere |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | [pciutils] libpci: Fix intel_cleanup_io() implementations | expand |
Hi! > Function intel_cleanup_io() should de-initialize I/O port access, e.g. by > calling iopl(0) to reset I/O privilege level to default value. > > Caller of intel_cleanup_io() expects that this function returns negative > value on success and positive value on error. Error means that I/O port > access was not de-initialized and is still active. Success means that I/O > port access is not active anymore and intel_setup_io() needs to be called > again to access I/O ports. > > Fix Cygwin, Haiku and Linux implementations of intel_cleanup_io() function > to correctly de-initialize I/O port access and fix return value. Thanks for noticing the problem. I fixed it by removing the return value of intel_cleanup_io() completely. In fact, only returning -1 made sense ever. Martin
diff --git a/lib/i386-io-cygwin.h b/lib/i386-io-cygwin.h index 16022482f268..038b02d00a94 100644 --- a/lib/i386-io-cygwin.h +++ b/lib/i386-io-cygwin.h @@ -17,7 +17,7 @@ intel_setup_io(struct pci_access *a UNUSED) static inline int intel_cleanup_io(struct pci_access *a UNUSED) { - iopl(3); + iopl(0); return -1; } diff --git a/lib/i386-io-haiku.h b/lib/i386-io-haiku.h index 2bbe592672ab..5c724b34e98a 100644 --- a/lib/i386-io-haiku.h +++ b/lib/i386-io-haiku.h @@ -72,7 +72,7 @@ static inline int intel_cleanup_io(struct pci_access *a UNUSED) { close(poke_driver_fd); - return 1; + return -1; } static inline u8 diff --git a/lib/i386-io-linux.h b/lib/i386-io-linux.h index b39b4eb8267d..619f8ec11695 100644 --- a/lib/i386-io-linux.h +++ b/lib/i386-io-linux.h @@ -17,7 +17,7 @@ intel_setup_io(struct pci_access *a UNUSED) static inline int intel_cleanup_io(struct pci_access *a UNUSED) { - iopl(3); + iopl(0); return -1; }