Thread (1 message) 1 message, 1 author, 2015-02-01

RE: [PATCH for-next 01/10] IB/addr: Pass network namespace as a parameter

From: Shachar Raindel <hidden>
Date: 2015-02-01 13:46:45
Also in: linux-rdma

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFubiBEcm9uZWF1ZCBbbWFpbHRvOnlkcm9uZWF1ZEBvcHRleWEuY29tXQ0KPiBTZW50OiBTdW5kYXksIEZlYnJ1YXJ5IDAxLCAyMDE1IDI6MjMgUE0NCj4gVG86IFNoYWNoYXIgUmFpbmRlbA0KPiBDYzogcm9sYW5kQGtlcm5lbC5vcmc7IHNlYW4uaGVmdHlAaW50ZWwuY29tOyBsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZzsNCj4gbmV0ZGV2QHZnZXIua2VybmVsLm9yZzsgTGlyYW4gTGlzczsgR3V5IFNoYXBpcm87IEhhZ2dhaSBFcmFuOyBZb3RhbQ0KPiBLZW5uZXRoDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggZm9yLW5leHQgMDEvMTBdIElCL2FkZHI6IFBhc3MgbmV0d29yayBuYW1lc3BhY2UgYXMgYQ0KPiBwYXJhbWV0ZXINCj4gDQo+IEhpLA0KPiANCj4gTGUgZGltYW5jaGUgMDEgZsOpdnJpZXIgMjAxNSDDoCAxMzoyOCArMDIwMCwgU2hhY2hhciBSYWluZGVsIGEgw6ljcml0IDoNCj4gPiBGcm9tOiBHdXkgU2hhcGlybyA8Z3V5c2hAbWVsbGFub3guY29tPg0KPiA+DQo+ID4gQWRkIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgdG8gdGhlIGliX2FkZHIgbW9kdWxlLiBGb3IgdGhhdCwgYWxsIHRoZQ0KPiBhZGRyZXNzDQo+ID4gcmVzb2x1dGlvbiBhbmQgbWF0Y2hpbmcgc2hvdWxkIGJlIGRvbmUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIG5hbWVzcGFjZQ0KPiBpbnN0ZWFkDQo+ID4gb2YgaW5pdF9uZXQuDQo+ID4NCj4gPiBUaGlzIGlzIGFjaGlldmVkIGJ5Og0KPiA+DQo+ID4gMS4gQWRkaW5nIGFuIGV4cGxpY2l0IG5ldHdvcmsgbmFtZXNwYWNlIGFyZ3VtZW50IHRvIGV4cG9ydGVkIGZ1bmN0aW9uDQo+IHRoYXQNCj4gPiAgICByZXF1aXJlIGEgbmFtZXNwYWNlLg0KPiA+IDIuIFNhdmluZyB0aGUgbmFtZXNwYWNlIGluIHRoZSByZG1hX2FkZHJfY2xpZW50IHN0cnVjdHVyZS4NCj4gPiAzLiBVc2luZyBpdCB3aGVuIGNhbGxpbmcgbmV0d29ya2luZyBmdW5jdGlvbnMuDQo+ID4NCj4gPiBJbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3Igb2YgY2FsbGluZyBtb2R1bGVzLCAmaW5pdF9uZXQgaXMNCj4gPiBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciBpbiBjYWxscyBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgaXMgbW9kaWZpZWQNCj4gYXMNCj4gPiBuYW1zcGFjZSBzdXBwb3J0IGlzIGFkZGVkIG9uIG1vcmUgbGV2ZWxzLg0KPiANCj4gdHlwbzogIm5hbWVzcGFjZSINCj4gDQoNClRoYW5rcy4gV2lsbCBmaXggaW4gbmV4dCBpdGVyYXRpb24uDQoNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEhhZ2dhaSBFcmFuIDxoYWdnYWllQG1lbGxhbm94LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBZb3RhbSBLZW5uZXRoIDx5b3RhbWtlQG1lbGxhbm94LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBTaGFjaGFyIFJhaW5kZWwgPHJhaW5kZWxAbWVsbGFub3guY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEd1eSBTaGFwaXJvIDxndXlzaEBtZWxsYW5veC5jb20+DQo+ID4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jICAgICAgICAgICB8IDMxICsrKysrKysrKysrKy0tLS0tLS0tLS0NCj4gPiAgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgICAgICAgICAgICB8ICA0ICsrLQ0KPiA+ICBkcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jICAgICAgICAgIHwgMTQgKysrKysrKy0tLQ0KPiA+ICBkcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9haC5jIHwgIDMgKystDQo+ID4gIGluY2x1ZGUvcmRtYS9pYl9hZGRyLmggICAgICAgICAgICAgICAgICAgfCA0NA0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYw0KPiBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYw0KPiA+IGluZGV4IGY4MGRhNTBkODRhNS4uOTViZWFlZjZiNjZkIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYw0KPiA+ICsrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYw0KPiA+IEBAIC0xMjgsNyArMTI4LDcgQEAgaW50IHJkbWFfdHJhbnNsYXRlX2lwKHN0cnVjdCBzb2NrYWRkciAqYWRkciwNCj4gc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLA0KPiA+ICAJaW50IHJldCA9IC1FQUREUk5PVEFWQUlMOw0KPiA+DQo+ID4gIAlpZiAoZGV2X2FkZHItPmJvdW5kX2Rldl9pZikgew0KPiA+IC0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBkZXZfYWRkci0+Ym91bmRfZGV2X2lmKTsNCj4gPiArCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KGRldl9hZGRyLT5uZXQsIGRldl9hZGRyLQ0KPiA+Ym91bmRfZGV2X2lmKTsNCj4gPiAgCQlpZiAoIWRldikNCj4gPiAgCQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gIAkJcmV0ID0gcmRtYV9jb3B5X2FkZHIoZGV2X2FkZHIsIGRldiwgTlVMTCk7DQo+ID4gQEAgLTEzNyw5ICsxMzcsMTAgQEAgaW50IHJkbWFfdHJhbnNsYXRlX2lwKHN0cnVjdCBzb2NrYWRkciAqYWRkciwNCj4gc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLA0KPiA+ICAJfQ0KPiA+DQo+ID4gIAlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgew0KPiA+IC0JY2FzZSBBRl9JTkVUOg0KPiA+IC0JCWRldiA9IGlwX2Rldl9maW5kKCZpbml0X25ldCwNCj4gPiAtCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcik7DQo+ID4gKwljYXNlIEFGX0lORVQ6IHsNCj4gPiArCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsNCj4gPiArDQo+ID4gKwkJZGV2ID0gaXBfZGV2X2ZpbmQoZGV2X2FkZHItPm5ldCwgYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKTsNCj4gDQo+IEkgZG9uJ3Qgc2VlIHRoZSBwb2ludCBvZiB0aGlzIGNoYW5nZS4NCj4gDQoNCk5vdGUgdGhhdCB3ZSBjaGFuZ2VkICZpbml0X25ldCB0byBiZSBkZXZfYWRkci0+bmV0IC4NClRoZSByZXN0IG9mIHRoZSBjaGFuZ2UgaGVyZSB3YXMgZG9uZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBjaGVja3BhdGNoLCBhcyB0aGUgbGluZSB3YXMgZ2V0dGluZyByZWFsbHkgbG9uZy4NCg0KPiA+DQo+ID4gIAkJaWYgKCFkZXYpDQo+ID4gIAkJCXJldHVybiByZXQ7DQo+ID4gQEAgLTE0OSwxMiArMTUwLDEyIEBAIGludCByZG1hX3RyYW5zbGF0ZV9pcChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsDQo+IHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwNCj4gPiAgCQkJKnZsYW5faWQgPSByZG1hX3ZsYW5fZGV2X3ZsYW5faWQoZGV2KTsNCj4gPiAgCQlkZXZfcHV0KGRldik7DQo+ID4gIAkJYnJlYWs7DQo+ID4gLQ0KPiA+ICsJfQ0KPiANCj4gY2xvc2luZyB9IGhlcmUgPw0KDQpXZSBvcGVuZWQgYSBibG9jayBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgY2FzZSAoImNhc2UgQUZfSU5FVDogeyIpLCB3ZSBjbG9zZSBpdCBhdCB0aGUgZW5kIG9mIHRoZSBjYXNlLg0KDQo+IA0KPiA+ICAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikNCj4gPiAgCWNhc2UgQUZfSU5FVDY6DQo+ID4gIAkJcmN1X3JlYWRfbG9jaygpOw0KPiA+IC0JCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBkZXYpIHsNCj4gPiAtCQkJaWYgKGlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LA0KPiA+ICsJCWZvcl9lYWNoX25ldGRldl9yY3UoZGV2X2FkZHItPm5ldCwgZGV2KSB7DQo+ID4gKwkJCWlmIChpcHY2X2Noa19hZGRyKGRldl9hZGRyLT5uZXQsDQo+ID4gIAkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHIpLT5zaW42X2FkZHIsDQo+ID4gIAkJCQkJICBkZXYsIDEpKSB7DQo+ID4gIAkJCQlyZXQgPSByZG1hX2NvcHlfYWRkcihkZXZfYWRkciwgZGV2LCBOVUxMKTsNCj4gPiBAQCAtMjM2LDcgKzIzNyw3IEBAIHN0YXRpYyBpbnQgYWRkcjRfcmVzb2x2ZShzdHJ1Y3Qgc29ja2FkZHJfaW4NCj4gKnNyY19pbiwNCj4gPiAgCWZsNC5kYWRkciA9IGRzdF9pcDsNCj4gPiAgCWZsNC5zYWRkciA9IHNyY19pcDsNCj4gPiAgCWZsNC5mbG93aTRfb2lmID0gYWRkci0+Ym91bmRfZGV2X2lmOw0KPiA+IC0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJmZsNCk7DQo+ID4gKwlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoYWRkci0+bmV0LCAmZmw0KTsNCj4gPiAgCWlmIChJU19FUlIocnQpKSB7DQo+ID4gIAkJcmV0ID0gUFRSX0VSUihydCk7DQo+ID4gIAkJZ290byBvdXQ7DQo+ID4gQEAgLTI3OCwxMiArMjc5LDEzIEBAIHN0YXRpYyBpbnQgYWRkcjZfcmVzb2x2ZShzdHJ1Y3Qgc29ja2FkZHJfaW42DQo+ICpzcmNfaW4sDQo+ID4gIAlmbDYuc2FkZHIgPSBzcmNfaW4tPnNpbjZfYWRkcjsNCj4gPiAgCWZsNi5mbG93aTZfb2lmID0gYWRkci0+Ym91bmRfZGV2X2lmOw0KPiA+DQo+ID4gLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsNik7DQo+ID4gKwlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGFkZHItPm5ldCwgTlVMTCwgJmZsNik7DQo+ID4gIAlpZiAoKHJldCA9IGRzdC0+ZXJyb3IpKQ0KPiA+ICAJCWdvdG8gcHV0Ow0KPiA+DQo+ID4gIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmw2LnNhZGRyKSkgew0KPiA+IC0JCXJldCA9IGlwdjZfZGV2X2dldF9zYWRkcigmaW5pdF9uZXQsIGlwNl9kc3RfaWRldihkc3QpLT5kZXYsDQo+ID4gKwkJcmV0ID0gaXB2Nl9kZXZfZ2V0X3NhZGRyKGFkZHItPm5ldCwNCj4gPiArCQkJCQkgaXA2X2RzdF9pZGV2KGRzdCktPmRldiwNCj4gPiAgCQkJCQkgJmZsNi5kYWRkciwgMCwgJmZsNi5zYWRkcik7DQo+ID4gIAkJaWYgKHJldCkNCj4gPiAgCQkJZ290byBwdXQ7DQo+ID4gQEAgLTQ1OCw3ICs0NjAsNyBAQCBzdGF0aWMgdm9pZCByZXNvbHZlX2NiKGludCBzdGF0dXMsIHN0cnVjdCBzb2NrYWRkcg0KPiAqc3JjX2FkZHIsDQo+ID4gIH0NCj4gPg0KPiA+ICBpbnQgcmRtYV9hZGRyX2ZpbmRfZG1hY19ieV9ncmgodW5pb24gaWJfZ2lkICpzZ2lkLCB1bmlvbiBpYl9naWQNCj4gKmRnaWQsIHU4ICpkbWFjLA0KPiA+IC0JCQkgICAgICAgdTE2ICp2bGFuX2lkKQ0KPiA+ICsJCQkgICAgICAgdTE2ICp2bGFuX2lkLCBzdHJ1Y3QgbmV0ICpuZXQpDQo+ID4gIHsNCj4gPiAgCWludCByZXQgPSAwOw0KPiA+ICAJc3RydWN0IHJkbWFfZGV2X2FkZHIgZGV2X2FkZHI7DQo+ID4gQEAgLTQ4MSw2ICs0ODMsNyBAQCBpbnQgcmRtYV9hZGRyX2ZpbmRfZG1hY19ieV9ncmgodW5pb24gaWJfZ2lkICpzZ2lkLA0KPiB1bmlvbiBpYl9naWQgKmRnaWQsIHU4ICpkbWFjLA0KPiA+ICAJCXJldHVybiByZXQ7DQo+ID4NCj4gPiAgCW1lbXNldCgmZGV2X2FkZHIsIDAsIHNpemVvZihkZXZfYWRkcikpOw0KPiA+ICsJZGV2X2FkZHIubmV0ID0gbmV0Ow0KPiANCj4gU2hvdWxkIGJlIGdldF9uZXQoKSBiZSB1c2VkIHNvbWV3aGVyZSB0byBncmFiIGEgcmVmZXJlbmNlIG9uIHRoZSBuZXQNCj4gbmFtZXNwYWNlID8NCj4gDQoNCk5vdCBuZWVkZWQsIGFzIGRldl9hZGRyLm5ldCBpcyB1c2VkIG9ubHkgaW5zaWRlIHRoaXMgZnVuY3Rpb24uIEFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlciBndWFyYW50ZWVzIHRoYXQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGRvZXNuJ3QgZGlzYXBwZWFyIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB0aGVyZSBpcyBubyBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2UgaGVyZS4gVGhpcyBraW5kIG9mIGFzc3VtcHRpb24gbWFrZXMgc2Vuc2UsIGFzIG90aGVyd2lzZSB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSB0aGUgYXJndW1lbnQgYXQgYWxsLg0KDQo+ID4NCj4gPiAgCWN0eC5hZGRyID0gJmRldl9hZGRyOw0KPiA+ICAJaW5pdF9jb21wbGV0aW9uKCZjdHguY29tcCk7DQo+ID4gQEAgLTQ5Miw3ICs0OTUsNyBAQCBpbnQgcmRtYV9hZGRyX2ZpbmRfZG1hY19ieV9ncmgodW5pb24gaWJfZ2lkICpzZ2lkLA0KPiB1bmlvbiBpYl9naWQgKmRnaWQsIHU4ICpkbWFjLA0KPiA+ICAJd2FpdF9mb3JfY29tcGxldGlvbigmY3R4LmNvbXApOw0KPiA+DQo+ID4gIAltZW1jcHkoZG1hYywgZGV2X2FkZHIuZHN0X2Rldl9hZGRyLCBFVEhfQUxFTik7DQo+ID4gLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgZGV2X2FkZHIuYm91bmRfZGV2X2lmKTsNCj4gPiArCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBkZXZfYWRkci5ib3VuZF9kZXZfaWYpOw0KPiA+ICAJaWYgKCFkZXYpDQo+ID4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gIAlpZiAodmxhbl9pZCkNCj4gPiBAQCAtNTAyLDcgKzUwNSw4IEBAIGludCByZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCh1bmlvbiBpYl9naWQgKnNnaWQsDQo+IHVuaW9uIGliX2dpZCAqZGdpZCwgdTggKmRtYWMsDQo+ID4gIH0NCj4gPiAgRVhQT1JUX1NZTUJPTChyZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCk7DQo+ID4NCj4gPiAtaW50IHJkbWFfYWRkcl9maW5kX3NtYWNfYnlfc2dpZCh1bmlvbiBpYl9naWQgKnNnaWQsIHU4ICpzbWFjLCB1MTYNCj4gKnZsYW5faWQpDQo+ID4gK2ludCByZG1hX2FkZHJfZmluZF9zbWFjX2J5X3NnaWQodW5pb24gaWJfZ2lkICpzZ2lkLCB1OCAqc21hYywgdTE2DQo+ICp2bGFuX2lkLA0KPiA+ICsJCQkJc3RydWN0IG5ldCAqbmV0KQ0KPiA+ICB7DQo+ID4gIAlpbnQgcmV0ID0gMDsNCj4gPiAgCXN0cnVjdCByZG1hX2Rldl9hZGRyIGRldl9hZGRyOw0KPiA+IEBAIC01MTcsNiArNTIxLDcgQEAgaW50IHJkbWFfYWRkcl9maW5kX3NtYWNfYnlfc2dpZCh1bmlvbiBpYl9naWQNCj4gKnNnaWQsIHU4ICpzbWFjLCB1MTYgKnZsYW5faWQpDQo+ID4gIAlpZiAocmV0KQ0KPiA+ICAJCXJldHVybiByZXQ7DQo+ID4gIAltZW1zZXQoJmRldl9hZGRyLCAwLCBzaXplb2YoZGV2X2FkZHIpKTsNCj4gPiArCWRldl9hZGRyLm5ldCA9IG5ldDsNCj4gDQo+IGdldF9uZXQoKSA/DQo+IA0KDQpTYW1lIGFzIGJlZm9yZSAtIHVzZWQgb25seSBpbiB0aGUgZnVuY3Rpb24sIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGRpc2FwcGVhci4NCg0KPiA+ICAJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoJmdpZF9hZGRyLl9zb2NrYWRkciwgJmRldl9hZGRyLCB2bGFuX2lkKTsNCj4gPiAgCWlmIChyZXQpDQo+ID4gIAkJcmV0dXJuIHJldDsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMNCj4gYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYw0KPiA+IGluZGV4IDZlNWUxMWNhNzcwMi4uYWViMjQxN2VjOTI4IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jDQo+ID4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMNCj4gPiBAQCAtNTEyLDYgKzUxMiw3IEBAIHN0cnVjdCByZG1hX2NtX2lkDQo+ICpyZG1hX2NyZWF0ZV9pZChyZG1hX2NtX2V2ZW50X2hhbmRsZXIgZXZlbnRfaGFuZGxlciwNCj4gPiAgCUlOSVRfTElTVF9IRUFEKCZpZF9wcml2LT5saXN0ZW5fbGlzdCk7DQo+ID4gIAlJTklUX0xJU1RfSEVBRCgmaWRfcHJpdi0+bWNfbGlzdCk7DQo+ID4gIAlnZXRfcmFuZG9tX2J5dGVzKCZpZF9wcml2LT5zZXFfbnVtLCBzaXplb2YgaWRfcHJpdi0+c2VxX251bSk7DQo+ID4gKwlpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLm5ldCA9ICZpbml0X25ldDsNCj4gPg0KPiA+ICAJcmV0dXJuICZpZF9wcml2LT5pZDsNCj4gPiAgfQ0KPiA+IEBAIC02MzcsNyArNjM4LDggQEAgc3RhdGljIGludCBjbWFfbW9kaWZ5X3FwX3J0cihzdHJ1Y3QNCj4gcmRtYV9pZF9wcml2YXRlICppZF9wcml2LA0KPiA+ICAJICAgID09IFJETUFfVFJBTlNQT1JUX0lCICYmDQo+ID4gIAkgICAgcmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGlkX3ByaXYtPmlkLmRldmljZSwgaWRfcHJpdi0NCj4gPmlkLnBvcnRfbnVtKQ0KPiA+ICAJICAgID09IElCX0xJTktfTEFZRVJfRVRIRVJORVQpIHsNCj4gPiAtCQlyZXQgPSByZG1hX2FkZHJfZmluZF9zbWFjX2J5X3NnaWQoJnNnaWQsIHFwX2F0dHIuc21hYywgTlVMTCk7DQo+ID4gKwkJcmV0ID0gcmRtYV9hZGRyX2ZpbmRfc21hY19ieV9zZ2lkKCZzZ2lkLCBxcF9hdHRyLnNtYWMsIE5VTEwsDQo+ID4gKwkJCQkJCSAgJmluaXRfbmV0KTsNCj4gPg0KPiA+ICAJCWlmIChyZXQpDQo+ID4gIAkJCWdvdG8gb3V0Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jDQo+IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYw0KPiA+IGluZGV4IGY5M2ViOGRhN2I1YS4uY2E1YzRkZDhhNjdhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMNCj4gPiArKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jDQo+ID4gQEAgLTIxMiw3ICsyMTIsOSBAQCBpbnQgaWJfaW5pdF9haF9mcm9tX3djKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwNCj4gdTggcG9ydF9udW0sIHN0cnVjdCBpYl93YyAqd2MsDQo+ID4gIAkJCWFoX2F0dHItPnZsYW5faWQgPSB3Yy0+dmxhbl9pZDsNCj4gPiAgCQl9IGVsc2Ugew0KPiA+ICAJCQlyZXQgPSByZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCgmZ3JoLT5kZ2lkLCAmZ3JoLT5zZ2lkLA0KPiA+IC0JCQkJCWFoX2F0dHItPmRtYWMsICZhaF9hdHRyLT52bGFuX2lkKTsNCj4gPiArCQkJCQkJCSBhaF9hdHRyLT5kbWFjLA0KPiA+ICsJCQkJCQkJICZhaF9hdHRyLT52bGFuX2lkLA0KPiA+ICsJCQkJCQkJICZpbml0X25ldCk7DQo+ID4gIAkJCWlmIChyZXQpDQo+ID4gIAkJCQlyZXR1cm4gcmV0Ow0KPiA+ICAJCX0NCj4gPiBAQCAtODgyLDExICs4ODQsMTUgQEAgaW50IGliX3Jlc29sdmVfZXRoX2wyX2F0dHJzKHN0cnVjdCBpYl9xcCAqcXAsDQo+ID4gIAkJCWlmICghKCpxcF9hdHRyX21hc2sgJiBJQl9RUF9WSUQpKQ0KPiA+ICAJCQkJcXBfYXR0ci0+dmxhbl9pZCA9IHJkbWFfZ2V0X3ZsYW5faWQoJnNnaWQpOw0KPiA+ICAJCX0gZWxzZSB7DQo+ID4gLQkJCXJldCA9IHJkbWFfYWRkcl9maW5kX2RtYWNfYnlfZ3JoKCZzZ2lkLCAmcXBfYXR0ci0NCj4gPmFoX2F0dHIuZ3JoLmRnaWQsDQo+ID4gLQkJCQkJcXBfYXR0ci0+YWhfYXR0ci5kbWFjLCAmcXBfYXR0ci0+dmxhbl9pZCk7DQo+ID4gKwkJCXJldCA9IHJkbWFfYWRkcl9maW5kX2RtYWNfYnlfZ3JoKA0KPiA+ICsJCQkJJnNnaWQsDQo+ID4gKwkJCQkmcXBfYXR0ci0+YWhfYXR0ci5ncmguZGdpZCwNCj4gPiArCQkJCXFwX2F0dHItPmFoX2F0dHIuZG1hYywgJnFwX2F0dHItPnZsYW5faWQsDQo+ID4gKwkJCQkmaW5pdF9uZXQpOw0KPiA+ICAJCQlpZiAocmV0KQ0KPiA+ICAJCQkJZ290byBvdXQ7DQo+ID4gLQkJCXJldCA9IHJkbWFfYWRkcl9maW5kX3NtYWNfYnlfc2dpZCgmc2dpZCwgcXBfYXR0ci0+c21hYywNCj4gTlVMTCk7DQo+ID4gKwkJCXJldCA9IHJkbWFfYWRkcl9maW5kX3NtYWNfYnlfc2dpZCgmc2dpZCwgcXBfYXR0ci0+c21hYywNCj4gPiArCQkJCQkJCSAgTlVMTCwgJmluaXRfbmV0KTsNCj4gPiAgCQkJaWYgKHJldCkNCj4gPiAgCQkJCWdvdG8gb3V0Ow0KPiA+ICAJCX0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfYWguYw0KPiBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX2FoLmMNCj4gPiBpbmRleCBmM2NjOGM5ZTY1YWUuLmRlYmFhYzJiNmVlOCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9haC5jDQo+ID4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfYWguYw0KPiA+IEBAIC0xMTksNyArMTE5LDggQEAgc3RydWN0IGliX2FoICpvY3JkbWFfY3JlYXRlX2FoKHN0cnVjdCBpYl9wZCAqaWJwZCwNCj4gc3RydWN0IGliX2FoX2F0dHIgKmF0dHIpDQo+ID4NCj4gPiAgCWlmIChwZC0+dWN0eCkgew0KPiA+ICAJCXN0YXR1cyA9IHJkbWFfYWRkcl9maW5kX2RtYWNfYnlfZ3JoKCZzZ2lkLCAmYXR0ci0+Z3JoLmRnaWQsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLT5kbWFjLCAmYXR0ci0+dmxhbl9pZCk7DQo+ID4gKwkJCQkJCSAgICBhdHRyLT5kbWFjLCAmYXR0ci0+dmxhbl9pZCwNCj4gPiArCQkJCQkJICAgICZpbml0X25ldCk7DQo+ID4gIAkJaWYgKHN0YXR1cykgew0KPiA+ICAJCQlwcl9lcnIoIiVzKCk6IEZhaWxlZCB0byByZXNvbHZlIGRtYWMgZnJvbSBnaWQuIg0KPiA+ICAJCQkJInN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaCBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgNCj4gPiBpbmRleCBjZTU1OTA2YjU0YTAuLjQwY2NmOGI4Mzc1NSAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oDQo+ID4gKysrIGIvaW5jbHVkZS9yZG1hL2liX2FkZHIuaA0KPiA+IEBAIC00Nyw2ICs0Nyw3IEBADQo+ID4gICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+DQo+ID4gICNpbmNsdWRlIDxyZG1hL2liX3BhY2suaD4NCj4gPiAgI2luY2x1ZGUgPG5ldC9pcHY2Lmg+DQo+ID4gKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPg0KPiA+DQo+ID4gIHN0cnVjdCByZG1hX2FkZHJfY2xpZW50IHsNCj4gPiAgCWF0b21pY190IHJlZmNvdW50Ow0KPiA+IEBAIC02NCw2ICs2NSwxNiBAQCB2b2lkIHJkbWFfYWRkcl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0DQo+IHJkbWFfYWRkcl9jbGllbnQgKmNsaWVudCk7DQo+ID4gICAqLw0KPiA+ICB2b2lkIHJkbWFfYWRkcl91bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcmRtYV9hZGRyX2NsaWVudCAqY2xpZW50KTsNCj4gPg0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IHJkbWFfZGV2X2FkZHIgLSBDb250YWlucyByZXNvbHZlZCBSRE1BIGhhcmR3YXJlIGFkZHJlc3Nlcw0KPiA+ICsgKiBAc3JjX2Rldl9hZGRyOglTb3VyY2UgTUFDIGFkZHJlc3MuDQo+ID4gKyAqIEBkc3RfZGV2X2FkZHI6CURlc3RpbmF0aW9uIE1BQyBhZGRyZXNzLg0KPiA+ICsgKiBAYnJvYWRjYXN0OgkJQnJvYWRjYXN0IGFkZHJlc3Mgb2YgdGhlIGRldmljZS4NCj4gPiArICogQGRldl90eXBlOgkJVGhlIGludGVyZmFjZSBoYXJkd2FyZSB0eXBlIG9mIHRoZSBkZXZpY2UuDQo+ID4gKyAqIEBib3VuZF9kZXZfaWY6CUFuIG9wdGlvbmFsIGRldmljZSBpbnRlcmZhY2UgaW5kZXguDQo+ID4gKyAqIEB0cmFuc3BvcnQ6CQlUaGUgdHJhbnNwb3J0IHR5cGUgdXNlZC4NCj4gPiArICogQG5ldDoJCU5ldHdvcmsgbmFtZXNwYWNlIGNvbnRhaW5pbmcgdGhlIGJvdW5kX2Rldl9pZg0KPiBuZXRfZGV2Lg0KPiA+ICsgKi8NCj4gPiAgc3RydWN0IHJkbWFfZGV2X2FkZHIgew0KPiA+ICAJdW5zaWduZWQgY2hhciBzcmNfZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsNCj4gPiAgCXVuc2lnbmVkIGNoYXIgZHN0X2Rldl9hZGRyW01BWF9BRERSX0xFTl07DQo+ID4gQEAgLTcxLDExICs4MiwxNCBAQCBzdHJ1Y3QgcmRtYV9kZXZfYWRkciB7DQo+ID4gIAl1bnNpZ25lZCBzaG9ydCBkZXZfdHlwZTsNCj4gPiAgCWludCBib3VuZF9kZXZfaWY7DQo+ID4gIAllbnVtIHJkbWFfdHJhbnNwb3J0X3R5cGUgdHJhbnNwb3J0Ow0KPiA+ICsJc3RydWN0IG5ldCAqbmV0Ow0KPiA+ICB9Ow0KPiA+DQo+ID4gIC8qKg0KPiA+ICAgKiByZG1hX3RyYW5zbGF0ZV9pcCAtIFRyYW5zbGF0ZSBhIGxvY2FsIElQIGFkZHJlc3MgdG8gYW4gUkRNQQ0KPiBoYXJkd2FyZQ0KPiA+ICAgKiAgIGFkZHJlc3MuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBkZXZfYWRkci0+bmV0IGZpZWxkIG11c3QgYmUgaW5pdGlhbGl6ZWQuDQo+ID4gICAqLw0KPiA+ICBpbnQgcmRtYV90cmFuc2xhdGVfaXAoc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgcmRtYV9kZXZfYWRkcg0KPiAqZGV2X2FkZHIsDQo+ID4gIAkJICAgICAgdTE2ICp2bGFuX2lkKTsNCj4gPiBAQCAtOTAsNyArMTA0LDcgQEAgaW50IHJkbWFfdHJhbnNsYXRlX2lwKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0DQo+IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLA0KPiA+ICAgKiBAZHN0X2FkZHI6IFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvIHJlc29sdmUuDQo+ID4gICAqIEBhZGRyOiBBIHJlZmVyZW5jZSB0byBhIGRhdGEgbG9jYXRpb24gdGhhdCB3aWxsIHJlY2VpdmUgdGhlDQo+IHJlc29sdmVkDQo+ID4gICAqICAgYWRkcmVzc2VzLiAgVGhlIGRhdGEgbG9jYXRpb24gbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlDQo+IGNhbGxiYWNrIGhhcw0KPiA+IC0gKiAgIGJlZW4gaW52b2tlZC4NCj4gPiArICogICBiZWVuIGludm9rZWQuIFRoZSBuZXQgZmllbGQgb2YgdGhlIGFkZHIgc3RydWN0IG11c3QgYmUgdmFsaWQuDQo+ID4gICAqIEB0aW1lb3V0X21zOiBBbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciB0aGUgYWRkcmVzcyByZXNvbHV0aW9uIHRvDQo+IGNvbXBsZXRlLg0KPiA+ICAgKiBAY2FsbGJhY2s6IENhbGwgaW52b2tlZCBvbmNlIGFkZHJlc3MgcmVzb2x1dGlvbiBoYXMgY29tcGxldGVkLA0KPiB0aW1lZCBvdXQsDQo+ID4gICAqICAgb3IgYmVlbiBjYW5jZWxlZC4gIEEgc3RhdHVzIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3MuDQo+ID4gQEAgLTExMCw5ICsxMjQsMjkgQEAgaW50IHJkbWFfY29weV9hZGRyKHN0cnVjdCByZG1hX2Rldl9hZGRyDQo+ICpkZXZfYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gPg0KPiA+ICBpbnQgcmRtYV9hZGRyX3NpemUoc3RydWN0IHNvY2thZGRyICphZGRyKTsNCj4gPg0KPiA+IC1pbnQgcmRtYV9hZGRyX2ZpbmRfc21hY19ieV9zZ2lkKHVuaW9uIGliX2dpZCAqc2dpZCwgdTggKnNtYWMsIHUxNg0KPiAqdmxhbl9pZCk7DQo+ID4gLWludCByZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCh1bmlvbiBpYl9naWQgKnNnaWQsIHVuaW9uIGliX2dpZA0KPiAqZGdpZCwgdTggKnNtYWMsDQo+ID4gLQkJCSAgICAgICB1MTYgKnZsYW5faWQpOw0KPiA+ICsvKiogcmRtYV9hZGRyX2ZpbmRfc21hY19ieV9zZ2lkKCkgLSBGaW5kIHRoZSBzcmMgTUFDIGFuZCBWTEFOIElEIGZvcg0KPiBhIHNyYyBHSUQNCj4gPiArICogQHNnaWQ6CVNvdXJjZSBHSUQgdG8gZmluZCB0aGUgTUFDIGFuZCBWTEFOIGZvci4NCj4gPiArICogQHNtYWM6CUEgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJlc3VsdGluZyBNQUMgYWRkcmVzcy4NCj4gPiArICogQHZsYW5faWQ6CVdpbGwgY29udGFpbiB0aGUgcmVzdWx0aW5nIFZMQU4gSUQuDQo+ID4gKyAqIEBuZXQ6CU5ldHdvcmsgbmFtZXNwYWNlIHRvIHVzZSBmb3IgdGhlIGFkZHJlc3MgcmVzb2x1dGlvbi4NCj4gPiArICoNCj4gPiArICogSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGtlZXAgdGhlIG5ldHdvcmsgbmFtZXNwYWNlDQo+IGFsaXZlIHVudGlsDQo+ID4gKyAqIHRoZSBmdW5jdGlvbiByZXR1cm5zLg0KPiANCj4gV2h5ID8NCj4gDQoNClNvIHRoYXQgd2UgY291bGQgdXNlIHRoZSBhcmd1bWVudC4gT3RoZXJ3aXNlLCB3ZSB3aWxsIG5lZWQgdG8gaGF2ZSB1Z2x5IGNvZGUgbGlrZToNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3RydWN0IG5ldCAqbG9jYWxfbmV0ID0gTlVMTDsNCnJjdV9yZWFkX2xvY2soKTsNCmZvcl9lYWNoX25ldF9yY3UobG9jYWxfbmV0KQ0KCWlmIChsb2NhbF9uZXQgPT0gbmV0KQ0KCQlicmVhazsNCmlmIChsb2NhbF9uZXQgPT0gbmV0KQ0KCWdldF9uZXQobG9jYWxfbmV0KTsNCmVsc2UNCglsb2NhbF9uZXQgPSBOVUxMOw0KcmN1X3JlYWRfdW5sb2NrKCk7DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmhvd2V2ZXIsIHRoZSBjYWxsZXJzIChpbiBmb2xsb3dpbmcgcGF0Y2hlcyksIGNhbiBlYXNpbHkgZW5zdXJlIHRoYXQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGhlcmUgdG8gc3RheS4gVGhpcyBpcyBtdWNoIGVhc2llciB0byB1bmRlcnN0YW5kIGFuZCBtYWludGFpbi4NCg0KDQo+ID4gKyAqLw0KPiA+ICtpbnQgcmRtYV9hZGRyX2ZpbmRfc21hY19ieV9zZ2lkKHVuaW9uIGliX2dpZCAqc2dpZCwgdTggKnNtYWMsIHUxNg0KPiAqdmxhbl9pZCwNCj4gPiArCQkJCXN0cnVjdCBuZXQgKm5ldCk7DQo+ID4gKy8qKiByZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCgpIC0gRmluZCB0aGUgZHN0IE1BQyBhbmQgVkxBTiBJRCBmb3IgYQ0KPiBHSUQgcGFpcg0KPiA+ICsgKiBAc2dpZDoJU291cmNlIEdJRCB0byB1c2UgZm9yIHRoZSBzZWFyY2guDQo+ID4gKyAqIEBkZ2lkOglEZXN0aW5hdGlvbiBHSUQgdG8gZmluZCB0aGUgZGV0YWlscyBmb3IuDQo+ID4gKyAqIEBkbWFjOglDb250YWlucyB0aGUgcmVzdWx0aW5nIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzLg0KPiA+ICsgKiBAdmxhbl9pZDoJQ29udGFpbnMgdGhlIHJlc3VsdGluZyBWTEFOIElELg0KPiA+ICsgKiBAbmV0OglOZXR3b3JrIG5hbWVzcGFjZSB0byB1c2UgZm9yIHRoZSBhZGRyZXNzIHJlc29sdXRpb24uDQo+ID4gKyAqDQo+ID4gKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBrZWVwIHRoZSBuZXR3b3JrIG5hbWVzcGFjZQ0KPiBhbGl2ZSB1bnRpbA0KPiA+ICsgKiB0aGUgZnVuY3Rpb24gcmV0dXJucy4NCj4gDQo+IFdoeSA/DQo+IA0KDQpTZWUgYWJvdmUuDQoNCj4gPiArICovDQo+ID4gK2ludCByZG1hX2FkZHJfZmluZF9kbWFjX2J5X2dyaCh1bmlvbiBpYl9naWQgKnNnaWQsIHVuaW9uIGliX2dpZA0KPiAqZGdpZCwgdTggKmRtYWMsDQo+ID4gKwkJCSAgICAgICB1MTYgKnZsYW5faWQsIHN0cnVjdCBuZXQgKm5ldCk7DQo+ID4NCj4gPiAgc3RhdGljIGlubGluZSB1MTYgaWJfYWRkcl9nZXRfcGtleShzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIpDQo+ID4gIHsNCj4gPiBAQCAtMTgyLDcgKzIxNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYm9lX2FkZHJfZ2V0X3NnaWQoc3RydWN0DQo+IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLA0KPiA+ICAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsNCj4gPiAgCXN0cnVjdCBpbl9kZXZpY2UgKmlwNDsNCj4gPg0KPiA+IC0JZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGRldl9hZGRyLT5ib3VuZF9kZXZfaWYpOw0KPiA+ICsJZGV2ID0gZGV2X2dldF9ieV9pbmRleChkZXZfYWRkci0+bmV0LCBkZXZfYWRkci0+Ym91bmRfZGV2X2lmKTsNCj4gPiAgCWlmIChkZXYpIHsNCj4gPiAgCQlpcDQgPSAoc3RydWN0IGluX2RldmljZSAqKWRldi0+aXBfcHRyOw0KPiA+ICAJCWlmIChpcDQgJiYgaXA0LT5pZmFfbGlzdCAmJiBpcDQtPmlmYV9saXN0LT5pZmFfYWRkcmVzcykNCj4gDQo+IA0KPiBJIGJlbGlldmUgdGhpcyBwYXRjaCBsYWNrIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgaW4gZm9ybSBvZg0KPiBnZXRfbmV0KCkgLyBwdXRfbmV0KCksIGJ1dCBjYW5ub3Qgc2F5IGZvciBzdXJlLg0KPiANCg0KSWYgeW91IGNvdWxkIHBvaW50IHRvIHNwZWNpZmljIGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMsIHRoYXQgd291bGQgYmUgZ3JlYXQuDQpXZSBoYXZlIHRob3JvdWdobHkgdGVzdGVkIGFuZCByZXZpZXdlZCB0aGUgY29kZSwgYW5kIGNvdWxkbid0IGZpbmQgYW55IHN1Y2ggaXNzdWVzIHdpdGggdGhlIHN1Ym1pdHRlZCBwYXRjaGVzLg0KDQotLVNoYWNoYXINCg0KDQo=--To unsubscribe from this list: send the line "unsubscribe linux-rdma" inthe body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.orgMore majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help