Lines Matching +full:- +full:- +full:enable +full:- +full:sparse

8  * your option) any later version. See the COPYING file in the top-level
15 #include "hw/s390x/s390-virtio-ccw.h"
16 #include "hw/qdev-properties.h"
17 #include "hw/s390x/storage-keys.h"
19 #include "qapi/qapi-commands-machine.h"
21 #include "qemu/error-report.h"
23 #include "system/address-spaces.h"
25 #include "migration/qemu-file-types.h"
65 rc = kc->get_skeys(ks, start_gfn, count, keys); in s390_skeys_get()
78 rc = kc->set_skeys(ks, start_gfn, count, keys); in s390_skeys_set()
89 uint64_t maxpage = curpage + count - 1; in write_keys()
114 if (!skeyclass->skeys_are_enabled(ss)) { in hmp_info_skeys()
126 r = skeyclass->get_skeys(ss, addr / TARGET_PAGE_SIZE, 1, &key); in hmp_info_skeys()
128 monitor_printf(mon, "Error: %s\n", strerror(-r)); in hmp_info_skeys()
160 if (!skeyclass->skeys_are_enabled(ss)) { in s390_qmp_dump_skeys()
161 error_setg(errp, "This guest is not using storage keys - " in s390_qmp_dump_skeys()
189 assert(QEMU_IS_ALIGNED(block->target_start, TARGET_PAGE_SIZE)); in s390_qmp_dump_skeys()
190 assert(QEMU_IS_ALIGNED(block->target_end, TARGET_PAGE_SIZE)); in s390_qmp_dump_skeys()
192 gfn = block->target_start / TARGET_PAGE_SIZE; in s390_qmp_dump_skeys()
193 pages = (block->target_end - block->target_start) / TARGET_PAGE_SIZE; in s390_qmp_dump_skeys()
198 ret = skeyclass->get_skeys(ss, gfn, cur_pages, buf); in s390_qmp_dump_skeys()
200 error_setg_errno(errp, -ret, "get_keys error"); in s390_qmp_dump_skeys()
211 pages -= cur_pages; in s390_qmp_dump_skeys()
228 return !!skeys->keydata; in qemu_s390_skeys_are_enabled()
236 if (likely(skeys->keydata)) { in qemu_s390_enable_skeys()
245 * over-indication. Let's avoid touching megabytes of data for now and in qemu_s390_enable_skeys()
250 * some sparse data structure. in qemu_s390_enable_skeys()
257 skeys->key_count = s390_get_memory_limit(s390ms) / TARGET_PAGE_SIZE; in qemu_s390_enable_skeys()
258 skeys->keydata = g_malloc0(skeys->key_count); in qemu_s390_enable_skeys()
271 if (unlikely(!skeydev->keydata || start_gfn + count > skeydev->key_count || in qemu_s390_skeys_set()
276 return -EINVAL; in qemu_s390_skeys_set()
280 skeydev->keydata[start_gfn + i] = keys[i]; in qemu_s390_skeys_set()
292 if (unlikely(!skeydev->keydata || start_gfn + count > skeydev->key_count || in qemu_s390_skeys_get()
297 return -EINVAL; in qemu_s390_skeys_get()
301 keys[i] = skeydev->keydata[start_gfn + i]; in qemu_s390_skeys_get()
311 skeyclass->skeys_are_enabled = qemu_s390_skeys_are_enabled; in qemu_s390_skeys_class_init()
312 skeyclass->enable_skeys = qemu_s390_enable_skeys; in qemu_s390_skeys_class_init()
313 skeyclass->get_skeys = qemu_s390_skeys_get; in qemu_s390_skeys_class_init()
314 skeyclass->set_skeys = qemu_s390_skeys_set; in qemu_s390_skeys_class_init()
317 dc->user_creatable = false; in qemu_s390_skeys_class_init()
330 if (!skeyclass->skeys_are_enabled(ss)) { in s390_storage_keys_save()
345 assert(QEMU_IS_ALIGNED(block->target_start, TARGET_PAGE_SIZE)); in s390_storage_keys_save()
346 assert(QEMU_IS_ALIGNED(block->target_end, TARGET_PAGE_SIZE)); in s390_storage_keys_save()
348 gfn = block->target_start / TARGET_PAGE_SIZE; in s390_storage_keys_save()
349 pages = (block->target_end - block->target_start) / TARGET_PAGE_SIZE; in s390_storage_keys_save()
350 qemu_put_be64(f, block->target_start | S390_SKEYS_SAVE_FLAG_SKEYS); in s390_storage_keys_save()
357 error = skeyclass->get_skeys(ss, gfn, cur_pages, buf); in s390_storage_keys_save()
370 pages -= cur_pages; in s390_storage_keys_save()
395 * Make sure to lazy-enable if required to be done explicitly. No need to in s390_storage_keys_load()
398 if (skeyclass->enable_skeys) { in s390_storage_keys_load()
399 skeyclass->enable_skeys(ss); in s390_storage_keys_load()
419 ret = -ENOMEM; in s390_storage_keys_load()
424 cur_count = MIN(total_count - handled_count, in s390_storage_keys_load()
428 ret = skeyclass->set_skeys(ss, cur_gfn, cur_count, buf); in s390_storage_keys_load()
441 ret = -EINVAL; in s390_storage_keys_load()
449 ret = -EINVAL; in s390_storage_keys_load()
472 dc->hotpluggable = false; in s390_skeys_class_init()
473 dc->realize = s390_skeys_realize; in s390_skeys_class_init()
474 set_bit(DEVICE_CATEGORY_MISC, dc->categories); in s390_skeys_class_init()