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.