Re: [kvm-unit-tests PATCH v4 6/5] pci: Add BAR sanity checks

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

 



On Wed, Mar 08, 2017 at 11:10:26AM +0100, Andrew Jones wrote:
> > > > -void pci_bar_set_addr(struct pci_dev *dev, int bar_num, phys_addr_t addr)
> > > > +void pci_bar_set_addr(struct pci_dev *dev,
> > > > +		      unsigned int bar_num, phys_addr_t addr)
> > > >  {
> > > >  	int off = PCI_BASE_ADDRESS_0 + bar_num * 4;
> > > >  
> > > > +	CHECK_BAR_NUM(bar_num);
> > > > +	assert(addr != INVALID_PHYS_ADDR);
> > > 
> > > Shouldn't this be something like
> > > 
> > >  assert((addr & PHYS_MASK) == addr)
> > 
> > Nope. At this stage PCI bus is scanned and pci_dev::resource[]
> > is initialized with proper values. A value of INVALID_PHYS_ADDR in
> > dev->resource[bar_num] indicates BAR #bar_num is not implemented.
> > Thus, we do not want to screw up this assumption with a test case
> > trying to write INVALID_PHYS_ADDR to a the BAR.
> 
> Of course, by why would any other invalid phys addr be OK? Hmm, maybe
> it should be allowed for test case purposes.

Yeah, I think it should be allowed.

> > > But that means we need to ensure all architectures define PHYS_MASK...
> > > 
> > > > +	assert(dev->resource[bar_num] != INVALID_PHYS_ADDR);
> > > > +	if (pci_bar_is64(dev, bar_num)) {
> > > > +		assert(bar_num + 1 < PCI_BAR_NUM);
> > > 
> > > Use CHECK_BAR_NUM(bar_num + 1)
> > > 
> > > > +		assert(dev->resource[bar_num] == dev->resource[bar_num + 1]);
> > > 
> > > Can this ever happen without the unit test explicitly messing things up?

No, unless there is really something wrong with the code.

> No answer for this. I don't see the point of an assert that can never
> fail.

So this is code integrity assert, not test case input check.
Do you want me to remove it?

> > > Thanks,
> > > drew



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux