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. --- lib/i386-io-cygwin.h | 2 +- lib/i386-io-haiku.h | 2 +- lib/i386-io-linux.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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; } -- 2.20.1