mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/juanquintela/tags/migration/20170601' into staging
migration/next for 20170601 # gpg: Signature made Thu 01 Jun 2017 17:51:04 BST # gpg: using RSA key 0xF487EF185872D723 # gpg: Good signature from "Juan Quintela <quintela@redhat.com>" # gpg: aka "Juan Quintela <quintela@trasno.org>" # Primary key fingerprint: 1899 FF8E DEBF 58CC EE03 4B82 F487 EF18 5872 D723 * remotes/juanquintela/tags/migration/20170601: migration: Move include/migration/block.h into migration/ migration: Export ram.c functions in its own file migration: Create include for migration snapshots migration: Export rdma.c functions in its own file migration: Export tls.c functions in its own file migration: Export socket.c functions in its own file migration: Export fd.c functions in its own file migration: Export exec.c functions in its own file migration: Split qemu-file.h migration: Remove unneeded includes of migration/vmstate.h migration: shut src return path unconditionally migration: fix leak of src file on dst migration: Remove section_id parameter from vmstate_load migration: loadvm handlers are not used migration: Use savevm_handlers instead of loadvm copy Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "exec/ramlist.h"
|
||||
#include "hw/intc/intc.h"
|
||||
#include "migration/snapshot.h"
|
||||
|
||||
#ifdef CONFIG_SPICE
|
||||
#include <spice/enums.h>
|
||||
@@ -1284,7 +1285,7 @@ void hmp_loadvm(Monitor *mon, const QDict *qdict)
|
||||
|
||||
vm_stop(RUN_STATE_RESTORE_VM);
|
||||
|
||||
if (load_vmstate(name, &err) == 0 && saved_vm_running) {
|
||||
if (load_snapshot(name, &err) == 0 && saved_vm_running) {
|
||||
vm_start();
|
||||
}
|
||||
hmp_handle_error(mon, &err);
|
||||
@@ -1294,7 +1295,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
Error *err = NULL;
|
||||
|
||||
save_vmstate(qdict_get_try_str(qdict, "name"), &err);
|
||||
save_snapshot(qdict_get_try_str(qdict, "name"), &err);
|
||||
hmp_handle_error(mon, &err);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "hw/boards.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "qapi-event.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
||||
bool qdev_hotplug = false;
|
||||
static bool qdev_hot_added = false;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/log.h"
|
||||
#include "hw/i2c/i2c.h"
|
||||
#include "hw/i2c/i2c-ddc.h"
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
#include "trace.h"
|
||||
#include "hw/qdev.h"
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
#include "hw/s390x/adapter.h"
|
||||
#include "trace.h"
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/boards.h"
|
||||
#include "qmp-commands.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "hw/s390x/storage-keys.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/kvm.h"
|
||||
|
||||
@@ -601,8 +601,8 @@ struct BlockDriverState {
|
||||
int copy_on_read;
|
||||
|
||||
/* If we are reading a disk image, give its size in sectors.
|
||||
* Generally read-only; it is written to by load_vmstate and save_vmstate,
|
||||
* but the block layer is quiescent during those.
|
||||
* Generally read-only; it is written to by load_snapshot and
|
||||
* save_snaphost, but the block layer is quiescent during those.
|
||||
*/
|
||||
int64_t total_sectors;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "hw/qdev-core.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/acpi/aml-build.h"
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#define HW_ACPI_PCIHP_H
|
||||
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/hotplug.h"
|
||||
|
||||
#define ACPI_PCIHP_IO_BASE_PROP "acpi-pcihp-io-base"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
#include "exec/memory.h"
|
||||
#include "hw/irq.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "migration/qemu-file-types.h"
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/reset.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "exec/memory.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/hotplug.h"
|
||||
#include "hw/pci/pci.h"
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "io/channel.h"
|
||||
#include "qapi-types.h"
|
||||
#include "exec/cpu-common.h"
|
||||
#include "qemu/coroutine_int.h"
|
||||
@@ -50,8 +49,6 @@ enum mig_rp_message_type {
|
||||
MIG_RP_MSG_MAX
|
||||
};
|
||||
|
||||
typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
|
||||
|
||||
/* State for the incoming migration */
|
||||
struct MigrationIncomingState {
|
||||
QEMUFile *from_src_file;
|
||||
@@ -89,9 +86,6 @@ struct MigrationIncomingState {
|
||||
/* The coroutine we should enter (back) after failover */
|
||||
Coroutine *migration_incoming_co;
|
||||
QemuSemaphore colo_incoming_sem;
|
||||
|
||||
/* See savevm.c */
|
||||
LoadStateEntry_Head loadvm_handlers;
|
||||
};
|
||||
|
||||
MigrationIncomingState *migration_incoming_get_current(void);
|
||||
@@ -157,37 +151,8 @@ void migration_fd_process_incoming(QEMUFile *f);
|
||||
|
||||
void qemu_start_incoming_migration(const char *uri, Error **errp);
|
||||
|
||||
void migration_tls_channel_process_incoming(MigrationState *s,
|
||||
QIOChannel *ioc,
|
||||
Error **errp);
|
||||
|
||||
void migration_tls_channel_connect(MigrationState *s,
|
||||
QIOChannel *ioc,
|
||||
const char *hostname,
|
||||
Error **errp);
|
||||
|
||||
uint64_t migrate_max_downtime(void);
|
||||
|
||||
void exec_start_incoming_migration(const char *host_port, Error **errp);
|
||||
|
||||
void exec_start_outgoing_migration(MigrationState *s, const char *host_port, Error **errp);
|
||||
|
||||
void tcp_start_incoming_migration(const char *host_port, Error **errp);
|
||||
|
||||
void tcp_start_outgoing_migration(MigrationState *s, const char *host_port, Error **errp);
|
||||
|
||||
void unix_start_incoming_migration(const char *path, Error **errp);
|
||||
|
||||
void unix_start_outgoing_migration(MigrationState *s, const char *path, Error **errp);
|
||||
|
||||
void fd_start_incoming_migration(const char *path, Error **errp);
|
||||
|
||||
void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp);
|
||||
|
||||
void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error **errp);
|
||||
|
||||
void rdma_start_incoming_migration(const char *host_port, Error **errp);
|
||||
|
||||
void migrate_fd_error(MigrationState *s, const Error *error);
|
||||
|
||||
void migrate_fd_connect(MigrationState *s);
|
||||
@@ -206,38 +171,6 @@ bool migration_in_postcopy(void);
|
||||
bool migration_in_postcopy_after_devices(MigrationState *);
|
||||
MigrationState *migrate_get_current(void);
|
||||
|
||||
void migrate_compress_threads_create(void);
|
||||
void migrate_compress_threads_join(void);
|
||||
void migrate_decompress_threads_create(void);
|
||||
void migrate_decompress_threads_join(void);
|
||||
uint64_t ram_bytes_remaining(void);
|
||||
uint64_t ram_bytes_transferred(void);
|
||||
uint64_t ram_bytes_total(void);
|
||||
uint64_t ram_dirty_sync_count(void);
|
||||
uint64_t ram_dirty_pages_rate(void);
|
||||
uint64_t ram_postcopy_requests(void);
|
||||
void free_xbzrle_decoded_buf(void);
|
||||
|
||||
void acct_update_position(QEMUFile *f, size_t size, bool zero);
|
||||
|
||||
uint64_t dup_mig_pages_transferred(void);
|
||||
uint64_t norm_mig_pages_transferred(void);
|
||||
uint64_t xbzrle_mig_bytes_transferred(void);
|
||||
uint64_t xbzrle_mig_pages_transferred(void);
|
||||
uint64_t xbzrle_mig_pages_overflow(void);
|
||||
uint64_t xbzrle_mig_pages_cache_miss(void);
|
||||
double xbzrle_mig_cache_miss_rate(void);
|
||||
|
||||
void ram_handle_compressed(void *host, uint8_t ch, uint64_t size);
|
||||
void ram_debug_dump_bitmap(unsigned long *todump, bool expected,
|
||||
unsigned long pages);
|
||||
/* For outgoing discard bitmap */
|
||||
int ram_postcopy_send_discard_bitmap(MigrationState *ms);
|
||||
/* For incoming postcopy discard */
|
||||
int ram_discard_range(const char *block_name, uint64_t start, size_t length);
|
||||
int ram_postcopy_incoming_init(MigrationIncomingState *mis);
|
||||
void ram_postcopy_migrated_memory_release(MigrationState *ms);
|
||||
|
||||
bool migrate_release_ram(void);
|
||||
bool migrate_postcopy_ram(void);
|
||||
bool migrate_zero_blocks(void);
|
||||
@@ -248,8 +181,6 @@ int migrate_use_xbzrle(void);
|
||||
int64_t migrate_xbzrle_cache_size(void);
|
||||
bool migrate_colo_enabled(void);
|
||||
|
||||
int64_t xbzrle_cache_resize(int64_t new_size);
|
||||
|
||||
bool migrate_use_block(void);
|
||||
bool migrate_use_block_incremental(void);
|
||||
|
||||
@@ -288,7 +219,6 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
|
||||
ram_addr_t offset, size_t size,
|
||||
uint64_t *bytes_sent);
|
||||
|
||||
void ram_mig_init(void);
|
||||
void savevm_skip_section_footers(void);
|
||||
void register_global_state(void);
|
||||
void global_state_set_optional(void);
|
||||
@@ -296,7 +226,4 @@ void savevm_skip_configuration(void);
|
||||
int global_state_store(void);
|
||||
void global_state_store_running(void);
|
||||
|
||||
void migration_page_queue_free(void);
|
||||
int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len);
|
||||
uint64_t ram_pagesize_summary(void);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* QEMU migration miscellaneus exported functions
|
||||
*
|
||||
* Copyright IBM, Corp. 2008
|
||||
*
|
||||
* Authors:
|
||||
* Anthony Liguori <aliguori@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MIGRATION_MISC_H
|
||||
#define MIGRATION_MISC_H
|
||||
|
||||
/* migration/ram.c */
|
||||
|
||||
void ram_mig_init(void);
|
||||
|
||||
/* migration/block.c */
|
||||
|
||||
#ifdef CONFIG_LIVE_BLOCK_MIGRATION
|
||||
void blk_mig_init(void);
|
||||
#else
|
||||
static inline void blk_mig_init(void) {}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* QEMU System Emulator
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef QEMU_FILE_H
|
||||
#define QEMU_FILE_H
|
||||
|
||||
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size);
|
||||
void qemu_put_byte(QEMUFile *f, int v);
|
||||
|
||||
#define qemu_put_sbyte qemu_put_byte
|
||||
|
||||
void qemu_put_be16(QEMUFile *f, unsigned int v);
|
||||
void qemu_put_be32(QEMUFile *f, unsigned int v);
|
||||
void qemu_put_be64(QEMUFile *f, uint64_t v);
|
||||
size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size);
|
||||
|
||||
int qemu_get_byte(QEMUFile *f);
|
||||
|
||||
static inline unsigned int qemu_get_ubyte(QEMUFile *f)
|
||||
{
|
||||
return (unsigned int)qemu_get_byte(f);
|
||||
}
|
||||
|
||||
#define qemu_get_sbyte qemu_get_byte
|
||||
|
||||
unsigned int qemu_get_be16(QEMUFile *f);
|
||||
unsigned int qemu_get_be32(QEMUFile *f);
|
||||
uint64_t qemu_get_be64(QEMUFile *f);
|
||||
|
||||
static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
|
||||
{
|
||||
qemu_put_be64(f, *pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
|
||||
{
|
||||
qemu_put_be32(f, *pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
|
||||
{
|
||||
qemu_put_be16(f, *pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
|
||||
{
|
||||
qemu_put_byte(f, *pv);
|
||||
}
|
||||
|
||||
static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
|
||||
{
|
||||
*pv = qemu_get_be64(f);
|
||||
}
|
||||
|
||||
static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
|
||||
{
|
||||
*pv = qemu_get_be32(f);
|
||||
}
|
||||
|
||||
static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
|
||||
{
|
||||
*pv = qemu_get_be16(f);
|
||||
}
|
||||
|
||||
static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
|
||||
{
|
||||
*pv = qemu_get_byte(f);
|
||||
}
|
||||
|
||||
/* Signed versions for type safety */
|
||||
static inline void qemu_put_sbe16(QEMUFile *f, int v)
|
||||
{
|
||||
qemu_put_be16(f, (unsigned int)v);
|
||||
}
|
||||
|
||||
static inline void qemu_put_sbe32(QEMUFile *f, int v)
|
||||
{
|
||||
qemu_put_be32(f, (unsigned int)v);
|
||||
}
|
||||
|
||||
static inline void qemu_put_sbe64(QEMUFile *f, int64_t v)
|
||||
{
|
||||
qemu_put_be64(f, (uint64_t)v);
|
||||
}
|
||||
|
||||
static inline int qemu_get_sbe16(QEMUFile *f)
|
||||
{
|
||||
return (int)qemu_get_be16(f);
|
||||
}
|
||||
|
||||
static inline int qemu_get_sbe32(QEMUFile *f)
|
||||
{
|
||||
return (int)qemu_get_be32(f);
|
||||
}
|
||||
|
||||
static inline int64_t qemu_get_sbe64(QEMUFile *f)
|
||||
{
|
||||
return (int64_t)qemu_get_be64(f);
|
||||
}
|
||||
|
||||
static inline void qemu_put_s8s(QEMUFile *f, const int8_t *pv)
|
||||
{
|
||||
qemu_put_8s(f, (const uint8_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_sbe16s(QEMUFile *f, const int16_t *pv)
|
||||
{
|
||||
qemu_put_be16s(f, (const uint16_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_sbe32s(QEMUFile *f, const int32_t *pv)
|
||||
{
|
||||
qemu_put_be32s(f, (const uint32_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_put_sbe64s(QEMUFile *f, const int64_t *pv)
|
||||
{
|
||||
qemu_put_be64s(f, (const uint64_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_get_s8s(QEMUFile *f, int8_t *pv)
|
||||
{
|
||||
qemu_get_8s(f, (uint8_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_get_sbe16s(QEMUFile *f, int16_t *pv)
|
||||
{
|
||||
qemu_get_be16s(f, (uint16_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_get_sbe32s(QEMUFile *f, int32_t *pv)
|
||||
{
|
||||
qemu_get_be32s(f, (uint32_t *)pv);
|
||||
}
|
||||
|
||||
static inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv)
|
||||
{
|
||||
qemu_get_be64s(f, (uint64_t *)pv);
|
||||
}
|
||||
|
||||
int qemu_file_rate_limit(QEMUFile *f);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* QEMU snapshots
|
||||
*
|
||||
* Copyright (c) 2004-2008 Fabrice Bellard
|
||||
* Copyright (c) 2009-2015 Red Hat Inc
|
||||
*
|
||||
* Authors:
|
||||
* Juan Quintela <quintela@redhat.com>
|
||||
*
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef QEMU_MIGRATION_SNAPSHOT_H
|
||||
#define QEMU_MIGRATION_SNAPSHOT_H
|
||||
|
||||
int save_snapshot(const char *name, Error **errp);
|
||||
int load_snapshot(const char *name, Error **errp);
|
||||
|
||||
#endif
|
||||
@@ -1020,8 +1020,6 @@ extern const VMStateInfo vmstate_info_qtailq;
|
||||
|
||||
#define SELF_ANNOUNCE_ROUNDS 5
|
||||
|
||||
void loadvm_free_handlers(MigrationIncomingState *mis);
|
||||
|
||||
int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
|
||||
void *opaque, int version_id);
|
||||
void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
|
||||
|
||||
@@ -39,7 +39,6 @@ typedef struct I2SCodec I2SCodec;
|
||||
typedef struct ISABus ISABus;
|
||||
typedef struct ISADevice ISADevice;
|
||||
typedef struct IsaDma IsaDma;
|
||||
typedef struct LoadStateEntry LoadStateEntry;
|
||||
typedef struct MACAddr MACAddr;
|
||||
typedef struct MachineClass MachineClass;
|
||||
typedef struct MachineState MachineState;
|
||||
|
||||
@@ -92,9 +92,6 @@ void qemu_remove_exit_notifier(Notifier *notify);
|
||||
void qemu_add_machine_init_done_notifier(Notifier *notify);
|
||||
void qemu_remove_machine_init_done_notifier(Notifier *notify);
|
||||
|
||||
int save_vmstate(const char *name, Error **errp);
|
||||
int load_vmstate(const char *name, Error **errp);
|
||||
|
||||
void qemu_announce_self(void);
|
||||
|
||||
extern int autostart;
|
||||
|
||||
+3
-2
@@ -23,10 +23,11 @@
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "migration/block.h"
|
||||
#include "block.h"
|
||||
#include "migration/misc.h"
|
||||
#include "migration/migration.h"
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "migration/qemu-file.h"
|
||||
#include "qemu-file.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
|
||||
|
||||
@@ -15,14 +15,12 @@
|
||||
#define MIGRATION_BLOCK_H
|
||||
|
||||
#ifdef CONFIG_LIVE_BLOCK_MIGRATION
|
||||
void blk_mig_init(void);
|
||||
int blk_mig_active(void);
|
||||
uint64_t blk_mig_bytes_transferred(void);
|
||||
uint64_t blk_mig_bytes_remaining(void);
|
||||
uint64_t blk_mig_bytes_total(void);
|
||||
|
||||
#else
|
||||
static inline void blk_mig_init(void) { }
|
||||
static inline int blk_mig_active(void)
|
||||
{
|
||||
return false;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user