Lines Matching refs:mb_id
210 static unsigned long virtio_mem_mb_id_to_phys(unsigned long mb_id)
212 return mb_id * memory_block_size_bytes();
221 const unsigned long mb_id = virtio_mem_phys_to_mb_id(addr);
222 const unsigned long mb_addr = virtio_mem_mb_id_to_phys(mb_id);
230 static void virtio_mem_mb_set_state(struct virtio_mem *vm, unsigned long mb_id,
233 const unsigned long idx = mb_id - vm->first_mb_id;
248 unsigned long mb_id)
250 const unsigned long idx = mb_id - vm->first_mb_id;
301 unsigned long mb_id, int sb_id,
304 const int bit = (mb_id - vm->first_mb_id) * vm->nb_sb_per_mb + sb_id;
315 unsigned long mb_id, int sb_id,
318 const int bit = (mb_id - vm->first_mb_id) * vm->nb_sb_per_mb + sb_id;
327 unsigned long mb_id, int sb_id,
330 const int bit = (mb_id - vm->first_mb_id) * vm->nb_sb_per_mb + sb_id;
344 unsigned long mb_id, int sb_id,
347 const int bit = (mb_id - vm->first_mb_id) * vm->nb_sb_per_mb + sb_id;
358 unsigned long mb_id)
360 const int bit = (mb_id - vm->first_mb_id) * vm->nb_sb_per_mb;
406 static int virtio_mem_mb_add(struct virtio_mem *vm, unsigned long mb_id)
408 const uint64_t addr = virtio_mem_mb_id_to_phys(mb_id);
425 dev_dbg(&vm->vdev->dev, "adding memory block: %lu\n", mb_id);
440 static int virtio_mem_mb_remove(struct virtio_mem *vm, unsigned long mb_id)
442 const uint64_t addr = virtio_mem_mb_id_to_phys(mb_id);
448 dev_dbg(&vm->vdev->dev, "removing memory block: %lu\n", mb_id);
461 unsigned long mb_id)
463 const uint64_t addr = virtio_mem_mb_id_to_phys(mb_id);
470 mb_id);
516 static bool virtio_mem_owned_mb(struct virtio_mem *vm, unsigned long mb_id)
518 return mb_id >= vm->first_mb_id && mb_id <= vm->last_mb_id;
522 unsigned long mb_id)
524 switch (virtio_mem_mb_get_state(vm, mb_id)) {
537 unsigned long mb_id)
539 switch (virtio_mem_mb_get_state(vm, mb_id)) {
541 virtio_mem_mb_set_state(vm, mb_id,
545 virtio_mem_mb_set_state(vm, mb_id,
563 static void virtio_mem_notify_online(struct virtio_mem *vm, unsigned long mb_id)
567 switch (virtio_mem_mb_get_state(vm, mb_id)) {
569 virtio_mem_mb_set_state(vm, mb_id,
573 virtio_mem_mb_set_state(vm, mb_id, VIRTIO_MEM_MB_STATE_ONLINE);
588 unsigned long mb_id)
596 if (virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id, 1))
604 pfn = PFN_DOWN(virtio_mem_mb_id_to_phys(mb_id) +
616 unsigned long mb_id)
623 if (virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id, 1))
630 pfn = PFN_DOWN(virtio_mem_mb_id_to_phys(mb_id) +
651 const unsigned long mb_id = virtio_mem_phys_to_mb_id(start);
683 virtio_mem_notify_going_offline(vm, mb_id);
693 rc = virtio_mem_notify_going_online(vm, mb_id);
696 virtio_mem_notify_offline(vm, mb_id);
701 virtio_mem_notify_online(vm, mb_id);
708 virtio_mem_notify_cancel_offline(vm, mb_id);
800 const unsigned long mb_id = virtio_mem_phys_to_mb_id(addr);
812 if (!virtio_mem_owned_mb(vm, mb_id))
820 if (virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id, 1))
942 static int virtio_mem_mb_plug_sb(struct virtio_mem *vm, unsigned long mb_id,
945 const uint64_t addr = virtio_mem_mb_id_to_phys(mb_id) +
950 dev_dbg(&vm->vdev->dev, "plugging memory block: %lu : %i - %i\n", mb_id,
955 virtio_mem_mb_set_sb_plugged(vm, mb_id, sb_id, count);
963 static int virtio_mem_mb_unplug_sb(struct virtio_mem *vm, unsigned long mb_id,
966 const uint64_t addr = virtio_mem_mb_id_to_phys(mb_id) +
972 mb_id, sb_id, sb_id + count - 1);
976 virtio_mem_mb_set_sb_unplugged(vm, mb_id, sb_id, count);
990 unsigned long mb_id, uint64_t *nb_sb)
999 virtio_mem_mb_test_sb_unplugged(vm, mb_id, sb_id, 1))
1006 virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id - 1, 1)) {
1011 rc = virtio_mem_mb_unplug_sb(vm, mb_id, sb_id, count);
1028 static int virtio_mem_mb_unplug(struct virtio_mem *vm, unsigned long mb_id)
1032 return virtio_mem_mb_unplug_any_sb(vm, mb_id, &nb_sb);
1039 unsigned long *mb_id)
1057 *mb_id = vm->next_mb_id++;
1080 unsigned long mb_id,
1093 rc = virtio_mem_mb_plug_sb(vm, mb_id, 0, count);
1102 virtio_mem_mb_set_state(vm, mb_id,
1105 virtio_mem_mb_set_state(vm, mb_id,
1109 rc = virtio_mem_mb_add(vm, mb_id);
1114 "adding memory block %lu failed with %d\n", mb_id, rc);
1115 rc2 = virtio_mem_mb_unplug_sb(vm, mb_id, 0, count);
1123 virtio_mem_mb_set_state(vm, mb_id, new_state);
1139 static int virtio_mem_mb_plug_any_sb(struct virtio_mem *vm, unsigned long mb_id,
1150 sb_id = virtio_mem_mb_first_unplugged_sb(vm, mb_id);
1156 !virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id + count,
1160 rc = virtio_mem_mb_plug_sb(vm, mb_id, sb_id, count);
1168 pfn = PFN_DOWN(virtio_mem_mb_id_to_phys(mb_id) +
1174 if (virtio_mem_mb_test_sb_plugged(vm, mb_id, 0, vm->nb_sb_per_mb)) {
1176 virtio_mem_mb_set_state(vm, mb_id,
1179 virtio_mem_mb_set_state(vm, mb_id,
1192 unsigned long mb_id;
1202 virtio_mem_for_each_mb_state(vm, mb_id,
1204 rc = virtio_mem_mb_plug_any_sb(vm, mb_id, &nb_sb, true);
1211 virtio_mem_for_each_mb_state(vm, mb_id,
1213 rc = virtio_mem_mb_plug_any_sb(vm, mb_id, &nb_sb, false);
1226 virtio_mem_for_each_mb_state(vm, mb_id, VIRTIO_MEM_MB_STATE_UNUSED) {
1230 rc = virtio_mem_mb_plug_and_add(vm, mb_id, &nb_sb);
1241 rc = virtio_mem_prepare_next_mb(vm, &mb_id);
1244 rc = virtio_mem_mb_plug_and_add(vm, mb_id, &nb_sb);
1266 unsigned long mb_id,
1271 rc = virtio_mem_mb_unplug_any_sb(vm, mb_id, nb_sb);
1274 if (!virtio_mem_mb_test_sb_plugged(vm, mb_id, 0, vm->nb_sb_per_mb))
1275 virtio_mem_mb_set_state(vm, mb_id,
1280 if (virtio_mem_mb_test_sb_unplugged(vm, mb_id, 0, vm->nb_sb_per_mb)) {
1287 virtio_mem_mb_set_state(vm, mb_id,
1291 rc = virtio_mem_mb_remove(vm, mb_id);
1304 unsigned long mb_id, int sb_id,
1311 start_pfn = PFN_DOWN(virtio_mem_mb_id_to_phys(mb_id) +
1326 rc = virtio_mem_mb_unplug_sb(vm, mb_id, sb_id, count);
1333 virtio_mem_mb_set_state(vm, mb_id,
1349 unsigned long mb_id,
1356 virtio_mem_mb_test_sb_plugged(vm, mb_id, 0, vm->nb_sb_per_mb)) {
1357 rc = virtio_mem_mb_unplug_sb_online(vm, mb_id, 0,
1370 !virtio_mem_mb_test_sb_plugged(vm, mb_id, sb_id, 1))
1375 rc = virtio_mem_mb_unplug_sb_online(vm, mb_id, sb_id, 1);
1389 if (virtio_mem_mb_test_sb_unplugged(vm, mb_id, 0, vm->nb_sb_per_mb)) {
1391 rc = virtio_mem_mb_offline_and_remove(vm, mb_id);
1394 virtio_mem_mb_set_state(vm, mb_id,
1407 unsigned long mb_id;
1421 virtio_mem_for_each_mb_state_rev(vm, mb_id,
1423 rc = virtio_mem_mb_unplug_any_sb_offline(vm, mb_id,
1431 virtio_mem_for_each_mb_state_rev(vm, mb_id,
1433 rc = virtio_mem_mb_unplug_any_sb_offline(vm, mb_id,
1446 virtio_mem_for_each_mb_state_rev(vm, mb_id,
1448 rc = virtio_mem_mb_unplug_any_sb_online(vm, mb_id,
1458 virtio_mem_for_each_mb_state_rev(vm, mb_id,
1460 rc = virtio_mem_mb_unplug_any_sb_online(vm, mb_id,
1482 unsigned long mb_id;
1485 virtio_mem_for_each_mb_state(vm, mb_id, VIRTIO_MEM_MB_STATE_PLUGGED) {
1486 rc = virtio_mem_mb_unplug(vm, mb_id);
1489 virtio_mem_mb_set_state(vm, mb_id, VIRTIO_MEM_MB_STATE_UNUSED);
1835 unsigned long mb_id;
1856 virtio_mem_for_each_mb_state(vm, mb_id,
1858 rc = virtio_mem_mb_remove(vm, mb_id);
1860 virtio_mem_mb_set_state(vm, mb_id, VIRTIO_MEM_MB_STATE_UNUSED);