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

diff --git a/a/1.txt b/N1/1.txt
index 6058f56..9203f71 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,151 +1,230 @@
-T24gVGh1LCAyMDE4LTAzLTAxIGF0IDEzOjM0IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K
-PiBzfHBjaTogU3RvcmV8UENJL0lPVjogU3RvcmV8DQo+IA0KPiAocnVuICJnaXQgbG9nIC0tb25l
-bGluZSBkcml2ZXJzL3BjaS9wcm9iZS5jIiB0byBzZWUgd2h5KQ0KPiANCj4gT24gVGh1LCBNYXIg
-MDEsIDIwMTggYXQgMDI6MjY6MDRQTSArMDEwMCwgS2FyaW1BbGxhaCBBaG1lZCB3cm90ZToNCj4g
-PiANCj4gPiAuLi4gdG8gYXZvaWQgcmVhZGluZyB0aGVtIGZyb20gdGhlIGNvbmZpZyBzcGFjZSBv
-ZiBhbGwgdGhlIFBDSSBWRnMuIFRoaXMgaXMNCj4gPiBzcGVjaWFsbHkgYSB1c2VmdWwgb3B0aW1p
-emF0aW9uIHdoZW4gYnJpbmdpbmcgdXAgdGhvdXNhbmRzIG9mIFZGcy4NCj4gDQo+IFBsZWFzZSBt
-YWtlIHRoZSBjaGFuZ2Vsb2cgY29tcGxldGUgaW4gaXRzZWxmLCBzbyBpdCBkb2Vzbid0IGhhdmUg
-dG8gYmUNCj4gcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzdWJqZWN0LiAgSXQncyBPSyBp
-ZiB5b3UgaGF2ZSB0byByZXBlYXQNCj4gdGhlIHN1YmplY3QgaW4gdGhlIGNoYW5nZWxvZy4NCg0K
-YWNrLg0KDQo+IA0KPiA+IA0KPiA+IENjOiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUu
-Y29tPg0KPiA+IENjOiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnDQo+ID4gQ2M6IGxpbnV4LWtl
-cm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4gPiBTaWduZWQtb2ZmLWJ5OiBLYXJpbUFsbGFoIEFobWVk
-IDxrYXJhaG1lZEBhbWF6b24uZGU+DQo+ID4gLS0tDQo+ID4gdjEgLT4gdjI6DQo+ID4gKiBSZWJh
-c2Ugb24gbGF0ZXN0ICsgcmVtb3ZlIGRlcGVuZGVuY3kgb24gYSBub24tdXBzdHJlYW0gcGF0Y2gu
-DQo+ID4gDQo+ID4gIGRyaXZlcnMvcGNpL2lvdi5jICAgfCAxNiArKysrKysrKysrKysrKysrDQo+
-ID4gIGRyaXZlcnMvcGNpL3BjaS5oICAgfCAgNSArKysrKw0KPiA+ICBkcml2ZXJzL3BjaS9wcm9i
-ZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tDQo+ID4g
-IDMgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pDQo+ID4g
-DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIvZHJpdmVycy9wY2kvaW92LmMN
-Cj4gPiBpbmRleCA2Nzc5MjRhLi5lMWQyZTNmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNp
-L2lvdi5jDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvaW92LmMNCj4gPiBAQCAtMTE0LDYgKzExNCwx
-OSBAQCByZXNvdXJjZV9zaXplX3QgcGNpX2lvdl9yZXNvdXJjZV9zaXplKHN0cnVjdCBwY2lfZGV2
-ICpkZXYsIGludCByZXNubykNCj4gPiAgCXJldHVybiBkZXYtPnNyaW92LT5iYXJzeltyZXNubyAt
-IFBDSV9JT1ZfUkVTT1VSQ0VTXTsNCj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIHZvaWQgcGNp
-X3JlYWRfdmZfY29uZmlnX2NvbW1vbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2Rl
-diAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlpbnQgZGV2Zm4gPSBwY2lfaW92X3ZpcnRmbl9kZXZmbihk
-ZXYsIDApOw0KPiA+ICsNCj4gPiArCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCBkZXZm
-biwgUENJX0NMQVNTX1JFVklTSU9OLA0KPiA+ICsJCQkJICAmZGV2LT5zcmlvdi0+Y2xhc3MpOw0K
-PiA+ICsJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIFBDSV9TVUJTWVNURU1f
-SUQsDQo+ID4gKwkJCQkgJmRldi0+c3Jpb3YtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJcGNp
-X2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIFBDSV9TVUJTWVNURU1fVkVORE9SX0lE
-LA0KPiA+ICsJCQkJICZkZXYtPnNyaW92LT5zdWJzeXN0ZW1fdmVuZG9yKTsNCj4gPiArCXBjaV9i
-dXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZkZXYtPnNy
-aW92LT5oZHJfdHlwZSk7DQo+IA0KPiBDYW4ndCB5b3UgZG8gdGhpcyBhIGxpdHRsZSBsYXRlciwg
-ZS5nLiwgYWZ0ZXIgcGNpX2lvdl9hZGRfdmlydGZuKCkNCj4gY2FsbHMgcGNpX3NldHVwX2Rldmlj
-ZSgpLCBhbmQgdGhlbiB1c2UgdGhlIHN0YW5kYXJkDQo+IHBjaV9yZWFkX2NvbmZpZ18qKCkgaW50
-ZXJmYWNlcyBpbnN0ZWFkIG9mIHRoZSBzcGVjaWFsDQo+IHBjaV9idXNfcmVhZF9jb25maWcqKCkg
-b25lcz8NCg0KYWNrLg0KDQpJIG1vdmVkIGl0IGFmdGVyICJwY2lfaW92X3ZpcnRmbl9kZXZmbiIu
-DQoNCj4gDQo+ID4gDQo+ID4gK30NCj4gPiArDQo+ID4gIGludCBwY2lfaW92X2FkZF92aXJ0Zm4o
-c3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKQ0KPiA+ICB7DQo+ID4gIAlpbnQgaTsNCj4gPiBA
-QCAtMTMzLDYgKzE0Niw5IEBAIGludCBwY2lfaW92X2FkZF92aXJ0Zm4oc3RydWN0IHBjaV9kZXYg
-KmRldiwgaW50IGlkKQ0KPiA+ICAJaWYgKCF2aXJ0Zm4pDQo+ID4gIAkJZ290byBmYWlsZWQwOw0K
-PiA+ICANCj4gPiArCWlmIChpZCA9PSAwKQ0KPiA+ICsJCXBjaV9yZWFkX3ZmX2NvbmZpZ19jb21t
-b24oYnVzLCBkZXYpOw0KPiA+ICsNCj4gPiAgCXZpcnRmbi0+ZGV2Zm4gPSBwY2lfaW92X3ZpcnRm
-bl9kZXZmbihkZXYsIGlkKTsNCj4gPiAgCXZpcnRmbi0+dmVuZG9yID0gZGV2LT52ZW5kb3I7DQo+
-ID4gIAl2aXJ0Zm4tPmRldmljZSA9IGlvdi0+dmZfZGV2aWNlOw0KPiA+IGRpZmYgLS1naXQgYS9k
-cml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oDQo+ID4gaW5kZXggZmNkODE5MS4u
-MzQ2ZGFhNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9wY2kuaA0KPiA+ICsrKyBiL2Ry
-aXZlcnMvcGNpL3BjaS5oDQo+ID4gQEAgLTI3MSw2ICsyNzEsMTEgQEAgc3RydWN0IHBjaV9zcmlv
-diB7DQo+ID4gIAl1MTYJCWRyaXZlcl9tYXhfVkZzOwkvKiBNYXggbnVtIFZGcyBkcml2ZXIgc3Vw
-cG9ydHMgKi8NCj4gPiAgCXN0cnVjdCBwY2lfZGV2CSpkZXY7CQkvKiBMb3dlc3QgbnVtYmVyZWQg
-UEYgKi8NCj4gPiAgCXN0cnVjdCBwY2lfZGV2CSpzZWxmOwkJLyogVGhpcyBQRiAqLw0KPiA+ICsJ
-dTggaGRyX3R5cGU7CQkvKiBWRiBoZWFkZXIgdHlwZSAqLw0KPiA+ICsJdTMyIGNsYXNzOwkJLyog
-VkYgZGV2aWNlICovDQo+ID4gKwl1MTYgZGV2aWNlOwkJLyogVkYgZGV2aWNlICovDQo+ID4gKwl1
-MTYgc3Vic3lzdGVtX3ZlbmRvcjsJLyogVkYgc3Vic3lzdGVtIHZlbmRvciAqLw0KPiA+ICsJdTE2
-IHN1YnN5c3RlbV9kZXZpY2U7CS8qIFZGIHN1YnN5c3RlbSBkZXZpY2UgKi8NCj4gDQo+IFBsZWFz
-ZSBtYWtlIHRoZSB3aGl0ZXNwYWNlIGhlcmUgbWF0Y2ggdGhlIGV4aXN0aW5nIGNvZGUsIGkuZS4s
-DQo+IGxpbmUgdXAgdGhlIHN0cnVjdHVyZSBlbGVtZW50IG5hbWVzIGFuZCBjb21tZW50cy4NCg0K
-YWNrIQ0KDQo+IA0KPiA+IA0KPiA+ICAJcmVzb3VyY2Vfc2l6ZV90CWJhcnN6W1BDSV9TUklPVl9O
-VU1fQkFSU107CS8qIFZGIEJBUiBzaXplICovDQo+ID4gIAlib29sCQlkcml2ZXJzX2F1dG9wcm9i
-ZTsgLyogQXV0byBwcm9iaW5nIG9mIFZGcyBieSBkcml2ZXIgKi8NCj4gPiAgfTsNCj4gPiBkaWZm
-IC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMNCj4gPiBp
-bmRleCBlZjUzNzc0Li5hZWFhMTBhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL3Byb2Jl
-LmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jDQo+ID4gQEAgLTE4MCw2ICsxODAsNyBA
-QCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVjb2RlX2JhcihzdHJ1Y3QgcGNpX2RldiAq
-ZGV2LCB1MzIgYmFyKQ0KPiA+ICBpbnQgX19wY2lfcmVhZF9iYXNlKHN0cnVjdCBwY2lfZGV2ICpk
-ZXYsIGVudW0gcGNpX2Jhcl90eXBlIHR5cGUsDQo+ID4gIAkJICAgIHN0cnVjdCByZXNvdXJjZSAq
-cmVzLCB1bnNpZ25lZCBpbnQgcG9zKQ0KPiA+ICB7DQo+ID4gKwlpbnQgYmFyID0gcmVzIC0gZGV2
-LT5yZXNvdXJjZTsNCj4gPiAgCXUzMiBsID0gMCwgc3ogPSAwLCBtYXNrOw0KPiA+ICAJdTY0IGw2
-NCwgc3o2NCwgbWFzazY0Ow0KPiA+ICAJdTE2IG9yaWdfY21kOw0KPiA+IEBAIC0xOTksOSArMjAw
-LDEzIEBAIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSBwY2lf
-YmFyX3R5cGUgdHlwZSwNCj4gPiAgCXJlcy0+bmFtZSA9IHBjaV9uYW1lKGRldik7DQo+ID4gIA0K
-PiA+ICAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmbCk7DQo+ID4gLQlwY2lfd3Jp
-dGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsIHwgbWFzayk7DQo+ID4gLQlwY2lfcmVhZF9jb25m
-aWdfZHdvcmQoZGV2LCBwb3MsICZzeik7DQo+ID4gLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRl
-diwgcG9zLCBsKTsNCj4gPiArCWlmIChkZXYtPmlzX3ZpcnRmbikgew0KPiA+ICsJCXN6ID0gZGV2
-LT5waHlzZm4tPnNyaW92LT5iYXJzeltiYXJdICYgMHhmZmZmZmZmZjsNCj4gPiArCX0gZWxzZSB7
-DQo+ID4gKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgbCB8IG1hc2spOw0KPiA+
-ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcywgJnN6KTsNCj4gPiArCQlwY2lfd3Jp
-dGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsKTsNCj4gPiArCX0NCj4gDQo+IFRoaXMgcGFydCBp
-cyBub3QgbGlrZSB0aGUgb3RoZXJzLCBpLmUuLCB0aGUgb3RoZXJzIGFyZSBjYWNoaW5nIGluZm8N
-Cj4gZnJvbSBWRiAwIGluIG5ld2x5LWFkZGVkIGVsZW1lbnRzIG9mIHN0cnVjdCBwY2lfc3Jpb3Yu
-ICBUaGlzIGFsc28gdXNlcw0KPiBpbmZvcm1hdGlvbiBmcm9tIHN0cnVjdCBwY2lfc3Jpb3YsIGJ1
-dCBpdCdzIHF1YWxpdGF0aXZlbHkgZGlmZmVyZW50LA0KPiBzbyBpdCBzaG91bGQgYmUgaW4gYSBz
-ZXBhcmF0ZSBwYXRjaC4NCg0KYWNrLiBNb3ZlZCB0byBhIHNlcGVyYXRlIHBhdGNoLg0KDQo+IA0K
-PiA+IA0KPiA+ICAJLyoNCj4gPiAgCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2
-aWNlIGlzbid0IHdvcmtpbmcgcHJvcGVybHkuDQo+ID4gQEAgLTI0MSw5ICsyNDYsMTQgQEAgaW50
-IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0
-eXBlLA0KPiA+ICANCj4gPiAgCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsN
-Cj4gPiAgCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7DQo+ID4gLQkJ
-cGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsIH4wKTsNCj4gPiAtCQlwY2lfcmVh
-ZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmc3opOw0KPiA+IC0JCXBjaV93cml0ZV9jb25m
-aWdfZHdvcmQoZGV2LCBwb3MgKyA0LCBsKTsNCj4gPiArDQo+ID4gKwkJaWYgKGRldi0+aXNfdmly
-dGZuKSB7DQo+ID4gKwkJCXN6ID0gKGRldi0+cGh5c2ZuLT5zcmlvdi0+YmFyc3pbYmFyXSA+PiAz
-MikgJiAweGZmZmZmZmZmOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25m
-aWdfZHdvcmQoZGV2LCBwb3MgKyA0LCB+MCk7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29y
-ZChkZXYsIHBvcyArIDQsICZzeik7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2
-LCBwb3MgKyA0LCBsKTsNCj4gPiArCQl9DQo+ID4gIA0KPiA+ICAJCWw2NCB8PSAoKHU2NClsIDw8
-IDMyKTsNCj4gPiAgCQlzejY0IHw9ICgodTY0KXN6IDw8IDMyKTsNCj4gPiBAQCAtMzMyLDYgKzM0
-Miw4IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWFkX2Jhc2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVu
-c2lnbmVkIGludCBob3dtYW55LCBpbnQgcm9tKQ0KPiA+ICAJZm9yIChwb3MgPSAwOyBwb3MgPCBo
-b3dtYW55OyBwb3MrKykgew0KPiA+ICAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVz
-b3VyY2VbcG9zXTsNCj4gPiAgCQlyZWcgPSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAocG9zIDw8IDIp
-Ow0KPiA+ICsJCWlmIChkZXYtPmlzX3ZpcnRmbiAmJiBkZXYtPnBoeXNmbi0+c3Jpb3YtPmJhcnN6
-W3Bvc10gPT0gMCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gIAkJcG9zICs9IF9fcGNpX3JlYWRf
-YmFzZShkZXYsIHBjaV9iYXJfdW5rbm93biwgcmVzLCByZWcpOw0KPiA+ICAJfQ0KPiA+ICANCj4g
-PiBAQCAtMTQ1NCw3ICsxNDY2LDkgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9k
-ZXYgKmRldikNCj4gPiAgCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247DQo+ID4gIAlzdHJ1
-Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiAgDQo+ID4gLQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUo
-ZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpDQo+ID4gKwlpZiAoZGV2LT5pc192aXJ0
-Zm4pDQo+ID4gKwkJaGRyX3R5cGUgPSBkZXYtPnBoeXNmbi0+c3Jpb3YtPmhkcl90eXBlOw0KPiA+
-ICsJZWxzZSBpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZo
-ZHJfdHlwZSkpDQo+ID4gIAkJcmV0dXJuIC1FSU87DQo+ID4gIA0KPiA+ICAJZGV2LT5zeXNkYXRh
-ID0gZGV2LT5idXMtPnN5c2RhdGE7DQo+ID4gQEAgLTE0NzcsNyArMTQ5MSwxMCBAQCBpbnQgcGNp
-X3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0KPiA+ICAJCSAgICAgZGV2LT5idXMt
-Pm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksDQo+ID4gIAkJICAgICBQQ0lfRlVOQyhkZXYt
-PmRldmZuKSk7DQo+ID4gIA0KPiA+IC0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NM
-QVNTX1JFVklTSU9OLCAmY2xhc3MpOw0KPiA+ICsJaWYgKGRldi0+aXNfdmlydGZuKQ0KPiA+ICsJ
-CWNsYXNzID0gZGV2LT5waHlzZm4tPnNyaW92LT5jbGFzczsNCj4gPiArCWVsc2UNCj4gPiArCQlw
-Y2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzcyk7DQo+
-ID4gIAlkZXYtPnJldmlzaW9uID0gY2xhc3MgJiAweGZmOw0KPiA+ICAJZGV2LT5jbGFzcyA9IGNs
-YXNzID4+IDg7CQkgICAgLyogdXBwZXIgMyBieXRlcyAqLw0KPiA+ICANCj4gPiBAQCAtMTUxNyw4
-ICsxNTM0LDEzIEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpDQo+
-ID4gIAkJCWdvdG8gYmFkOw0KPiA+ICAJCXBjaV9yZWFkX2lycShkZXYpOw0KPiA+ICAJCXBjaV9y
-ZWFkX2Jhc2VzKGRldiwgNiwgUENJX1JPTV9BRERSRVNTKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25m
-aWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmZGV2LT5zdWJzeXN0ZW1fdmVu
-ZG9yKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQs
-ICZkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJCWlmIChkZXYtPmlzX3ZpcnRmbikgew0K
-PiA+ICsJCQlkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPSBkZXYtPnBoeXNmbi0+c3Jpb3YtPnN1YnN5
-c3RlbV92ZW5kb3I7DQo+ID4gKwkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGRldi0+cGh5c2Zu
-LT5zcmlvdi0+c3Vic3lzdGVtX2RldmljZTsNCj4gDQo+IFBDSWUgcjQuMCwgc2VjIDkuMy40LjEu
-MTMgcmVxdWlyZXMgdGhhdCBTdWJzeXN0ZW0gVmVuZG9yIElEIGJlIHRoZQ0KPiBzYW1lIGZvciB0
-aGUgUEYgYW5kIGFsbCBWRnMsIGJ1dCBzZWMgOS4zLjQuMS4xNCBzYXlzIHRoZSBQRiBhbmQgVkYg
-bWF5DQo+IGhhdmUgZGlmZmVyZW50IFN1YnN5c3RlbSBJRHMuICBJIGtub3cgeW91J3JlIGNhY2hp
-bmcgdGhlIFN1YnN5c3RlbSBJRA0KPiBmcm9tIFZGIDAsIG5vdCB0aGUgUEYsIGJ1dCBJIGRvbid0
-IHNlZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGFsbCB0aGUNCj4gVkZzIHRvIGhhdmUgdGhlIHNh
-bWUgU3Vic3lzdGVtIElELg0KPiANCj4gSSB0aGluayB0aGUgc2FtZSBpcyB0ZWNobmljYWxseSB0
-cnVlIGZvciB0aGUgUmV2aXNpb24gSUQuICBJdCBtaWdodCBiZQ0KPiByZWFzb25hYmxlIHRvIGFz
-c3VtZSBhbGwgdGhlIFZGcyBoYXZlIHRoZSBzYW1lIHZhbHVlcywgYnV0IG1heWJlIHdvcnRoDQo+
-IGEgY29tbWVudC4NCg0KSSBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgdGhhdCBmb3IgdGhlIDMgZmll
-bGRzLg0KDQo+IA0KPiA+IA0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZp
-Z193b3JkKGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5k
-b3IpOw0KPiA+ICsJCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQs
-ICZkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJCX0NCj4gPiAgDQo+ID4gIAkJLyoNCj4g
-PiAgCQkgKiBEbyB0aGUgdWdseSBsZWdhY3kgbW9kZSBzdHVmZiBoZXJlIHJhdGhlciB0aGFuIGJy
-b2tlbiBjaGlwDQo+ID4gLS0gDQo+ID4gMi43LjQNCj4gPiANCj4gDQpBbWF6b24gRGV2ZWxvcG1l
-bnQgQ2VudGVyIEdlcm1hbnkgR21iSApCZXJsaW4gLSBEcmVzZGVuIC0gQWFjaGVuCm1haW4gb2Zm
-aWNlOiBLcmF1c2Vuc3RyLiAzOCwgMTAxMTcgQmVybGluCkdlc2NoYWVmdHNmdWVocmVyOiBEci4g
-UmFsZiBIZXJicmljaCwgQ2hyaXN0aWFuIFNjaGxhZWdlcgpVc3QtSUQ6IERFMjg5MjM3ODc5CkVp
-bmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIEhSQiAxNDkxNzMgQgo=
+On Thu, 2018-03-01 at 13:34 -0600, Bjorn Helgaas wrote:
+> s|pci: Store|PCI/IOV: Store|
+> 
+> (run "git log --oneline drivers/pci/probe.c" to see why)
+> 
+> On Thu, Mar 01, 2018 at 02:26:04PM +0100, KarimAllah Ahmed wrote:
+> > 
+> > ... 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.
+> 
+> Please make the changelog complete in itself, so it doesn't have to be
+> read in conjunction with the subject.  It's OK if you have to repeat
+> the subject in the changelog.
+
+ack.
+
+> 
+> > 
+> > 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>
+> > ---
+> > v1 -> v2:
+> > * Rebase on latest + remove dependency on a non-upstream patch.
+> > 
+> >  drivers/pci/iov.c   | 16 ++++++++++++++++
+> >  drivers/pci/pci.h   |  5 +++++
+> >  drivers/pci/probe.c | 42 ++++++++++++++++++++++++++++++++----------
+> >  3 files changed, 53 insertions(+), 10 deletions(-)
+> > 
+> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
+> > index 677924a..e1d2e3f 100644
+> > --- a/drivers/pci/iov.c
+> > +++ b/drivers/pci/iov.c
+> > @@ -114,6 +114,19 @@ 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_bus *bus, struct pci_dev *dev)
+> > +{
+> > +	int devfn = pci_iov_virtfn_devfn(dev, 0);
+> > +
+> > +	pci_bus_read_config_dword(bus, devfn, PCI_CLASS_REVISION,
+> > +				  &dev->sriov->class);
+> > +	pci_bus_read_config_word(bus, devfn, PCI_SUBSYSTEM_ID,
+> > +				 &dev->sriov->subsystem_device);
+> > +	pci_bus_read_config_word(bus, devfn, PCI_SUBSYSTEM_VENDOR_ID,
+> > +				 &dev->sriov->subsystem_vendor);
+> > +	pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &dev->sriov->hdr_type);
+> 
+> Can't you do this a little later, e.g., after pci_iov_add_virtfn()
+> calls pci_setup_device(), and then use the standard
+> pci_read_config_*() interfaces instead of the special
+> pci_bus_read_config*() ones?
+
+ack.
+
+I moved it after "pci_iov_virtfn_devfn".
+
+> 
+> > 
+> > +}
+> > +
+> >  int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+> >  {
+> >  	int i;
+> > @@ -133,6 +146,9 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
+> >  	if (!virtfn)
+> >  		goto failed0;
+> >  
+> > +	if (id == 0)
+> > +		pci_read_vf_config_common(bus, dev);
+> > +
+> >  	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
+> >  	virtfn->vendor = dev->vendor;
+> >  	virtfn->device = iov->vf_device;
+> > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
+> > index fcd8191..346daa5 100644
+> > --- a/drivers/pci/pci.h
+> > +++ b/drivers/pci/pci.h
+> > @@ -271,6 +271,11 @@ 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 */
+> > +	u8 hdr_type;		/* VF header type */
+> > +	u32 class;		/* VF device */
+> > +	u16 device;		/* VF device */
+> > +	u16 subsystem_vendor;	/* VF subsystem vendor */
+> > +	u16 subsystem_device;	/* VF subsystem device */
+> 
+> Please make the whitespace here match the existing code, i.e.,
+> line up the structure element names and comments.
+
+ack!
+
+> 
+> > 
+> >  	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 ef53774..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);
+> > +	}
+> 
+> This part is not like the others, i.e., the others are caching info
+> from VF 0 in newly-added elements of struct pci_sriov.  This also uses
+> information from struct pci_sriov, but it's qualitatively different,
+> so it should be in a separate patch.
+
+ack. Moved to a seperate patch.
+
+> 
+> > 
+> >  	/*
+> >  	 * 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;
+> >  		pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
+> >  	}
+> >  
+> > @@ -1454,7 +1466,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;
+> > @@ -1477,7 +1491,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 */
+> >  
+> > @@ -1517,8 +1534,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;
+> 
+> PCIe r4.0, sec 9.3.4.1.13 requires that Subsystem Vendor ID be the
+> same for the PF and all VFs, but sec 9.3.4.1.14 says the PF and VF may
+> have different Subsystem IDs.  I know you're caching the Subsystem ID
+> from VF 0, not the PF, but I don't see anything that requires all the
+> VFs to have the same Subsystem ID.
+> 
+> I think the same is technically true for the Revision ID.  It might be
+> reasonable to assume all the VFs have the same values, but maybe worth
+> a comment.
+
+I added a comment about that for the 3 fields.
+
+> 
+> > 
+> > +		} 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
+> > -- 
+> > 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 0c105dc..d9b94c4 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -9,156 +9,235 @@
  " bhelgaas@google.com <bhelgaas@google.com>\0"
  "\00:1\0"
  "b\0"
