cregit-Linux how code gets into the kernel

Release 4.16 include/linux/ioprio.h

Directory: include/linux
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef IOPRIO_H

#define IOPRIO_H

#include <linux/sched.h>
#include <linux/sched/rt.h>
#include <linux/iocontext.h>

/*
 * Gives us 8 prio classes with 13-bits of data for each class
 */

#define IOPRIO_CLASS_SHIFT	(13)

#define IOPRIO_PRIO_MASK	((1UL << IOPRIO_CLASS_SHIFT) - 1)


#define IOPRIO_PRIO_CLASS(mask)	((mask) >> IOPRIO_CLASS_SHIFT)

#define IOPRIO_PRIO_DATA(mask)	((mask) & IOPRIO_PRIO_MASK)

#define IOPRIO_PRIO_VALUE(class, data)	(((class) << IOPRIO_CLASS_SHIFT) | data)


#define ioprio_valid(mask)	(IOPRIO_PRIO_CLASS((mask)) != IOPRIO_CLASS_NONE)

/*
 * These are the io priority groups as implemented by CFQ. RT is the realtime
 * class, it always gets premium service. BE is the best-effort scheduling
 * class, the default for any process. IDLE is the idle scheduling class, it
 * is only served when no one else is using the disk.
 */

enum {
	
IOPRIO_CLASS_NONE,
	
IOPRIO_CLASS_RT,
	
IOPRIO_CLASS_BE,
	
IOPRIO_CLASS_IDLE,
};

/*
 * 8 best effort priority levels are supported
 */

#define IOPRIO_BE_NR	(8)


enum {
	
IOPRIO_WHO_PROCESS = 1,
	
IOPRIO_WHO_PGRP,
	
IOPRIO_WHO_USER,
};

/*
 * Fallback BE priority
 */

#define IOPRIO_NORM	(4)

/*
 * if process has set io priority explicitly, use that. if not, convert
 * the cpu scheduler nice value to an io priority
 */

static inline int task_nice_ioprio(struct task_struct *task) { return (task_nice(task) + 20) / 5; }

Contributors

PersonTokensPropCommitsCommitProp
Jens Axboe24100.00%1100.00%
Total24100.00%1100.00%

/* * This is for the case where the task hasn't asked for a specific IO class. * Check for idle and rt task process, and return appropriate IO class. */
static inline int task_nice_ioclass(struct task_struct *task) { if (task->policy == SCHED_IDLE) return IOPRIO_CLASS_IDLE; else if (task_is_realtime(task)) return IOPRIO_CLASS_RT; else return IOPRIO_CLASS_BE; }

Contributors

PersonTokensPropCommitsCommitProp
Jens Axboe3592.11%150.00%
Sebastian Andrzej Siewior37.89%150.00%
Total38100.00%2100.00%

/* * For inheritance, return the highest of the two given priorities */ extern int ioprio_best(unsigned short aprio, unsigned short bprio); extern int set_task_ioprio(struct task_struct *task, int ioprio); #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Jens Axboe15786.74%444.44%
Theodore Y. Ts'o137.18%111.11%
Sebastian Andrzej Siewior63.31%111.11%
Oleg Nesterov21.10%111.11%
Tejun Heo21.10%111.11%
Greg Kroah-Hartman10.55%111.11%
Ingo Molnar0.00%00.00%
Total181100.00%9100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.