On Tue, 2010-11-02 at 16:07 +0200, Michael S. Tsirkin wrote: > On Tue, Nov 02, 2010 at 08:00:38AM -0600, Alex Williamson wrote: > > On Tue, 2010-11-02 at 11:25 +0200, Michael S. Tsirkin wrote: > > > On Mon, Nov 01, 2010 at 11:37:53PM -0600, Alex Williamson wrote: > > > > Avoid needing to get the MSI capability flags every time we need to > > > > check the capability length. This also makes it accessible outside > > > > of msi.c, making it easier for users to filter config space writes > > > > using msi_cap and msi_cap_size. > > > > > > I think for this last use-case, we are better off with returning a > > > boolean from msi_write_config which tells us whether the write is in > > > range. This has the advantage in that it will also work well for other > > > capabilities. Or second best, if that is insufficient for some reason, > > > export an msi_cap_size function. > > > > Returning whether the write was in range isn't enough. For device > > assignment, I need to know whether the capability was enabled or > > disabled. This currently means checking the enable state before and > > after calling msi_write_config and doing the appropriate backend setup. > > Sounds good. Why does this mean you need the capability size? > bool was_enabled = msi_enabled(dev); > msi_write_config(..) > if (was_enabled != msi_enabled(dev)) { > }
Because this code makes me sad... bool msi_was_enabled, msix_was_enabled, msi_is_enabled, msix_is_enabled; msi_was_enabled = msi_enabled(dev); msix_was_enabled = msix_enabled(dev); pci_default_write_config(... msi_write_config(... msix_write_config(... msi_is_enabled = msi_enabled(dev); msix_is_enabled = msix_enabled(dev); if (msi_was_enabled && !msi_is_enabled) disable_msi(... if (!msi_was_enabled && msi_is_enabled) enable_msi(... if (msix_was_enabled && !msix_is_enabled) disable_msi(... if (!msix_was_enabled && msix_is_enabled) enable_msix(... Confining msi tests to an msi related write and msix tests to an msix related write makes me slightly happier. I really think we need callbacks though so common msi/msix code can figure out if we've made a transition. Alex > > I think the only way I could blindly call the msi/x write config > > routines is if we init the capability with enable/disable callbacks. > > I'd be ok with an msi_cap_size function if we don't want to go that far > > too. What do you prefer? Thanks,