[bug report] KVM: s390: vsie: support transactional execution

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Old warnings because this is non-x86 - dan ]

Hello David Hildenbrand,

The patch 166ecb3d3cfe: "KVM: s390: vsie: support transactional
execution" from Nov 25, 2015, leads to the following static checker
warning:

	arch/s390/kvm/vsie.c:581 pin_blocks()
	warn: was expecting a 64 bit value instead of '~8191'

arch/s390/kvm/vsie.c
   548  static int pin_blocks(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
   549  {
   550          struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
   551          struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
   552          hpa_t hpa;
   553          gpa_t gpa;
                ^^^^^
gpa_t is a u64.

   554          int rc = 0;
   555  
   556          gpa = READ_ONCE(scb_o->scaol) & ~0xfUL;
   557          if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_64BSCAO))
   558                  gpa |= (u64) READ_ONCE(scb_o->scaoh) << 32;
   559          if (gpa) {
   560                  if (!(gpa & ~0x1fffUL))
   561                          rc = set_validity_icpt(scb_s, 0x0038U);
   562                  else if ((gpa & ~0x1fffUL) == kvm_s390_get_prefix(vcpu))
   563                          rc = set_validity_icpt(scb_s, 0x0011U);
   564                  else if ((gpa & PAGE_MASK) !=
   565                           ((gpa + sizeof(struct bsca_block) - 1) & PAGE_MASK))
   566                          rc = set_validity_icpt(scb_s, 0x003bU);
   567                  if (!rc) {
   568                          rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
   569                          if (rc)
   570                                  rc = set_validity_icpt(scb_s, 0x0034U);
   571                  }
   572                  if (rc)
   573                          goto unpin;
   574                  vsie_page->sca_gpa = gpa;
   575                  scb_s->scaoh = (u32)((u64)hpa >> 32);
   576                  scb_s->scaol = (u32)(u64)hpa;
   577          }
   578  
   579          gpa = READ_ONCE(scb_o->itdba) & ~0xffUL;
                                                 ^^^^^
Here it's UL.

   580          if (gpa && (scb_s->ecb & ECB_TE)) {
   581                  if (!(gpa & ~0x1fffU)) {
                                   ^^^^^^^^^
But here it's u32.  So the high 32 bits are not considered.  Possibly it
doesn't matter?

   582                          rc = set_validity_icpt(scb_s, 0x0080U);
   583                          goto unpin;
   584                  }
   585                  /* 256 bytes cannot cross page boundaries */
   586                  rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
   587                  if (rc) {
   588                          rc = set_validity_icpt(scb_s, 0x0080U);
   589                          goto unpin;
   590                  }
   591                  vsie_page->itdba_gpa = gpa;
   592                  scb_s->itdba = hpa;

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-s390" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux