Merge branch 'master' into mm-nonmm-stable
This commit is contained in:
commit
ee56c3e8ee
661 changed files with 8469 additions and 5706 deletions
|
|
@ -119,6 +119,8 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ratio);
|
|||
|
||||
extern struct backing_dev_info noop_backing_dev_info;
|
||||
|
||||
int bdi_init(struct backing_dev_info *bdi);
|
||||
|
||||
/**
|
||||
* writeback_in_progress - determine whether there is writeback in progress
|
||||
* @wb: bdi_writeback of interest
|
||||
|
|
|
|||
|
|
@ -342,7 +342,6 @@ static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev,
|
|||
*/
|
||||
struct blk_independent_access_range {
|
||||
struct kobject kobj;
|
||||
struct request_queue *queue;
|
||||
sector_t sector;
|
||||
sector_t nr_sectors;
|
||||
};
|
||||
|
|
@ -482,7 +481,6 @@ struct request_queue {
|
|||
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||
|
||||
int node;
|
||||
struct mutex debugfs_mutex;
|
||||
#ifdef CONFIG_BLK_DEV_IO_TRACE
|
||||
struct blk_trace __rcu *blk_trace;
|
||||
#endif
|
||||
|
|
@ -526,11 +524,12 @@ struct request_queue {
|
|||
struct bio_set bio_split;
|
||||
|
||||
struct dentry *debugfs_dir;
|
||||
|
||||
#ifdef CONFIG_BLK_DEBUG_FS
|
||||
struct dentry *sched_debugfs_dir;
|
||||
struct dentry *rqos_debugfs_dir;
|
||||
#endif
|
||||
/*
|
||||
* Serializes all debugfs metadata operations using the above dentries.
|
||||
*/
|
||||
struct mutex debugfs_mutex;
|
||||
|
||||
bool mq_sysfs_init_done;
|
||||
|
||||
|
|
@ -575,6 +574,7 @@ struct request_queue {
|
|||
#define QUEUE_FLAG_RQ_ALLOC_TIME 27 /* record rq->alloc_time_ns */
|
||||
#define QUEUE_FLAG_HCTX_ACTIVE 28 /* at least one blk-mq hctx is active */
|
||||
#define QUEUE_FLAG_NOWAIT 29 /* device supports NOWAIT */
|
||||
#define QUEUE_FLAG_SQ_SCHED 30 /* single queue style io dispatch */
|
||||
|
||||
#define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
|
||||
(1 << QUEUE_FLAG_SAME_COMP) | \
|
||||
|
|
@ -616,6 +616,7 @@ bool blk_queue_flag_test_and_set(unsigned int flag, struct request_queue *q);
|
|||
#define blk_queue_pm_only(q) atomic_read(&(q)->pm_only)
|
||||
#define blk_queue_registered(q) test_bit(QUEUE_FLAG_REGISTERED, &(q)->queue_flags)
|
||||
#define blk_queue_nowait(q) test_bit(QUEUE_FLAG_NOWAIT, &(q)->queue_flags)
|
||||
#define blk_queue_sq_sched(q) test_bit(QUEUE_FLAG_SQ_SCHED, &(q)->queue_flags)
|
||||
|
||||
extern void blk_set_pm_only(struct request_queue *q);
|
||||
extern void blk_clear_pm_only(struct request_queue *q);
|
||||
|
|
@ -1006,8 +1007,6 @@ void disk_set_independent_access_ranges(struct gendisk *disk,
|
|||
*/
|
||||
/* Supports zoned block devices sequential write constraint */
|
||||
#define ELEVATOR_F_ZBD_SEQ_WRITE (1U << 0)
|
||||
/* Supports scheduling on multiple hardware queues */
|
||||
#define ELEVATOR_F_MQ_AWARE (1U << 1)
|
||||
|
||||
extern void blk_queue_required_elevator_features(struct request_queue *q,
|
||||
unsigned int features);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
struct vc_data;
|
||||
struct console_font_op;
|
||||
|
|
@ -154,22 +153,6 @@ struct console {
|
|||
uint ospeed;
|
||||
u64 seq;
|
||||
unsigned long dropped;
|
||||
struct task_struct *thread;
|
||||
bool blocked;
|
||||
|
||||
/*
|
||||
* The per-console lock is used by printing kthreads to synchronize
|
||||
* this console with callers of console_lock(). This is necessary in
|
||||
* order to allow printing kthreads to run in parallel to each other,
|
||||
* while each safely accessing the @blocked field and synchronizing
|
||||
* against direct printing via console_lock/console_unlock.
|
||||
*
|
||||
* Note: For synchronizing against direct printing via
|
||||
* console_trylock/console_unlock, see the static global
|
||||
* variable @console_kthreads_active.
|
||||
*/
|
||||
struct mutex lock;
|
||||
|
||||
void *data;
|
||||
struct console *next;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ extern ssize_t cpu_show_tsx_async_abort(struct device *dev,
|
|||
extern ssize_t cpu_show_itlb_multihit(struct device *dev,
|
||||
struct device_attribute *attr, char *buf);
|
||||
extern ssize_t cpu_show_srbds(struct device *dev, struct device_attribute *attr, char *buf);
|
||||
extern ssize_t cpu_show_mmio_stale_data(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf);
|
||||
|
||||
extern __printf(4, 5)
|
||||
struct device *cpu_device_create(struct device *parent, void *drvdata,
|
||||
|
|
|
|||
|
|
@ -167,21 +167,24 @@ struct gpio_irq_chip {
|
|||
*/
|
||||
irq_flow_handler_t parent_handler;
|
||||
|
||||
/**
|
||||
* @parent_handler_data:
|
||||
*
|
||||
* If @per_parent_data is false, @parent_handler_data is a single
|
||||
* pointer used as the data associated with every parent interrupt.
|
||||
*
|
||||
* @parent_handler_data_array:
|
||||
*
|
||||
* If @per_parent_data is true, @parent_handler_data_array is
|
||||
* an array of @num_parents pointers, and is used to associate
|
||||
* different data for each parent. This cannot be NULL if
|
||||
* @per_parent_data is true.
|
||||
*/
|
||||
union {
|
||||
/**
|
||||
* @parent_handler_data:
|
||||
*
|
||||
* If @per_parent_data is false, @parent_handler_data is a
|
||||
* single pointer used as the data associated with every
|
||||
* parent interrupt.
|
||||
*/
|
||||
void *parent_handler_data;
|
||||
|
||||
/**
|
||||
* @parent_handler_data_array:
|
||||
*
|
||||
* If @per_parent_data is true, @parent_handler_data_array is
|
||||
* an array of @num_parents pointers, and is used to associate
|
||||
* different data for each parent. This cannot be NULL if
|
||||
* @per_parent_data is true.
|
||||
*/
|
||||
void **parent_handler_data_array;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1600,7 +1600,7 @@ static inline bool is_pinnable_page(struct page *page)
|
|||
if (mt == MIGRATE_CMA || mt == MIGRATE_ISOLATE)
|
||||
return false;
|
||||
#endif
|
||||
return !(is_zone_movable_page(page) || is_zero_pfn(page_to_pfn(page)));
|
||||
return !is_zone_movable_page(page) || is_zero_pfn(page_to_pfn(page));
|
||||
}
|
||||
#else
|
||||
static inline bool is_pinnable_page(struct page *page)
|
||||
|
|
@ -3232,6 +3232,7 @@ enum mf_flags {
|
|||
MF_MUST_KILL = 1 << 2,
|
||||
MF_SOFT_OFFLINE = 1 << 3,
|
||||
MF_UNPOISON = 1 << 4,
|
||||
MF_SW_SIMULATED = 1 << 5,
|
||||
};
|
||||
extern int memory_failure(unsigned long pfn, int flags);
|
||||
extern void memory_failure_queue(unsigned long pfn, int flags);
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ static inline struct netfs_inode *netfs_inode(struct inode *inode)
|
|||
|
||||
/**
|
||||
* netfs_inode_init - Initialise a netfslib inode context
|
||||
* @inode: The netfs inode to initialise
|
||||
* @ctx: The netfs inode to initialise
|
||||
* @ops: The netfs's operations list
|
||||
*
|
||||
* Initialise the netfs library context struct. This is expected to follow on
|
||||
|
|
|
|||
|
|
@ -233,8 +233,8 @@ enum {
|
|||
};
|
||||
|
||||
enum {
|
||||
NVME_CAP_CRMS_CRIMS = 1ULL << 59,
|
||||
NVME_CAP_CRMS_CRWMS = 1ULL << 60,
|
||||
NVME_CAP_CRMS_CRWMS = 1ULL << 59,
|
||||
NVME_CAP_CRMS_CRIMS = 1ULL << 60,
|
||||
};
|
||||
|
||||
struct nvme_id_power_state {
|
||||
|
|
|
|||
|
|
@ -143,6 +143,12 @@ struct unwind_hint {
|
|||
.popsection
|
||||
.endm
|
||||
|
||||
.macro STACK_FRAME_NON_STANDARD_FP func:req
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
STACK_FRAME_NON_STANDARD \func
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro ANNOTATE_NOENDBR
|
||||
.Lhere_\@:
|
||||
.pushsection .discard.noendbr
|
||||
|
|
|
|||
|
|
@ -169,9 +169,6 @@ extern void __printk_safe_exit(void);
|
|||
#define printk_deferred_enter __printk_safe_enter
|
||||
#define printk_deferred_exit __printk_safe_exit
|
||||
|
||||
extern void printk_prefer_direct_enter(void);
|
||||
extern void printk_prefer_direct_exit(void);
|
||||
|
||||
extern bool pr_flush(int timeout_ms, bool reset_on_progress);
|
||||
|
||||
/*
|
||||
|
|
@ -224,14 +221,6 @@ static inline void printk_deferred_exit(void)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void printk_prefer_direct_enter(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void printk_prefer_direct_exit(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool pr_flush(int timeout_ms, bool reset_on_progress)
|
||||
{
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -23,12 +23,16 @@ struct ratelimit_state {
|
|||
unsigned long flags;
|
||||
};
|
||||
|
||||
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \
|
||||
.lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \
|
||||
.interval = interval_init, \
|
||||
.burst = burst_init, \
|
||||
#define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, flags_init) { \
|
||||
.lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \
|
||||
.interval = interval_init, \
|
||||
.burst = burst_init, \
|
||||
.flags = flags_init, \
|
||||
}
|
||||
|
||||
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
|
||||
RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0)
|
||||
|
||||
#define RATELIMIT_STATE_INIT_DISABLED \
|
||||
RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,9 @@
|
|||
#include <linux/notifier.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#define SCMI_MAX_STR_SIZE 64
|
||||
#define SCMI_MAX_NUM_RATES 16
|
||||
#define SCMI_MAX_STR_SIZE 64
|
||||
#define SCMI_SHORT_NAME_MAX_SIZE 16
|
||||
#define SCMI_MAX_NUM_RATES 16
|
||||
|
||||
/**
|
||||
* struct scmi_revision_info - version information structure
|
||||
|
|
@ -36,8 +37,8 @@ struct scmi_revision_info {
|
|||
u8 num_protocols;
|
||||
u8 num_agents;
|
||||
u32 impl_ver;
|
||||
char vendor_id[SCMI_MAX_STR_SIZE];
|
||||
char sub_vendor_id[SCMI_MAX_STR_SIZE];
|
||||
char vendor_id[SCMI_SHORT_NAME_MAX_SIZE];
|
||||
char sub_vendor_id[SCMI_SHORT_NAME_MAX_SIZE];
|
||||
};
|
||||
|
||||
struct scmi_clock_info {
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ struct uart_ops {
|
|||
void (*unthrottle)(struct uart_port *);
|
||||
void (*send_xchar)(struct uart_port *, char ch);
|
||||
void (*stop_rx)(struct uart_port *);
|
||||
void (*start_rx)(struct uart_port *);
|
||||
void (*enable_ms)(struct uart_port *);
|
||||
void (*break_ctl)(struct uart_port *, int ctl);
|
||||
int (*startup)(struct uart_port *);
|
||||
|
|
|
|||
|
|
@ -1,344 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2010 - 2013 UNISYS CORPORATION
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This header file is to be included by other kernel mode components that
|
||||
* implement a particular kind of visor_device. Each of these other kernel
|
||||
* mode components is called a visor device driver. Refer to visortemplate
|
||||
* for a minimal sample visor device driver.
|
||||
*
|
||||
* There should be nothing in this file that is private to the visorbus
|
||||
* bus implementation itself.
|
||||
*/
|
||||
|
||||
#ifndef __VISORBUS_H__
|
||||
#define __VISORBUS_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
#define VISOR_CHANNEL_SIGNATURE ('L' << 24 | 'N' << 16 | 'C' << 8 | 'E')
|
||||
|
||||
/*
|
||||
* enum channel_serverstate
|
||||
* @CHANNELSRV_UNINITIALIZED: Channel is in an undefined state.
|
||||
* @CHANNELSRV_READY: Channel has been initialized by server.
|
||||
*/
|
||||
enum channel_serverstate {
|
||||
CHANNELSRV_UNINITIALIZED = 0,
|
||||
CHANNELSRV_READY = 1
|
||||
};
|
||||
|
||||
/*
|
||||
* enum channel_clientstate
|
||||
* @CHANNELCLI_DETACHED:
|
||||
* @CHANNELCLI_DISABLED: Client can see channel but is NOT allowed to use it
|
||||
* unless given TBD* explicit request
|
||||
* (should actually be < DETACHED).
|
||||
* @CHANNELCLI_ATTACHING: Legacy EFI client request for EFI server to attach.
|
||||
* @CHANNELCLI_ATTACHED: Idle, but client may want to use channel any time.
|
||||
* @CHANNELCLI_BUSY: Client either wants to use or is using channel.
|
||||
* @CHANNELCLI_OWNED: "No worries" state - client can access channel
|
||||
* anytime.
|
||||
*/
|
||||
enum channel_clientstate {
|
||||
CHANNELCLI_DETACHED = 0,
|
||||
CHANNELCLI_DISABLED = 1,
|
||||
CHANNELCLI_ATTACHING = 2,
|
||||
CHANNELCLI_ATTACHED = 3,
|
||||
CHANNELCLI_BUSY = 4,
|
||||
CHANNELCLI_OWNED = 5
|
||||
};
|
||||
|
||||
/*
|
||||
* Values for VISOR_CHANNEL_PROTOCOL.Features: This define exists so that
|
||||
* a guest can look at the FeatureFlags in the io channel, and configure the
|
||||
* driver to use interrupts or not based on this setting. All feature bits for
|
||||
* all channels should be defined here. The io channel feature bits are defined
|
||||
* below.
|
||||
*/
|
||||
#define VISOR_DRIVER_ENABLES_INTS (0x1ULL << 1)
|
||||
#define VISOR_CHANNEL_IS_POLLING (0x1ULL << 3)
|
||||
#define VISOR_IOVM_OK_DRIVER_DISABLING_INTS (0x1ULL << 4)
|
||||
#define VISOR_DRIVER_DISABLES_INTS (0x1ULL << 5)
|
||||
#define VISOR_DRIVER_ENHANCED_RCVBUF_CHECKING (0x1ULL << 6)
|
||||
|
||||
/*
|
||||
* struct channel_header - Common Channel Header
|
||||
* @signature: Signature.
|
||||
* @legacy_state: DEPRECATED - being replaced by.
|
||||
* @header_size: sizeof(struct channel_header).
|
||||
* @size: Total size of this channel in bytes.
|
||||
* @features: Flags to modify behavior.
|
||||
* @chtype: Channel type: data, bus, control, etc..
|
||||
* @partition_handle: ID of guest partition.
|
||||
* @handle: Device number of this channel in client.
|
||||
* @ch_space_offset: Offset in bytes to channel specific area.
|
||||
* @version_id: Struct channel_header Version ID.
|
||||
* @partition_index: Index of guest partition.
|
||||
* @zone_uuid: Guid of Channel's zone.
|
||||
* @cli_str_offset: Offset from channel header to null-terminated
|
||||
* ClientString (0 if ClientString not present).
|
||||
* @cli_state_boot: CHANNEL_CLIENTSTATE of pre-boot EFI client of this
|
||||
* channel.
|
||||
* @cmd_state_cli: CHANNEL_COMMANDSTATE (overloaded in Windows drivers, see
|
||||
* ServerStateUp, ServerStateDown, etc).
|
||||
* @cli_state_os: CHANNEL_CLIENTSTATE of Guest OS client of this channel.
|
||||
* @ch_characteristic: CHANNEL_CHARACTERISTIC_<xxx>.
|
||||
* @cmd_state_srv: CHANNEL_COMMANDSTATE (overloaded in Windows drivers, see
|
||||
* ServerStateUp, ServerStateDown, etc).
|
||||
* @srv_state: CHANNEL_SERVERSTATE.
|
||||
* @cli_error_boot: Bits to indicate err states for boot clients, so err
|
||||
* messages can be throttled.
|
||||
* @cli_error_os: Bits to indicate err states for OS clients, so err
|
||||
* messages can be throttled.
|
||||
* @filler: Pad out to 128 byte cacheline.
|
||||
* @recover_channel: Please add all new single-byte values below here.
|
||||
*/
|
||||
struct channel_header {
|
||||
u64 signature;
|
||||
u32 legacy_state;
|
||||
/* SrvState, CliStateBoot, and CliStateOS below */
|
||||
u32 header_size;
|
||||
u64 size;
|
||||
u64 features;
|
||||
guid_t chtype;
|
||||
u64 partition_handle;
|
||||
u64 handle;
|
||||
u64 ch_space_offset;
|
||||
u32 version_id;
|
||||
u32 partition_index;
|
||||
guid_t zone_guid;
|
||||
u32 cli_str_offset;
|
||||
u32 cli_state_boot;
|
||||
u32 cmd_state_cli;
|
||||
u32 cli_state_os;
|
||||
u32 ch_characteristic;
|
||||
u32 cmd_state_srv;
|
||||
u32 srv_state;
|
||||
u8 cli_error_boot;
|
||||
u8 cli_error_os;
|
||||
u8 filler[1];
|
||||
u8 recover_channel;
|
||||
} __packed;
|
||||
|
||||
#define VISOR_CHANNEL_ENABLE_INTS (0x1ULL << 0)
|
||||
|
||||
/*
|
||||
* struct signal_queue_header - Subheader for the Signal Type variation of the
|
||||
* Common Channel.
|
||||
* @version: SIGNAL_QUEUE_HEADER Version ID.
|
||||
* @chtype: Queue type: storage, network.
|
||||
* @size: Total size of this queue in bytes.
|
||||
* @sig_base_offset: Offset to signal queue area.
|
||||
* @features: Flags to modify behavior.
|
||||
* @num_sent: Total # of signals placed in this queue.
|
||||
* @num_overflows: Total # of inserts failed due to full queue.
|
||||
* @signal_size: Total size of a signal for this queue.
|
||||
* @max_slots: Max # of slots in queue, 1 slot is always empty.
|
||||
* @max_signals: Max # of signals in queue (MaxSignalSlots-1).
|
||||
* @head: Queue head signal #.
|
||||
* @num_received: Total # of signals removed from this queue.
|
||||
* @tail: Queue tail signal.
|
||||
* @reserved1: Reserved field.
|
||||
* @reserved2: Reserved field.
|
||||
* @client_queue:
|
||||
* @num_irq_received: Total # of Interrupts received. This is incremented by the
|
||||
* ISR in the guest windows driver.
|
||||
* @num_empty: Number of times that visor_signal_remove is called and
|
||||
* returned Empty Status.
|
||||
* @errorflags: Error bits set during SignalReinit to denote trouble with
|
||||
* client's fields.
|
||||
* @filler: Pad out to 64 byte cacheline.
|
||||
*/
|
||||
struct signal_queue_header {
|
||||
/* 1st cache line */
|
||||
u32 version;
|
||||
u32 chtype;
|
||||
u64 size;
|
||||
u64 sig_base_offset;
|
||||
u64 features;
|
||||
u64 num_sent;
|
||||
u64 num_overflows;
|
||||
u32 signal_size;
|
||||
u32 max_slots;
|
||||
u32 max_signals;
|
||||
u32 head;
|
||||
/* 2nd cache line */
|
||||
u64 num_received;
|
||||
u32 tail;
|
||||
u32 reserved1;
|
||||
u64 reserved2;
|
||||
u64 client_queue;
|
||||
u64 num_irq_received;
|
||||
u64 num_empty;
|
||||
u32 errorflags;
|
||||
u8 filler[12];
|
||||
} __packed;
|
||||
|
||||
/* VISORCHANNEL Guids */
|
||||
/* {414815ed-c58c-11da-95a9-00e08161165f} */
|
||||
#define VISOR_VHBA_CHANNEL_GUID \
|
||||
GUID_INIT(0x414815ed, 0xc58c, 0x11da, \
|
||||
0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
|
||||
#define VISOR_VHBA_CHANNEL_GUID_STR \
|
||||
"414815ed-c58c-11da-95a9-00e08161165f"
|
||||
struct visorchipset_state {
|
||||
u32 created:1;
|
||||
u32 attached:1;
|
||||
u32 configured:1;
|
||||
u32 running:1;
|
||||
/* Remaining bits in this 32-bit word are reserved. */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct visor_device - A device type for things "plugged" into the visorbus
|
||||
* bus
|
||||
* @visorchannel: Points to the channel that the device is
|
||||
* associated with.
|
||||
* @channel_type_guid: Identifies the channel type to the bus driver.
|
||||
* @device: Device struct meant for use by the bus driver
|
||||
* only.
|
||||
* @list_all: Used by the bus driver to enumerate devices.
|
||||
* @timer: Timer fired periodically to do interrupt-type
|
||||
* activity.
|
||||
* @being_removed: Indicates that the device is being removed from
|
||||
* the bus. Private bus driver use only.
|
||||
* @visordriver_callback_lock: Used by the bus driver to lock when adding and
|
||||
* removing devices.
|
||||
* @pausing: Indicates that a change towards a paused state.
|
||||
* is in progress. Only modified by the bus driver.
|
||||
* @resuming: Indicates that a change towards a running state
|
||||
* is in progress. Only modified by the bus driver.
|
||||
* @chipset_bus_no: Private field used by the bus driver.
|
||||
* @chipset_dev_no: Private field used the bus driver.
|
||||
* @state: Used to indicate the current state of the
|
||||
* device.
|
||||
* @inst: Unique GUID for this instance of the device.
|
||||
* @name: Name of the device.
|
||||
* @pending_msg_hdr: For private use by bus driver to respond to
|
||||
* hypervisor requests.
|
||||
* @vbus_hdr_info: A pointer to header info. Private use by bus
|
||||
* driver.
|
||||
* @partition_guid: Indicates client partion id. This should be the
|
||||
* same across all visor_devices in the current
|
||||
* guest. Private use by bus driver only.
|
||||
*/
|
||||
struct visor_device {
|
||||
struct visorchannel *visorchannel;
|
||||
guid_t channel_type_guid;
|
||||
/* These fields are for private use by the bus driver only. */
|
||||
struct device device;
|
||||
struct list_head list_all;
|
||||
struct timer_list timer;
|
||||
bool timer_active;
|
||||
bool being_removed;
|
||||
struct mutex visordriver_callback_lock; /* synchronize probe/remove */
|
||||
bool pausing;
|
||||
bool resuming;
|
||||
u32 chipset_bus_no;
|
||||
u32 chipset_dev_no;
|
||||
struct visorchipset_state state;
|
||||
guid_t inst;
|
||||
u8 *name;
|
||||
struct controlvm_message_header *pending_msg_hdr;
|
||||
void *vbus_hdr_info;
|
||||
guid_t partition_guid;
|
||||
struct dentry *debugfs_dir;
|
||||
struct dentry *debugfs_bus_info;
|
||||
};
|
||||
|
||||
#define to_visor_device(x) container_of(x, struct visor_device, device)
|
||||
|
||||
typedef void (*visorbus_state_complete_func) (struct visor_device *dev,
|
||||
int status);
|
||||
|
||||
/*
|
||||
* This struct describes a specific visor channel, by providing its GUID, name,
|
||||
* and sizes.
|
||||
*/
|
||||
struct visor_channeltype_descriptor {
|
||||
const guid_t guid;
|
||||
const char *name;
|
||||
u64 min_bytes;
|
||||
u32 version;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct visor_driver - Information provided by each visor driver when it
|
||||
* registers with the visorbus driver
|
||||
* @name: Name of the visor driver.
|
||||
* @owner: The module owner.
|
||||
* @channel_types: Types of channels handled by this driver, ending with
|
||||
* a zero GUID. Our specialized BUS.match() method knows
|
||||
* about this list, and uses it to determine whether this
|
||||
* driver will in fact handle a new device that it has
|
||||
* detected.
|
||||
* @probe: Called when a new device comes online, by our probe()
|
||||
* function specified by driver.probe() (triggered
|
||||
* ultimately by some call to driver_register(),
|
||||
* bus_add_driver(), or driver_attach()).
|
||||
* @remove: Called when a new device is removed, by our remove()
|
||||
* function specified by driver.remove() (triggered
|
||||
* ultimately by some call to device_release_driver()).
|
||||
* @channel_interrupt: Called periodically, whenever there is a possiblity
|
||||
* that "something interesting" may have happened to the
|
||||
* channel.
|
||||
* @pause: Called to initiate a change of the device's state. If
|
||||
* the return valu`e is < 0, there was an error and the
|
||||
* state transition will NOT occur. If the return value
|
||||
* is >= 0, then the state transition was INITIATED
|
||||
* successfully, and complete_func() will be called (or
|
||||
* was just called) with the final status when either the
|
||||
* state transition fails or completes successfully.
|
||||
* @resume: Behaves similar to pause.
|
||||
* @driver: Private reference to the device driver. For use by bus
|
||||
* driver only.
|
||||
*/
|
||||
struct visor_driver {
|
||||
const char *name;
|
||||
struct module *owner;
|
||||
struct visor_channeltype_descriptor *channel_types;
|
||||
int (*probe)(struct visor_device *dev);
|
||||
void (*remove)(struct visor_device *dev);
|
||||
void (*channel_interrupt)(struct visor_device *dev);
|
||||
int (*pause)(struct visor_device *dev,
|
||||
visorbus_state_complete_func complete_func);
|
||||
int (*resume)(struct visor_device *dev,
|
||||
visorbus_state_complete_func complete_func);
|
||||
|
||||
/* These fields are for private use by the bus driver only. */
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
#define to_visor_driver(x) (container_of(x, struct visor_driver, driver))
|
||||
|
||||
int visor_check_channel(struct channel_header *ch, struct device *dev,
|
||||
const guid_t *expected_uuid, char *chname,
|
||||
u64 expected_min_bytes, u32 expected_version,
|
||||
u64 expected_signature);
|
||||
|
||||
int visorbus_register_visor_driver(struct visor_driver *drv);
|
||||
void visorbus_unregister_visor_driver(struct visor_driver *drv);
|
||||
int visorbus_read_channel(struct visor_device *dev,
|
||||
unsigned long offset, void *dest,
|
||||
unsigned long nbytes);
|
||||
int visorbus_write_channel(struct visor_device *dev,
|
||||
unsigned long offset, void *src,
|
||||
unsigned long nbytes);
|
||||
int visorbus_enable_channel_interrupts(struct visor_device *dev);
|
||||
void visorbus_disable_channel_interrupts(struct visor_device *dev);
|
||||
|
||||
int visorchannel_signalremove(struct visorchannel *channel, u32 queue,
|
||||
void *msg);
|
||||
int visorchannel_signalinsert(struct visorchannel *channel, u32 queue,
|
||||
void *msg);
|
||||
bool visorchannel_signalempty(struct visorchannel *channel, u32 queue);
|
||||
const guid_t *visorchannel_get_guid(struct visorchannel *channel);
|
||||
|
||||
#define BUS_ROOT_DEVICE UINT_MAX
|
||||
struct visor_device *visorbus_get_device_by_id(u32 bus_no, u32 dev_no,
|
||||
struct visor_device *from);
|
||||
#endif
|
||||
|
|
@ -215,6 +215,7 @@ extern struct vm_struct *__get_vm_area_caller(unsigned long size,
|
|||
void free_vm_area(struct vm_struct *area);
|
||||
extern struct vm_struct *remove_vm_area(const void *addr);
|
||||
extern struct vm_struct *find_vm_area(const void *addr);
|
||||
struct vmap_area *find_vmap_area(unsigned long addr);
|
||||
|
||||
static inline bool is_vm_area_hugepages(const void *addr)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue