[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v3][PATCH 07/16] hvmloader/pci: skip reserved ranges
>>> On 16.06.15 at 11:29, <tiejun.chen@xxxxxxxxx> wrote: > I'm trying to walk into this direction: > > /* > * We'll skip all space overlapping with reserved memory later, > * so we need to increase mmio_total to compensate them. > */ > for ( j = 0; j < memory_map.nr_map ; j++ ) > { > uint64_t conflict_size = 0; > if ( memory_map.map[j].type != E820_RAM ) > { > reserved_start = memory_map.map[j].addr; > reserved_size = memory_map.map[j].size; > reserved_end = reserved_start + reserved_size; > if ( check_overlap(pci_mem_start, pci_mem_end - pci_mem_start, > reserved_start, reserved_size) ) > { > /* > * Calculate how much mmio range conflict with > * reserved device memory. > */ > conflict_size += reserved_size; > > /* > * But we may need to subtract those sizes beyond the > * pci memory, [pci_mem_start, pci_mem_end]. > */ > if ( reserved_start < pci_mem_start ) > conflict_size -= (pci_mem_start - reserved_start); > if ( reserved_end > pci_mem_end ) > conflict_size -= (reserved_end - pci_mem_end); > } > } > > if ( conflict_size ) > { > uint64_t conflict_size = max_t( > uint64_t, conflict_size, max_bar_sz); > conflict_size &= ~(conflict_size - 1); > mmio_total += conflict_size; > } > } This last thing goes in the right direction, but is complete overkill when you have a small reserved region and a huge BAR. You ought to work out the smallest power-of-2 region enclosing the reserved range (albeit there are tricky corner cases to consider). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |