
Add a globally unique sequence number which is incremented when ioperm() is changing the I/O bitmap of a task. Store the new sequence number in the io_bitmap structure and compare it with the sequence number of the I/O bitmap which was last loaded on a CPU. Only update the bitmap if the sequence is different. That should further reduce the overhead of I/O bitmap scheduling when there are only a few I/O bitmap users on the system. The 64bit sequence counter is sufficient. A wraparound of the sequence counter assuming an ioperm() call every nanosecond would require about 584 years of uptime. Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
15 lines
301 B
C
15 lines
301 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_IOBITMAP_H
|
|
#define _ASM_X86_IOBITMAP_H
|
|
|
|
#include <asm/processor.h>
|
|
|
|
struct io_bitmap {
|
|
u64 sequence;
|
|
/* The maximum number of bytes to copy so all zero bits are covered */
|
|
unsigned int max;
|
|
unsigned long bitmap[IO_BITMAP_LONGS];
|
|
};
|
|
|
|
#endif
|