> -----Original Message----- > From: Don Dutile [mailto:ddutile@xxxxxxxxxx] > Sent: Thursday, May 31, 2012 12:13 AM > To: Xudong Hao > Cc: bhelgaas@xxxxxxxxxx; linux-pci@xxxxxxxxxxxxxxx; > linux-kernel@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; avi@xxxxxxxxxx; > alex.williamson@xxxxxxxxxx; Zhang, Xiantao; Hao, Xudong > Subject: Re: [PATCH 1/1] Enable LTR/OBFF before device is used by driver > > While you are making the other recommended fixes, could > you add/create a pci_obff_supported() function, like the pci_ltr_supported() > function, and more importantly, add it to the pci_disable_obff() function? > The latter does not check that DEVCAP2 is supported, and thus, could be > writing to non-existent (potentially private) cap space (i.e., a V1 CAP device, > which do exist in the marketplace). > > The [enable,disable]_ltr functions do a good job of doing pci_ltr_supported() > checks, but the obff enable,disable functions should have similar calls. > Yeah, it's a good suggestion, I'll add pci_obff_supported() function. > > On 05/13/2012 10:48 PM, Xudong Hao wrote: > > Enable LTR(Latency tolerance reporting) and OBFF(optimized buffer flush/fill) > in > > pci_enable_device(), so that they are enabled before the device is used by > driver. > > > > Signed-off-by: Xudong Hao<xudong.hao@xxxxxxxxx> > > > > --- > > drivers/pci/pci.c | 29 +++++++++++++++++++++++++++++ > > 1 files changed, 29 insertions(+), 0 deletions(-) > > > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > > index 111569c..2369883 100644 > > --- a/drivers/pci/pci.c > > +++ b/drivers/pci/pci.c > > @@ -1134,6 +1134,31 @@ int pci_load_and_free_saved_state(struct > pci_dev *dev, > > } > > EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state); > > > > +static void pci_enable_dev_caps(struct pci_dev *dev) > > +{ > > + /* set default value */ > > + unsigned long type = PCI_EXP_OBFF_SIGNAL_ALWAYS; > > + > > + /* LTR(Latency tolerance reporting) allows devices to send > > + * messages to the root complex indicating their latency > > + * tolerance for snooped& unsnooped memory transactions. > > + */ > > + pci_enable_ltr(dev); > > + > > + /* OBFF (optimized buffer flush/fill), where supported, > > + * can help improve energy efficiency by giving devices > > + * information about when interrupts and other activity > > + * will have a reduced power impact. > > + */ > > + pci_enable_obff(dev, type); > > +} > > + > > +static void pci_disable_dev_caps(struct pci_dev *dev) > > +{ > > + pci_disable_obff(dev); > > + pci_disable_ltr(dev); > > +} > > + > > static int do_pci_enable_device(struct pci_dev *dev, int bars) > > { > > int err; > > @@ -1146,6 +1171,9 @@ static int do_pci_enable_device(struct pci_dev > *dev, int bars) > > return err; > > pci_fixup_device(pci_fixup_enable, dev); > > > > + /* Enable some device capibility before it's used by driver. */ > > + pci_enable_dev_caps(dev); > > + > > return 0; > > } > > > > @@ -1361,6 +1389,7 @@ static void do_pci_disable_device(struct pci_dev > *dev) > > } > > > > pcibios_disable_device(dev); > > + pci_disable_dev_caps(dev); > > } > > > > /** > > -- > > 1.6.0.rc1 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html