- "T24gVGh1LCAyMDE4LTAzLTAxIGF0IDEzOjM0IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K\n"
- "PiBzfHBjaTogU3RvcmV8UENJL0lPVjogU3RvcmV8DQo+IA0KPiAocnVuICJnaXQgbG9nIC0tb25l\n"
- "bGluZSBkcml2ZXJzL3BjaS9wcm9iZS5jIiB0byBzZWUgd2h5KQ0KPiANCj4gT24gVGh1LCBNYXIg\n"
- "MDEsIDIwMTggYXQgMDI6MjY6MDRQTSArMDEwMCwgS2FyaW1BbGxhaCBBaG1lZCB3cm90ZToNCj4g\n"
- "PiANCj4gPiAuLi4gdG8gYXZvaWQgcmVhZGluZyB0aGVtIGZyb20gdGhlIGNvbmZpZyBzcGFjZSBv\n"
- "ZiBhbGwgdGhlIFBDSSBWRnMuIFRoaXMgaXMNCj4gPiBzcGVjaWFsbHkgYSB1c2VmdWwgb3B0aW1p\n"
- "emF0aW9uIHdoZW4gYnJpbmdpbmcgdXAgdGhvdXNhbmRzIG9mIFZGcy4NCj4gDQo+IFBsZWFzZSBt\n"
- "YWtlIHRoZSBjaGFuZ2Vsb2cgY29tcGxldGUgaW4gaXRzZWxmLCBzbyBpdCBkb2Vzbid0IGhhdmUg\n"
- "dG8gYmUNCj4gcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzdWJqZWN0LiAgSXQncyBPSyBp\n"
- "ZiB5b3UgaGF2ZSB0byByZXBlYXQNCj4gdGhlIHN1YmplY3QgaW4gdGhlIGNoYW5nZWxvZy4NCg0K\n"
- "YWNrLg0KDQo+IA0KPiA+IA0KPiA+IENjOiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUu\n"
- "Y29tPg0KPiA+IENjOiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnDQo+ID4gQ2M6IGxpbnV4LWtl\n"
- "cm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4gPiBTaWduZWQtb2ZmLWJ5OiBLYXJpbUFsbGFoIEFobWVk\n"
- "IDxrYXJhaG1lZEBhbWF6b24uZGU+DQo+ID4gLS0tDQo+ID4gdjEgLT4gdjI6DQo+ID4gKiBSZWJh\n"
- "c2Ugb24gbGF0ZXN0ICsgcmVtb3ZlIGRlcGVuZGVuY3kgb24gYSBub24tdXBzdHJlYW0gcGF0Y2gu\n"
- "DQo+ID4gDQo+ID4gIGRyaXZlcnMvcGNpL2lvdi5jICAgfCAxNiArKysrKysrKysrKysrKysrDQo+\n"
- "ID4gIGRyaXZlcnMvcGNpL3BjaS5oICAgfCAgNSArKysrKw0KPiA+ICBkcml2ZXJzL3BjaS9wcm9i\n"
- "ZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tDQo+ID4g\n"
- "IDMgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pDQo+ID4g\n"
- "DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIvZHJpdmVycy9wY2kvaW92LmMN\n"
- "Cj4gPiBpbmRleCA2Nzc5MjRhLi5lMWQyZTNmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNp\n"
- "L2lvdi5jDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvaW92LmMNCj4gPiBAQCAtMTE0LDYgKzExNCwx\n"
- "OSBAQCByZXNvdXJjZV9zaXplX3QgcGNpX2lvdl9yZXNvdXJjZV9zaXplKHN0cnVjdCBwY2lfZGV2\n"
- "ICpkZXYsIGludCByZXNubykNCj4gPiAgCXJldHVybiBkZXYtPnNyaW92LT5iYXJzeltyZXNubyAt\n"
- "IFBDSV9JT1ZfUkVTT1VSQ0VTXTsNCj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIHZvaWQgcGNp\n"
- "X3JlYWRfdmZfY29uZmlnX2NvbW1vbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2Rl\n"
- "diAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlpbnQgZGV2Zm4gPSBwY2lfaW92X3ZpcnRmbl9kZXZmbihk\n"
- "ZXYsIDApOw0KPiA+ICsNCj4gPiArCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCBkZXZm\n"
- "biwgUENJX0NMQVNTX1JFVklTSU9OLA0KPiA+ICsJCQkJICAmZGV2LT5zcmlvdi0+Y2xhc3MpOw0K\n"
- "PiA+ICsJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIFBDSV9TVUJTWVNURU1f\n"
- "SUQsDQo+ID4gKwkJCQkgJmRldi0+c3Jpb3YtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJcGNp\n"
- "X2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIFBDSV9TVUJTWVNURU1fVkVORE9SX0lE\n"
- "LA0KPiA+ICsJCQkJICZkZXYtPnNyaW92LT5zdWJzeXN0ZW1fdmVuZG9yKTsNCj4gPiArCXBjaV9i\n"
- "dXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZkZXYtPnNy\n"
- "aW92LT5oZHJfdHlwZSk7DQo+IA0KPiBDYW4ndCB5b3UgZG8gdGhpcyBhIGxpdHRsZSBsYXRlciwg\n"
- "ZS5nLiwgYWZ0ZXIgcGNpX2lvdl9hZGRfdmlydGZuKCkNCj4gY2FsbHMgcGNpX3NldHVwX2Rldmlj\n"
- "ZSgpLCBhbmQgdGhlbiB1c2UgdGhlIHN0YW5kYXJkDQo+IHBjaV9yZWFkX2NvbmZpZ18qKCkgaW50\n"
- "ZXJmYWNlcyBpbnN0ZWFkIG9mIHRoZSBzcGVjaWFsDQo+IHBjaV9idXNfcmVhZF9jb25maWcqKCkg\n"
- "b25lcz8NCg0KYWNrLg0KDQpJIG1vdmVkIGl0IGFmdGVyICJwY2lfaW92X3ZpcnRmbl9kZXZmbiIu\n"
- "DQoNCj4gDQo+ID4gDQo+ID4gK30NCj4gPiArDQo+ID4gIGludCBwY2lfaW92X2FkZF92aXJ0Zm4o\n"
- "c3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKQ0KPiA+ICB7DQo+ID4gIAlpbnQgaTsNCj4gPiBA\n"
- "QCAtMTMzLDYgKzE0Niw5IEBAIGludCBwY2lfaW92X2FkZF92aXJ0Zm4oc3RydWN0IHBjaV9kZXYg\n"
- "KmRldiwgaW50IGlkKQ0KPiA+ICAJaWYgKCF2aXJ0Zm4pDQo+ID4gIAkJZ290byBmYWlsZWQwOw0K\n"
- "PiA+ICANCj4gPiArCWlmIChpZCA9PSAwKQ0KPiA+ICsJCXBjaV9yZWFkX3ZmX2NvbmZpZ19jb21t\n"
- "b24oYnVzLCBkZXYpOw0KPiA+ICsNCj4gPiAgCXZpcnRmbi0+ZGV2Zm4gPSBwY2lfaW92X3ZpcnRm\n"
- "bl9kZXZmbihkZXYsIGlkKTsNCj4gPiAgCXZpcnRmbi0+dmVuZG9yID0gZGV2LT52ZW5kb3I7DQo+\n"
- "ID4gIAl2aXJ0Zm4tPmRldmljZSA9IGlvdi0+dmZfZGV2aWNlOw0KPiA+IGRpZmYgLS1naXQgYS9k\n"
- "cml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oDQo+ID4gaW5kZXggZmNkODE5MS4u\n"
- "MzQ2ZGFhNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9wY2kuaA0KPiA+ICsrKyBiL2Ry\n"
- "aXZlcnMvcGNpL3BjaS5oDQo+ID4gQEAgLTI3MSw2ICsyNzEsMTEgQEAgc3RydWN0IHBjaV9zcmlv\n"
- "diB7DQo+ID4gIAl1MTYJCWRyaXZlcl9tYXhfVkZzOwkvKiBNYXggbnVtIFZGcyBkcml2ZXIgc3Vw\n"
- "cG9ydHMgKi8NCj4gPiAgCXN0cnVjdCBwY2lfZGV2CSpkZXY7CQkvKiBMb3dlc3QgbnVtYmVyZWQg\n"
- "UEYgKi8NCj4gPiAgCXN0cnVjdCBwY2lfZGV2CSpzZWxmOwkJLyogVGhpcyBQRiAqLw0KPiA+ICsJ\n"
- "dTggaGRyX3R5cGU7CQkvKiBWRiBoZWFkZXIgdHlwZSAqLw0KPiA+ICsJdTMyIGNsYXNzOwkJLyog\n"
- "VkYgZGV2aWNlICovDQo+ID4gKwl1MTYgZGV2aWNlOwkJLyogVkYgZGV2aWNlICovDQo+ID4gKwl1\n"
- "MTYgc3Vic3lzdGVtX3ZlbmRvcjsJLyogVkYgc3Vic3lzdGVtIHZlbmRvciAqLw0KPiA+ICsJdTE2\n"
- "IHN1YnN5c3RlbV9kZXZpY2U7CS8qIFZGIHN1YnN5c3RlbSBkZXZpY2UgKi8NCj4gDQo+IFBsZWFz\n"
- "ZSBtYWtlIHRoZSB3aGl0ZXNwYWNlIGhlcmUgbWF0Y2ggdGhlIGV4aXN0aW5nIGNvZGUsIGkuZS4s\n"
- "DQo+IGxpbmUgdXAgdGhlIHN0cnVjdHVyZSBlbGVtZW50IG5hbWVzIGFuZCBjb21tZW50cy4NCg0K\n"
- "YWNrIQ0KDQo+IA0KPiA+IA0KPiA+ICAJcmVzb3VyY2Vfc2l6ZV90CWJhcnN6W1BDSV9TUklPVl9O\n"
- "VU1fQkFSU107CS8qIFZGIEJBUiBzaXplICovDQo+ID4gIAlib29sCQlkcml2ZXJzX2F1dG9wcm9i\n"
- "ZTsgLyogQXV0byBwcm9iaW5nIG9mIFZGcyBieSBkcml2ZXIgKi8NCj4gPiAgfTsNCj4gPiBkaWZm\n"
- "IC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMNCj4gPiBp\n"
- "bmRleCBlZjUzNzc0Li5hZWFhMTBhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL3Byb2Jl\n"
- "LmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jDQo+ID4gQEAgLTE4MCw2ICsxODAsNyBA\n"
- "QCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVjb2RlX2JhcihzdHJ1Y3QgcGNpX2RldiAq\n"
- "ZGV2LCB1MzIgYmFyKQ0KPiA+ICBpbnQgX19wY2lfcmVhZF9iYXNlKHN0cnVjdCBwY2lfZGV2ICpk\n"
- "ZXYsIGVudW0gcGNpX2Jhcl90eXBlIHR5cGUsDQo+ID4gIAkJICAgIHN0cnVjdCByZXNvdXJjZSAq\n"
- "cmVzLCB1bnNpZ25lZCBpbnQgcG9zKQ0KPiA+ICB7DQo+ID4gKwlpbnQgYmFyID0gcmVzIC0gZGV2\n"
- "LT5yZXNvdXJjZTsNCj4gPiAgCXUzMiBsID0gMCwgc3ogPSAwLCBtYXNrOw0KPiA+ICAJdTY0IGw2\n"
- "NCwgc3o2NCwgbWFzazY0Ow0KPiA+ICAJdTE2IG9yaWdfY21kOw0KPiA+IEBAIC0xOTksOSArMjAw\n"
- "LDEzIEBAIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSBwY2lf\n"
- "YmFyX3R5cGUgdHlwZSwNCj4gPiAgCXJlcy0+bmFtZSA9IHBjaV9uYW1lKGRldik7DQo+ID4gIA0K\n"
- "PiA+ICAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmbCk7DQo+ID4gLQlwY2lfd3Jp\n"
- "dGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsIHwgbWFzayk7DQo+ID4gLQlwY2lfcmVhZF9jb25m\n"
- "aWdfZHdvcmQoZGV2LCBwb3MsICZzeik7DQo+ID4gLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRl\n"
- "diwgcG9zLCBsKTsNCj4gPiArCWlmIChkZXYtPmlzX3ZpcnRmbikgew0KPiA+ICsJCXN6ID0gZGV2\n"
- "LT5waHlzZm4tPnNyaW92LT5iYXJzeltiYXJdICYgMHhmZmZmZmZmZjsNCj4gPiArCX0gZWxzZSB7\n"
- "DQo+ID4gKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgbCB8IG1hc2spOw0KPiA+\n"
- "ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcywgJnN6KTsNCj4gPiArCQlwY2lfd3Jp\n"
- "dGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsKTsNCj4gPiArCX0NCj4gDQo+IFRoaXMgcGFydCBp\n"
- "cyBub3QgbGlrZSB0aGUgb3RoZXJzLCBpLmUuLCB0aGUgb3RoZXJzIGFyZSBjYWNoaW5nIGluZm8N\n"
- "Cj4gZnJvbSBWRiAwIGluIG5ld2x5LWFkZGVkIGVsZW1lbnRzIG9mIHN0cnVjdCBwY2lfc3Jpb3Yu\n"
- "ICBUaGlzIGFsc28gdXNlcw0KPiBpbmZvcm1hdGlvbiBmcm9tIHN0cnVjdCBwY2lfc3Jpb3YsIGJ1\n"
- "dCBpdCdzIHF1YWxpdGF0aXZlbHkgZGlmZmVyZW50LA0KPiBzbyBpdCBzaG91bGQgYmUgaW4gYSBz\n"
- "ZXBhcmF0ZSBwYXRjaC4NCg0KYWNrLiBNb3ZlZCB0byBhIHNlcGVyYXRlIHBhdGNoLg0KDQo+IA0K\n"
- "PiA+IA0KPiA+ICAJLyoNCj4gPiAgCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2\n"
- "aWNlIGlzbid0IHdvcmtpbmcgcHJvcGVybHkuDQo+ID4gQEAgLTI0MSw5ICsyNDYsMTQgQEAgaW50\n"
- "IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0\n"
- "eXBlLA0KPiA+ICANCj4gPiAgCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsN\n"
- "Cj4gPiAgCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7DQo+ID4gLQkJ\n"
- "cGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsIH4wKTsNCj4gPiAtCQlwY2lfcmVh\n"
- "ZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmc3opOw0KPiA+IC0JCXBjaV93cml0ZV9jb25m\n"
- "aWdfZHdvcmQoZGV2LCBwb3MgKyA0LCBsKTsNCj4gPiArDQo+ID4gKwkJaWYgKGRldi0+aXNfdmly\n"
- "dGZuKSB7DQo+ID4gKwkJCXN6ID0gKGRldi0+cGh5c2ZuLT5zcmlvdi0+YmFyc3pbYmFyXSA+PiAz\n"
- "MikgJiAweGZmZmZmZmZmOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25m\n"
- "aWdfZHdvcmQoZGV2LCBwb3MgKyA0LCB+MCk7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29y\n"
- "ZChkZXYsIHBvcyArIDQsICZzeik7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2\n"
- "LCBwb3MgKyA0LCBsKTsNCj4gPiArCQl9DQo+ID4gIA0KPiA+ICAJCWw2NCB8PSAoKHU2NClsIDw8\n"
- "IDMyKTsNCj4gPiAgCQlzejY0IHw9ICgodTY0KXN6IDw8IDMyKTsNCj4gPiBAQCAtMzMyLDYgKzM0\n"
- "Miw4IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWFkX2Jhc2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVu\n"
- "c2lnbmVkIGludCBob3dtYW55LCBpbnQgcm9tKQ0KPiA+ICAJZm9yIChwb3MgPSAwOyBwb3MgPCBo\n"
- "b3dtYW55OyBwb3MrKykgew0KPiA+ICAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVz\n"
- "b3VyY2VbcG9zXTsNCj4gPiAgCQlyZWcgPSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAocG9zIDw8IDIp\n"
- "Ow0KPiA+ICsJCWlmIChkZXYtPmlzX3ZpcnRmbiAmJiBkZXYtPnBoeXNmbi0+c3Jpb3YtPmJhcnN6\n"
- "W3Bvc10gPT0gMCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gIAkJcG9zICs9IF9fcGNpX3JlYWRf\n"
- "YmFzZShkZXYsIHBjaV9iYXJfdW5rbm93biwgcmVzLCByZWcpOw0KPiA+ICAJfQ0KPiA+ICANCj4g\n"
- "PiBAQCAtMTQ1NCw3ICsxNDY2LDkgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9k\n"
- "ZXYgKmRldikNCj4gPiAgCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247DQo+ID4gIAlzdHJ1\n"
- "Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiAgDQo+ID4gLQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUo\n"
- "ZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpDQo+ID4gKwlpZiAoZGV2LT5pc192aXJ0\n"
- "Zm4pDQo+ID4gKwkJaGRyX3R5cGUgPSBkZXYtPnBoeXNmbi0+c3Jpb3YtPmhkcl90eXBlOw0KPiA+\n"
- "ICsJZWxzZSBpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZo\n"
- "ZHJfdHlwZSkpDQo+ID4gIAkJcmV0dXJuIC1FSU87DQo+ID4gIA0KPiA+ICAJZGV2LT5zeXNkYXRh\n"
- "ID0gZGV2LT5idXMtPnN5c2RhdGE7DQo+ID4gQEAgLTE0NzcsNyArMTQ5MSwxMCBAQCBpbnQgcGNp\n"
- "X3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0KPiA+ICAJCSAgICAgZGV2LT5idXMt\n"
- "Pm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksDQo+ID4gIAkJICAgICBQQ0lfRlVOQyhkZXYt\n"
- "PmRldmZuKSk7DQo+ID4gIA0KPiA+IC0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NM\n"
- "QVNTX1JFVklTSU9OLCAmY2xhc3MpOw0KPiA+ICsJaWYgKGRldi0+aXNfdmlydGZuKQ0KPiA+ICsJ\n"
- "CWNsYXNzID0gZGV2LT5waHlzZm4tPnNyaW92LT5jbGFzczsNCj4gPiArCWVsc2UNCj4gPiArCQlw\n"
- "Y2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzcyk7DQo+\n"
- "ID4gIAlkZXYtPnJldmlzaW9uID0gY2xhc3MgJiAweGZmOw0KPiA+ICAJZGV2LT5jbGFzcyA9IGNs\n"
- "YXNzID4+IDg7CQkgICAgLyogdXBwZXIgMyBieXRlcyAqLw0KPiA+ICANCj4gPiBAQCAtMTUxNyw4\n"
- "ICsxNTM0LDEzIEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpDQo+\n"
- "ID4gIAkJCWdvdG8gYmFkOw0KPiA+ICAJCXBjaV9yZWFkX2lycShkZXYpOw0KPiA+ICAJCXBjaV9y\n"
- "ZWFkX2Jhc2VzKGRldiwgNiwgUENJX1JPTV9BRERSRVNTKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25m\n"
- "aWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmZGV2LT5zdWJzeXN0ZW1fdmVu\n"
- "ZG9yKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQs\n"
- "ICZkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJCWlmIChkZXYtPmlzX3ZpcnRmbikgew0K\n"
- "PiA+ICsJCQlkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPSBkZXYtPnBoeXNmbi0+c3Jpb3YtPnN1YnN5\n"
- "c3RlbV92ZW5kb3I7DQo+ID4gKwkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGRldi0+cGh5c2Zu\n"
- "LT5zcmlvdi0+c3Vic3lzdGVtX2RldmljZTsNCj4gDQo+IFBDSWUgcjQuMCwgc2VjIDkuMy40LjEu\n"
- "MTMgcmVxdWlyZXMgdGhhdCBTdWJzeXN0ZW0gVmVuZG9yIElEIGJlIHRoZQ0KPiBzYW1lIGZvciB0\n"
- "aGUgUEYgYW5kIGFsbCBWRnMsIGJ1dCBzZWMgOS4zLjQuMS4xNCBzYXlzIHRoZSBQRiBhbmQgVkYg\n"
- "bWF5DQo+IGhhdmUgZGlmZmVyZW50IFN1YnN5c3RlbSBJRHMuICBJIGtub3cgeW91J3JlIGNhY2hp\n"
- "bmcgdGhlIFN1YnN5c3RlbSBJRA0KPiBmcm9tIFZGIDAsIG5vdCB0aGUgUEYsIGJ1dCBJIGRvbid0\n"
- "IHNlZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGFsbCB0aGUNCj4gVkZzIHRvIGhhdmUgdGhlIHNh\n"
- "bWUgU3Vic3lzdGVtIElELg0KPiANCj4gSSB0aGluayB0aGUgc2FtZSBpcyB0ZWNobmljYWxseSB0\n"
- "cnVlIGZvciB0aGUgUmV2aXNpb24gSUQuICBJdCBtaWdodCBiZQ0KPiByZWFzb25hYmxlIHRvIGFz\n"
- "c3VtZSBhbGwgdGhlIFZGcyBoYXZlIHRoZSBzYW1lIHZhbHVlcywgYnV0IG1heWJlIHdvcnRoDQo+\n"
- "IGEgY29tbWVudC4NCg0KSSBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgdGhhdCBmb3IgdGhlIDMgZmll\n"
- "bGRzLg0KDQo+IA0KPiA+IA0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZp\n"
- "Z193b3JkKGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5k\n"
- "b3IpOw0KPiA+ICsJCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQs\n"
- "ICZkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOw0KPiA+ICsJCX0NCj4gPiAgDQo+ID4gIAkJLyoNCj4g\n"
- "PiAgCQkgKiBEbyB0aGUgdWdseSBsZWdhY3kgbW9kZSBzdHVmZiBoZXJlIHJhdGhlciB0aGFuIGJy\n"
- "b2tlbiBjaGlwDQo+ID4gLS0gDQo+ID4gMi43LjQNCj4gPiANCj4gDQpBbWF6b24gRGV2ZWxvcG1l\n"
- "bnQgQ2VudGVyIEdlcm1hbnkgR21iSApCZXJsaW4gLSBEcmVzZGVuIC0gQWFjaGVuCm1haW4gb2Zm\n"
- "aWNlOiBLcmF1c2Vuc3RyLiAzOCwgMTAxMTcgQmVybGluCkdlc2NoYWVmdHNmdWVocmVyOiBEci4g\n"
- "UmFsZiBIZXJicmljaCwgQ2hyaXN0aWFuIFNjaGxhZWdlcgpVc3QtSUQ6IERFMjg5MjM3ODc5CkVp\n"
- bmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIEhSQiAxNDkxNzMgQgo=
+ "On Thu, 2018-03-01 at 13:34 -0600, Bjorn Helgaas wrote:\n"
+ "> s|pci: Store|PCI/IOV: Store|\n"
+ "> \n"
+ "> (run \"git log --oneline drivers/pci/probe.c\" to see why)\n"
+ "> \n"
+ "> On Thu, Mar 01, 2018 at 02:26:04PM +0100, KarimAllah Ahmed wrote:\n"
+ "> > \n"
+ "> > ... to avoid reading them from the config space of all the PCI VFs. This is\n"
+ "> > specially a useful optimization when bringing up thousands of VFs.\n"
+ "> \n"
+ "> Please make the changelog complete in itself, so it doesn't have to be\n"
+ "> read in conjunction with the subject.  It's OK if you have to repeat\n"
+ "> the subject in the changelog.\n"
+ "\n"
+ "ack.\n"
+ "\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"
+ "> > v1 -> v2:\n"
+ "> > * Rebase on latest + remove dependency on a non-upstream patch.\n"
+ "> > \n"
+ "> >  drivers/pci/iov.c   | 16 ++++++++++++++++\n"
+ "> >  drivers/pci/pci.h   |  5 +++++\n"
+ "> >  drivers/pci/probe.c | 42 ++++++++++++++++++++++++++++++++----------\n"
+ "> >  3 files changed, 53 insertions(+), 10 deletions(-)\n"
+ "> > \n"
+ "> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c\n"
+ "> > index 677924a..e1d2e3f 100644\n"
+ "> > --- a/drivers/pci/iov.c\n"
+ "> > +++ b/drivers/pci/iov.c\n"
+ "> > @@ -114,6 +114,19 @@ 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_bus *bus, struct pci_dev *dev)\n"
+ "> > +{\n"
+ "> > +\tint devfn = pci_iov_virtfn_devfn(dev, 0);\n"
+ "> > +\n"
+ "> > +\tpci_bus_read_config_dword(bus, devfn, PCI_CLASS_REVISION,\n"
+ "> > +\t\t\t\t  &dev->sriov->class);\n"
+ "> > +\tpci_bus_read_config_word(bus, devfn, PCI_SUBSYSTEM_ID,\n"
+ "> > +\t\t\t\t &dev->sriov->subsystem_device);\n"
+ "> > +\tpci_bus_read_config_word(bus, devfn, PCI_SUBSYSTEM_VENDOR_ID,\n"
+ "> > +\t\t\t\t &dev->sriov->subsystem_vendor);\n"
+ "> > +\tpci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &dev->sriov->hdr_type);\n"
+ "> \n"
+ "> Can't you do this a little later, e.g., after pci_iov_add_virtfn()\n"
+ "> calls pci_setup_device(), and then use the standard\n"
+ "> pci_read_config_*() interfaces instead of the special\n"
+ "> pci_bus_read_config*() ones?\n"
+ "\n"
+ "ack.\n"
+ "\n"
+ "I moved it after \"pci_iov_virtfn_devfn\".\n"
+ "\n"
+ "> \n"
+ "> > \n"
+ "> > +}\n"
+ "> > +\n"
+ "> >  int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ "> >  {\n"
+ "> >  \tint i;\n"
+ "> > @@ -133,6 +146,9 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)\n"
+ "> >  \tif (!virtfn)\n"
+ "> >  \t\tgoto failed0;\n"
+ "> >  \n"
+ "> > +\tif (id == 0)\n"
+ "> > +\t\tpci_read_vf_config_common(bus, dev);\n"
+ "> > +\n"
+ "> >  \tvirtfn->devfn = pci_iov_virtfn_devfn(dev, id);\n"
+ "> >  \tvirtfn->vendor = dev->vendor;\n"
+ "> >  \tvirtfn->device = iov->vf_device;\n"
+ "> > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h\n"
+ "> > index fcd8191..346daa5 100644\n"
+ "> > --- a/drivers/pci/pci.h\n"
+ "> > +++ b/drivers/pci/pci.h\n"
+ "> > @@ -271,6 +271,11 @@ 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"
+ "> > +\tu8 hdr_type;\t\t/* VF header type */\n"
+ "> > +\tu32 class;\t\t/* VF device */\n"
+ "> > +\tu16 device;\t\t/* VF device */\n"
+ "> > +\tu16 subsystem_vendor;\t/* VF subsystem vendor */\n"
+ "> > +\tu16 subsystem_device;\t/* VF subsystem device */\n"
+ "> \n"
+ "> Please make the whitespace here match the existing code, i.e.,\n"
+ "> line up the structure element names and comments.\n"
+ "\n"
+ "ack!\n"
+ "\n"
+ "> \n"
+ "> > \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 ef53774..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"
+ "> This part is not like the others, i.e., the others are caching info\n"
+ "> from VF 0 in newly-added elements of struct pci_sriov.  This also uses\n"
+ "> information from struct pci_sriov, but it's qualitatively different,\n"
+ "> so it should be in a separate patch.\n"
+ "\n"
+ "ack. Moved to a seperate patch.\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"
+ "> >  \t\tpos += __pci_read_base(dev, pci_bar_unknown, res, reg);\n"
+ "> >  \t}\n"
+ "> >  \n"
+ "> > @@ -1454,7 +1466,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"
+ "> > @@ -1477,7 +1491,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"
+ "> > @@ -1517,8 +1534,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"
+ "> \n"
+ "> PCIe r4.0, sec 9.3.4.1.13 requires that Subsystem Vendor ID be the\n"
+ "> same for the PF and all VFs, but sec 9.3.4.1.14 says the PF and VF may\n"
+ "> have different Subsystem IDs.  I know you're caching the Subsystem ID\n"
+ "> from VF 0, not the PF, but I don't see anything that requires all the\n"
+ "> VFs to have the same Subsystem ID.\n"
+ "> \n"
+ "> I think the same is technically true for the Revision ID.  It might be\n"
+ "> reasonable to assume all the VFs have the same values, but maybe worth\n"
+ "> a comment.\n"
+ "\n"
+ "I added a comment about that for the 3 fields.\n"
+ "\n"
+ "> \n"
+ "> > \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"
+ "> > 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
 
-78205e5d3f6817d083ba5af1b43c9e35ad9589d13911b25d08a0f80d16c03790
+b37811973c79e26de16503ea9f0f1b7a02999068bd005e9b6ef895c8b98c2952

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.