@@ -555,18 +555,16 @@ static int pt_exp_rom_bar_reg_write(XenPCIPassthroughState *s,
XenPTReg *reg_entry = NULL;
XenPTRegion *base = NULL;
PCIDevice *d = (PCIDevice *)&s->dev;
- PCIIORegion *r;
uint32_t writable_mask = 0;
uint32_t throughable_mask = 0;
pcibus_t r_size = 0;
uint32_t bar_emu_mask = 0;
uint32_t bar_ro_mask = 0;
- r = &d->io_regions[PCI_ROM_SLOT];
- r_size = r->size;
+ r_size = d->io_regions[PCI_ROM_SLOT].size;
base = &s->bases[PCI_ROM_SLOT];
/* align memory type resource size */
- pt_get_emul_size(base->bar_flag, r_size);
+ r_size = pt_get_emul_size(base->bar_flag, r_size);
/* set emulate mask and read-only mask */
bar_emu_mask = reg->emu_mask;
@@ -576,19 +574,6 @@ static int pt_exp_rom_bar_reg_write(XenPCIPassthroughState *s,
writable_mask = ~bar_ro_mask & valid_mask;
cfg_entry->data = PT_MERGE_VALUE(*value, cfg_entry->data, writable_mask);
- /* update the corresponding virtual region address */
- /*
- * When guest code tries to get block size of mmio, it will write all "1"s
- * into pci bar register. In this case, cfg_entry->data == writable_mask.
- * Especially for devices with large mmio, the value of writable_mask
- * is likely to be a guest physical address that has been mapped to ram
- * rather than mmio. Remapping this value to mmio should be prevented.
- */
-
- if (cfg_entry->data != writable_mask) {
- r->addr = cfg_entry->data;
- }
-
/* create value for writing to I/O device register */
throughable_mask = ~bar_emu_mask & valid_mask;
*value = PT_MERGE_VALUE(*value, dev_value, throughable_mask);