From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Subject: Re: [PATCH v7 09/14] jump_label: port __jump_table to linker tables Date: Thu, 19 Jan 2017 12:24:11 +0100 Message-ID: <20170119112411.GN28024@kroah.com> References: <20170109145833.11502-1-mcgrof@kernel.org> <20170115211057.17167-1-mcgrof@kernel.org> <20170115211057.17167-10-mcgrof@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170115211057.17167-10-mcgrof@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "Luis R. Rodriguez" Cc: gnomes@lxorguk.ukuu.org.uk, dalias@libc.org, linux-ia64@vger.kernel.org, jkosina@suse.cz, benh@kernel.crashing.org, ming.lei@canonical.com, heiko.carstens@de.ibm.com, platform-driver-x86@vger.kernel.org, James.Bottomley@HansenPartnership.com, paul.gortmaker@windriver.com, paulus@samba.org, mpe@ellerman.id.au, hpa@zytor.com, masami.hiramatsu.pt@hitachi.com, wangnan0@huawei.com, mchehab@osg.samsung.com, linux-arch@vger.kernel.org, markus.heiser@darmarit.de, sparclinux@vger.kernel.org, xen-devel@lists.xensource.com, linux@arm.linux.org.uk, linux-sh@vger.kernel.org, will.deacon@arm.com, korea.drzix@gmail.com, x86@kernel.org, anil.s.keshavamurthy@intel.com, fontana@sharpeleven.org, mingo@redhat.com, dsahern@gmail.com, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, dvhart@infradead.org, bp@suse.de, linux@roeck-us.net, david.vrabel@citrix.com, linux-xtensa@linux List-Id: linux-arch.vger.kernel.org T24gU3VuLCBKYW4gMTUsIDIwMTcgYXQgMDE6MTA6NTJQTSAtMDgwMCwgTHVpcyBSLiBSb2RyaWd1 ZXogd3JvdGU6Cj4gTW92ZSB0aGUgX19qdW1wX3RhYmxlIGZyb20gdGhlIGEgY3VzdG9tIHNlY3Rp b24gc29sdXRpb24KPiB0byBhIGdlbmVyaWMgc29sdXRpb24sIHRoaXMgYXZvaWRpbmcgZXh0cmEg dm1saW51eC5sZHMuaAo+IGN1c3RvbWl6YXRpb25zLgo+IAo+IFRoaXMgYWxzbyBkZW1vcyB0aGUg dXNlIG9mIHRoZSAuZGF0YSBsaW5rZXIgdGFibGUgYW5kIG9mCj4gdGhlIHNoYXJlZCBhc20gY2Fs bCBwdXNoX3NlY3Rpb25fdGJsKCkuCj4gCj4gQnVpbHQtaW4ga2VybmVsIGZ1bmN0aW9uYWxpdHkg d2FzIHRlc3RlZCB3aXRoIENPTkZJR19TVEFUSUNfS0VZU19TRUxGVEVTVC4KPiBNb2R1bGVyICBr ZXJuZWwgZnVuY3Rpb25hbGl0eSB3YXMgdGVzdGVkIHdpdGggQ09ORklHX1RFU1RfU1RBVElDX0tF WVMuCj4gQm90aCB3b3JrIGFzIGV4cGVjdGVkLgo+IAo+IFNpbmNlIF9fanVtcF90YWJsZSBzZWN0 aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQgcGVyCj4gbW9kdWxlIHRoaXMgYWxzbyByZXF1aXJlZCBl eHBhbmRpbmcgbW9kdWxlLWNvbW1vbi5sZHMuUwo+IHRvIGNhcHR1cmUgYW5kIGZvbGQgYWxsIC5k YXRhLnRsYi5fX2p1bXBfdGFibGUuKiBvbnRvCj4gdGhlIHRoZSBzZWN0aW9uIF9fanVtcF90YWJs ZSAtLSBpbiB0aGlzIGNhc2UgZm9yIG1vZHVsZXMKPiBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2Ug aW4gcGxhY2UsIGdpdmVuIHRoZSBhbHRlcm5hdGl2ZQo+IGlzIHRvIHVzZSBERUZJTkVfTElOS1RB QkxFKHN0cnVjdCBqdW1wX2VudHJ5LCBfX2p1bXBfdGFibGUpCj4gcGVyIG1vZHVsZSAtLSBhbmQg bGF0ZXIgdGhyb3VnaCBtYWNybyBoYWNrcyBpbnN0YW50aWF0ZQo+IHRoZSBqdW1wIGVudHJpZXMg cGVyIG1vZHVsZSB1cG9uIGluaXQuIFRoaXMgaXMgZG9hYmxlIGJ1dAo+IHdlJ2QgbG9vc2Ugb3V0 IG9uIHRoZSBzb3J0aW5nIG9mIHRoZSB0YWJsZSB1c2luZyB0aGUKPiBsaW5rZXIsIHRvIHNvcnQg d2UnZCBhbHdheXMgc3RpbGwgbmVlZCB0byBleHBhbmQgdGhlCj4gbW9kdWxlIGNvbW1vbiBsaW5r ZXIgc2NyaXB0LiBBbiBhbHRlcm5hdGl2ZSBtZWNoYW5pc20KPiBpcyBwb3NzaWJsZSB3aGljaCB3 b3VsZCBtYWtlIHRoZXNlIGN1c3RvbSBtb2R1bGUgc2VjdGlvbnMKPiBleHRlbnNpb25zIGR5bmFt aWMgd2l0aG91dCByZXF1aXJpbmcgbWFudWFsIGNoYW5nZXMsIHRoaXMKPiBob3dldmVyIGlzIGJl c3QgZG9uZSBsYXRlciB0aHJvdWdoIGEgc2VwYXJhdGUgZXZvbHV0aW9uCj4gb25jZSBsaW5rZXIg dGFibGVzIGFyZSBpbiBwbGFjZS4KPiAKPiBBIGNhcmVmdWwgcmV2aWV3ZXIgbWF5IG5vdGUgdGhh dCBzb21lIGFyY2hpdGVjdHVyZXMgdXNlCj4gIlxuXHQiIHRvIHNlcGFyYXRlIGFzbSBjb2RlLCB3 aGlsZSBvdGhlcnMganVzdCB1c2UgYSBuZXcgbGluZS4KPiBVcG9uIHJldmlldyBsYXN0IHRpbWUg aXQgd2FzIGRlZW1lZCByZWFzb25hYmxlIHRvIGZvciBhbGwKPiBhcmNoaXRlY3R1cmVzIHRvIGp1 c3QgdXNlICJcbiIsIHRoaXMgaXMgZGVmaW5lZCBhcyBBU01fQ01EX1NFUCwKPiBhbmQgaWYgYW4g YXJjaGl0ZWN0dXJlIG5lZWRzIHRvIG92ZXJyaWRlIHRoZXkgY2FuIGRvIHNvIG9uIHRoZWlyCj4g YXJjaGl0ZWN0dXJlIHNlY3Rpb25zLmggcHJpb3IgdG8gaW5jbHVkaW5nIGFzbS1nZW5lcmljL3Nl Y3Rpb25zLmgKPiAKPiB2NjogcmVuYW1lIHRhYmxlIG1hY3JvIGFzIHN1Z2dlc3RlZCBieSBBbmR5 IFNoZXZjaGVua28KPiAKPiB2NToKPiAKPiBvIFVzZSAuLnRibCBpbnN0ZWFkIG9mIC50YmwgYXMg c3VnZ2VzdGVkIGJ5IE5pY2hvbGFzIFBpZ2dpbi4KPiAgIFRoaXMgaXMgdGhlIHR5cGljYWwgd2F5 IHRvIGF2b2lkIGNsYXNoIHdpdGggY29tcGlsZXIgZ2VuZXJhdGVkCj4gICBzZWN0aW9uLgo+IAo+ IG8gUmVwbGFjZSBzZWN0aW9uIG1hY3JvcyB3aXRoIHNlY3Rpb24gbmFtZXMKPiAKPiBvIFVzZSBM SU5LVEFCTEVfU1RBUlQoKSBhbmQgTElOS1RBQkxFX0VORCgpCj4gCj4gbyBmaXhlZCB0aWxlIGp1 bXAgbGFiZWwgcG9ydCAtLSB0aWxlIGdvdCBqdW1wIGxhYmVsIHN1cHBvcnQgYXMgb2YKPiAgIGNv bW1pdCA2NWE3OTJlODRmMjVkMSAoInRpbGUvanVtcF9sYWJlbDogYWRkIGp1bXAgbGFiZWwgc3Vw cG9ydAo+ICAgZm9yIFRJTEUtR3giKSwgYXMgc3VjaCB3ZSBqdXN0IG5lZWRlZCB0byBhZGp1c3Qg dGhlIGFzbSB0byBhY2NvdW50Cj4gICBmb3IgdGhlIG5ldyBsaW5rZXIgdGFibGUgQVBJIHVzZS4g VGhpcyBjb21taXQgd2FzIG1lcmdlZCBhcyBvZiB2NC41LXJjMS4KPiAKPiB2NDoKPiAKPiBvIFNv bWUgYXJjaGl0ZWN0dXJlcyBhbGxvdyBsaW5rZXIgc2NyaXB0cyB0byBmb2xsb3cgaW5jbHVkaW5n IGhlYWRlcgo+ICAgZmlsZXMsIHNvbWUgb3RoZXJzIGRvIG5vdCwgc28gaWYgeW91IG5lZWQgYSBo ZWxwZXIgb24gYSBsaW5rZXIgc2NyaXB0Cj4gICB5b3UgbmVlZCB0byBleHBsaWNpdGx5IGluY2x1 ZGUgaXQuIFNvIGZvciBpbnN0YW5jZSBhbHRob3VnaAo+ICAgc2NyaXB0cy9tb2R1bGUtY29tbW9u Lmxkcy5TIGluY2x1ZGVzIDxhc20vdGFibGVzLmg+IGFuZCB0aGlzIGZpbGUKPiAgIGluY2x1ZGVz IDxhc20vc2VjdGlvbi1jb3JlLmg+LCB5b3Ugc3RpbGwgbmVlZCB0byBleHBsaWNpdGx5Cj4gICBp bmNsdWRlIGl0IG9uIHRoZSBsaW5rZXIgc2NyaXB0LiBUaGlzIGlzc3VlIGlzIHByZXNlbnQgb24g QVJNLgo+IAo+IG8gYXMgcGVyIEpvc2ggUG9pbWJvZXVmIG9wZW4gY29kZSB0aGUgc2VjdGlvbiB0 YWJsZSBuYW1lIGluc3RlYWQKPiAgIG9mIGluY2x1ZGluZyB0aGUga2VybmVsIHNlY3Rpb24gaGVh ZGVycywgdGhlIHNpbXBsaWNpdHkgYW5kCj4gICBpbmRlcGVuZGVuY2UgZnJvbSB0aGUga2VybmVs IGlzIHByZWZlcnJlZC4KPiAKPiB2MzoKPiAKPiBvIE1vcmUgZWxhYm9yYXRlIHRlc3RzIHBlcmZv cm1lZAo+IG8gZmlyc3QgbW9kdWxhciBzdXBwb3J0IHVzZSBjYXNlLCBtb2R1bGUgdGVzdGVkIHdh cwo+ICAgQ09ORklHX1RFU1RfU1RBVElDX0tFWVMgKGxpYi90ZXN0X3N0YXRpY19rZXlzLmtvKSwg dGhpcwo+ICAgcmVxdWlyZWQgdXMgdG8gZXh0ZW5kIG1vZHVsZS1jb21tb24ubGRzLlMKPiBvIHVz ZSBnZW5lcmljIHB1c2hfc2VjdGlvbl90YmxfYW55KCkgZm9yIGFsbCBhcmNoaXRlY3R1cmVzCj4g byBNYWtlcyB1c2Ugb2YgQVNNX0NNRF9TRVAgdG8gZW5hYmxlIGFyY2hpdGVjdHVyZXMgdG8gb3Zl cnJpZGUgbGF0ZXIKPiAgIGlmIG5lZWRlZAo+IG8gZ3VhcmQgdGFibGVzLmggaW5jbHVzaW9uIGFu ZCB0YWJsZSBkZWZpbml0aW9uIHdpdGggX19LRVJORUxfXwo+IAo+IHYyOiBpbnRyb2R1Y2VkIGlu IHRoaXMgc2VyaWVzCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVpcyBSLiBSb2RyaWd1ZXogPG1jZ3Jv ZkBrZXJuZWwub3JnPgo+IC0tLQo+ICBhcmNoL2FybS9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgg ICAgIHwgIDYgKysrKy0tCj4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oICAg fCAgNiArKysrLS0KPiAgYXJjaC9taXBzL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCAgICB8ICA2 ICsrKystLQo+ICBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIHwgIDggKysr KystLS0KPiAgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCAgICB8ICA2ICsrKyst LQo+ICBhcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCAgIHwgIDYgKysrKy0tCj4g IGFyY2gvdGlsZS9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggICAgfCAgNSArKystLQo+ICBhcmNo L3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggICAgIHwgMTAgKysrKysrLS0tLQo+ICBpbmNs dWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggICAgIHwgIDUgLS0tLS0KPiAgaW5jbHVkZS9s aW51eC9qdW1wX2xhYmVsLmggICAgICAgICAgICB8ICA0ICsrLS0KPiAga2VybmVsL2p1bXBfbGFi ZWwuYyAgICAgICAgICAgICAgICAgICB8IDE3ICsrKysrKysrKystLS0tLS0tCj4gIHNjcmlwdHMv bW9kdWxlLWNvbW1vbi5sZHMgICAgICAgICAgICAgfCAgMSArCj4gIHRvb2xzL29ianRvb2wvc3Bl Y2lhbC5jICAgICAgICAgICAgICAgfCAgMiArLQo+ICAxMyBmaWxlcyBjaGFuZ2VkLCA0OCBpbnNl cnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKCm1ldGEtY29tbWVudC4gIFRoaXMgbmV3IGluZnJh c3RydWN0dXJlIGRvZXNuJ3Qgc2VlbSB0byBzYXZlIGFueSBjb2RlCndoZW4geW91IG5lZWQgdG8g aGF2ZSBhIG5ldyAibGluayB0YWJsZSIuICBZZXMsIHRoZSBtYWNyb3Mgc2VlbSBhIGJpdApuaWNl ciwgYnV0IGl0IGZlZWxzIGxpa2UgdW5uZWVkZWQgY2h1cm4uICBJIGhhdmVuJ3Qgc2VlbiBhbnkg cGF0Y2hlcyBpbgp0aGlzIHNlcmllcyB0aGF0IG1ha2VzIG1lIGdvICJvaCB5ZWFoLCBub3cgSSBz ZWUgd2h5IGhlIGRpZCB0aGlzIHdvcmssCml0J3Mgc28gbXVjaCBzaW1wbGVyIGFuZCBlYXN5IHRv IHVuZGVyc3RhbmQgbm93ISIKCldoYXQgYW0gSSBtaXNzaW5nPyAgV2hhdCB3b25kZXJmdWwgbmV3 IHRoaW5ncyBhcmUgZ29pbmcgdG8gaGFwcGVuLCBvcgp3aGVyZSBpcyB0aGUgY29kZSBzYXZpbmdz IGdvaW5nIHRvIGNvbWUgZnJvbSB3aXRoIHRoaXMgc2VyaWVzIHRvIGp1c3RpZnkKYWxsIG9mIHRo ZSB3b3JrIHRvIGNyZWF0ZSBhbmQgcmV2aWV3IHRoaXM/Cgp0aGFua3MsCgpncmVnIGstaAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linuxfoundation.org ([140.211.169.12]:38924 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751815AbdASLd5 (ORCPT ); Thu, 19 Jan 2017 06:33:57 -0500 Date: Thu, 19 Jan 2017 12:24:11 +0100 From: Greg KH Subject: Re: [PATCH v7 09/14] jump_label: port __jump_table to linker tables Message-ID: <20170119112411.GN28024@kroah.com> References: <20170109145833.11502-1-mcgrof@kernel.org> <20170115211057.17167-1-mcgrof@kernel.org> <20170115211057.17167-10-mcgrof@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170115211057.17167-10-mcgrof@kernel.org> Sender: linux-arch-owner@vger.kernel.org List-ID: To: "Luis R. Rodriguez" Cc: bp@alien8.de, bp@suse.de, hpa@zytor.com, acme@redhat.com, tglx@linutronix.de, mingo@redhat.com, jpoimboe@redhat.com, npiggin@gmail.com, mhiramat@kernel.org, masami.hiramatsu.pt@hitachi.com, jbaron@akamai.com, heiko.carstens@de.ibm.com, ananth@linux.vnet.ibm.com, anil.s.keshavamurthy@intel.com, davem@davemloft.net, realmz6@gmail.com, dalias@libc.org, linux@arm.linux.org.uk, x86@kernel.org, luto@amacapital.net, keescook@chromium.org, linux@roeck-us.net, torvalds@linux-foundation.org, rusty@rustcorp.com.au, gnomes@lxorguk.ukuu.org.uk, alan@linux.intel.com, dwmw2@infradead.org, arnd@arndb.de, ming.lei@canonical.com, linux-arch@vger.kernel.org, benh@kernel.crashing.org, pebolle@tiscali.nl, fontana@sharpeleven.org, david.vrabel@citrix.com, konrad.wilk@oracle.com, mcb30@ipxe.org, jgross@suse.com, andrew.cooper3@citrix.com, andriy.shevchenko@linux.intel.com, paul.gortmaker@windriver.com, xen-devel@lists.xensource.com, ak@linux.intel.com, pali.rohar@gmail.com, dvhart@infradead.org, platform-driver-x86@vger.kernel.org, mmarek@suse.com, linux@rasmusvillemoes.dk, jkosina@suse.cz, korea.drzix@gmail.com, linux-kbuild@vger.kernel.org, tony.luck@intel.com, akpm@linux-foundation.org, linux-ia64@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rostedt@goodmis.org, jani.nikula@intel.com, mchehab@osg.samsung.com, markus.heiser@darmarit.de, jolsa@kernel.org, msalter@redhat.com, chris@zankel.net, jcmvbkbc@gmail.com, linux-xtensa@linux-xtensa.org, adrian.hunter@intel.com, dsahern@gmail.com, namhyung@kernel.org, wangnan0@huawei.com, dmitry.torokhov@gmail.com, joro@8bytes.org, paulus@samba.org, mpe@ellerman.id.au, James.Bottomley@HansenPartnership.com Message-ID: <20170119112411.4UIPwcoF9nKyCVj9fLur_5SJimKp8ujTXXc3H0VUxqo@z> On Sun, Jan 15, 2017 at 01:10:52PM -0800, Luis R. Rodriguez wrote: > Move the __jump_table from the a custom section solution > to a generic solution, this avoiding extra vmlinux.lds.h > customizations. > > This also demos the use of the .data linker table and of > the shared asm call push_section_tbl(). > > Built-in kernel functionality was tested with CONFIG_STATIC_KEYS_SELFTEST. > Moduler kernel functionality was tested with CONFIG_TEST_STATIC_KEYS. > Both work as expected. > > Since __jump_table sections are also supported per > module this also required expanding module-common.lds.S > to capture and fold all .data.tlb.__jump_table.* onto > the the section __jump_table -- in this case for modules > need to keep a reference in place, given the alternative > is to use DEFINE_LINKTABLE(struct jump_entry, __jump_table) > per module -- and later through macro hacks instantiate > the jump entries per module upon init. This is doable but > we'd loose out on the sorting of the table using the > linker, to sort we'd always still need to expand the > module common linker script. An alternative mechanism > is possible which would make these custom module sections > extensions dynamic without requiring manual changes, this > however is best done later through a separate evolution > once linker tables are in place. > > A careful reviewer may note that some architectures use > "\n\t" to separate asm code, while others just use a new line. > Upon review last time it was deemed reasonable to for all > architectures to just use "\n", this is defined as ASM_CMD_SEP, > and if an architecture needs to override they can do so on their > architecture sections.h prior to including asm-generic/sections.h > > v6: rename table macro as suggested by Andy Shevchenko > > v5: > > o Use ..tbl instead of .tbl as suggested by Nicholas Piggin. > This is the typical way to avoid clash with compiler generated > section. > > o Replace section macros with section names > > o Use LINKTABLE_START() and LINKTABLE_END() > > o fixed tile jump label port -- tile got jump label support as of > commit 65a792e84f25d1 ("tile/jump_label: add jump label support > for TILE-Gx"), as such we just needed to adjust the asm to account > for the new linker table API use. This commit was merged as of v4.5-rc1. > > v4: > > o Some architectures allow linker scripts to follow including header > files, some others do not, so if you need a helper on a linker script > you need to explicitly include it. So for instance although > scripts/module-common.lds.S includes and this file > includes , you still need to explicitly > include it on the linker script. This issue is present on ARM. > > o as per Josh Poimboeuf open code the section table name instead > of including the kernel section headers, the simplicity and > independence from the kernel is preferred. > > v3: > > o More elaborate tests performed > o first modular support use case, module tested was > CONFIG_TEST_STATIC_KEYS (lib/test_static_keys.ko), this > required us to extend module-common.lds.S > o use generic push_section_tbl_any() for all architectures > o Makes use of ASM_CMD_SEP to enable architectures to override later > if needed > o guard tables.h inclusion and table definition with __KERNEL__ > > v2: introduced in this series > > Signed-off-by: Luis R. Rodriguez > --- > arch/arm/include/asm/jump_label.h | 6 ++++-- > arch/arm64/include/asm/jump_label.h | 6 ++++-- > arch/mips/include/asm/jump_label.h | 6 ++++-- > arch/powerpc/include/asm/jump_label.h | 8 +++++--- > arch/s390/include/asm/jump_label.h | 6 ++++-- > arch/sparc/include/asm/jump_label.h | 6 ++++-- > arch/tile/include/asm/jump_label.h | 5 +++-- > arch/x86/include/asm/jump_label.h | 10 ++++++---- > include/asm-generic/vmlinux.lds.h | 5 ----- > include/linux/jump_label.h | 4 ++-- > kernel/jump_label.c | 17 ++++++++++------- > scripts/module-common.lds | 1 + > tools/objtool/special.c | 2 +- > 13 files changed, 48 insertions(+), 34 deletions(-) meta-comment. This new infrastructure doesn't seem to save any code when you need to have a new "link table". Yes, the macros seem a bit nicer, but it feels like unneeded churn. I haven't seen any patches in this series that makes me go "oh yeah, now I see why he did this work, it's so much simpler and easy to understand now!" What am I missing? What wonderful new things are going to happen, or where is the code savings going to come from with this series to justify all of the work to create and review this? thanks, greg k-h