diff for duplicates of <1501759724.15969.49.camel@intel.com> diff --git a/a/1.txt b/N1/1.txt index 152813e..b50ad69 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,62 +1,47 @@ -On Thu, 2017-08-03 at 13:02 +0300, Kalle Valo wrote: -> "Coelho, Luciano" <luciano.coelho@intel.com> writes: -> -> > On Thu, 2017-08-03 at 11:10 +0200, Jiri Kosina wrote: -> > > On Mon, 31 Jul 2017, Jiri Kosina wrote: -> > > -> > > > Hi, -> > > > -> > > > booting current Linus' tree, I'm seeing lockdep splat (see the end of this -> > > > mail). -> > > > -> > > > Apparently, there is AB-BA between tz->lock and mvm->mutex through the CPU -> > > > hotplug lock. -> > > > -> > > > The obivous depency is: thermal_zone_get_temp() acquires tz->lock, and -> > > > then calls iwl_mvm_tzone_get_temp() (through tz->ops->get_temp() -> > > > callback), which acquires mvm->mutex -> > > > -> > > > The less obvious dependency is primarily caused by iwl_op_mode_mvm_start() -> > > > allocating workqueue (#2 stacktrace) while holding mvm->mutex (which is -> > > > broken, because that mutex is being taken also from CPU hotplug callback -> > > > path, hence the AB-BA). -> > > -> > > As the "central" part of the dependency is being added by iwlwifi driver -> > > (_iwl_pcie_rx_init() allocating workqueue while holding -> > > trans_pcie->mutex), I'm adding iwlwifi folks as well to CC. - -[...] - -> > > > -> #2 (cpu_hotplug_lock.rw_sem){++++++}: -> > > > lock_acquire+0xbd/0x220 -> > > > cpus_read_lock+0x46/0x90 -> > > > apply_workqueue_attrs+0x17/0x50 -> > > > __alloc_workqueue_key+0x195/0x4d0 -> > > > _iwl_pcie_rx_init+0x384/0x390 [iwlwifi] -> > > > iwl_pcie_rx_init+0x1e/0x380 [iwlwifi] -> > > > iwl_trans_pcie_start_fw+0x295/0x6f0 [iwlwifi] -> > > > iwl_mvm_load_ucode_wait_alive+0xe7/0x390 [iwlmvm] -> > > > iwl_run_init_mvm_ucode+0x84/0x320 [iwlmvm] -> > > > iwl_op_mode_mvm_start+0x964/0xd30 [iwlmvm] -> > > > _iwl_op_mode_start.isra.9+0x47/0xa0 [iwlwifi] -> > > > iwl_opmode_register+0xaa/0xd0 [iwlwifi] -> > > > iwl_mvm_init+0x37/0x1000 [iwlmvm] -> > > > do_one_initcall+0x51/0x1a9 -> > > > do_init_module+0x60/0x20e -> > > > load_module+0x203f/0x2b50 -> > > > SYSC_finit_module+0x96/0xd0 -> > > > SyS_finit_module+0xe/0x10 -> > > > entry_SYSCALL_64_fastpath+0x23/0xc2 - -Okay, so as I understand it the problem has been there for a long time, -but the splat is only coming up now because of Thomas' patch that adds -the lockdep map[1], right? - -I see the workqueue allocation you mentioned. I'll try to move this -allocation out of the mutex and see how it goes. - -[1] http://lkml.kernel.org/r/20170524081549.709375845@linutronix.de - --- -Cheers, -Luca. +T24gVGh1LCAyMDE3LTA4LTAzIGF0IDEzOjAyICswMzAwLCBLYWxsZSBWYWxvIHdyb3RlOg0KPiAi +Q29lbGhvLCBMdWNpYW5vIiA8bHVjaWFuby5jb2VsaG9AaW50ZWwuY29tPiB3cml0ZXM6DQo+IA0K +PiA+IE9uIFRodSwgMjAxNy0wOC0wMyBhdCAxMToxMCArMDIwMCwgSmlyaSBLb3NpbmEgd3JvdGU6 +DQo+ID4gPiBPbiBNb24sIDMxIEp1bCAyMDE3LCBKaXJpIEtvc2luYSB3cm90ZToNCj4gPiA+IA0K +PiA+ID4gPiBIaSwNCj4gPiA+ID4gDQo+ID4gPiA+IGJvb3RpbmcgY3VycmVudCBMaW51cycgdHJl +ZSwgSSdtIHNlZWluZyBsb2NrZGVwIHNwbGF0IChzZWUgdGhlIGVuZCBvZiB0aGlzIA0KPiA+ID4g +PiBtYWlsKS4NCj4gPiA+ID4gDQo+ID4gPiA+IEFwcGFyZW50bHksIHRoZXJlIGlzIEFCLUJBIGJl +dHdlZW4gdHotPmxvY2sgYW5kIG12bS0+bXV0ZXggdGhyb3VnaCB0aGUgQ1BVIA0KPiA+ID4gPiBo +b3RwbHVnIGxvY2suDQo+ID4gPiA+IA0KPiA+ID4gPiBUaGUgb2Jpdm91cyBkZXBlbmN5IGlzOiB0 +aGVybWFsX3pvbmVfZ2V0X3RlbXAoKSBhY3F1aXJlcyB0ei0+bG9jaywgYW5kIA0KPiA+ID4gPiB0 +aGVuIGNhbGxzIGl3bF9tdm1fdHpvbmVfZ2V0X3RlbXAoKSAodGhyb3VnaCB0ei0+b3BzLT5nZXRf +dGVtcCgpIA0KPiA+ID4gPiBjYWxsYmFjayksIHdoaWNoIGFjcXVpcmVzIG12bS0+bXV0ZXgNCj4g +PiA+ID4gDQo+ID4gPiA+IFRoZSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jeSBpcyBwcmltYXJpbHkg +Y2F1c2VkIGJ5IGl3bF9vcF9tb2RlX212bV9zdGFydCgpIA0KPiA+ID4gPiBhbGxvY2F0aW5nIHdv +cmtxdWV1ZSAoIzIgc3RhY2t0cmFjZSkgd2hpbGUgaG9sZGluZyBtdm0tPm11dGV4ICh3aGljaCBp +cyANCj4gPiA+ID4gYnJva2VuLCBiZWNhdXNlIHRoYXQgbXV0ZXggaXMgYmVpbmcgdGFrZW4gYWxz +byBmcm9tIENQVSBob3RwbHVnIGNhbGxiYWNrIA0KPiA+ID4gPiBwYXRoLCBoZW5jZSB0aGUgQUIt +QkEpLg0KPiA+ID4gDQo+ID4gPiBBcyB0aGUgImNlbnRyYWwiIHBhcnQgb2YgdGhlIGRlcGVuZGVu +Y3kgaXMgYmVpbmcgYWRkZWQgYnkgaXdsd2lmaSBkcml2ZXIgDQo+ID4gPiAoX2l3bF9wY2llX3J4 +X2luaXQoKSBhbGxvY2F0aW5nIHdvcmtxdWV1ZSB3aGlsZSBob2xkaW5nIA0KPiA+ID4gdHJhbnNf +cGNpZS0+bXV0ZXgpLCBJJ20gYWRkaW5nIGl3bHdpZmkgZm9sa3MgYXMgd2VsbCB0byBDQy4NCg0K +Wy4uLl0NCg0KPiA+ID4gPiAgLT4gIzIgKGNwdV9ob3RwbHVnX2xvY2sucndfc2VtKXsrKysrKyt9 +Og0KPiA+ID4gPiAgICAgICAgIGxvY2tfYWNxdWlyZSsweGJkLzB4MjIwDQo+ID4gPiA+ICAgICAg +ICAgY3B1c19yZWFkX2xvY2srMHg0Ni8weDkwDQo+ID4gPiA+ICAgICAgICAgYXBwbHlfd29ya3F1 +ZXVlX2F0dHJzKzB4MTcvMHg1MA0KPiA+ID4gPiAgICAgICAgIF9fYWxsb2Nfd29ya3F1ZXVlX2tl +eSsweDE5NS8weDRkMA0KPiA+ID4gPiAgICAgICAgIF9pd2xfcGNpZV9yeF9pbml0KzB4Mzg0LzB4 +MzkwIFtpd2x3aWZpXQ0KPiA+ID4gPiAgICAgICAgIGl3bF9wY2llX3J4X2luaXQrMHgxZS8weDM4 +MCBbaXdsd2lmaV0NCj4gPiA+ID4gICAgICAgICBpd2xfdHJhbnNfcGNpZV9zdGFydF9mdysweDI5 +NS8weDZmMCBbaXdsd2lmaV0NCj4gPiA+ID4gICAgICAgICBpd2xfbXZtX2xvYWRfdWNvZGVfd2Fp +dF9hbGl2ZSsweGU3LzB4MzkwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgaXdsX3J1bl9pbml0 +X212bV91Y29kZSsweDg0LzB4MzIwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgaXdsX29wX21v +ZGVfbXZtX3N0YXJ0KzB4OTY0LzB4ZDMwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgX2l3bF9v +cF9tb2RlX3N0YXJ0LmlzcmEuOSsweDQ3LzB4YTAgW2l3bHdpZmldDQo+ID4gPiA+ICAgICAgICAg +aXdsX29wbW9kZV9yZWdpc3RlcisweGFhLzB4ZDAgW2l3bHdpZmldDQo+ID4gPiA+ICAgICAgICAg +aXdsX212bV9pbml0KzB4MzcvMHgxMDAwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgZG9fb25l +X2luaXRjYWxsKzB4NTEvMHgxYTkNCj4gPiA+ID4gICAgICAgICBkb19pbml0X21vZHVsZSsweDYw +LzB4MjBlDQo+ID4gPiA+ICAgICAgICAgbG9hZF9tb2R1bGUrMHgyMDNmLzB4MmI1MA0KPiA+ID4g +PiAgICAgICAgIFNZU0NfZmluaXRfbW9kdWxlKzB4OTYvMHhkMA0KPiA+ID4gPiAgICAgICAgIFN5 +U19maW5pdF9tb2R1bGUrMHhlLzB4MTANCj4gPiA+ID4gICAgICAgICBlbnRyeV9TWVNDQUxMXzY0 +X2Zhc3RwYXRoKzB4MjMvMHhjMg0KDQpPa2F5LCBzbyBhcyBJIHVuZGVyc3RhbmQgaXQgdGhlIHBy +b2JsZW0gaGFzIGJlZW4gdGhlcmUgZm9yIGEgbG9uZyB0aW1lLA0KYnV0IHRoZSBzcGxhdCBpcyBv +bmx5IGNvbWluZyB1cCBub3cgYmVjYXVzZSBvZiBUaG9tYXMnIHBhdGNoIHRoYXQgYWRkcw0KdGhl +IGxvY2tkZXAgbWFwWzFdLCByaWdodD8NCg0KSSBzZWUgdGhlIHdvcmtxdWV1ZSBhbGxvY2F0aW9u +IHlvdSBtZW50aW9uZWQuICBJJ2xsIHRyeSB0byBtb3ZlIHRoaXMNCmFsbG9jYXRpb24gb3V0IG9m +IHRoZSBtdXRleCBhbmQgc2VlIGhvdyBpdCBnb2VzLg0KDQpbMV0gaHR0cDovL2xrbWwua2VybmVs +Lm9yZy9yLzIwMTcwNTI0MDgxNTQ5LjcwOTM3NTg0NUBsaW51dHJvbml4LmRlDQoNCi0tDQpDaGVl +cnMsDQpMdWNhLg== diff --git a/a/content_digest b/N1/content_digest index 2047d19..22a7035 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -24,67 +24,52 @@ " Emmanuel <emmanuel.grumbach@intel.com>\0" "\00:1\0" "b\0" - "On Thu, 2017-08-03 at 13:02 +0300, Kalle Valo wrote:\n" - "> \"Coelho, Luciano\" <luciano.coelho@intel.com> writes:\n" - "> \n" - "> > On Thu, 2017-08-03 at 11:10 +0200, Jiri Kosina wrote:\n" - "> > > On Mon, 31 Jul 2017, Jiri Kosina wrote:\n" - "> > > \n" - "> > > > Hi,\n" - "> > > > \n" - "> > > > booting current Linus' tree, I'm seeing lockdep splat (see the end of this \n" - "> > > > mail).\n" - "> > > > \n" - "> > > > Apparently, there is AB-BA between tz->lock and mvm->mutex through the CPU \n" - "> > > > hotplug lock.\n" - "> > > > \n" - "> > > > The obivous depency is: thermal_zone_get_temp() acquires tz->lock, and \n" - "> > > > then calls iwl_mvm_tzone_get_temp() (through tz->ops->get_temp() \n" - "> > > > callback), which acquires mvm->mutex\n" - "> > > > \n" - "> > > > The less obvious dependency is primarily caused by iwl_op_mode_mvm_start() \n" - "> > > > allocating workqueue (#2 stacktrace) while holding mvm->mutex (which is \n" - "> > > > broken, because that mutex is being taken also from CPU hotplug callback \n" - "> > > > path, hence the AB-BA).\n" - "> > > \n" - "> > > As the \"central\" part of the dependency is being added by iwlwifi driver \n" - "> > > (_iwl_pcie_rx_init() allocating workqueue while holding \n" - "> > > trans_pcie->mutex), I'm adding iwlwifi folks as well to CC.\n" - "\n" - "[...]\n" - "\n" - "> > > > -> #2 (cpu_hotplug_lock.rw_sem){++++++}:\n" - "> > > > lock_acquire+0xbd/0x220\n" - "> > > > cpus_read_lock+0x46/0x90\n" - "> > > > apply_workqueue_attrs+0x17/0x50\n" - "> > > > __alloc_workqueue_key+0x195/0x4d0\n" - "> > > > _iwl_pcie_rx_init+0x384/0x390 [iwlwifi]\n" - "> > > > iwl_pcie_rx_init+0x1e/0x380 [iwlwifi]\n" - "> > > > iwl_trans_pcie_start_fw+0x295/0x6f0 [iwlwifi]\n" - "> > > > iwl_mvm_load_ucode_wait_alive+0xe7/0x390 [iwlmvm]\n" - "> > > > iwl_run_init_mvm_ucode+0x84/0x320 [iwlmvm]\n" - "> > > > iwl_op_mode_mvm_start+0x964/0xd30 [iwlmvm]\n" - "> > > > _iwl_op_mode_start.isra.9+0x47/0xa0 [iwlwifi]\n" - "> > > > iwl_opmode_register+0xaa/0xd0 [iwlwifi]\n" - "> > > > iwl_mvm_init+0x37/0x1000 [iwlmvm]\n" - "> > > > do_one_initcall+0x51/0x1a9\n" - "> > > > do_init_module+0x60/0x20e\n" - "> > > > load_module+0x203f/0x2b50\n" - "> > > > SYSC_finit_module+0x96/0xd0\n" - "> > > > SyS_finit_module+0xe/0x10\n" - "> > > > entry_SYSCALL_64_fastpath+0x23/0xc2\n" - "\n" - "Okay, so as I understand it the problem has been there for a long time,\n" - "but the splat is only coming up now because of Thomas' patch that adds\n" - "the lockdep map[1], right?\n" - "\n" - "I see the workqueue allocation you mentioned. I'll try to move this\n" - "allocation out of the mutex and see how it goes.\n" - "\n" - "[1] http://lkml.kernel.org/r/20170524081549.709375845@linutronix.de\n" - "\n" - "--\n" - "Cheers,\n" - Luca. + "T24gVGh1LCAyMDE3LTA4LTAzIGF0IDEzOjAyICswMzAwLCBLYWxsZSBWYWxvIHdyb3RlOg0KPiAi\n" + "Q29lbGhvLCBMdWNpYW5vIiA8bHVjaWFuby5jb2VsaG9AaW50ZWwuY29tPiB3cml0ZXM6DQo+IA0K\n" + "PiA+IE9uIFRodSwgMjAxNy0wOC0wMyBhdCAxMToxMCArMDIwMCwgSmlyaSBLb3NpbmEgd3JvdGU6\n" + "DQo+ID4gPiBPbiBNb24sIDMxIEp1bCAyMDE3LCBKaXJpIEtvc2luYSB3cm90ZToNCj4gPiA+IA0K\n" + "PiA+ID4gPiBIaSwNCj4gPiA+ID4gDQo+ID4gPiA+IGJvb3RpbmcgY3VycmVudCBMaW51cycgdHJl\n" + "ZSwgSSdtIHNlZWluZyBsb2NrZGVwIHNwbGF0IChzZWUgdGhlIGVuZCBvZiB0aGlzIA0KPiA+ID4g\n" + "PiBtYWlsKS4NCj4gPiA+ID4gDQo+ID4gPiA+IEFwcGFyZW50bHksIHRoZXJlIGlzIEFCLUJBIGJl\n" + "dHdlZW4gdHotPmxvY2sgYW5kIG12bS0+bXV0ZXggdGhyb3VnaCB0aGUgQ1BVIA0KPiA+ID4gPiBo\n" + "b3RwbHVnIGxvY2suDQo+ID4gPiA+IA0KPiA+ID4gPiBUaGUgb2Jpdm91cyBkZXBlbmN5IGlzOiB0\n" + "aGVybWFsX3pvbmVfZ2V0X3RlbXAoKSBhY3F1aXJlcyB0ei0+bG9jaywgYW5kIA0KPiA+ID4gPiB0\n" + "aGVuIGNhbGxzIGl3bF9tdm1fdHpvbmVfZ2V0X3RlbXAoKSAodGhyb3VnaCB0ei0+b3BzLT5nZXRf\n" + "dGVtcCgpIA0KPiA+ID4gPiBjYWxsYmFjayksIHdoaWNoIGFjcXVpcmVzIG12bS0+bXV0ZXgNCj4g\n" + "PiA+ID4gDQo+ID4gPiA+IFRoZSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jeSBpcyBwcmltYXJpbHkg\n" + "Y2F1c2VkIGJ5IGl3bF9vcF9tb2RlX212bV9zdGFydCgpIA0KPiA+ID4gPiBhbGxvY2F0aW5nIHdv\n" + "cmtxdWV1ZSAoIzIgc3RhY2t0cmFjZSkgd2hpbGUgaG9sZGluZyBtdm0tPm11dGV4ICh3aGljaCBp\n" + "cyANCj4gPiA+ID4gYnJva2VuLCBiZWNhdXNlIHRoYXQgbXV0ZXggaXMgYmVpbmcgdGFrZW4gYWxz\n" + "byBmcm9tIENQVSBob3RwbHVnIGNhbGxiYWNrIA0KPiA+ID4gPiBwYXRoLCBoZW5jZSB0aGUgQUIt\n" + "QkEpLg0KPiA+ID4gDQo+ID4gPiBBcyB0aGUgImNlbnRyYWwiIHBhcnQgb2YgdGhlIGRlcGVuZGVu\n" + "Y3kgaXMgYmVpbmcgYWRkZWQgYnkgaXdsd2lmaSBkcml2ZXIgDQo+ID4gPiAoX2l3bF9wY2llX3J4\n" + "X2luaXQoKSBhbGxvY2F0aW5nIHdvcmtxdWV1ZSB3aGlsZSBob2xkaW5nIA0KPiA+ID4gdHJhbnNf\n" + "cGNpZS0+bXV0ZXgpLCBJJ20gYWRkaW5nIGl3bHdpZmkgZm9sa3MgYXMgd2VsbCB0byBDQy4NCg0K\n" + "Wy4uLl0NCg0KPiA+ID4gPiAgLT4gIzIgKGNwdV9ob3RwbHVnX2xvY2sucndfc2VtKXsrKysrKyt9\n" + "Og0KPiA+ID4gPiAgICAgICAgIGxvY2tfYWNxdWlyZSsweGJkLzB4MjIwDQo+ID4gPiA+ICAgICAg\n" + "ICAgY3B1c19yZWFkX2xvY2srMHg0Ni8weDkwDQo+ID4gPiA+ICAgICAgICAgYXBwbHlfd29ya3F1\n" + "ZXVlX2F0dHJzKzB4MTcvMHg1MA0KPiA+ID4gPiAgICAgICAgIF9fYWxsb2Nfd29ya3F1ZXVlX2tl\n" + "eSsweDE5NS8weDRkMA0KPiA+ID4gPiAgICAgICAgIF9pd2xfcGNpZV9yeF9pbml0KzB4Mzg0LzB4\n" + "MzkwIFtpd2x3aWZpXQ0KPiA+ID4gPiAgICAgICAgIGl3bF9wY2llX3J4X2luaXQrMHgxZS8weDM4\n" + "MCBbaXdsd2lmaV0NCj4gPiA+ID4gICAgICAgICBpd2xfdHJhbnNfcGNpZV9zdGFydF9mdysweDI5\n" + "NS8weDZmMCBbaXdsd2lmaV0NCj4gPiA+ID4gICAgICAgICBpd2xfbXZtX2xvYWRfdWNvZGVfd2Fp\n" + "dF9hbGl2ZSsweGU3LzB4MzkwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgaXdsX3J1bl9pbml0\n" + "X212bV91Y29kZSsweDg0LzB4MzIwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgaXdsX29wX21v\n" + "ZGVfbXZtX3N0YXJ0KzB4OTY0LzB4ZDMwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgX2l3bF9v\n" + "cF9tb2RlX3N0YXJ0LmlzcmEuOSsweDQ3LzB4YTAgW2l3bHdpZmldDQo+ID4gPiA+ICAgICAgICAg\n" + "aXdsX29wbW9kZV9yZWdpc3RlcisweGFhLzB4ZDAgW2l3bHdpZmldDQo+ID4gPiA+ICAgICAgICAg\n" + "aXdsX212bV9pbml0KzB4MzcvMHgxMDAwIFtpd2xtdm1dDQo+ID4gPiA+ICAgICAgICAgZG9fb25l\n" + "X2luaXRjYWxsKzB4NTEvMHgxYTkNCj4gPiA+ID4gICAgICAgICBkb19pbml0X21vZHVsZSsweDYw\n" + "LzB4MjBlDQo+ID4gPiA+ICAgICAgICAgbG9hZF9tb2R1bGUrMHgyMDNmLzB4MmI1MA0KPiA+ID4g\n" + "PiAgICAgICAgIFNZU0NfZmluaXRfbW9kdWxlKzB4OTYvMHhkMA0KPiA+ID4gPiAgICAgICAgIFN5\n" + "U19maW5pdF9tb2R1bGUrMHhlLzB4MTANCj4gPiA+ID4gICAgICAgICBlbnRyeV9TWVNDQUxMXzY0\n" + "X2Zhc3RwYXRoKzB4MjMvMHhjMg0KDQpPa2F5LCBzbyBhcyBJIHVuZGVyc3RhbmQgaXQgdGhlIHBy\n" + "b2JsZW0gaGFzIGJlZW4gdGhlcmUgZm9yIGEgbG9uZyB0aW1lLA0KYnV0IHRoZSBzcGxhdCBpcyBv\n" + "bmx5IGNvbWluZyB1cCBub3cgYmVjYXVzZSBvZiBUaG9tYXMnIHBhdGNoIHRoYXQgYWRkcw0KdGhl\n" + "IGxvY2tkZXAgbWFwWzFdLCByaWdodD8NCg0KSSBzZWUgdGhlIHdvcmtxdWV1ZSBhbGxvY2F0aW9u\n" + "IHlvdSBtZW50aW9uZWQuICBJJ2xsIHRyeSB0byBtb3ZlIHRoaXMNCmFsbG9jYXRpb24gb3V0IG9m\n" + "IHRoZSBtdXRleCBhbmQgc2VlIGhvdyBpdCBnb2VzLg0KDQpbMV0gaHR0cDovL2xrbWwua2VybmVs\n" + "Lm9yZy9yLzIwMTcwNTI0MDgxNTQ5LjcwOTM3NTg0NUBsaW51dHJvbml4LmRlDQoNCi0tDQpDaGVl\n" + cnMsDQpMdWNhLg== -349058912c51a214fe8a72aa59fe7fe2fc2c172ef98d8eb28643e489a7dcbe9c +4b04291a73295930d43ae8ff555603b58ccb6305f26ca3138980c2e7ab9c4ff7
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.