All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1520051649.28771.3.camel@amazon.de>

diff --git a/a/1.txt b/N1/1.txt
index 0af6600..be1e49b 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,74 +1,112 @@
-T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjQ4IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K
-PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozN1BNICswMTAwLCBLYXJpbUFsbGFoIEFo
-bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFVzZSB0aGUgY2FjaGVkIFZGIEJBUnMgc2l6ZSBpbnN0ZWFk
-IG9mIHJlLXJlYWRpbmcgdGhlbSBmcm9tIHRoZSBoYXJkd2FyZS4NCj4gPiBUaGF0IGF2b2lkcyBk
-b2luZyB1bm5lY2Vzc2FyaWx5IGJ1cyB0cmFuc2FjdGlvbnMgd2hpY2ggaXMgc3BlY2lhbGx5DQo+
-ID4gbm90aWNhYmxlIHdoZW4geW91IGhhdmUgYSBQRiB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZG
-cy4NCj4gDQo+IFRoYW5rcyBhIGxvdCBmb3IgYnJlYWtpbmcgdGhpcyBvdXQhICBJdCBzZWVtcyB0
-cml2aWFsLCBidXQgaXQgZGlkIG1ha2UgaXQNCj4gbXVjaCBlYXNpZXIgZm9yIG1lIHRvIHRoaW5r
-IGFib3V0IHRoaXMgb25lLg0KPiANCj4gPiANCj4gPiBDYzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdh
-YXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZw0KPiA+IENj
-OiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1B
-bGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3Bj
-aS9wcm9iZS5jIHwgMjQgKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gIDEgZmlsZSBjaGFu
-Z2VkLCAxOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRpZmYgLS1n
-aXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYw0KPiA+IGluZGV4
-IGE5NjgzN2UuLmFlYWExMGEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYw0K
-PiA+ICsrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMNCj4gPiBAQCAtMTgwLDYgKzE4MCw3IEBAIHN0
-YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWNvZGVfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYs
-IHUzMiBiYXIpDQo+ID4gIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwg
-ZW51bSBwY2lfYmFyX3R5cGUgdHlwZSwNCj4gPiAgCQkgICAgc3RydWN0IHJlc291cmNlICpyZXMs
-IHVuc2lnbmVkIGludCBwb3MpDQo+ID4gIHsNCj4gPiArCWludCBiYXIgPSByZXMgLSBkZXYtPnJl
-c291cmNlOw0KPiA+ICAJdTMyIGwgPSAwLCBzeiA9IDAsIG1hc2s7DQo+ID4gIAl1NjQgbDY0LCBz
-ejY0LCBtYXNrNjQ7DQo+ID4gIAl1MTYgb3JpZ19jbWQ7DQo+ID4gQEAgLTE5OSw5ICsyMDAsMTMg
-QEAgaW50IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJf
-dHlwZSB0eXBlLA0KPiA+ICAJcmVzLT5uYW1lID0gcGNpX25hbWUoZGV2KTsNCj4gPiAgDQo+ID4g
-IAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZsKTsNCj4gPiAtCXBjaV93cml0ZV9j
-b25maWdfZHdvcmQoZGV2LCBwb3MsIGwgfCBtYXNrKTsNCj4gPiAtCXBjaV9yZWFkX2NvbmZpZ19k
-d29yZChkZXYsIHBvcywgJnN6KTsNCj4gPiAtCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBw
-b3MsIGwpOw0KPiA+ICsJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJc3ogPSBkZXYtPnBo
-eXNmbi0+c3Jpb3YtPmJhcnN6W2Jhcl0gJiAweGZmZmZmZmZmOw0KPiA+ICsJfSBlbHNlIHsNCj4g
-PiArCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsIHwgbWFzayk7DQo+ID4gKwkJ
-cGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmc3opOw0KPiA+ICsJCXBjaV93cml0ZV9j
-b25maWdfZHdvcmQoZGV2LCBwb3MsIGwpOw0KPiA+ICsJfQ0KPiANCj4gSSBkb24ndCBxdWl0ZSB1
-bmRlcnN0YW5kIHRoaXMuICBUaGlzIGlzIHJlYWRpbmcgdGhlIHJlZ3VsYXIgQkFScyAoY29uZmln
-DQo+IG9mZnNldHMgMHgxMCwgMHgxNCwgLi4uLCAweDI0KS4gIFBlciBzZWMgOS4zLjQuMS4xMSwg
-dGhlc2UgYXJlIGFsbCBSTyBaZXJvDQo+IGZvciBWRnMuICBUaGF0IHNob3VsZCBtYWtlIHRoZW0g
-bG9vayBsaWtlIHRoZXkncmUgYWxsIHVuaW1wbGVtZW50ZWQuDQo+IA0KPiBCdXQgdGhpcyBwYXRj
-aCBtYWtlcyB1cyB1c2UgdGhlIHNpemUgd2UgZGlzY292ZXJlZCBmcm9tIHRoZSBQRidzIFZGIEJB
-Um4NCj4gcmVnaXN0ZXJzIGluIGl0cyBTUi1JT1YgY2FwYWJpbGl0eS4gIFdvbid0IHRoYXQgY2F1
-c2UgdXMgdG8gZmlsbCBpbiB0aGUNCj4gVkYncyBkZXYtPnJlc291cmNlW25dLCB3aGVuIHdlIGRp
-ZG4ndCBkbyBpdCBiZWZvcmU/DQoNCk9oIC4uIHRoYXQgaXMgY29ycmVjdCEgSSBkaWQgbm90IG5v
-dGljZSB0aGlzIHBhcnQgZnJvbSB0aGUgc3BlYyA6KQ0KDQo+IA0KPiA+IA0KPiA+ICAJLyoNCj4g
-PiAgCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2aWNlIGlzbid0IHdvcmtpbmcg
-cHJvcGVybHkuDQo+ID4gQEAgLTI0MSw5ICsyNDYsMTQgQEAgaW50IF9fcGNpX3JlYWRfYmFzZShz
-dHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0eXBlLA0KPiA+ICANCj4gPiAg
-CWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsNCj4gPiAgCQlwY2lfcmVhZF9j
-b25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7DQo+ID4gLQkJcGNpX3dyaXRlX2NvbmZpZ19k
-d29yZChkZXYsIHBvcyArIDQsIH4wKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2
-LCBwb3MgKyA0LCAmc3opOw0KPiA+IC0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg
-KyA0LCBsKTsNCj4gPiArDQo+ID4gKwkJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJCXN6
-ID0gKGRldi0+cGh5c2ZuLT5zcmlvdi0+YmFyc3pbYmFyXSA+PiAzMikgJiAweGZmZmZmZmZmOw0K
-PiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg
-KyA0LCB+MCk7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsICZz
-eik7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCBsKTsNCj4g
-PiArCQl9DQo+ID4gIA0KPiA+ICAJCWw2NCB8PSAoKHU2NClsIDw8IDMyKTsNCj4gPiAgCQlzejY0
-IHw9ICgodTY0KXN6IDw8IDMyKTsNCj4gPiBAQCAtMzMyLDYgKzM0Miw4IEBAIHN0YXRpYyB2b2lk
-IHBjaV9yZWFkX2Jhc2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBob3dtYW55
-LCBpbnQgcm9tKQ0KPiA+ICAJZm9yIChwb3MgPSAwOyBwb3MgPCBob3dtYW55OyBwb3MrKykgew0K
-PiA+ICAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVzb3VyY2VbcG9zXTsNCj4gPiAg
-CQlyZWcgPSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAocG9zIDw8IDIpOw0KPiA+ICsJCWlmIChkZXYt
-PmlzX3ZpcnRmbiAmJiBkZXYtPnBoeXNmbi0+c3Jpb3YtPmJhcnN6W3Bvc10gPT0gMCkNCj4gPiAr
-CQkJY29udGludWU7DQo+IA0KPiBTaW5jZSB3ZSBrbm93IHRoZSBWRiBCQVJzIGFyZSBhbGwgemVy
-byAodGhlIG9uZXMgaW4gdGhlIFZGIGNvbmZpZyBzcGFjZSwNCj4gbm90IHRoZSBvbmVzIGluIHRo
-ZSBQRiBTUi1JT1YgY2FwYWJpbGl0eSksIGluY2x1ZGluZyB0aGUgVkYgUk9NIEJBUiwgaXQNCj4g
-d291bGQgbWFrZSBzZW5zZSB0byBtZSB0byB0b3RhbGx5IHNraXAgdGhpcyB3aG9sZSBmdW5jdGlv
-biwgZS5nLiwNCj4gDQo+ICAgaWYgKGRldi0+bm9uX2NvbXBsaWFudF9iYXJzKQ0KPiAgICAgcmV0
-dXJuOw0KPiANCj4gICBpZiAoZGV2LT5pc192aXJ0Zm4pDQo+ICAgICByZXR1cm47DQo+IA0KDQpD
-b3JyZWN0ISBEb25lLg0KDQo+ID4gDQo+ID4gIAkJcG9zICs9IF9fcGNpX3JlYWRfYmFzZShkZXYs
-IHBjaV9iYXJfdW5rbm93biwgcmVzLCByZWcpOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtLSANCj4g
-PiAyLjcuNA0KPiA+IA0KPiANCkFtYXpvbiBEZXZlbG9wbWVudCBDZW50ZXIgR2VybWFueSBHbWJI
-CkJlcmxpbiAtIERyZXNkZW4gLSBBYWNoZW4KbWFpbiBvZmZpY2U6IEtyYXVzZW5zdHIuIDM4LCAx
-MDExNyBCZXJsaW4KR2VzY2hhZWZ0c2Z1ZWhyZXI6IERyLiBSYWxmIEhlcmJyaWNoLCBDaHJpc3Rp
-YW4gU2NobGFlZ2VyClVzdC1JRDogREUyODkyMzc4NzkKRWluZ2V0cmFnZW4gYW0gQW10c2dlcmlj
-aHQgQ2hhcmxvdHRlbmJ1cmcgSFJCIDE0OTE3MyBCCg==
+On Fri, 2018-03-02 at 15:48 -0600, Bjorn Helgaas wrote:
+> On Thu, Mar 01, 2018 at 10:31:37PM +0100, KarimAllah Ahmed wrote:
+> > 
+> > Use the cached VF BARs size instead of re-reading them from the hardware.
+> > That avoids doing unnecessarily bus transactions which is specially
+> > noticable when you have a PF with a large number of VFs.
+> 
+> Thanks a lot for breaking this out!  It seems trivial, but it did make it
+> much easier for me to think about this one.
+> 
+> > 
+> > Cc: Bjorn Helgaas <bhelgaas@google.com>
+> > Cc: linux-pci@vger.kernel.org
+> > Cc: linux-kernel@vger.kernel.org
+> > Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
+> > ---
+> >  drivers/pci/probe.c | 24 ++++++++++++++++++------
+> >  1 file changed, 18 insertions(+), 6 deletions(-)
+> > 
+> > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
+> > index a96837e..aeaa10a 100644
+> > --- a/drivers/pci/probe.c
+> > +++ b/drivers/pci/probe.c
+> > @@ -180,6 +180,7 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
+> >  int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
+> >  		    struct resource *res, unsigned int pos)
+> >  {
+> > +	int bar = res - dev->resource;
+> >  	u32 l = 0, sz = 0, mask;
+> >  	u64 l64, sz64, mask64;
+> >  	u16 orig_cmd;
+> > @@ -199,9 +200,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
+> >  	res->name = pci_name(dev);
+> >  
+> >  	pci_read_config_dword(dev, pos, &l);
+> > -	pci_write_config_dword(dev, pos, l | mask);
+> > -	pci_read_config_dword(dev, pos, &sz);
+> > -	pci_write_config_dword(dev, pos, l);
+> > +	if (dev->is_virtfn) {
+> > +		sz = dev->physfn->sriov->barsz[bar] & 0xffffffff;
+> > +	} else {
+> > +		pci_write_config_dword(dev, pos, l | mask);
+> > +		pci_read_config_dword(dev, pos, &sz);
+> > +		pci_write_config_dword(dev, pos, l);
+> > +	}
+> 
+> I don't quite understand this.  This is reading the regular BARs (config
+> offsets 0x10, 0x14, ..., 0x24).  Per sec 9.3.4.1.11, these are all RO Zero
+> for VFs.  That should make them look like they're all unimplemented.
+> 
+> But this patch makes us use the size we discovered from the PF's VF BARn
+> registers in its SR-IOV capability.  Won't that cause us to fill in the
+> VF's dev->resource[n], when we didn't do it before?
+
+Oh .. that is correct! I did not notice this part from the spec :)
+
+> 
+> > 
+> >  	/*
+> >  	 * All bits set in sz means the device isn't working properly.
+> > @@ -241,9 +246,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
+> >  
+> >  	if (res->flags & IORESOURCE_MEM_64) {
+> >  		pci_read_config_dword(dev, pos + 4, &l);
+> > -		pci_write_config_dword(dev, pos + 4, ~0);
+> > -		pci_read_config_dword(dev, pos + 4, &sz);
+> > -		pci_write_config_dword(dev, pos + 4, l);
+> > +
+> > +		if (dev->is_virtfn) {
+> > +			sz = (dev->physfn->sriov->barsz[bar] >> 32) & 0xffffffff;
+> > +		} else {
+> > +			pci_write_config_dword(dev, pos + 4, ~0);
+> > +			pci_read_config_dword(dev, pos + 4, &sz);
+> > +			pci_write_config_dword(dev, pos + 4, l);
+> > +		}
+> >  
+> >  		l64 |= ((u64)l << 32);
+> >  		sz64 |= ((u64)sz << 32);
+> > @@ -332,6 +342,8 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
+> >  	for (pos = 0; pos < howmany; pos++) {
+> >  		struct resource *res = &dev->resource[pos];
+> >  		reg = PCI_BASE_ADDRESS_0 + (pos << 2);
+> > +		if (dev->is_virtfn && dev->physfn->sriov->barsz[pos] == 0)
+> > +			continue;
+> 
+> Since we know the VF BARs are all zero (the ones in the VF config space,
+> not the ones in the PF SR-IOV capability), including the VF ROM BAR, it
+> would make sense to me to totally skip this whole function, e.g.,
+> 
+>   if (dev->non_compliant_bars)
+>     return;
+> 
+>   if (dev->is_virtfn)
+>     return;
+> 
+
+Correct! Done.
+
+> > 
+> >  		pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
+> >  	}
+> >  
+> > -- 
+> > 2.7.4
+> > 
+> 
+Amazon Development Center Germany GmbH
+Berlin - Dresden - Aachen
+main office: Krausenstr. 38, 10117 Berlin
+Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
+Ust-ID: DE289237879
+Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
diff --git a/a/content_digest b/N1/content_digest
index 67415e1..c510815 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -10,79 +10,117 @@
  " bhelgaas@google.com <bhelgaas@google.com>\0"
  "\00:1\0"
  "b\0"
- "T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjQ4IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K\n"
- "PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozN1BNICswMTAwLCBLYXJpbUFsbGFoIEFo\n"
- "bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFVzZSB0aGUgY2FjaGVkIFZGIEJBUnMgc2l6ZSBpbnN0ZWFk\n"
- "IG9mIHJlLXJlYWRpbmcgdGhlbSBmcm9tIHRoZSBoYXJkd2FyZS4NCj4gPiBUaGF0IGF2b2lkcyBk\n"
- "b2luZyB1bm5lY2Vzc2FyaWx5IGJ1cyB0cmFuc2FjdGlvbnMgd2hpY2ggaXMgc3BlY2lhbGx5DQo+\n"
- "ID4gbm90aWNhYmxlIHdoZW4geW91IGhhdmUgYSBQRiB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZG\n"
- "cy4NCj4gDQo+IFRoYW5rcyBhIGxvdCBmb3IgYnJlYWtpbmcgdGhpcyBvdXQhICBJdCBzZWVtcyB0\n"
- "cml2aWFsLCBidXQgaXQgZGlkIG1ha2UgaXQNCj4gbXVjaCBlYXNpZXIgZm9yIG1lIHRvIHRoaW5r\n"
- "IGFib3V0IHRoaXMgb25lLg0KPiANCj4gPiANCj4gPiBDYzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdh\n"
- "YXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZw0KPiA+IENj\n"
- "OiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1B\n"
- "bGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3Bj\n"
- "aS9wcm9iZS5jIHwgMjQgKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gIDEgZmlsZSBjaGFu\n"
- "Z2VkLCAxOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRpZmYgLS1n\n"
- "aXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYw0KPiA+IGluZGV4\n"
- "IGE5NjgzN2UuLmFlYWExMGEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYw0K\n"
- "PiA+ICsrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMNCj4gPiBAQCAtMTgwLDYgKzE4MCw3IEBAIHN0\n"
- "YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWNvZGVfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYs\n"
- "IHUzMiBiYXIpDQo+ID4gIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwg\n"
- "ZW51bSBwY2lfYmFyX3R5cGUgdHlwZSwNCj4gPiAgCQkgICAgc3RydWN0IHJlc291cmNlICpyZXMs\n"
- "IHVuc2lnbmVkIGludCBwb3MpDQo+ID4gIHsNCj4gPiArCWludCBiYXIgPSByZXMgLSBkZXYtPnJl\n"
- "c291cmNlOw0KPiA+ICAJdTMyIGwgPSAwLCBzeiA9IDAsIG1hc2s7DQo+ID4gIAl1NjQgbDY0LCBz\n"
- "ejY0LCBtYXNrNjQ7DQo+ID4gIAl1MTYgb3JpZ19jbWQ7DQo+ID4gQEAgLTE5OSw5ICsyMDAsMTMg\n"
- "QEAgaW50IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJf\n"
- "dHlwZSB0eXBlLA0KPiA+ICAJcmVzLT5uYW1lID0gcGNpX25hbWUoZGV2KTsNCj4gPiAgDQo+ID4g\n"
- "IAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZsKTsNCj4gPiAtCXBjaV93cml0ZV9j\n"
- "b25maWdfZHdvcmQoZGV2LCBwb3MsIGwgfCBtYXNrKTsNCj4gPiAtCXBjaV9yZWFkX2NvbmZpZ19k\n"
- "d29yZChkZXYsIHBvcywgJnN6KTsNCj4gPiAtCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBw\n"
- "b3MsIGwpOw0KPiA+ICsJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJc3ogPSBkZXYtPnBo\n"
- "eXNmbi0+c3Jpb3YtPmJhcnN6W2Jhcl0gJiAweGZmZmZmZmZmOw0KPiA+ICsJfSBlbHNlIHsNCj4g\n"
- "PiArCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsIHwgbWFzayk7DQo+ID4gKwkJ\n"
- "cGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmc3opOw0KPiA+ICsJCXBjaV93cml0ZV9j\n"
- "b25maWdfZHdvcmQoZGV2LCBwb3MsIGwpOw0KPiA+ICsJfQ0KPiANCj4gSSBkb24ndCBxdWl0ZSB1\n"
- "bmRlcnN0YW5kIHRoaXMuICBUaGlzIGlzIHJlYWRpbmcgdGhlIHJlZ3VsYXIgQkFScyAoY29uZmln\n"
- "DQo+IG9mZnNldHMgMHgxMCwgMHgxNCwgLi4uLCAweDI0KS4gIFBlciBzZWMgOS4zLjQuMS4xMSwg\n"
- "dGhlc2UgYXJlIGFsbCBSTyBaZXJvDQo+IGZvciBWRnMuICBUaGF0IHNob3VsZCBtYWtlIHRoZW0g\n"
- "bG9vayBsaWtlIHRoZXkncmUgYWxsIHVuaW1wbGVtZW50ZWQuDQo+IA0KPiBCdXQgdGhpcyBwYXRj\n"
- "aCBtYWtlcyB1cyB1c2UgdGhlIHNpemUgd2UgZGlzY292ZXJlZCBmcm9tIHRoZSBQRidzIFZGIEJB\n"
- "Um4NCj4gcmVnaXN0ZXJzIGluIGl0cyBTUi1JT1YgY2FwYWJpbGl0eS4gIFdvbid0IHRoYXQgY2F1\n"
- "c2UgdXMgdG8gZmlsbCBpbiB0aGUNCj4gVkYncyBkZXYtPnJlc291cmNlW25dLCB3aGVuIHdlIGRp\n"
- "ZG4ndCBkbyBpdCBiZWZvcmU/DQoNCk9oIC4uIHRoYXQgaXMgY29ycmVjdCEgSSBkaWQgbm90IG5v\n"
- "dGljZSB0aGlzIHBhcnQgZnJvbSB0aGUgc3BlYyA6KQ0KDQo+IA0KPiA+IA0KPiA+ICAJLyoNCj4g\n"
- "PiAgCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2aWNlIGlzbid0IHdvcmtpbmcg\n"
- "cHJvcGVybHkuDQo+ID4gQEAgLTI0MSw5ICsyNDYsMTQgQEAgaW50IF9fcGNpX3JlYWRfYmFzZShz\n"
- "dHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0eXBlLA0KPiA+ICANCj4gPiAg\n"
- "CWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsNCj4gPiAgCQlwY2lfcmVhZF9j\n"
- "b25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7DQo+ID4gLQkJcGNpX3dyaXRlX2NvbmZpZ19k\n"
- "d29yZChkZXYsIHBvcyArIDQsIH4wKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2\n"
- "LCBwb3MgKyA0LCAmc3opOw0KPiA+IC0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg\n"
- "KyA0LCBsKTsNCj4gPiArDQo+ID4gKwkJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJCXN6\n"
- "ID0gKGRldi0+cGh5c2ZuLT5zcmlvdi0+YmFyc3pbYmFyXSA+PiAzMikgJiAweGZmZmZmZmZmOw0K\n"
- "PiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg\n"
- "KyA0LCB+MCk7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsICZz\n"
- "eik7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCBsKTsNCj4g\n"
- "PiArCQl9DQo+ID4gIA0KPiA+ICAJCWw2NCB8PSAoKHU2NClsIDw8IDMyKTsNCj4gPiAgCQlzejY0\n"
- "IHw9ICgodTY0KXN6IDw8IDMyKTsNCj4gPiBAQCAtMzMyLDYgKzM0Miw4IEBAIHN0YXRpYyB2b2lk\n"
- "IHBjaV9yZWFkX2Jhc2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBob3dtYW55\n"
- "LCBpbnQgcm9tKQ0KPiA+ICAJZm9yIChwb3MgPSAwOyBwb3MgPCBob3dtYW55OyBwb3MrKykgew0K\n"
- "PiA+ICAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVzb3VyY2VbcG9zXTsNCj4gPiAg\n"
- "CQlyZWcgPSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAocG9zIDw8IDIpOw0KPiA+ICsJCWlmIChkZXYt\n"
- "PmlzX3ZpcnRmbiAmJiBkZXYtPnBoeXNmbi0+c3Jpb3YtPmJhcnN6W3Bvc10gPT0gMCkNCj4gPiAr\n"
- "CQkJY29udGludWU7DQo+IA0KPiBTaW5jZSB3ZSBrbm93IHRoZSBWRiBCQVJzIGFyZSBhbGwgemVy\n"
- "byAodGhlIG9uZXMgaW4gdGhlIFZGIGNvbmZpZyBzcGFjZSwNCj4gbm90IHRoZSBvbmVzIGluIHRo\n"
- "ZSBQRiBTUi1JT1YgY2FwYWJpbGl0eSksIGluY2x1ZGluZyB0aGUgVkYgUk9NIEJBUiwgaXQNCj4g\n"
- "d291bGQgbWFrZSBzZW5zZSB0byBtZSB0byB0b3RhbGx5IHNraXAgdGhpcyB3aG9sZSBmdW5jdGlv\n"
- "biwgZS5nLiwNCj4gDQo+ICAgaWYgKGRldi0+bm9uX2NvbXBsaWFudF9iYXJzKQ0KPiAgICAgcmV0\n"
- "dXJuOw0KPiANCj4gICBpZiAoZGV2LT5pc192aXJ0Zm4pDQo+ICAgICByZXR1cm47DQo+IA0KDQpD\n"
- "b3JyZWN0ISBEb25lLg0KDQo+ID4gDQo+ID4gIAkJcG9zICs9IF9fcGNpX3JlYWRfYmFzZShkZXYs\n"
- "IHBjaV9iYXJfdW5rbm93biwgcmVzLCByZWcpOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtLSANCj4g\n"
- "PiAyLjcuNA0KPiA+IA0KPiANCkFtYXpvbiBEZXZlbG9wbWVudCBDZW50ZXIgR2VybWFueSBHbWJI\n"
- "CkJlcmxpbiAtIERyZXNkZW4gLSBBYWNoZW4KbWFpbiBvZmZpY2U6IEtyYXVzZW5zdHIuIDM4LCAx\n"
- "MDExNyBCZXJsaW4KR2VzY2hhZWZ0c2Z1ZWhyZXI6IERyLiBSYWxmIEhlcmJyaWNoLCBDaHJpc3Rp\n"
- "YW4gU2NobGFlZ2VyClVzdC1JRDogREUyODkyMzc4NzkKRWluZ2V0cmFnZW4gYW0gQW10c2dlcmlj\n"
- aHQgQ2hhcmxvdHRlbmJ1cmcgSFJCIDE0OTE3MyBCCg==
+ "On Fri, 2018-03-02 at 15:48 -0600, Bjorn Helgaas wrote:\n"
+ "> On Thu, Mar 01, 2018 at 10:31:37PM +0100, KarimAllah Ahmed wrote:\n"
+ "> > \n"
+ "> > Use the cached VF BARs size instead of re-reading them from the hardware.\n"
+ "> > That avoids doing unnecessarily bus transactions which is specially\n"
+ "> > noticable when you have a PF with a large number of VFs.\n"
+ "> \n"
+ "> Thanks a lot for breaking this out!  It seems trivial, but it did make it\n"
+ "> much easier for me to think about this one.\n"
+ "> \n"
+ "> > \n"
+ "> > Cc: Bjorn Helgaas <bhelgaas@google.com>\n"
+ "> > Cc: linux-pci@vger.kernel.org\n"
+ "> > Cc: linux-kernel@vger.kernel.org\n"
+ "> > Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>\n"
+ "> > ---\n"
+ "> >  drivers/pci/probe.c | 24 ++++++++++++++++++------\n"
+ "> >  1 file changed, 18 insertions(+), 6 deletions(-)\n"
+ "> > \n"
+ "> > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c\n"
+ "> > index a96837e..aeaa10a 100644\n"
+ "> > --- a/drivers/pci/probe.c\n"
+ "> > +++ b/drivers/pci/probe.c\n"
+ "> > @@ -180,6 +180,7 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)\n"
+ "> >  int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,\n"
+ "> >  \t\t    struct resource *res, unsigned int pos)\n"
+ "> >  {\n"
+ "> > +\tint bar = res - dev->resource;\n"
+ "> >  \tu32 l = 0, sz = 0, mask;\n"
+ "> >  \tu64 l64, sz64, mask64;\n"
+ "> >  \tu16 orig_cmd;\n"
+ "> > @@ -199,9 +200,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,\n"
+ "> >  \tres->name = pci_name(dev);\n"
+ "> >  \n"
+ "> >  \tpci_read_config_dword(dev, pos, &l);\n"
+ "> > -\tpci_write_config_dword(dev, pos, l | mask);\n"
+ "> > -\tpci_read_config_dword(dev, pos, &sz);\n"
+ "> > -\tpci_write_config_dword(dev, pos, l);\n"
+ "> > +\tif (dev->is_virtfn) {\n"
+ "> > +\t\tsz = dev->physfn->sriov->barsz[bar] & 0xffffffff;\n"
+ "> > +\t} else {\n"
+ "> > +\t\tpci_write_config_dword(dev, pos, l | mask);\n"
+ "> > +\t\tpci_read_config_dword(dev, pos, &sz);\n"
+ "> > +\t\tpci_write_config_dword(dev, pos, l);\n"
+ "> > +\t}\n"
+ "> \n"
+ "> I don't quite understand this.  This is reading the regular BARs (config\n"
+ "> offsets 0x10, 0x14, ..., 0x24).  Per sec 9.3.4.1.11, these are all RO Zero\n"
+ "> for VFs.  That should make them look like they're all unimplemented.\n"
+ "> \n"
+ "> But this patch makes us use the size we discovered from the PF's VF BARn\n"
+ "> registers in its SR-IOV capability.  Won't that cause us to fill in the\n"
+ "> VF's dev->resource[n], when we didn't do it before?\n"
+ "\n"
+ "Oh .. that is correct! I did not notice this part from the spec :)\n"
+ "\n"
+ "> \n"
+ "> > \n"
+ "> >  \t/*\n"
+ "> >  \t * All bits set in sz means the device isn't working properly.\n"
+ "> > @@ -241,9 +246,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,\n"
+ "> >  \n"
+ "> >  \tif (res->flags & IORESOURCE_MEM_64) {\n"
+ "> >  \t\tpci_read_config_dword(dev, pos + 4, &l);\n"
+ "> > -\t\tpci_write_config_dword(dev, pos + 4, ~0);\n"
+ "> > -\t\tpci_read_config_dword(dev, pos + 4, &sz);\n"
+ "> > -\t\tpci_write_config_dword(dev, pos + 4, l);\n"
+ "> > +\n"
+ "> > +\t\tif (dev->is_virtfn) {\n"
+ "> > +\t\t\tsz = (dev->physfn->sriov->barsz[bar] >> 32) & 0xffffffff;\n"
+ "> > +\t\t} else {\n"
+ "> > +\t\t\tpci_write_config_dword(dev, pos + 4, ~0);\n"
+ "> > +\t\t\tpci_read_config_dword(dev, pos + 4, &sz);\n"
+ "> > +\t\t\tpci_write_config_dword(dev, pos + 4, l);\n"
+ "> > +\t\t}\n"
+ "> >  \n"
+ "> >  \t\tl64 |= ((u64)l << 32);\n"
+ "> >  \t\tsz64 |= ((u64)sz << 32);\n"
+ "> > @@ -332,6 +342,8 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)\n"
+ "> >  \tfor (pos = 0; pos < howmany; pos++) {\n"
+ "> >  \t\tstruct resource *res = &dev->resource[pos];\n"
+ "> >  \t\treg = PCI_BASE_ADDRESS_0 + (pos << 2);\n"
+ "> > +\t\tif (dev->is_virtfn && dev->physfn->sriov->barsz[pos] == 0)\n"
+ "> > +\t\t\tcontinue;\n"
+ "> \n"
+ "> Since we know the VF BARs are all zero (the ones in the VF config space,\n"
+ "> not the ones in the PF SR-IOV capability), including the VF ROM BAR, it\n"
+ "> would make sense to me to totally skip this whole function, e.g.,\n"
+ "> \n"
+ ">   if (dev->non_compliant_bars)\n"
+ ">     return;\n"
+ "> \n"
+ ">   if (dev->is_virtfn)\n"
+ ">     return;\n"
+ "> \n"
+ "\n"
+ "Correct! Done.\n"
+ "\n"
+ "> > \n"
+ "> >  \t\tpos += __pci_read_base(dev, pci_bar_unknown, res, reg);\n"
+ "> >  \t}\n"
+ "> >  \n"
+ "> > -- \n"
+ "> > 2.7.4\n"
+ "> > \n"
+ "> \n"
+ "Amazon Development Center Germany GmbH\n"
+ "Berlin - Dresden - Aachen\n"
+ "main office: Krausenstr. 38, 10117 Berlin\n"
+ "Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger\n"
+ "Ust-ID: DE289237879\n"
+ Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
 
-5edf57f172345f329b7e900453b29c9a0b94dd222d982e816c9a94357faa1991
+0eea38380103a2ccf4636ceb0ccd7e01f1030a3749d35c82ab8a47c0a154b193

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.