FreeBSD kernel CAM code
|
#include "opt_cam.h"
#include "opt_ddb.h"
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bio.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/sbuf.h>
#include <sys/sysctl.h>
#include <cam/cam.h>
#include <cam/cam_ccb.h>
#include <cam/cam_periph.h>
#include <cam/cam_xpt_periph.h>
#include <cam/cam_xpt_internal.h>
#include <cam/cam_iosched.h>
#include <ddb/ddb.h>
Go to the source code of this file.
Data Structures | |
struct | cam_iosched_softc |
Macros | |
#define | CAM_IOSCHED_FLAG_TRIM_ACTIVE (1ul << 0) |
#define | CAM_IOSCHED_FLAG_CALLOUT_ACTIVE (1ul << 1) |
#define | CAM_IOSCHED_FLAG_WORK_FLAGS ((0xffffu) << 16) |
#define | cam_iosched_sort_queue(isc) |
Functions | |
__FBSDID ("$FreeBSD$") | |
static | MALLOC_DEFINE (M_CAMSCHED, "CAM I/O Scheduler", "CAM I/O Scheduler buffers") |
static | SYSCTL_NODE (_kern_cam, OID_AUTO, iosched, CTLFLAG_RD|CTLFLAG_MPSAFE, 0, "CAM I/O Scheduler parameters") |
static bool | cam_iosched_has_flagged_work (struct cam_iosched_softc *isc) |
static bool | cam_iosched_has_io (struct cam_iosched_softc *isc) |
static bool | cam_iosched_has_more_trim (struct cam_iosched_softc *isc) |
static bool | cam_iosched_has_work (struct cam_iosched_softc *isc) |
int | cam_iosched_init (struct cam_iosched_softc **iscp, struct cam_periph *periph) |
void | cam_iosched_fini (struct cam_iosched_softc *isc) |
void | cam_iosched_sysctl_init (struct cam_iosched_softc *isc, struct sysctl_ctx_list *ctx, struct sysctl_oid *node) |
void | cam_iosched_set_latfcn (struct cam_iosched_softc *isc, cam_iosched_latfcn_t fnp, void *argp) |
void | cam_iosched_set_trim_goal (struct cam_iosched_softc *isc, int goal) |
void | cam_iosched_set_trim_ticks (struct cam_iosched_softc *isc, int trim_ticks) |
void | cam_iosched_flush (struct cam_iosched_softc *isc, struct devstat *stp, int err) |
void | cam_iosched_put_back_trim (struct cam_iosched_softc *isc, struct bio *bp) |
struct bio * | cam_iosched_next_trim (struct cam_iosched_softc *isc) |
struct bio * | cam_iosched_get_trim (struct cam_iosched_softc *isc) |
struct bio * | cam_iosched_next_bio (struct cam_iosched_softc *isc) |
void | cam_iosched_queue_work (struct cam_iosched_softc *isc, struct bio *bp) |
void | cam_iosched_schedule (struct cam_iosched_softc *isc, struct cam_periph *periph) |
void | cam_iosched_trim_done (struct cam_iosched_softc *isc) |
int | cam_iosched_bio_complete (struct cam_iosched_softc *isc, struct bio *bp, union ccb *done_ccb) |
void | cam_iosched_submit_trim (struct cam_iosched_softc *isc) |
void | cam_iosched_set_sort_queue (struct cam_iosched_softc *isc, int val) |
int | cam_iosched_has_work_flags (struct cam_iosched_softc *isc, uint32_t flags) |
void | cam_iosched_set_work_flags (struct cam_iosched_softc *isc, uint32_t flags) |
void | cam_iosched_clr_work_flags (struct cam_iosched_softc *isc, uint32_t flags) |
#define CAM_IOSCHED_FLAG_CALLOUT_ACTIVE (1ul << 1) |
Definition at line 748 of file cam_iosched.c.
#define CAM_IOSCHED_FLAG_TRIM_ACTIVE (1ul << 0) |
Definition at line 746 of file cam_iosched.c.
#define CAM_IOSCHED_FLAG_WORK_FLAGS ((0xffffu) << 16) |
Definition at line 751 of file cam_iosched.c.
#define cam_iosched_sort_queue | ( | isc | ) |
Definition at line 823 of file cam_iosched.c.
__FBSDID | ( | "$FreeBSD$" | ) |
int cam_iosched_bio_complete | ( | struct cam_iosched_softc * | isc, |
struct bio * | bp, | ||
union ccb * | done_ccb | ||
) |
Definition at line 1693 of file cam_iosched.c.
References cam_iosched_sbintime_t(), CAM_QOS_VALID, ccb::ccb_h, iosched_debug, ccb_qos_area::periph_data, ccb_hdr::qos, and ccb_hdr::status.
Referenced by adadone(), dadone(), and ndadone().
void cam_iosched_clr_work_flags | ( | struct cam_iosched_softc * | isc, |
uint32_t | flags | ||
) |
Definition at line 1780 of file cam_iosched.c.
References cam_iosched_softc::flags.
Referenced by dastart().
void cam_iosched_fini | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1176 of file cam_iosched.c.
References CAM_IOSCHED_FLAG_CALLOUT_ACTIVE, cam_iosched_flush(), and cam_iosched_softc::flags.
Referenced by adacleanup(), dacleanup(), and ndacleanup().
void cam_iosched_flush | ( | struct cam_iosched_softc * | isc, |
struct devstat * | stp, | ||
int | err | ||
) |
Definition at line 1313 of file cam_iosched.c.
References cam_iosched_softc::bio_queue, and cam_iosched_softc::trim_queue.
Referenced by adaoninvalidate(), cam_iosched_fini(), dadone(), daoninvalidate(), and ndaoninvalidate().
struct bio * cam_iosched_get_trim | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1440 of file cam_iosched.c.
References cam_iosched_softc::bio_queue, cam_iosched_has_more_trim(), cam_iosched_next_trim(), iosched_debug, and cam_iosched_softc::trim_queue.
Referenced by cam_iosched_next_bio().
|
inlinestatic |
Definition at line 760 of file cam_iosched.c.
References CAM_IOSCHED_FLAG_WORK_FLAGS, and cam_iosched_softc::flags.
Referenced by cam_iosched_has_work().
|
inlinestatic |
Definition at line 766 of file cam_iosched.c.
References cam_iosched_softc::bio_queue, and iosched_debug.
Referenced by cam_iosched_has_work().
|
inlinestatic |
Definition at line 788 of file cam_iosched.c.
References CAM_IOSCHED_FLAG_TRIM_ACTIVE, cam_iosched_softc::flags, cam_iosched_softc::last_trim_tick, cam_iosched_softc::queued_trims, cam_iosched_softc::trim_goal, cam_iosched_softc::trim_queue, and cam_iosched_softc::trim_ticks.
Referenced by cam_iosched_get_trim(), and cam_iosched_has_work().
|
inlinestatic |
Definition at line 827 of file cam_iosched.c.
References cam_iosched_has_flagged_work(), cam_iosched_has_io(), cam_iosched_has_more_trim(), and iosched_debug.
Referenced by cam_iosched_schedule().
int cam_iosched_has_work_flags | ( | struct cam_iosched_softc * | isc, |
uint32_t | flags | ||
) |
Definition at line 1768 of file cam_iosched.c.
References cam_iosched_softc::flags.
Referenced by daasync(), damediapoll(), and dastart().
int cam_iosched_init | ( | struct cam_iosched_softc ** | iscp, |
struct cam_periph * | periph | ||
) |
Definition at line 1136 of file cam_iosched.c.
References CAM_IOSCHED_FLAG_CALLOUT_ACTIVE, cam_periph_mtx(), and iosched_debug.
Referenced by adaregister(), daregister(), and ndaregister().
struct bio * cam_iosched_next_bio | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1505 of file cam_iosched.c.
References cam_iosched_softc::bio_queue, cam_iosched_get_trim(), and iosched_debug.
Referenced by adastart(), dastart(), and ndastart().
struct bio * cam_iosched_next_trim | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1414 of file cam_iosched.c.
References cam_iosched_softc::last_trim_tick, cam_iosched_softc::queued_trims, and cam_iosched_softc::trim_queue.
Referenced by ada_dsmtrim_req_create(), cam_iosched_get_trim(), da_delete_trim(), da_delete_unmap(), da_delete_ws(), and ndastart().
void cam_iosched_put_back_trim | ( | struct cam_iosched_softc * | isc, |
struct bio * | bp | ||
) |
Definition at line 1393 of file cam_iosched.c.
References cam_iosched_softc::last_trim_tick, cam_iosched_softc::queued_trims, and cam_iosched_softc::trim_queue.
Referenced by ada_dsmtrim_req_create(), da_delete_trim(), da_delete_unmap(), and da_delete_ws().
void cam_iosched_queue_work | ( | struct cam_iosched_softc * | isc, |
struct bio * | bp | ||
) |
Definition at line 1574 of file cam_iosched.c.
References cam_iosched_softc::bio_queue, cam_iosched_sort_queue, iosched_debug, cam_iosched_softc::last_trim_tick, cam_iosched_softc::queued_trims, cam_iosched_softc::trim_queue, and cam_iosched_softc::trim_ticks.
Referenced by adastrategy(), cmd6workaround(), dastrategy(), and ndastrategy().
void cam_iosched_schedule | ( | struct cam_iosched_softc * | isc, |
struct cam_periph * | periph | ||
) |
Definition at line 1671 of file cam_iosched.c.
References cam_iosched_has_work(), CAM_PRIORITY_NORMAL, and xpt_schedule().
Referenced by adaschedule(), daschedule(), and ndaschedule().
void cam_iosched_set_latfcn | ( | struct cam_iosched_softc * | isc, |
cam_iosched_latfcn_t | fnp, | ||
void * | argp | ||
) |
Definition at line 1263 of file cam_iosched.c.
void cam_iosched_set_sort_queue | ( | struct cam_iosched_softc * | isc, |
int | val | ||
) |
Definition at line 1761 of file cam_iosched.c.
References cam_iosched_softc::sort_io_queue.
Referenced by adaregister(), dadone_probeata(), dadone_probebdc(), and ndaregister().
void cam_iosched_set_trim_goal | ( | struct cam_iosched_softc * | isc, |
int | goal | ||
) |
Definition at line 1294 of file cam_iosched.c.
References cam_iosched_softc::trim_goal.
void cam_iosched_set_trim_ticks | ( | struct cam_iosched_softc * | isc, |
int | trim_ticks | ||
) |
Definition at line 1301 of file cam_iosched.c.
References cam_iosched_softc::trim_ticks.
void cam_iosched_set_work_flags | ( | struct cam_iosched_softc * | isc, |
uint32_t | flags | ||
) |
Definition at line 1774 of file cam_iosched.c.
References cam_iosched_softc::flags.
Referenced by daasync(), and damediapoll().
void cam_iosched_submit_trim | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1751 of file cam_iosched.c.
References CAM_IOSCHED_FLAG_TRIM_ACTIVE, and cam_iosched_softc::flags.
Referenced by adastart(), da_delete_trim(), and da_delete_unmap().
void cam_iosched_sysctl_init | ( | struct cam_iosched_softc * | isc, |
struct sysctl_ctx_list * | ctx, | ||
struct sysctl_oid * | node | ||
) |
Definition at line 1201 of file cam_iosched.c.
References cam_iosched_softc::sort_io_queue, and cam_iosched_softc::trim_goal.
Referenced by adasysctlinit(), dasysctlinit(), and ndasysctlinit().
void cam_iosched_trim_done | ( | struct cam_iosched_softc * | isc | ) |
Definition at line 1682 of file cam_iosched.c.
References cam_iosched_softc::flags.
Referenced by adadone(), and dadone().
|
static |