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

diff --git a/a/1.txt b/N1/1.txt
index ad6a147..76f185b 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,123 +1,190 @@
-T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjM2IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K
-PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozNlBNICswMTAwLCBLYXJpbUFsbGFoIEFo
-bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFN0b3JlIG1vcmUgZGF0YSBhYm91dCBQQ0kgVkZzIGludG8g
-dGhlIFNSSU9WIHRvIGF2b2lkIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiA+IGNvbmZpZyBzcGFj
-ZSBvZiBhbGwgdGhlIFBDSSBWRnMuIFRoaXMgaXMgc3BlY2lhbGx5IGEgdXNlZnVsIG9wdGltaXph
-dGlvbg0KPiA+IHdoZW4gYnJpbmdpbmcgdXAgdGhvdXNhbmRzIG9mIFZGcy4NCj4gPiANCj4gPiBD
-YzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNp
-QHZnZXIua2VybmVsLm9yZw0KPiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+
-ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0K
-PiANCj4gQXBwbGllZCB0byBwY2kvdmlydHVhbGl6YXRpb24gZm9yIHY0LjE3LCB0aGFua3MhDQo+
-IA0KPiBJIHJlbW92ZWQgdGhlIHBjaV9zcmlvdi5kZXZpY2UgZmllbGQsIHdoaWNoIHNlZW1lZCB0
-byBiZSB1bnVzZWQsIGFuZA0KPiB0d2Vha2VkIGEgZmV3IG90aGVyIHRoaW5ncywgc28gbWFrZSBz
-dXJlIEkgZGlkbid0IGJyZWFrIGFueXRoaW5nLg0KDQpZdXAsIHN0aWxsIGxvb2tzIGdvb2QgKGFu
-ZCB3b3JrcykgZm9yIG1lLiBUaGFua3MuDQoNCj4gSGVyZSdzIHdoYXQgSSBoYXZlIGN1cnJlbnRs
-eSBhcHBsaWVkOg0KPiANCj4gY29tbWl0IGUxN2I3YjQyOWIwOTUyMDBmOTNhZDM3YzRlZmViN2E5
-OWI2ZmNlM2INCj4gQXV0aG9yOiBLYXJpbUFsbGFoIEFobWVkIDxrYXJhaG1lZEBhbWF6b24uZGU+
-DQo+IERhdGU6ICAgVGh1IE1hciAxIDIyOjMxOjM2IDIwMTggKzAxMDANCj4gDQo+ICAgICBQQ0kv
-SU9WOiBVc2UgVkYwIGNhY2hlZCBjb25maWcgcmVnaXN0ZXJzIGZvciBvdGhlciBWRnMNCj4gICAg
-IA0KPiAgICAgQ2FjaGUgc29tZSBjb25maWcgZGF0YSBmcm9tIFZGMCBhbmQgdXNlIGl0IGZvciBh
-bGwgb3RoZXIgVkZzIGluc3RlYWQgb2YNCj4gICAgIHJlYWRpbmcgaXQgZnJvbSB0aGUgY29uZmln
-IHNwYWNlIG9mIGVhY2ggVkYuICBXZSBhc3N1bWUgdGhlc2UgaXRlbXMgYXJlIHRoZQ0KPiAgICAg
-c2FtZSBhY3Jvc3MgYWxsIGFzc29jaWF0ZWQgVkZzOg0KPiAgICAgDQo+ICAgICAgIFJldmlzaW9u
-IElEDQo+ICAgICAgIENsYXNzIENvZGUNCj4gICAgICAgU3Vic3lzdGVtIFZlbmRvciBJRA0KPiAg
-ICAgICBTdWJzeXN0ZW0gSUQNCj4gICAgIA0KPiAgICAgVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24g
-d2hlbiBlbmFibGluZyBTUi1JT1Ygb24gYSBkZXZpY2Ugd2l0aCBtYW55IFZGcy4NCj4gICAgIA0K
-PiAgICAgU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRl
-Pg0KPiAgICAgW2JoZWxnYWFzOiBjaGFuZ2Vsb2csIHNpbXBsaWZ5IGNvbW1lbnRzLCByZW1vdmUg
-dW51c2VkICJkZXZpY2UiXQ0KPiAgICAgU2lnbmVkLW9mZi1ieTogQmpvcm4gSGVsZ2FhcyA8aGVs
-Z2Fhc0BrZXJuZWwub3JnPg0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIv
-ZHJpdmVycy9wY2kvaW92LmMNCj4gaW5kZXggNjc3OTI0YWUwMzUwLi4zMGJmOGY3MDZlZDkgMTAw
-NjQ0DQo+IC0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jDQo+ICsrKyBiL2RyaXZlcnMvcGNpL2lvdi5j
-DQo+IEBAIC0xMTQsNiArMTE0LDI5IEBAIHJlc291cmNlX3NpemVfdCBwY2lfaW92X3Jlc291cmNl
-X3NpemUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQ0KPiAgCXJldHVybiBkZXYtPnNy
-aW92LT5iYXJzeltyZXNubyAtIFBDSV9JT1ZfUkVTT1VSQ0VTXTsNCj4gIH0NCj4gIA0KPiArc3Rh
-dGljIHZvaWQgcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqdmlydGZu
-KQ0KPiArew0KPiArCXN0cnVjdCBwY2lfZGV2ICpwaHlzZm4gPSB2aXJ0Zm4tPnBoeXNmbjsNCj4g
-Kw0KPiArCS8qDQo+ICsJICogU29tZSBjb25maWcgcmVnaXN0ZXJzIGFyZSB0aGUgc2FtZSBhY3Jv
-c3MgYWxsIGFzc29jaWF0ZWQgVkZzLg0KPiArCSAqIFJlYWQgdGhlbSBvbmNlIGZyb20gVkYwIHNv
-IHdlIGNhbiBza2lwIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiArCSAqIG90aGVyIFZGcy4NCj4g
-KwkgKg0KPiArCSAqIFBDSWUgcjQuMCwgc2VjIDkuMy40LjEsIHRlY2huaWNhbGx5IGRvZXNuJ3Qg
-cmVxdWlyZSBhbGwgVkZzIHRvDQo+ICsJICogaGF2ZSB0aGUgc2FtZSBSZXZpc2lvbiBJRCBhbmQg
-U3Vic3lzdGVtIElELCBidXQgd2UgYXNzdW1lIHRoZXkNCj4gKwkgKiBkby4NCj4gKwkgKi8NCj4g
-KwlwY2lfcmVhZF9jb25maWdfZHdvcmQodmlydGZuLCBQQ0lfQ0xBU1NfUkVWSVNJT04sDQo+ICsJ
-CQkgICAgICAmcGh5c2ZuLT5zcmlvdi0+Y2xhc3MpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRl
-KHZpcnRmbiwgUENJX0hFQURFUl9UWVBFLA0KPiArCQkJICAgICAmcGh5c2ZuLT5zcmlvdi0+aGRy
-X3R5cGUpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ193b3JkKHZpcnRmbiwgUENJX1NVQlNZU1RFTV9W
-RU5ET1JfSUQsDQo+ICsJCQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fdmVuZG9yKTsN
-Cj4gKwlwY2lfcmVhZF9jb25maWdfd29yZCh2aXJ0Zm4sIFBDSV9TVUJTWVNURU1fSUQsDQo+ICsJ
-CQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fZGV2aWNlKTsNCj4gK30NCj4gKw0KPiAg
-aW50IHBjaV9pb3ZfYWRkX3ZpcnRmbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQpDQo+ICB7
-DQo+ICAJaW50IGk7DQo+IEBAIC0xMzYsMTMgKzE1OSwxNyBAQCBpbnQgcGNpX2lvdl9hZGRfdmly
-dGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCkNCj4gIAl2aXJ0Zm4tPmRldmZuID0gcGNp
-X2lvdl92aXJ0Zm5fZGV2Zm4oZGV2LCBpZCk7DQo+ICAJdmlydGZuLT52ZW5kb3IgPSBkZXYtPnZl
-bmRvcjsNCj4gIAl2aXJ0Zm4tPmRldmljZSA9IGlvdi0+dmZfZGV2aWNlOw0KPiArCXZpcnRmbi0+
-aXNfdmlydGZuID0gMTsNCj4gKwl2aXJ0Zm4tPnBoeXNmbiA9IHBjaV9kZXZfZ2V0KGRldik7DQo+
-ICsNCj4gKwlpZiAoaWQgPT0gMCkNCj4gKwkJcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbih2aXJ0
-Zm4pOw0KPiArDQo+ICAJcmMgPSBwY2lfc2V0dXBfZGV2aWNlKHZpcnRmbik7DQo+ICAJaWYgKHJj
-KQ0KPiAtCQlnb3RvIGZhaWxlZDA7DQo+ICsJCWdvdG8gZmFpbGVkMTsNCj4gIA0KPiAgCXZpcnRm
-bi0+ZGV2LnBhcmVudCA9IGRldi0+ZGV2LnBhcmVudDsNCj4gLQl2aXJ0Zm4tPnBoeXNmbiA9IHBj
-aV9kZXZfZ2V0KGRldik7DQo+IC0JdmlydGZuLT5pc192aXJ0Zm4gPSAxOw0KPiAgCXZpcnRmbi0+
-bXVsdGlmdW5jdGlvbiA9IDA7DQo+ICANCj4gIAlmb3IgKGkgPSAwOyBpIDwgUENJX1NSSU9WX05V
-TV9CQVJTOyBpKyspIHsNCj4gQEAgLTE2MywxMCArMTkwLDEwIEBAIGludCBwY2lfaW92X2FkZF92
-aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKQ0KPiAgCXNwcmludGYoYnVmLCAidmly
-dGZuJXUiLCBpZCk7DQo+ICAJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5kZXYua29iaiwg
-JnZpcnRmbi0+ZGV2LmtvYmosIGJ1Zik7DQo+ICAJaWYgKHJjKQ0KPiAtCQlnb3RvIGZhaWxlZDE7
-DQo+ICsJCWdvdG8gZmFpbGVkMjsNCj4gIAlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ2aXJ0Zm4t
-PmRldi5rb2JqLCAmZGV2LT5kZXYua29iaiwgInBoeXNmbiIpOw0KPiAgCWlmIChyYykNCj4gLQkJ
-Z290byBmYWlsZWQyOw0KPiArCQlnb3RvIGZhaWxlZDM7DQo+ICANCj4gIAlrb2JqZWN0X3VldmVu
-dCgmdmlydGZuLT5kZXYua29iaiwgS09CSl9DSEFOR0UpOw0KPiAgDQo+IEBAIC0xNzQsMTEgKzIw
-MSwxMiBAQCBpbnQgcGNpX2lvdl9hZGRfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBp
-ZCkNCj4gIA0KPiAgCXJldHVybiAwOw0KPiAgDQo+IC1mYWlsZWQyOg0KPiArZmFpbGVkMzoNCj4g
-IAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgYnVmKTsNCj4gK2ZhaWxlZDI6DQo+
-ICsJcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNlKHZpcnRmbik7DQo+ICBmYWlsZWQxOg0K
-PiAgCXBjaV9kZXZfcHV0KGRldik7DQo+IC0JcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNl
-KHZpcnRmbik7DQo+ICBmYWlsZWQwOg0KPiAgCXZpcnRmbl9yZW1vdmVfYnVzKGRldi0+YnVzLCBi
-dXMpOw0KPiAgZmFpbGVkOg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2
-ZXJzL3BjaS9wY2kuaA0KPiBpbmRleCBmY2Q4MTkxMWIxMjcuLmRiNzY5MzNiZTg1OSAxMDA2NDQN
-Cj4gLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgNCj4gKysrIGIvZHJpdmVycy9wY2kvcGNpLmgNCj4g
-QEAgLTI3MSw2ICsyNzEsMTAgQEAgc3RydWN0IHBjaV9zcmlvdiB7DQo+ICAJdTE2CQlkcml2ZXJf
-bWF4X1ZGczsJLyogTWF4IG51bSBWRnMgZHJpdmVyIHN1cHBvcnRzICovDQo+ICAJc3RydWN0IHBj
-aV9kZXYJKmRldjsJCS8qIExvd2VzdCBudW1iZXJlZCBQRiAqLw0KPiAgCXN0cnVjdCBwY2lfZGV2
-CSpzZWxmOwkJLyogVGhpcyBQRiAqLw0KPiArCXUzMgkJY2xhc3M7CQkvKiBWRiBjbGFzcyAqLw0K
-PiArCXU4CQloZHJfdHlwZTsJLyogVkYgaGVhZGVyIHR5cGUgKi8NCj4gKwl1MTYJCXN1YnN5c3Rl
-bV92ZW5kb3I7IC8qIFZGIHN1YnN5c3RlbSB2ZW5kb3IgKi8NCj4gKwl1MTYJCXN1YnN5c3RlbV9k
-ZXZpY2U7IC8qIFZGIHN1YnN5c3RlbSBkZXZpY2UgKi8NCj4gIAlyZXNvdXJjZV9zaXplX3QJYmFy
-c3pbUENJX1NSSU9WX05VTV9CQVJTXTsJLyogVkYgQkFSIHNpemUgKi8NCj4gIAlib29sCQlkcml2
-ZXJzX2F1dG9wcm9iZTsgLyogQXV0byBwcm9iaW5nIG9mIFZGcyBieSBkcml2ZXIgKi8NCj4gIH07
-DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUu
-Yw0KPiBpbmRleCBhMWNkZGNhMzc3OTMuLjc4ZGViOTUwYmRhMSAxMDA2NDQNCj4gLS0tIGEvZHJp
-dmVycy9wY2kvcHJvYmUuYw0KPiArKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jDQo+IEBAIC0xNDYx
-LDcgKzE0NjEsOSBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K
-PiAgCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247DQo+ICAJc3RydWN0IHJlc291cmNlICpy
-ZXM7DQo+ICANCj4gLQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZ
-UEUsICZoZHJfdHlwZSkpDQo+ICsJaWYgKGRldi0+aXNfdmlydGZuKQ0KPiArCQloZHJfdHlwZSA9
-IGRldi0+cGh5c2ZuLT5zcmlvdi0+aGRyX3R5cGU7DQo+ICsJZWxzZSBpZiAocGNpX3JlYWRfY29u
-ZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpDQo+ICAJCXJldHVybiAt
-RUlPOw0KPiAgDQo+ICAJZGV2LT5zeXNkYXRhID0gZGV2LT5idXMtPnN5c2RhdGE7DQo+IEBAIC0x
-NDg0LDcgKzE0ODYsMTAgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRl
-dikNCj4gIAkJICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwNCj4g
-IAkJICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7DQo+ICANCj4gLQlwY2lfcmVhZF9jb25maWdf
-ZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzcyk7DQo+ICsJaWYgKGRldi0+aXNf
-dmlydGZuKQ0KPiArCQljbGFzcyA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+Y2xhc3M7DQo+ICsJZWxz
-ZQ0KPiArCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZj
-bGFzcyk7DQo+ICAJZGV2LT5yZXZpc2lvbiA9IGNsYXNzICYgMHhmZjsNCj4gIAlkZXYtPmNsYXNz
-ID0gY2xhc3MgPj4gODsJCSAgICAvKiB1cHBlciAzIGJ5dGVzICovDQo+ICANCj4gQEAgLTE1MjQs
-OCArMTUyOSwxMyBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K
-PiAgCQkJZ290byBiYWQ7DQo+ICAJCXBjaV9yZWFkX2lycShkZXYpOw0KPiAgCQlwY2lfcmVhZF9i
-YXNlcyhkZXYsIDYsIFBDSV9ST01fQUREUkVTUyk7DQo+IC0JCXBjaV9yZWFkX2NvbmZpZ193b3Jk
-KGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0K
-PiAtCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQsICZkZXYtPnN1
-YnN5c3RlbV9kZXZpY2UpOw0KPiArCQlpZiAoZGV2LT5pc192aXJ0Zm4pIHsNCj4gKwkJCWRldi0+
-c3Vic3lzdGVtX3ZlbmRvciA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lzdGVtX3ZlbmRvcjsN
-Cj4gKwkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lz
-dGVtX2RldmljZTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRl
-diwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0KPiAr
-CQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmZGV2LT5zdWJz
-eXN0ZW1fZGV2aWNlKTsNCj4gKwkJfQ0KPiAgDQo+ICAJCS8qDQo+ICAJCSAqIERvIHRoZSB1Z2x5
-IGxlZ2FjeSBtb2RlIHN0dWZmIGhlcmUgcmF0aGVyIHRoYW4gYnJva2VuIGNoaXANCj4gDQpBbWF6
-b24gRGV2ZWxvcG1lbnQgQ2VudGVyIEdlcm1hbnkgR21iSApCZXJsaW4gLSBEcmVzZGVuIC0gQWFj
-aGVuCm1haW4gb2ZmaWNlOiBLcmF1c2Vuc3RyLiAzOCwgMTAxMTcgQmVybGluCkdlc2NoYWVmdHNm
-dWVocmVyOiBEci4gUmFsZiBIZXJicmljaCwgQ2hyaXN0aWFuIFNjaGxhZWdlcgpVc3QtSUQ6IERF
-Mjg5MjM3ODc5CkVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIEhSQiAx
-NDkxNzMgQgo=
+On Fri, 2018-03-02 at 15:36 -0600, Bjorn Helgaas wrote:
+> On Thu, Mar 01, 2018 at 10:31:36PM +0100, KarimAllah Ahmed wrote:
+> > 
+> > Store more data about PCI VFs into the SRIOV to avoid reading them from the
+> > config space of all the PCI VFs. This is specially a useful optimization
+> > when bringing up thousands of VFs.
+> > 
+> > 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>
+> 
+> Applied to pci/virtualization for v4.17, thanks!
+> 
+> I removed the pci_sriov.device field, which seemed to be unused, and
+> tweaked a few other things, so make sure I didn't break anything.
+
+Yup, still looks good (and works) for me. Thanks.
+
+> Here's what I have currently applied:
+> 
+> commit e17b7b429b095200f93ad37c4efeb7a99b6fce3b
+> Author: KarimAllah Ahmed <karahmed@amazon.de>
+> Date:   Thu Mar 1 22:31:36 2018 +0100
+> 
+>     PCI/IOV: Use VF0 cached config registers for other VFs
+>     
+>     Cache some config data from VF0 and use it for all other VFs instead of
+>     reading it from the config space of each VF.  We assume these items are the
+>     same across all associated VFs:
+>     
+>       Revision ID
+>       Class Code
+>       Subsystem Vendor ID
+>       Subsystem ID
+>     
+>     This is an optimization when enabling SR-IOV on a device with many VFs.
+>     
+>     Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
+>     [bhelgaas: changelog, simplify comments, remove unused "device"]
+>     Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>
+> 
+> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
+> index 677924ae0350..30bf8f706ed9 100644
+> --- a/drivers/pci/iov.c
+> +++ b/drivers/pci/iov.c
+> @@ -114,6 +114,29 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
+>  	return dev->sriov->barsz[resno - PCI_IOV_RESOURCES];
+>  }
+>  
+> +static void pci_read_vf_config_common(struct pci_dev *virtfn)
+> +{
+> +	struct pci_dev *physfn = virtfn->physfn;
+> +
+> +	/*
+> +	 * Some config registers are the same across all associated VFs.
+> +	 * Read them once from VF0 so we can skip reading them from the
+> +	 * other VFs.
+> +	 *
+> +	 * PCIe r4.0, sec 9.3.4.1, technically doesn't require all VFs to
+> +	 * have the same Revision ID and Subsystem ID, but we assume they
+> +	 * do.
+> +	 */
+> +	pci_read_config_dword(virtfn, PCI_CLASS_REVISION,
+> +			      &physfn->sriov->class);
+> +	pci_read_config_byte(virtfn, PCI_HEADER_TYPE,
+> +			     &physfn->sriov->hdr_type);
+> +	pci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID,
+> +			     &physfn->sriov->subsystem_vendor);
+> +	pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
+> +			     &physfn->sriov->subsystem_device);
+> +}
+> +
+>  int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+>  {
+>  	int i;
+> @@ -136,13 +159,17 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+>  	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
+>  	virtfn->vendor = dev->vendor;
+>  	virtfn->device = iov->vf_device;
+> +	virtfn->is_virtfn = 1;
+> +	virtfn->physfn = pci_dev_get(dev);
+> +
+> +	if (id == 0)
+> +		pci_read_vf_config_common(virtfn);
+> +
+>  	rc = pci_setup_device(virtfn);
+>  	if (rc)
+> -		goto failed0;
+> +		goto failed1;
+>  
+>  	virtfn->dev.parent = dev->dev.parent;
+> -	virtfn->physfn = pci_dev_get(dev);
+> -	virtfn->is_virtfn = 1;
+>  	virtfn->multifunction = 0;
+>  
+>  	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
+> @@ -163,10 +190,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+>  	sprintf(buf, "virtfn%u", id);
+>  	rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
+>  	if (rc)
+> -		goto failed1;
+> +		goto failed2;
+>  	rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
+>  	if (rc)
+> -		goto failed2;
+> +		goto failed3;
+>  
+>  	kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
+>  
+> @@ -174,11 +201,12 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+>  
+>  	return 0;
+>  
+> -failed2:
+> +failed3:
+>  	sysfs_remove_link(&dev->dev.kobj, buf);
+> +failed2:
+> +	pci_stop_and_remove_bus_device(virtfn);
+>  failed1:
+>  	pci_dev_put(dev);
+> -	pci_stop_and_remove_bus_device(virtfn);
+>  failed0:
+>  	virtfn_remove_bus(dev->bus, bus);
+>  failed:
+> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
+> index fcd81911b127..db76933be859 100644
+> --- a/drivers/pci/pci.h
+> +++ b/drivers/pci/pci.h
+> @@ -271,6 +271,10 @@ struct pci_sriov {
+>  	u16		driver_max_VFs;	/* Max num VFs driver supports */
+>  	struct pci_dev	*dev;		/* Lowest numbered PF */
+>  	struct pci_dev	*self;		/* This PF */
+> +	u32		class;		/* VF class */
+> +	u8		hdr_type;	/* VF header type */
+> +	u16		subsystem_vendor; /* VF subsystem vendor */
+> +	u16		subsystem_device; /* VF subsystem device */
+>  	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
+>  	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
+>  };
+> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
+> index a1cddca37793..78deb950bda1 100644
+> --- a/drivers/pci/probe.c
+> +++ b/drivers/pci/probe.c
+> @@ -1461,7 +1461,9 @@ int pci_setup_device(struct pci_dev *dev)
+>  	struct pci_bus_region region;
+>  	struct resource *res;
+>  
+> -	if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
+> +	if (dev->is_virtfn)
+> +		hdr_type = dev->physfn->sriov->hdr_type;
+> +	else if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
+>  		return -EIO;
+>  
+>  	dev->sysdata = dev->bus->sysdata;
+> @@ -1484,7 +1486,10 @@ int pci_setup_device(struct pci_dev *dev)
+>  		     dev->bus->number, PCI_SLOT(dev->devfn),
+>  		     PCI_FUNC(dev->devfn));
+>  
+> -	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
+> +	if (dev->is_virtfn)
+> +		class = dev->physfn->sriov->class;
+> +	else
+> +		pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
+>  	dev->revision = class & 0xff;
+>  	dev->class = class >> 8;		    /* upper 3 bytes */
+>  
+> @@ -1524,8 +1529,13 @@ int pci_setup_device(struct pci_dev *dev)
+>  			goto bad;
+>  		pci_read_irq(dev);
+>  		pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
+> -		pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
+> -		pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+> +		if (dev->is_virtfn) {
+> +			dev->subsystem_vendor = dev->physfn->sriov->subsystem_vendor;
+> +			dev->subsystem_device = dev->physfn->sriov->subsystem_device;
+> +		} else {
+> +			pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
+> +			pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+> +		}
+>  
+>  		/*
+>  		 * Do the ugly legacy mode stuff here rather than broken chip
+> 
+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 bd75e30..4f6371f 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -9,128 +9,195 @@
  " bhelgaas@google.com <bhelgaas@google.com>\0"
  "\00:1\0"
  "b\0"
- "T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjM2IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K\n"
- "PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozNlBNICswMTAwLCBLYXJpbUFsbGFoIEFo\n"
- "bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFN0b3JlIG1vcmUgZGF0YSBhYm91dCBQQ0kgVkZzIGludG8g\n"
- "dGhlIFNSSU9WIHRvIGF2b2lkIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiA+IGNvbmZpZyBzcGFj\n"
- "ZSBvZiBhbGwgdGhlIFBDSSBWRnMuIFRoaXMgaXMgc3BlY2lhbGx5IGEgdXNlZnVsIG9wdGltaXph\n"
- "dGlvbg0KPiA+IHdoZW4gYnJpbmdpbmcgdXAgdGhvdXNhbmRzIG9mIFZGcy4NCj4gPiANCj4gPiBD\n"
- "YzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNp\n"
- "QHZnZXIua2VybmVsLm9yZw0KPiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+\n"
- "ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0K\n"
- "PiANCj4gQXBwbGllZCB0byBwY2kvdmlydHVhbGl6YXRpb24gZm9yIHY0LjE3LCB0aGFua3MhDQo+\n"
- "IA0KPiBJIHJlbW92ZWQgdGhlIHBjaV9zcmlvdi5kZXZpY2UgZmllbGQsIHdoaWNoIHNlZW1lZCB0\n"
- "byBiZSB1bnVzZWQsIGFuZA0KPiB0d2Vha2VkIGEgZmV3IG90aGVyIHRoaW5ncywgc28gbWFrZSBz\n"
- "dXJlIEkgZGlkbid0IGJyZWFrIGFueXRoaW5nLg0KDQpZdXAsIHN0aWxsIGxvb2tzIGdvb2QgKGFu\n"
- "ZCB3b3JrcykgZm9yIG1lLiBUaGFua3MuDQoNCj4gSGVyZSdzIHdoYXQgSSBoYXZlIGN1cnJlbnRs\n"
- "eSBhcHBsaWVkOg0KPiANCj4gY29tbWl0IGUxN2I3YjQyOWIwOTUyMDBmOTNhZDM3YzRlZmViN2E5\n"
- "OWI2ZmNlM2INCj4gQXV0aG9yOiBLYXJpbUFsbGFoIEFobWVkIDxrYXJhaG1lZEBhbWF6b24uZGU+\n"
- "DQo+IERhdGU6ICAgVGh1IE1hciAxIDIyOjMxOjM2IDIwMTggKzAxMDANCj4gDQo+ICAgICBQQ0kv\n"
- "SU9WOiBVc2UgVkYwIGNhY2hlZCBjb25maWcgcmVnaXN0ZXJzIGZvciBvdGhlciBWRnMNCj4gICAg\n"
- "IA0KPiAgICAgQ2FjaGUgc29tZSBjb25maWcgZGF0YSBmcm9tIFZGMCBhbmQgdXNlIGl0IGZvciBh\n"
- "bGwgb3RoZXIgVkZzIGluc3RlYWQgb2YNCj4gICAgIHJlYWRpbmcgaXQgZnJvbSB0aGUgY29uZmln\n"
- "IHNwYWNlIG9mIGVhY2ggVkYuICBXZSBhc3N1bWUgdGhlc2UgaXRlbXMgYXJlIHRoZQ0KPiAgICAg\n"
- "c2FtZSBhY3Jvc3MgYWxsIGFzc29jaWF0ZWQgVkZzOg0KPiAgICAgDQo+ICAgICAgIFJldmlzaW9u\n"
- "IElEDQo+ICAgICAgIENsYXNzIENvZGUNCj4gICAgICAgU3Vic3lzdGVtIFZlbmRvciBJRA0KPiAg\n"
- "ICAgICBTdWJzeXN0ZW0gSUQNCj4gICAgIA0KPiAgICAgVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24g\n"
- "d2hlbiBlbmFibGluZyBTUi1JT1Ygb24gYSBkZXZpY2Ugd2l0aCBtYW55IFZGcy4NCj4gICAgIA0K\n"
- "PiAgICAgU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRl\n"
- "Pg0KPiAgICAgW2JoZWxnYWFzOiBjaGFuZ2Vsb2csIHNpbXBsaWZ5IGNvbW1lbnRzLCByZW1vdmUg\n"
- "dW51c2VkICJkZXZpY2UiXQ0KPiAgICAgU2lnbmVkLW9mZi1ieTogQmpvcm4gSGVsZ2FhcyA8aGVs\n"
- "Z2Fhc0BrZXJuZWwub3JnPg0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIv\n"
- "ZHJpdmVycy9wY2kvaW92LmMNCj4gaW5kZXggNjc3OTI0YWUwMzUwLi4zMGJmOGY3MDZlZDkgMTAw\n"
- "NjQ0DQo+IC0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jDQo+ICsrKyBiL2RyaXZlcnMvcGNpL2lvdi5j\n"
- "DQo+IEBAIC0xMTQsNiArMTE0LDI5IEBAIHJlc291cmNlX3NpemVfdCBwY2lfaW92X3Jlc291cmNl\n"
- "X3NpemUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQ0KPiAgCXJldHVybiBkZXYtPnNy\n"
- "aW92LT5iYXJzeltyZXNubyAtIFBDSV9JT1ZfUkVTT1VSQ0VTXTsNCj4gIH0NCj4gIA0KPiArc3Rh\n"
- "dGljIHZvaWQgcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqdmlydGZu\n"
- "KQ0KPiArew0KPiArCXN0cnVjdCBwY2lfZGV2ICpwaHlzZm4gPSB2aXJ0Zm4tPnBoeXNmbjsNCj4g\n"
- "Kw0KPiArCS8qDQo+ICsJICogU29tZSBjb25maWcgcmVnaXN0ZXJzIGFyZSB0aGUgc2FtZSBhY3Jv\n"
- "c3MgYWxsIGFzc29jaWF0ZWQgVkZzLg0KPiArCSAqIFJlYWQgdGhlbSBvbmNlIGZyb20gVkYwIHNv\n"
- "IHdlIGNhbiBza2lwIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiArCSAqIG90aGVyIFZGcy4NCj4g\n"
- "KwkgKg0KPiArCSAqIFBDSWUgcjQuMCwgc2VjIDkuMy40LjEsIHRlY2huaWNhbGx5IGRvZXNuJ3Qg\n"
- "cmVxdWlyZSBhbGwgVkZzIHRvDQo+ICsJICogaGF2ZSB0aGUgc2FtZSBSZXZpc2lvbiBJRCBhbmQg\n"
- "U3Vic3lzdGVtIElELCBidXQgd2UgYXNzdW1lIHRoZXkNCj4gKwkgKiBkby4NCj4gKwkgKi8NCj4g\n"
- "KwlwY2lfcmVhZF9jb25maWdfZHdvcmQodmlydGZuLCBQQ0lfQ0xBU1NfUkVWSVNJT04sDQo+ICsJ\n"
- "CQkgICAgICAmcGh5c2ZuLT5zcmlvdi0+Y2xhc3MpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRl\n"
- "KHZpcnRmbiwgUENJX0hFQURFUl9UWVBFLA0KPiArCQkJICAgICAmcGh5c2ZuLT5zcmlvdi0+aGRy\n"
- "X3R5cGUpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ193b3JkKHZpcnRmbiwgUENJX1NVQlNZU1RFTV9W\n"
- "RU5ET1JfSUQsDQo+ICsJCQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fdmVuZG9yKTsN\n"
- "Cj4gKwlwY2lfcmVhZF9jb25maWdfd29yZCh2aXJ0Zm4sIFBDSV9TVUJTWVNURU1fSUQsDQo+ICsJ\n"
- "CQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fZGV2aWNlKTsNCj4gK30NCj4gKw0KPiAg\n"
- "aW50IHBjaV9pb3ZfYWRkX3ZpcnRmbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQpDQo+ICB7\n"
- "DQo+ICAJaW50IGk7DQo+IEBAIC0xMzYsMTMgKzE1OSwxNyBAQCBpbnQgcGNpX2lvdl9hZGRfdmly\n"
- "dGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCkNCj4gIAl2aXJ0Zm4tPmRldmZuID0gcGNp\n"
- "X2lvdl92aXJ0Zm5fZGV2Zm4oZGV2LCBpZCk7DQo+ICAJdmlydGZuLT52ZW5kb3IgPSBkZXYtPnZl\n"
- "bmRvcjsNCj4gIAl2aXJ0Zm4tPmRldmljZSA9IGlvdi0+dmZfZGV2aWNlOw0KPiArCXZpcnRmbi0+\n"
- "aXNfdmlydGZuID0gMTsNCj4gKwl2aXJ0Zm4tPnBoeXNmbiA9IHBjaV9kZXZfZ2V0KGRldik7DQo+\n"
- "ICsNCj4gKwlpZiAoaWQgPT0gMCkNCj4gKwkJcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbih2aXJ0\n"
- "Zm4pOw0KPiArDQo+ICAJcmMgPSBwY2lfc2V0dXBfZGV2aWNlKHZpcnRmbik7DQo+ICAJaWYgKHJj\n"
- "KQ0KPiAtCQlnb3RvIGZhaWxlZDA7DQo+ICsJCWdvdG8gZmFpbGVkMTsNCj4gIA0KPiAgCXZpcnRm\n"
- "bi0+ZGV2LnBhcmVudCA9IGRldi0+ZGV2LnBhcmVudDsNCj4gLQl2aXJ0Zm4tPnBoeXNmbiA9IHBj\n"
- "aV9kZXZfZ2V0KGRldik7DQo+IC0JdmlydGZuLT5pc192aXJ0Zm4gPSAxOw0KPiAgCXZpcnRmbi0+\n"
- "bXVsdGlmdW5jdGlvbiA9IDA7DQo+ICANCj4gIAlmb3IgKGkgPSAwOyBpIDwgUENJX1NSSU9WX05V\n"
- "TV9CQVJTOyBpKyspIHsNCj4gQEAgLTE2MywxMCArMTkwLDEwIEBAIGludCBwY2lfaW92X2FkZF92\n"
- "aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKQ0KPiAgCXNwcmludGYoYnVmLCAidmly\n"
- "dGZuJXUiLCBpZCk7DQo+ICAJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5kZXYua29iaiwg\n"
- "JnZpcnRmbi0+ZGV2LmtvYmosIGJ1Zik7DQo+ICAJaWYgKHJjKQ0KPiAtCQlnb3RvIGZhaWxlZDE7\n"
- "DQo+ICsJCWdvdG8gZmFpbGVkMjsNCj4gIAlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ2aXJ0Zm4t\n"
- "PmRldi5rb2JqLCAmZGV2LT5kZXYua29iaiwgInBoeXNmbiIpOw0KPiAgCWlmIChyYykNCj4gLQkJ\n"
- "Z290byBmYWlsZWQyOw0KPiArCQlnb3RvIGZhaWxlZDM7DQo+ICANCj4gIAlrb2JqZWN0X3VldmVu\n"
- "dCgmdmlydGZuLT5kZXYua29iaiwgS09CSl9DSEFOR0UpOw0KPiAgDQo+IEBAIC0xNzQsMTEgKzIw\n"
- "MSwxMiBAQCBpbnQgcGNpX2lvdl9hZGRfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBp\n"
- "ZCkNCj4gIA0KPiAgCXJldHVybiAwOw0KPiAgDQo+IC1mYWlsZWQyOg0KPiArZmFpbGVkMzoNCj4g\n"
- "IAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgYnVmKTsNCj4gK2ZhaWxlZDI6DQo+\n"
- "ICsJcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNlKHZpcnRmbik7DQo+ICBmYWlsZWQxOg0K\n"
- "PiAgCXBjaV9kZXZfcHV0KGRldik7DQo+IC0JcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNl\n"
- "KHZpcnRmbik7DQo+ICBmYWlsZWQwOg0KPiAgCXZpcnRmbl9yZW1vdmVfYnVzKGRldi0+YnVzLCBi\n"
- "dXMpOw0KPiAgZmFpbGVkOg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2\n"
- "ZXJzL3BjaS9wY2kuaA0KPiBpbmRleCBmY2Q4MTkxMWIxMjcuLmRiNzY5MzNiZTg1OSAxMDA2NDQN\n"
- "Cj4gLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgNCj4gKysrIGIvZHJpdmVycy9wY2kvcGNpLmgNCj4g\n"
- "QEAgLTI3MSw2ICsyNzEsMTAgQEAgc3RydWN0IHBjaV9zcmlvdiB7DQo+ICAJdTE2CQlkcml2ZXJf\n"
- "bWF4X1ZGczsJLyogTWF4IG51bSBWRnMgZHJpdmVyIHN1cHBvcnRzICovDQo+ICAJc3RydWN0IHBj\n"
- "aV9kZXYJKmRldjsJCS8qIExvd2VzdCBudW1iZXJlZCBQRiAqLw0KPiAgCXN0cnVjdCBwY2lfZGV2\n"
- "CSpzZWxmOwkJLyogVGhpcyBQRiAqLw0KPiArCXUzMgkJY2xhc3M7CQkvKiBWRiBjbGFzcyAqLw0K\n"
- "PiArCXU4CQloZHJfdHlwZTsJLyogVkYgaGVhZGVyIHR5cGUgKi8NCj4gKwl1MTYJCXN1YnN5c3Rl\n"
- "bV92ZW5kb3I7IC8qIFZGIHN1YnN5c3RlbSB2ZW5kb3IgKi8NCj4gKwl1MTYJCXN1YnN5c3RlbV9k\n"
- "ZXZpY2U7IC8qIFZGIHN1YnN5c3RlbSBkZXZpY2UgKi8NCj4gIAlyZXNvdXJjZV9zaXplX3QJYmFy\n"
- "c3pbUENJX1NSSU9WX05VTV9CQVJTXTsJLyogVkYgQkFSIHNpemUgKi8NCj4gIAlib29sCQlkcml2\n"
- "ZXJzX2F1dG9wcm9iZTsgLyogQXV0byBwcm9iaW5nIG9mIFZGcyBieSBkcml2ZXIgKi8NCj4gIH07\n"
- "DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUu\n"
- "Yw0KPiBpbmRleCBhMWNkZGNhMzc3OTMuLjc4ZGViOTUwYmRhMSAxMDA2NDQNCj4gLS0tIGEvZHJp\n"
- "dmVycy9wY2kvcHJvYmUuYw0KPiArKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jDQo+IEBAIC0xNDYx\n"
- "LDcgKzE0NjEsOSBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K\n"
- "PiAgCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247DQo+ICAJc3RydWN0IHJlc291cmNlICpy\n"
- "ZXM7DQo+ICANCj4gLQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZ\n"
- "UEUsICZoZHJfdHlwZSkpDQo+ICsJaWYgKGRldi0+aXNfdmlydGZuKQ0KPiArCQloZHJfdHlwZSA9\n"
- "IGRldi0+cGh5c2ZuLT5zcmlvdi0+aGRyX3R5cGU7DQo+ICsJZWxzZSBpZiAocGNpX3JlYWRfY29u\n"
- "ZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpDQo+ICAJCXJldHVybiAt\n"
- "RUlPOw0KPiAgDQo+ICAJZGV2LT5zeXNkYXRhID0gZGV2LT5idXMtPnN5c2RhdGE7DQo+IEBAIC0x\n"
- "NDg0LDcgKzE0ODYsMTAgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRl\n"
- "dikNCj4gIAkJICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwNCj4g\n"
- "IAkJICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7DQo+ICANCj4gLQlwY2lfcmVhZF9jb25maWdf\n"
- "ZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzcyk7DQo+ICsJaWYgKGRldi0+aXNf\n"
- "dmlydGZuKQ0KPiArCQljbGFzcyA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+Y2xhc3M7DQo+ICsJZWxz\n"
- "ZQ0KPiArCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZj\n"
- "bGFzcyk7DQo+ICAJZGV2LT5yZXZpc2lvbiA9IGNsYXNzICYgMHhmZjsNCj4gIAlkZXYtPmNsYXNz\n"
- "ID0gY2xhc3MgPj4gODsJCSAgICAvKiB1cHBlciAzIGJ5dGVzICovDQo+ICANCj4gQEAgLTE1MjQs\n"
- "OCArMTUyOSwxMyBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K\n"
- "PiAgCQkJZ290byBiYWQ7DQo+ICAJCXBjaV9yZWFkX2lycShkZXYpOw0KPiAgCQlwY2lfcmVhZF9i\n"
- "YXNlcyhkZXYsIDYsIFBDSV9ST01fQUREUkVTUyk7DQo+IC0JCXBjaV9yZWFkX2NvbmZpZ193b3Jk\n"
- "KGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0K\n"
- "PiAtCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQsICZkZXYtPnN1\n"
- "YnN5c3RlbV9kZXZpY2UpOw0KPiArCQlpZiAoZGV2LT5pc192aXJ0Zm4pIHsNCj4gKwkJCWRldi0+\n"
- "c3Vic3lzdGVtX3ZlbmRvciA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lzdGVtX3ZlbmRvcjsN\n"
- "Cj4gKwkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lz\n"
- "dGVtX2RldmljZTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRl\n"
- "diwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0KPiAr\n"
- "CQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmZGV2LT5zdWJz\n"
- "eXN0ZW1fZGV2aWNlKTsNCj4gKwkJfQ0KPiAgDQo+ICAJCS8qDQo+ICAJCSAqIERvIHRoZSB1Z2x5\n"
- "IGxlZ2FjeSBtb2RlIHN0dWZmIGhlcmUgcmF0aGVyIHRoYW4gYnJva2VuIGNoaXANCj4gDQpBbWF6\n"
- "b24gRGV2ZWxvcG1lbnQgQ2VudGVyIEdlcm1hbnkgR21iSApCZXJsaW4gLSBEcmVzZGVuIC0gQWFj\n"
- "aGVuCm1haW4gb2ZmaWNlOiBLcmF1c2Vuc3RyLiAzOCwgMTAxMTcgQmVybGluCkdlc2NoYWVmdHNm\n"
- "dWVocmVyOiBEci4gUmFsZiBIZXJicmljaCwgQ2hyaXN0aWFuIFNjaGxhZWdlcgpVc3QtSUQ6IERF\n"
- "Mjg5MjM3ODc5CkVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIEhSQiAx\n"
- NDkxNzMgQgo=
+ "On Fri, 2018-03-02 at 15:36 -0600, Bjorn Helgaas wrote:\n"
+ "> On Thu, Mar 01, 2018 at 10:31:36PM +0100, KarimAllah Ahmed wrote:\n"
+ "> > \n"
+ "> > Store more data about PCI VFs into the SRIOV to avoid reading them from the\n"
+ "> > config space of all the PCI VFs. This is specially a useful optimization\n"
+ "> > when bringing up thousands of VFs.\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"
+ "> Applied to pci/virtualization for v4.17, thanks!\n"
+ "> \n"
+ "> I removed the pci_sriov.device field, which seemed to be unused, and\n"
+ "> tweaked a few other things, so make sure I didn't break anything.\n"
+ "\n"
+ "Yup, still looks good (and works) for me. Thanks.\n"
+ "\n"
+ "> Here's what I have currently applied:\n"
+ "> \n"
+ "> commit e17b7b429b095200f93ad37c4efeb7a99b6fce3b\n"
+ "> Author: KarimAllah Ahmed <karahmed@amazon.de>\n"
+ "> Date:   Thu Mar 1 22:31:36 2018 +0100\n"
+ "> \n"
+ ">     PCI/IOV: Use VF0 cached config registers for other VFs\n"
+ ">     \n"
+ ">     Cache some config data from VF0 and use it for all other VFs instead of\n"
+ ">     reading it from the config space of each VF.  We assume these items are the\n"
+ ">     same across all associated VFs:\n"
+ ">     \n"
+ ">       Revision ID\n"
+ ">       Class Code\n"
+ ">       Subsystem Vendor ID\n"
+ ">       Subsystem ID\n"
+ ">     \n"
+ ">     This is an optimization when enabling SR-IOV on a device with many VFs.\n"
+ ">     \n"
+ ">     Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>\n"
+ ">     [bhelgaas: changelog, simplify comments, remove unused \"device\"]\n"
+ ">     Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>\n"
+ "> \n"
+ "> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c\n"
+ "> index 677924ae0350..30bf8f706ed9 100644\n"
+ "> --- a/drivers/pci/iov.c\n"
+ "> +++ b/drivers/pci/iov.c\n"
+ "> @@ -114,6 +114,29 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)\n"
+ ">  \treturn dev->sriov->barsz[resno - PCI_IOV_RESOURCES];\n"
+ ">  }\n"
+ ">  \n"
+ "> +static void pci_read_vf_config_common(struct pci_dev *virtfn)\n"
+ "> +{\n"
+ "> +\tstruct pci_dev *physfn = virtfn->physfn;\n"
+ "> +\n"
+ "> +\t/*\n"
+ "> +\t * Some config registers are the same across all associated VFs.\n"
+ "> +\t * Read them once from VF0 so we can skip reading them from the\n"
+ "> +\t * other VFs.\n"
+ "> +\t *\n"
+ "> +\t * PCIe r4.0, sec 9.3.4.1, technically doesn't require all VFs to\n"
+ "> +\t * have the same Revision ID and Subsystem ID, but we assume they\n"
+ "> +\t * do.\n"
+ "> +\t */\n"
+ "> +\tpci_read_config_dword(virtfn, PCI_CLASS_REVISION,\n"
+ "> +\t\t\t      &physfn->sriov->class);\n"
+ "> +\tpci_read_config_byte(virtfn, PCI_HEADER_TYPE,\n"
+ "> +\t\t\t     &physfn->sriov->hdr_type);\n"
+ "> +\tpci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID,\n"
+ "> +\t\t\t     &physfn->sriov->subsystem_vendor);\n"
+ "> +\tpci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,\n"
+ "> +\t\t\t     &physfn->sriov->subsystem_device);\n"
+ "> +}\n"
+ "> +\n"
+ ">  int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ ">  {\n"
+ ">  \tint i;\n"
+ "> @@ -136,13 +159,17 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ ">  \tvirtfn->devfn = pci_iov_virtfn_devfn(dev, id);\n"
+ ">  \tvirtfn->vendor = dev->vendor;\n"
+ ">  \tvirtfn->device = iov->vf_device;\n"
+ "> +\tvirtfn->is_virtfn = 1;\n"
+ "> +\tvirtfn->physfn = pci_dev_get(dev);\n"
+ "> +\n"
+ "> +\tif (id == 0)\n"
+ "> +\t\tpci_read_vf_config_common(virtfn);\n"
+ "> +\n"
+ ">  \trc = pci_setup_device(virtfn);\n"
+ ">  \tif (rc)\n"
+ "> -\t\tgoto failed0;\n"
+ "> +\t\tgoto failed1;\n"
+ ">  \n"
+ ">  \tvirtfn->dev.parent = dev->dev.parent;\n"
+ "> -\tvirtfn->physfn = pci_dev_get(dev);\n"
+ "> -\tvirtfn->is_virtfn = 1;\n"
+ ">  \tvirtfn->multifunction = 0;\n"
+ ">  \n"
+ ">  \tfor (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {\n"
+ "> @@ -163,10 +190,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ ">  \tsprintf(buf, \"virtfn%u\", id);\n"
+ ">  \trc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);\n"
+ ">  \tif (rc)\n"
+ "> -\t\tgoto failed1;\n"
+ "> +\t\tgoto failed2;\n"
+ ">  \trc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, \"physfn\");\n"
+ ">  \tif (rc)\n"
+ "> -\t\tgoto failed2;\n"
+ "> +\t\tgoto failed3;\n"
+ ">  \n"
+ ">  \tkobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);\n"
+ ">  \n"
+ "> @@ -174,11 +201,12 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ ">  \n"
+ ">  \treturn 0;\n"
+ ">  \n"
+ "> -failed2:\n"
+ "> +failed3:\n"
+ ">  \tsysfs_remove_link(&dev->dev.kobj, buf);\n"
+ "> +failed2:\n"
+ "> +\tpci_stop_and_remove_bus_device(virtfn);\n"
+ ">  failed1:\n"
+ ">  \tpci_dev_put(dev);\n"
+ "> -\tpci_stop_and_remove_bus_device(virtfn);\n"
+ ">  failed0:\n"
+ ">  \tvirtfn_remove_bus(dev->bus, bus);\n"
+ ">  failed:\n"
+ "> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h\n"
+ "> index fcd81911b127..db76933be859 100644\n"
+ "> --- a/drivers/pci/pci.h\n"
+ "> +++ b/drivers/pci/pci.h\n"
+ "> @@ -271,6 +271,10 @@ struct pci_sriov {\n"
+ ">  \tu16\t\tdriver_max_VFs;\t/* Max num VFs driver supports */\n"
+ ">  \tstruct pci_dev\t*dev;\t\t/* Lowest numbered PF */\n"
+ ">  \tstruct pci_dev\t*self;\t\t/* This PF */\n"
+ "> +\tu32\t\tclass;\t\t/* VF class */\n"
+ "> +\tu8\t\thdr_type;\t/* VF header type */\n"
+ "> +\tu16\t\tsubsystem_vendor; /* VF subsystem vendor */\n"
+ "> +\tu16\t\tsubsystem_device; /* VF subsystem device */\n"
+ ">  \tresource_size_t\tbarsz[PCI_SRIOV_NUM_BARS];\t/* VF BAR size */\n"
+ ">  \tbool\t\tdrivers_autoprobe; /* Auto probing of VFs by driver */\n"
+ ">  };\n"
+ "> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c\n"
+ "> index a1cddca37793..78deb950bda1 100644\n"
+ "> --- a/drivers/pci/probe.c\n"
+ "> +++ b/drivers/pci/probe.c\n"
+ "> @@ -1461,7 +1461,9 @@ int pci_setup_device(struct pci_dev *dev)\n"
+ ">  \tstruct pci_bus_region region;\n"
+ ">  \tstruct resource *res;\n"
+ ">  \n"
+ "> -\tif (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))\n"
+ "> +\tif (dev->is_virtfn)\n"
+ "> +\t\thdr_type = dev->physfn->sriov->hdr_type;\n"
+ "> +\telse if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))\n"
+ ">  \t\treturn -EIO;\n"
+ ">  \n"
+ ">  \tdev->sysdata = dev->bus->sysdata;\n"
+ "> @@ -1484,7 +1486,10 @@ int pci_setup_device(struct pci_dev *dev)\n"
+ ">  \t\t     dev->bus->number, PCI_SLOT(dev->devfn),\n"
+ ">  \t\t     PCI_FUNC(dev->devfn));\n"
+ ">  \n"
+ "> -\tpci_read_config_dword(dev, PCI_CLASS_REVISION, &class);\n"
+ "> +\tif (dev->is_virtfn)\n"
+ "> +\t\tclass = dev->physfn->sriov->class;\n"
+ "> +\telse\n"
+ "> +\t\tpci_read_config_dword(dev, PCI_CLASS_REVISION, &class);\n"
+ ">  \tdev->revision = class & 0xff;\n"
+ ">  \tdev->class = class >> 8;\t\t    /* upper 3 bytes */\n"
+ ">  \n"
+ "> @@ -1524,8 +1529,13 @@ int pci_setup_device(struct pci_dev *dev)\n"
+ ">  \t\t\tgoto bad;\n"
+ ">  \t\tpci_read_irq(dev);\n"
+ ">  \t\tpci_read_bases(dev, 6, PCI_ROM_ADDRESS);\n"
+ "> -\t\tpci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);\n"
+ "> -\t\tpci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);\n"
+ "> +\t\tif (dev->is_virtfn) {\n"
+ "> +\t\t\tdev->subsystem_vendor = dev->physfn->sriov->subsystem_vendor;\n"
+ "> +\t\t\tdev->subsystem_device = dev->physfn->sriov->subsystem_device;\n"
+ "> +\t\t} else {\n"
+ "> +\t\t\tpci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);\n"
+ "> +\t\t\tpci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);\n"
+ "> +\t\t}\n"
+ ">  \n"
+ ">  \t\t/*\n"
+ ">  \t\t * Do the ugly legacy mode stuff here rather than broken chip\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
 
-32934a8dd4fc28c557089113902c3c0d42ecb88d9be01dabc60a815b8583067c
+e1932df91bc45910d5f8ceae7e12b0d1d083c35773c99b7354e65eeb04bac3e5

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.