Revert "memory_range_lock: Enable interrupt when trylock fails"

This reverts commit 0d3ef65092.

Reason for revert: This fix causes circular dependency with memory_range manipulation and TLB flush. See #1394.

Change-Id: I4774e81ff300c199629e283e538c0a30ad0eeaae
This commit is contained in:
Masamichi Takagi
2019-09-20 07:18:15 +00:00
committed by Ken Sato
parent 41d37bcd30
commit edd3ea0103
12 changed files with 102 additions and 393 deletions

View File

@@ -174,7 +174,6 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
int err = -EIO;
struct mckernel_procfs_buffer *buf_top = NULL;
struct mckernel_procfs_buffer *buf_cur = NULL;
unsigned long irqflags;
dprintf("process_procfs_request: invoked.\n");
@@ -420,7 +419,7 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
if (strcmp(p, "maps") == 0) {
struct vm_range *range;
memory_range_read_lock(vm, &irqflags);
ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock);
range = lookup_process_memory_range(vm, 0, -1);
while (range) {
@@ -456,13 +455,13 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
if (ans < 0 || ans > count ||
buf_add(&buf_top, &buf_cur, buf, ans) < 0) {
memory_range_read_unlock(vm, &irqflags);
ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock);
goto err;
}
range = next_process_memory_range(vm, range);
}
memory_range_read_unlock(vm, &irqflags);
ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock);
ans = 0;
goto end;
@@ -485,7 +484,7 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
start = (offset / sizeof(uint64_t)) << PAGE_SHIFT;
end = start + ((count / sizeof(uint64_t)) << PAGE_SHIFT);
memory_range_read_lock(vm, &irqflags);
ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock);
while (start < end) {
*_buf = ihk_mc_pt_virt_to_pagemap(proc->vm->address_space->page_table, start);
@@ -495,7 +494,7 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
++_buf;
}
memory_range_read_unlock(vm, &irqflags);
ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock);
dprintf("/proc/pagemap: 0x%lx - 0x%lx, count: %d\n",
start, end, count);
@@ -527,14 +526,14 @@ int process_procfs_request(struct ikc_scd_packet *rpacket)
goto err;
}
memory_range_read_lock(proc->vm, &irqflags);
ihk_mc_spinlock_lock_noirq(&proc->vm->memory_range_lock);
range = lookup_process_memory_range(vm, 0, -1);
while (range) {
if(range->flag & VR_LOCKED)
lockedsize += range->end - range->start;
range = next_process_memory_range(vm, range);
}
memory_range_read_unlock(proc->vm, &irqflags);
ihk_mc_spinlock_unlock_noirq(&proc->vm->memory_range_lock);
cpu_bitmask = &bitmasks[bitmasks_offset];
bitmasks_offset += bitmap_scnprintf(cpu_bitmask,