diff options
author | David Hildenbrand <david@redhat.com> | 2017-04-07 11:50:38 +0300 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-04-12 21:17:14 +0300 |
commit | 9fecaa9e32ae7370878e5967d8874b6f58360b10 (patch) | |
tree | b2d00dd1fef660a22773dd9991d68a4f0fd3dad9 /arch/x86/kvm/i8259.c | |
parent | dc24d1d2cbfa3f69c74825253d5931d1ff499205 (diff) | |
download | linux-9fecaa9e32ae7370878e5967d8874b6f58360b10.tar.xz |
KVM: x86: drop picdev_in_range()
We already have the exact same checks a couple of lines below.
Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Diffstat (limited to 'arch/x86/kvm/i8259.c')
-rw-r--r-- | arch/x86/kvm/i8259.c | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c index 0252e680097c..5b5c87f4d8bd 100644 --- a/arch/x86/kvm/i8259.c +++ b/arch/x86/kvm/i8259.c @@ -451,46 +451,33 @@ static u32 elcr_ioport_read(void *opaque, u32 addr1) return s->elcr; } -static int picdev_in_range(gpa_t addr) -{ - switch (addr) { - case 0x20: - case 0x21: - case 0xa0: - case 0xa1: - case 0x4d0: - case 0x4d1: - return 1; - default: - return 0; - } -} - static int picdev_write(struct kvm_pic *s, gpa_t addr, int len, const void *val) { unsigned char data = *(unsigned char *)val; - if (!picdev_in_range(addr)) - return -EOPNOTSUPP; if (len != 1) { pr_pic_unimpl("non byte write\n"); return 0; } - pic_lock(s); switch (addr) { case 0x20: case 0x21: case 0xa0: case 0xa1: + pic_lock(s); pic_ioport_write(&s->pics[addr >> 7], addr, data); + pic_unlock(s); break; case 0x4d0: case 0x4d1: + pic_lock(s); elcr_ioport_write(&s->pics[addr & 1], addr, data); + pic_unlock(s); break; + default: + return -EOPNOTSUPP; } - pic_unlock(s); return 0; } @@ -498,29 +485,31 @@ static int picdev_read(struct kvm_pic *s, gpa_t addr, int len, void *val) { unsigned char data = 0; - if (!picdev_in_range(addr)) - return -EOPNOTSUPP; if (len != 1) { memset(val, 0, len); pr_pic_unimpl("non byte read\n"); return 0; } - pic_lock(s); switch (addr) { case 0x20: case 0x21: case 0xa0: case 0xa1: + pic_lock(s); data = pic_ioport_read(&s->pics[addr >> 7], addr); + pic_unlock(s); break; case 0x4d0: case 0x4d1: + pic_lock(s); data = elcr_ioport_read(&s->pics[addr & 1], addr); + pic_unlock(s); break; + default: + return -EOPNOTSUPP; } *(unsigned char *)val = data; - pic_unlock(s); return 0; } |