aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2017-04-07 04:50:38 -0400
committerRadim Krčmář <rkrcmar@redhat.com>2017-04-12 14:17:14 -0400
commit9fecaa9e32ae7370878e5967d8874b6f58360b10 (patch)
treeb2d00dd1fef660a22773dd9991d68a4f0fd3dad9
parentdc24d1d2cbfa3f69c74825253d5931d1ff499205 (diff)
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>
-rw-r--r--arch/x86/kvm/i8259.c35
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)
451 return s->elcr; 451 return s->elcr;
452} 452}
453 453
454static int picdev_in_range(gpa_t addr)
455{
456 switch (addr) {
457 case 0x20:
458 case 0x21:
459 case 0xa0:
460 case 0xa1:
461 case 0x4d0:
462 case 0x4d1:
463 return 1;
464 default:
465 return 0;
466 }
467}
468
469static int picdev_write(struct kvm_pic *s, 454static int picdev_write(struct kvm_pic *s,
470 gpa_t addr, int len, const void *val) 455 gpa_t addr, int len, const void *val)
471{ 456{
472 unsigned char data = *(unsigned char *)val; 457 unsigned char data = *(unsigned char *)val;
473 if (!picdev_in_range(addr))
474 return -EOPNOTSUPP;
475 458
476 if (len != 1) { 459 if (len != 1) {
477 pr_pic_unimpl("non byte write\n"); 460 pr_pic_unimpl("non byte write\n");
478 return 0; 461 return 0;
479 } 462 }
480 pic_lock(s);
481 switch (addr) { 463 switch (addr) {
482 case 0x20: 464 case 0x20:
483 case 0x21: 465 case 0x21:
484 case 0xa0: 466 case 0xa0:
485 case 0xa1: 467 case 0xa1:
468 pic_lock(s);
486 pic_ioport_write(&s->pics[addr >> 7], addr, data); 469 pic_ioport_write(&s->pics[addr >> 7], addr, data);
470 pic_unlock(s);
487 break; 471 break;
488 case 0x4d0: 472 case 0x4d0:
489 case 0x4d1: 473 case 0x4d1:
474 pic_lock(s);
490 elcr_ioport_write(&s->pics[addr & 1], addr, data); 475 elcr_ioport_write(&s->pics[addr & 1], addr, data);
476 pic_unlock(s);
491 break; 477 break;
478 default:
479 return -EOPNOTSUPP;
492 } 480 }
493 pic_unlock(s);
494 return 0; 481 return 0;
495} 482}
496 483
@@ -498,29 +485,31 @@ static int picdev_read(struct kvm_pic *s,
498 gpa_t addr, int len, void *val) 485 gpa_t addr, int len, void *val)
499{ 486{
500 unsigned char data = 0; 487 unsigned char data = 0;
501 if (!picdev_in_range(addr))
502 return -EOPNOTSUPP;
503 488
504 if (len != 1) { 489 if (len != 1) {
505 memset(val, 0, len); 490 memset(val, 0, len);
506 pr_pic_unimpl("non byte read\n"); 491 pr_pic_unimpl("non byte read\n");
507 return 0; 492 return 0;
508 } 493 }
509 pic_lock(s);
510 switch (addr) { 494 switch (addr) {
511 case 0x20: 495 case 0x20:
512 case 0x21: 496 case 0x21:
513 case 0xa0: 497 case 0xa0:
514 case 0xa1: 498 case 0xa1:
499 pic_lock(s);
515 data = pic_ioport_read(&s->pics[addr >> 7], addr); 500 data = pic_ioport_read(&s->pics[addr >> 7], addr);
501 pic_unlock(s);
516 break; 502 break;
517 case 0x4d0: 503 case 0x4d0:
518 case 0x4d1: 504 case 0x4d1:
505 pic_lock(s);
519 data = elcr_ioport_read(&s->pics[addr & 1], addr); 506 data = elcr_ioport_read(&s->pics[addr & 1], addr);
507 pic_unlock(s);
520 break; 508 break;
509 default:
510 return -EOPNOTSUPP;
521 } 511 }
522 *(unsigned char *)val = data; 512 *(unsigned char *)val = data;
523 pic_unlock(s);
524 return 0; 513 return 0;
525} 514}
526 515