From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stamatis Mitrofanis Date: Sat, 06 Oct 2001 04:13:53 +0000 Subject: Re: Unloading drivers, start-up, shut-down and some clean-ups MIME-Version: 1 Content-Type: multipart/mixed; boundary="=_jive-16724-1002345252-0001-2" Message-Id: List-Id: References: In-Reply-To: To: linux-hotplug@vger.kernel.org This is a MIME-formatted message. If you see this text it means that your E-mail software does not support MIME-formatted messages. --=_jive-16724-1002345252-0001-2 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Well, firstly, sorry for delaying the discussion a bit -- I'm not in the 'net all too often :-( . Furthermore, I'm forced to use ******* for the Internet because there are only ***modems around. David Brownell wrote: >It was waiting for volunteers ... we seem to have a few now! :) >Presumably you'll provide a version against the current release? > But I _did_ include an attachment (a .diff.gz file) with what I've written! You _must_ check it out because it's filled with a lot of useful comments. Anyway I include here the same one but in .tar.gz since it looks like the patch file is getting larger than the original (and besides, it's a rewrite). :-) >>My idea is to put the functonality of the ".rc" boot scripts in the >>".agent" scripts and have a central subsystem which triggers all others >>(via devices of it) at startup and shutdown -- creating a hierarchy this >>way. This means adding "start" and "stop" events and getting rid of >>"/etc/hotplug/*.rc" scripts. >> >The "rc" scripts were most handy for addressing the "coldplug" case, >supporting subsystem-specific startup/shutdown. I'm sure you noticed >there was a bunch of USB-specific stuff crying out for better homes. > >> An example is that a PCI device (the host >>controller) is what "enables" the USB subsystem (or a part of it in the >>case of multiple controlers). So it goes for all other cases as long as >>the hotplug scripts are dealing only with hardware devices. This way the >>subsystems will be "started" and "stopped" in an order which is more >>appropriate than the current lexical order. >> >Right. I forget why I never implemented that; likely it was just a lack >of time to refactor things. There should certainly be scripts that make the >USB subsystem start up when PCI hotplugs a USB controller. > Yep. pci.agent calls uhci.agent and then uhci.agent calls usb.agent (giving it an extra "USB_BUS" parameter -- see below). But for this, the scripts must have a way to associate USB controller devices with USB bus numbers (and the same goes for all possible subsystems similar to USB). I haven't figured any ways so far. >>My suggestion is also to have driver-specific "*.agent" (instead of just >>"*" scripts:-)) scripts which will be called _in place_ of (and not in >>addition to) modprobe (of course, they will call modprobe themselves if >>necessary). >>- This makes it possible for scripts to do their stuff before and/or >>after "modprobe"ing. >>- It also eliminates the need for a blacklist (you (or a package) can >>simply add empty agents) >> >If there's no such agent, there needs to be a default behavior. >Most driver developers should never need to write those scripts, >they certainly would view such a requirement as a bug. > >And the default behavior for network drivers needs to be a bit >sensitive to what distro it's running on. It'd be nasty to need to >have N distro's worth of scripts for M drivers == NxM... > >But otherwise a "*.agent" that's more flexible seems like a >fine update. > _Of course_ if a specific "driver agent" can't be found then the module should get modprobe'd by the subsystem agent (I should practice English writing more :-) ). We consider _the driver agent_ as a special case. >>- It completes the previous hierarchical design which I was talking >>about. "uhci.agent" for example can "start" the USB subsystem when "added" . >> >Except that there still needs to be some common place for generic >USB setup, shared by all the host controllers (uhci, ohci, ehci, and >sometimes non-pci ones). And as a USB developer I do want to >be able to start and stop the USB subsystem by itself... > Again I didn't mention everything (lack of concentration?). For the "start" and "stop" events, the usb.agent accepts a new USB_BUS parameter which is simply the name of the USB "bus" whose devices "must become available"/"needn't be available anymore" to users. Now, not passing that parameter should mean that the action applies to all USB busses. I think that should be ok. >>- The driver-specific *.agent files can be enumerated very simply (with >>this glob). >>- The driver-specific policy agents can have their own homes and invite >>friends and relatives as well... :-) I mean that each driver-specific >>agent can have its own driver-specific subdirectory (just like each >>subsystem-specific agent can have its own subsystem-specific subdirectory). >> >Also good. > >>- Aside the previous, each driver (and this is the most useful part) can >>have its own .usbmap (or .pcimap or similar) in the subsystem-specific >>directory. This *.usbmap (as an example) file should be parsed as well >>by usbmodules. This makes usb.handmap, usb.usermap and similar files >>unnecessary. >> >I'd say it mostly moves them around, rather than making them become >unnecessary. Generalizing is good. > Also, this way you can even have an "input.usbmap" file in the usb directory. But then, there's a new "input" agent coming up which makes this obsolete. >>Another thing is that the individual policy agents should be separated >>from each other (/etc/hotplug/hotplug.functions is ugly :-)) and thus >>should have very few common parts. That's because future hotplug agents >>might not be only (or at all) for (un)loading kernel modules for >>hardware devices and they just can't ignore any common functions (like >>driver-loading functions or so) that are given to them. Now, that may >>sound bad since it means duplicating a couple of lines of script but I'm >>playing safe :-)... >> >That's something I'll disagree with -- duplicating lines of code is >something I've usually found to be more dangerous than having >one master copy. Bugs and features need to stay in sync. > I didn't mention that the global ".conf" file is /etc/hotplug.conf . It's in the /etc directory and it's just like pci.conf which is in the /etc/hotplug directory and comes together with a "pci" subdirectory. Now isn't that uniform? :-) >>Here's a uniform naming scheme: >>- If * corresponds to nothing then it's a directory. >>- If * corresponds to ".agent" then it's a script that processes hotplug >>requests. >>- If * corresponds to ".conf" then it's sourced from the corresponding >>.agent script and related ones. >> >Sounds reasonable. Would the "*conf" files be where >distro-specific magic happens? That's a big issue; it'd >be good to have nice clean places to hang customization >for Debian/RedHat/SuSE/etc and their config policies. > Sounds like a good idea. I'm afraid though that I never liked having to "support" specific distributions. Hey, they're distros: _They_ had better support _us_! :-) But, anyways, for PCI and USB there doesn't seem to be anything distro-specific to do in the subsystem layer (= from the subsystem agent scripts). In the driver agents though there may be all sorts of that stuff . But I must note this _very_ important thing: We definitely want drivers packaged separately and _not_ for specific distros. But, to cover both cases: If it turns out that "drivers" are packaged distro-independently, then, for additional distro-specific files I'd recomend that they are _always_ named "*.distro-name.conf" and are sourced from the distro-indifferent "*.conf" files (and that's for both subsystem- and driver-agents). But to select one of those files, the (packaged separately) driver agent must know _simply_ the _name_ of the distro it's running on. A _standard_ environment variable should do the trick. But I don't remember if such variable is already defined. If it turns out the monolithic way then individual distros will -- yuck -- MODIFY the code however they want just so that they make it more -friendly but actually making it totally incompatible with anything else. Now that's something I've had enough of in other parts of the system. I'd rather see things to be more distro-independent, so I'll choose the first solution. In the distro-specific files, a driver or a subsystem-agent can put the (abstract) functions whose actual behavior is distro-dependent. But, once more I'll vote for distro-independence, so that these files are not necessary at all. Say, did I mention that I want things to be distro-independent? :-) --=_jive-16724-1002345252-0001-2 Content-Type: application/x-gzip; name="hotplug-patch.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="hotplug-patch.tar.gz" H4sIAE7OtzsCA+xde3fbtpLPv9anQGS1sdtI4kMvJ9XtSexk6z1pkhM77fbc7LEpEpK4pkhd krLjm+a778wAfEqyZbtxiNuorSWCg8GPM4PBYDBSp0E89xaT5tyK7Wn7wRd5aVpH63e78E6v 8rv43De73b7e7XZ6DzTdMHvaA9Z9cA+vRRRbIWMPwiCIr6K77r6ir2lB/zy2219T/52+rqP+ Tfjnm/6/jv5lS/tr6r/T081v+v+6+p/bbvtr6b9r9nrf9P/19b+IRs3F1HZb1oT7t358Tdeu 1H/H6JP+Tc3od3udB5oBEUDnAdO+6f+Lv7YfsvbI9dvRtLZd22aJwpkTuuc8ZNIYGOkfKIDk eOpGDP4dByFzJ34Quv6ExVPO6knnetI7CuCGFbPA9y4lSf72hesBvwmPmRdYDneY5TvsgrOL wH8Us6l1zpnFZoEzD4MRZzwMg7CVsEDS3IBTuPY4cOMfLTuWo0XWjMOd0LmwQt5Kn61lI/x6 bJ1xdnhYZ8GYqN//sn8okbVqD/4ur2vm/53n/gbzv2PinCf/bxiaaQJ93zS/zf+vMf+vsADh HzbwDfI2NeNMC3k0D/zIHXmcnMbM8q1J4jRys45dTF17+pi5PnBy44h748fY32Jvs5kJQ3Dg aEWBT8xiHDGyQ3dOY8UBq8PjOHVxQ3QCdnFAo4ELYNFiFF1GMZ+J8dALeWy8COG+xAaojp4z h5+7No+YHfg+t2NwT8TEjYAdtMVh4HkCECIQHKNpsPDAhwXhGdCEISdfxM+5Dz4QmNtT1weW F248BccWcnSP+LSBLyWRMWY7F9zzQADknYAUfBhgt6e7LZT0f3nByPKQfuxOFqEVu4HfqsU8 illzXFBjC2nY99+z1nIzcgItb8IGrWENq/SWZEdGU+S5lqUwsPV8s/u1Glng2zAAraBVJPYX 8n8tgLuwwN9xvZlaEfw3n3M/WVSw1efcIQsRt1o124pgSWo82z8+fPO6jnZXY/DaQY8Q79a2 srXOtkAlyAYUiXaEBpnZUZ061CMaiswsN0vAXoCR5YHNOpdyoZNGg+uaNQIDmXHLj8RS6ZIZ A8PYxUGhh+ufcecxMomCVqvF/IA6enz2kP03eK9k+BUGLiYIB1PGGTLiDnIRdt3Cjy8P/+fX F0/Yy2QegWzIdNHypJEuvNide2JGZMYZCZtEHvKVChdWastnVhQFtkuqh5b4goPg8t1RUshy tIjyTBazEdxtMZjuFAOc+cEF6PkCGY9dki7KyIcHmwnm4zCYEVTQXsbIgpmIzyAcAzwr/zgP wpgJVQ9JYEAuWwHIyfP3R8Off/65tpVYFUiytvX0aWoSwfxmFhHMNzKIhZ+YxOsAH2JSkKSD joFmf+T6Nn+cujwyB3q4x0J1boTymocQ/UjDgdDJxZAJ4xtpIq3cE1mOQw9Uhw91HNcq6Vha peya+mugKRuYgJPrKRyrC5JZhP5qPjAFw2AegolwKRiKKIVovNXOF+aGFKifwY6nQcQTenCN aNZuGImYkoY646HPPQwkF54IA210vSC0JOxcxMEsnXCjS+SRhp0k/R0SPwB4hI7H4eA+HO7b lyhb1C345K20BzbU1pjc5hYX8llwzoWKxOdrtAQGt1ZJyIXM5Dol5UdapQZiVNJEYehVehUB dl5LS8IJ5tfLBsd+No55COE8zBAxc7LpVVRzTh/NUKgEZcsjy/77BPd3jf9p3f0L8j8Q//c6 nXXxf79vGhT/d8wOvKBd7xmwDfgW/99H/A8x034+UkuDBlzRCiE+zFsKsQ5cjGuD8JK8ieX6 OPdzVsOiObfdsWvDku3hbIc2xw2HZesSGwbOJiKUFRM3asGdmTWnvuhqFhEnDtB24vCxBQHJ sN723FFbdmifLnzc6DfD03aRR12GjLRmB4t4vogx6AJPBBsT2lOQPyrEE65YzsfgI4MLfDBx 6wmw+fXNwftXL7ag48n+q2dHR/Tp8IDejl69ORYf3j8/+uMImtMOECpgDMROm49ItnUfF3V4 LEdkMU63ZfsC1hTwbjPYIjh1lDXKTXjMnd3aJ/J/v3NiB70JJji4SWjN2Ck+sHj2Ryg0zKnI hxOx3xwfDh3vNu4nLucgrjnLOv2jDdRtf+F5T8mpA10WHh4EEHnOOEUnD/EO/wj+X4NPY/dK UF4EI1yJhz2D+DaOPYokZxDWX4pAB7NAIgLEngW5ksywRUgXHin3RDTi8sNsZfTD+nZdNpAS h5q8OjwYak+SC1QnXrbShmR4IoJGGok1ffYnLqQe7UkFLuwLy7TtQQzMBGc2egqPA71y4zY+ EcV3Tz4juy1uT2Hr2siAbjUyQ2tIS2ukptYogMInwlAR3kJOyznglsqhLYLnwh+ya5yRDC0t ZG1QlN2GCJwmrdyTXFiXKHzK2IHskUMyqBR1spHL925LO/2CAscpAmEBTtBT2ykO/5T2Bj+w JtmBA5YQun58mggdu+IAJy/fv95fyaDdANZPGSnhh7RfhgxvP2mkPEhjd1dZorPVqpOXeu1z 6sYKfmnh2zSJ2I70jqDbGPMuIIpsZu9S3oDUCREczDAL/DZlWChaG4EvhGkrU6BZNzZyfaSU c7nF3mdUYOlejhT3/HLGU7LHDmYzDI8dtoOCh8VAbsIhGANb9AHDLuz7YD8exAgg8BYx9y6B TQoQnV9iag9Z8yOrn4poNRv1tC5tLefi51YYcQzQC2sIDp04f0vMBHiQJDalDeUMgx9kB5yS xUssB3T7MlgA7wiJw2AxmTLun7th4M9wHTm3INgd4aLD/gA63L2hx0N6KeRMZyv7JWmlVKNs x+HgG0IUG2zs/JhPAOnuE5FcOSG3IT+7zsk5yBrELK/EPJR3YQtQJBANCU2tYDc7u+wTzvaj 44PD16hJmCflJZmWwpakevP+WGTniiJluBjTRox24l4AuyomMcglAGDIBvgk24S7pL8nMys6 kx9h/wI7AykP1nTvyKm2JfAcvDv87cW72lbOdYum2/CnQxDuSK+B4RROALQ2gOxRwo/MiLaA Iq0CPhEc7nNcN0M+Xni4ieeX1DuKMR+Jyx6ZswP7UTayoimsvFsyYSWgYsKK7XzY/mGX4jDX X3D2FHwY7nCAliZPQ6JvQsRB/ufZ6z9Y0yq2Fw3p++9TdikX+eRLXPLtBQNcySUT5hKj0q0l 413Dbh2u0q2y6RfYoVhTAxnWdxrpHIMFxej2dtn3rJFpu56On/USo4g+Jdbb7M2Zdfk4n40W 3oZ2wckSIhVaEyvB57xPcyNxcDa2zng976BTz3wYr3VvYi6S9QG/1MuxiYsZ6TXeCE01SRgm uXchth3r4oxR/htTrrALcMgppYue/Eyxb7LsJR+zsLiWPUQa1lLG5jEgPOMUa8rcVnMcumAA sHblvOzvFDwzxJIeAGDWEuQJbcP6aRIMTuDyFISaW0Ya0FRHHRUpJWFxySHaNKCZRRNW/3AK bY9QJ7R2nVuuh6Aesn3Lx5a5zE3nt04wi0EJMaY169kir8tFPufZMt9ebl3n5ct0V/v72lY6 wlD7mIUqcCMCb3NKtijDFohqpayaL5+wR58onmJ17WOdNfTH8oPBPj86ZY8eCcbpyMOGnraI oYcNY3mQLKC/+Vj5B02Hyz+sGDEnHukdalvyA0hgLF9kgG/R16Y7UWsuraaJ7ra4+STzKUZc Py3R5HjyjzGEWBio1SgQlWsp+G7qBRvjevsHucLKJSQJsRO2Vw2ZOI1aFj6i/wDjumv+ZxGN vl79T0frfKv/+br5P9S/68O60oJPYGlfLP9ndLpmkv/r9kn//X732/n/veX/cM828d1/41HJ 5SiwQrFfmwW4zo4CsbDFgR14tFmxzgPXwS0G+LfkoOAX8ONJZicII4pfDkUqbeTCIuja4Jw4 LZszy7+U9OJwAV10MnDEsEBAbGEyGhFtS1LwsZghE4E00oQczw3EYVsUsLEVio2XOOPxg2Qp ppqDaDGnUwZ0xVPXYTLZSYaenZlk8VfExZ4MJsAc++eBi6ICN1zuLeuRwkhUF6QHvZMwuMAo LRDVFJRgY1m0xS0I0OQjQ9gvV3La0IcQMdkxBXTQFcUFdKzw0j5q5kDDN3iJa/Eh92nVRZ6B VmJYvjZL1/o11/JVI1sqI64CYOOGgDXgCG9dq0PXe3t7g78W8I2vJeD/Cy6XLCIHuNNz6No2 tL4agLs8ua6IhP9m53+w6t/L+Z+hG/1s/df7XTr/6347//vK539YRHDz8z8qQCqd/0Hb0vkf HeivPP8T0Wbx/E+0bX7+J+jrtXQTt2EH9uefta2lwcqzIuF+xeliVkB409PFd/C+f7x1/Mfb F1uHr49fvHv5bP/F1sGL314e4d/D/Rd/wckiaiR3sijYD7MjkaTcYt3JHkrgxseNWac7HDfm UFF+ND3VYgX07VyMlqET5W8FgCtPtHIM0gSQSByPRWkRCPKEHgs/4eEUNg/rmODJTr2eMqnM YR39XDv9A3dQvdDchn/gKtVz2gSMcrnp4njJ8RQmVBoEAK+SB6k3Uuo6G7L68ZP0pAQPrWD6 oq6ZNKWtXM8mpiToSbK0V3bMlR5xSQNtkIU2MhNtCBttCM510XkjaQjSDUSCgpZvKG9dPJLQ DOjNX8yoQXyEjo1P+vbzRTT8LNBEU3ccM9krk5dOcnrFz4fyuZkgNJ4y7oGFyW5PmRy83PNt 6Me37QpbkVt23d9o0JyAwKATAeUSY7nW8ggH/Hx7WDAFQTysNwxoloOKo1AYt0QCoicGn1NS PdEgvQszAULRQ2hIji9NiDU96KVh9iuh1grmtZL8Cvp0TDLVdkMYSjuloYN4b91MelueSdKg xVFxYtz44L+JzGT50TMa+amNxG9ha3d4sEQslBby85W6eZdZq5B7iA1X6EXch+Gw5wqdpOJs /hsG+QTk3/3c+ifTmnv/K/5+piwksdEa8FZf+0jYt9iV2rbzTa3P10n7oCxt9A8rZfEbD282 E1ZMA2yqZV4IBbXvRSSopAXfv9v5QfoS4WA+khfMiFJDzjAahHF3Q4AJWxj/aDFKHJfkjm/t bIyCO8t1BIOKN++5XgOHZQ2kPlnGHyu1cTjevqVHe+bd1hduv3gb/XUmkFt68nZQaE4vli0i vVXq84VsIz9E+vmGVnIjHnJJJwdPp4zDz3lnLG7Tg+1gPLpLfiOJA5rEkNSIxxY/rYy5atfE JLePSIQob11oI3cGuUKbLKa9UaFN1u3aQpuM9D4LbbJRry60yW/W/pMKbeC5TlxHrOPy4q1M weLVyHYOkkobuhZX+1QCkGuAebrU9lbm0pOuhzBuOLYKvdO2IoO0OeNRy3kwrJz/9dnx/i8n v714ffDm3ZCSV/pqkmTlJhpjNQ1MnJNXbwRJZz3JL4eCZLCeRJb+AZWurac6ev88IzSuIATw x2/237wiws4aQnAEuXEHV1Dlx4UAcj1hflwDCAsOQWylV1dQJfPkZhVUlJqBljhxGvJ4G6wR phz3xPeEEsNFI76QO0agn7UKJVg09U7GnjUpFhgU2nP0qfVnlp9a/YkX5C6mboHhzTrmRixM ovIEKk+e/Ig365gfsTT3Vsy7FXOuMPStOCRlaBhvrapFy+3y76GcDHleU0xWSDUIwEMMvrAw JrMf2oDUknABKzC2EmNIqFObSGjzpgFtZrFt6kJbJ+PZQZ55dSd8S1pPuReVnwwgmJnErKjA lN+SHlOWS+oUXNO6sLIXZk3+L9bY2WGNnKiwqGyJcHcXQ6VaEks10plE9WWFJalUZlYeWTr3 DYZOKGns/NDJ3M2NnTRdM7hYNTYYWxKWhi6sr7SnbxT8x1KFXeHuT8Psmv1UcjYrof5yuCFU ILwa6oTnoU7dTQRF686GAARtCUPB+aXKKrSuqp5cvfBuCCQlX40ldX1lOOmN6xElK+2GiFLy 1YiSqbqEKL2xZFWv3xzLr0b7wYUs4KTo3p5y+yySeedQLNxzHk6tOVYLwGptecRAvNzEW0RZ tWL6DeylJ09Dlg0eO6MtP3NpTcqeuXTjai3kA6MN4ay1i+VVcQWoDa0jH4dtiGutdSz58lW4 1tvIIay/FgZwNPrDWxT05jaC91XQmzuaWlfQK/OaMueWS/zU5PGBeKezqFr2CEkA/B9WzZs/ CL26mneb/Y4/n2DB5hX2wkbLYKMwOOM+bsVJr7OFP+FRGs1nawf+sEfyAxDIh7YFMrBnoUW/ TYK/FQKtYy+ALQR70Zq0mN7S2AgTAcAUdy4MxJZs7JJaW7nA/8kw+sOz0OjHD60PO//ENOyH 3caPrQ+69mNd3Gl/aDXamtausw81tslL8Gun7FLO8vrHtvZB/2D8WD8t1uNuvL8ud7rVTnuJ yZ323MVS5lS8aGGs+bK9toQ5+WCmtcx5KVAdc0ESWMS8VZDGsGGme4fDl0dvXh1gwu7lUc7a KWEmk9LS2A/xaDcJ4vEWjb1VliYB2FohUsKxtUKuCEewxxOVl8/evzo+EWjkucM2OrJmMG6G Ftg9THtvQdm9paF1rK9ZPfjyrXR4cYtmXuHx8xnYVTLI8tiZIErbgEwWyxuBTBzLW4E7SaSE If/kyyhW3l0WjQQjrKV+ba17sfaBnGsx6fnTEs0Vte4y60G17qIIBGvdRWuh1j0b+qoh8+vp xgXu3153qP+6a+X3BvVfut7RulpW/21Q/VdPN77Vf91L/Rf9ZJQI4NJVPR9M3ySdd6NM3O1y ZzIQPsGqqpoLTsbmG9S8DvRqlJDac9c6QYGvqSrumsm1UQ3Alj1bDvrwfv/mddvGvQBeOG6w ArD+pQvNr62EXwN4BBFADL5lencJc+1OgDYE7FijsgUXbLjTp2tDNysy6TYEvAevigC2jY8f 2Xq3pllSo4amGGBTOcC6aoANxQBrqpmErhxg1WxYV8KGx5omorVeZaI1JxqFevFuQcIj8aU1 vTKA8RuYK8PL+/5a4KaA3dHMtmarTGIsYokuXQ/wAQqh/KqL+5DwzQGbNA9XXdwL4DPrgheD 4YINm3xQsa8FXgO4q/WkKLkigLsygK+Ml9gQcEerSixxHeBet2Lb/M0Bd9UAzPfU8hI9rqsF uK/1KxbAXwfYspJrXQnAg04vidaUAKybjiGuO4qYRK83EiudoYYf1nsdtfywIUxXoaW5PxpU DPDMsQflLV0h+BnTtTWoDGDXDoOYn63bhNo82VqoAbjrJAvHXkc1wHuqAbYUA2ypZsOWqRTg gYKA7WoADs67ur4+3dq15BapW5X88IaALVUAD/SqnebP+cSKFtFawKYldxy09ag+4L4ltkiD ypjEhoC1vYEaEh44jrKA+6oBHigFWKFJl2Z+OioAzu+addUAG6oBNpUCbI1sRSadTKQoB1gV G9Y6o5FcONRwa1q3x9WScPXyw5sDNlUD3FENsBrxcEfXK3bsdZ0fTg4Wjarkh68GrHdlRcpe ZU5C6euHPFwGfIui/X6ewZcqKb83wIZqgM0vDPiL//5+/xqT0VUDbKgG2FwDOHSD7hUHi4NO 1RaOyLZ8f9WkkyudJQ7HYWXWFAPcUQ2wYSgBuDdy1LLhHGC1JAyTTjEJVyZau27SdQdSworY sDnWkgC+qxZgXTUJ6+pJ2FALcEc1k+ir5yUUA9xTJZYw5TdljN5ACcDVq1vbHHBHMcCWppqE LdUkbCoFeKAgYFsNwLJCW51EikxV6ZoiW6SchA3VAJuqAe6pYcM9mb00Vdnmp4AHqgFWxa1l ElYNsCJuLSdh1QAr4odzElYNcEc1t9ZTDXBHNbemyJFBR1YGKpMfzgE2VQPcUQ1wTzXAfRUA 673kZ3M0XVMMsKkYYMNUpfwgqQw0dMUA66oBNhUDbKomYVM1GzarYhIj7p25/klkrUlVaU7F gp/rAPdsmdCuytJ8LeBuxRLajjtxTyzb5h6fB2G8BNiu2u+tbQ64IvEwn835hLF1XmLQqdoZ xzh23JOo9FPw+TMO8d38gdk3lALcq86vgfHLaG75a8sP7NQPd1UDbKoGuKcaYOVs2FAN8J5i gHXlJNxXDfBANcBj1WxYU03CVqUAn8wdS6mleQPAVfnNQDs+WRimscYk+snXhI2q2PDGgE3V AFelIiWY+a7P43VeojtIf3+4IoDP3SgIr9iEGlX7as/F1I35lFvxOpPQksyPrhTg6mzzF9Go GcVBaE146f5Y/D8XOLvqW7cG/aBylQBn35RJwkujALhqEu7wXtkklAGc7Dj0PEa9woB7qzBW WcJ91QDvqWbDlmqAR6pNOlstwLoifrjb+X/2nrWrbSTZ+Wr9io7C3eBcvx+QIYfdJUAS3+F1 wMxMzsycQZbaRossadUSjmeS/36rqrv1MDaQHULsPeSc8LC6q6urquvdwp5t8FB5zEIgsowI k5+5/CLR3Rzc7vzIa3ZLjXA7h7D+A61LhPD36o8vbKzKobM0hdNq/nLL8EanMysSS47w9+3V ci9zCHdXAuHNV83VijhShJsrIsM5CmdFmbzqbSyZHt60hrP9EktO4QzhJT90X/31Za9mfr/v C+KWBuHWqiHcXjWEO6uGcHfVEN5YNYSbq6bWWquGcHvVEO6sGsLdVUN4Y8V9ie6qaYnuqmmJ 7qppie6qaYnuqmmJ2xC2g4jfrOZ/bYS//89DpBvtEvl+iY68KdPabH379oOW1Xh1J8Ktrmrw WIJXjrTs4Z0U3rgjof24CDubX4Jwc1kQFko85yLc2eRsuf7m+B0Id7vq0K0Kwpst+Vcsm61X S9IZOLHsYMwWU3jDYst1EfveCLeWAuHmFyC8FDLc+gKEl6Jpv/0FCC9F/3DnCxBeCi3RNb57 +vdf+e8yiEMvGVVDK7Yv6zy26+qTemi7NQgm/Pgvr4HljM1u5zslTLPfNzuN1neNzTbY8ma3 1Yafmxv4EWs8BgESEVsRY99FQXDrTu96vqL/nj9j9YHr1weWuDSeG8/ZfBmgRye7PaaesDDw XHvK6GENnsLjd14wsDxmB/7QHSWRFbuBXzNiLmJWHRbg1nAM+9vfWO3mxwgJlp0Bw/qXrmCu b3uJwwW7tiLXGnjwk+U7TNiRG8aCxZdWzGzLZ4O5q9Ju5q+cPjIMudMosLlAiLCq3nLE/50A WLVbQmiY+Dbix7zAckQ98ek7TONsbe+09+P+KbviPvfYOHASjyO2MBW2EfExEE7UHa5/ZC78 j/iQR9y3OWw/QcICXg4fWokXr5eNP42S3JfPzLW9/Tfn70zcyliMmLknR7FQYu76IzYMIuZE 7jWPUmTWd3b7veOj7TX5vVwzjZJtCQ7w5CcmIGcYJVT+65bjlI1SCVAHoAMcI6GY7NMnuehu kHgO84OY9g9bjXJ7/fVCjX8Bi5Ses7e9nw/3t9iOP2WwJwvIOmET2ijAcILZveMOLuGDf8Dk 1681TkCs4JoX0KpGt2ImeXIrbhn4lwg54nES+awpn5S4sGzjM7J8j8c8Grs+Z/waWMbiachB GphFfxGZ7TARctsdujadFIdfu7CZMSgYNuBg7oH915brodyyOGCJ4JHA6XJPC6b7nDv+C4Qw ZzbwCMR/bME59ESA2wVw6h9MCCMuAM8yiN10HESEK2o7CFh3PDioSQT0jj2YHceWfcmd3MLi HoiLOAjZvWDduosM5xTPhWJelF/TmCO8Odl1h2wW0ms8nD7KD4JjiOXvuwc7Z2fba+mPZvFx b08+6+3NPDg7f3P24Sx9nv4Kw4YuiNRzdoCiRyqKgySGpBisEOQ2BP0Vc3U8a0ZJSuPZtnkB J14KqbgwbznvjO3RXNBBcFqcLZPW2/HngCcBwaMA1KfBgEaQjC5rIHKjIHDkcZzQiRlwBAOc AS3rjgAasC6eBNEVKpY4sAMPH8aR5Qs4rbQfpRbxc4GyghxEIDbIQwT2wLFia4BsAl4jNpNL 175UyyEvmDpvFtgU+SfUNKS3/RME5AU2GQGYCfoAxkl9X8EZEcpn6Hogb2DFrGjKQOnRZBEk EekSh6NNQEB6/zXW80UcJaS6BelJkQBOFup7UDsSt1FA+qdm5OToj1TVnGWSBLYgCNjAArhH gaK5qLEDHr9A4xFyaUZ8jrunL5fAJA4rv66WtUTtWj6yaOgCeyzNOMQspwuklB0c9xnq7RL/ 6MaopZSsHYE+lacb15gC18Gjw+0oYOuJSCwPTui/8GAHPmpRXECZBtfXVuLsNahjgL9Q9rS2 hTEpZT7Cx2is3KiuHkvHISNTacEAtvZP3IwnOA7KDB78BjsrOYCpQSq6aAC++dk+l4aFjrQQ gY0nzslO9HO2Tmx3pTswdqMIiB0MmQm6ySw/0JG/SzJBIG8gpw7BPMkLklidTzUU3R/QXx7K EW5jrjQ+WyiNYB/+m4WRjluZ9ktcBTPsgcNBe/QLBhBtgEnDcVDELWdKPlPKFDCoQEJ6GVAq q0pCWUrogiQaEj2C/wmY5qEqBoE8PN47P9i/LxRFXk06c01ON9k2M6smqwbFj57nSKhsMWwc f0sDA9slCs5lhoR0gxkKEtGnyJzChCJzisvfzaogVJySKkQyazGrgjDjlPQhC7xafLwll8sP xU4c9EAsfXZvnkoSPRhbg/BLuZohcBdj0WUnRdDzry3PdQpRKq0A2uRauRBoN7WiAgjk2j/l f+bnf8Dxe5z8T6uNzzbha7vb2Gh1Kf/T3HjK/3z7/E8qA/ToSIUCj5IDwrrqPcAQiguSOvrR TFLHms3oSNSz6D6NaCi+/7JYVP2WRaIRH7kCIN/PZe0d9fdP3+7s7m+vpT9mLufRcX9/K2VD gTqAtOeC9YKfLAd2QWuCxQLpjnmFEi0WRuBoGnS8Pcagh2KqiYshITyFaVFQTRMRV34wgdhq xFWAJDAGA4wjoPEkAwQBG+rYK8723u+eVHS0O4hcZwROX4UBV2o1I++g1QVKnTtMwpQEkn7p tmUmSuZlwjB8+cmVX4Xjv/wUei787AWUsMHkEhhfCh6HFtpwygRaEbJypClhDTG2HHD0Qs0k NNEBXuxW7giRjHFoChWTRilyL9Dwp+5BSPGYtCwN/IkySrmU0v0wpGh4EGFsjvS7HcEeEhwR /PUCqZgj3ItaTePD7Ryhc0MUjiWZ3CKzmhrUxH84kaUhOjquYRYXyGhmK/wKPpZMoGKADFHI FCTHHYce5US5g/tYbOnPz948WfqvZv8TMXhI+99ZZP+bjXZjQ9d/Nhvd1pP9Xxr7n8oAPcqf t69q+2HZe9l+RG+B7dePlq2gA3g9FXSWr6BTdPnmlXRQ+P9CSSc3/XFLOtnCf72kk4e1xCWd 0+O9893+9pr6IZfZ7X84ATcFv5r39bn/gxIOnPGvlc/9mpWGnIiu/bm3/2Nvd/9/AOcf3559 XtKCAyrTW3O8cwcUE06ZQn6AgsNDSR574ArDV5TIh64w3CaFS1loeAwhzBUaSB/hxYnZnhiC cT0UEKqHmHgG8qcmVd21IAA9VBZWrvILSnuMBjqDQDkB2KSLQ5F1OtKlcdxBMOCRAIuAFRMX 8+gcuOvGHAg9kBZOR9wTK3JELvZ/Rl4cejX1QSLQT6srk5LSbCELimgqTowiHrLqv5n5S4n9 VgCMH5jSLRwCBQcZUySgwuAcN+TTao4g6Q+zU5BXJIhfsL38mVBGJe9Zi2QgphAcj9OszA3O mjPukmbvjcMxpyqVt+FfUpVSeS2l2UifZfqL0QFl8rgaUpwXFabuD+jBa1OazXPP771rU3Mn 3Fabuvt031abmsOwB6tNLRNT/0p16i8xVlen7s/XDIH5rEUWHP9Q0S6ZFZNXjLGK9hdFfWz5 sAKYWtsLhEz+uRF7u4cMXKgAkxsaMJmnynLOQ85SYFAxBE+dRS4mGH00nKTEA8zo6oOv/AQc jWAwMHKj1ILU2EUcJfwFiN/EmqJGsm1Q9kK3FNXyVifTTKz1d1SDdT8BuYaQDmE8ZfaWOv9H 2ZOHWQPzfxsL83+NZqvVSfN/3WYbxnc73c5T/u9R8n8Qqu8WCknoHaP5Sf0R2V2tsmT7PgX6 Do8t6rpz/SHF/MPEk/kpPkhGI+3M34Ch7A6pte0pF5SFca2RH4jYtdmYCwHnHQammjxGi/CM NPoFZmdYNQRVNQLVeZEqc9Ad62X2J+P2JVqPf5pMqhsROzyKXrPPhlTgepycj7DXGjQeh6DL BBb4EPUy4G9mjpj2tNEXjsYUTeDmco4aBTRSo5PNBUBjC+MQDg70GPaWdkOCikbrzDEUgZFU 7FHzkehSFafmPkJI+HfCBJiIco2KSCe7oiLjfFkoAvd9wNPmrBzSvSF+GnHy4amAh/tTiOS2 J513XX+yWCh44gTV7LnUwL7U87SaDbYf44DnupuTYoBAuhu4XZjBcbshpgeCoRQGiAQmWPKS hBpT5liu8vtYUX0b+0yetPK31P8Yx9Wc+gOu0Wh0Gpvd7iL9L38m/d/ZbDY3QP932lj/6T7p /2/Hf/Xgoez/4vpfo73Rlvxvb3Q329L+b7YaT/b/Met/qvp34PrJx9RsDyNrzKnXZH2O8i5L j+B0V5n3YslOJfw5ywtVZM/W64oPjKzORwENmIa6LPRoecTogbz/rqE+2TYvLjEShXipuXDa hWlkgaH6DGJNi1WdQt0wBz6raOpnt+zvXoVNVdloqpqczuqVlNvyZ2SDg/IZE3xUK9MU14F9 raaG/PHZLGacYFOF4ufajFWdjX0LC4KH9Bn7MqSVRx8u77lpEDl3YX0WfBl7i9QFk8jyn+XQ 1GvJAJRbvup8If9JglNznbQWJ12K2e2j54Ehai0DCg7ONEhg5DWHpcF3GatCKSbO5vmf0sPB OeKS6olj64pcpwzmMPC8YEIblkKtK8IgB9bIcv2K9NEmLvASIZHrg74R5VEtX2abEdMMaK58 hE7e/BISlv6YZ7Ezz7KvcOflLQ0hBXQfLufmZMnAklFIZN0XUhxg21f92orqXmBf1eU4PU9G 8CWVvyqpfM7p7u9vd876v5+9P+/vHf90RFkccPUpi6FapGZlXiYrnqR+rtTLDN9qyL3ENSf5 30bcjXx2775wojEZnjuEPeJSbWPoSNBBqulHPFZyyMuyikTPMZjdwsd/0vNPOOGTgvDZLAap Ev3HzmgV/T/qFXzwNb7c/2+3m80n//8b8f8BPf98//9C/rfoGfn/7c2N5ibGfxAHPPn/j+P/ F9v/yGShesZUYDBkBZHQ5oNCAnhOqZ53R+d1GTZI0yaogQ8tify0VWvVmq/+Fy/mtmqd2kvV uSVqjB379PQl2BYfjAdl/S2hU1VqUWWHqfL5GlclKBUmAsw4nez26rtgNDGvhm6Wvq6ctVrX 1L64bhl7f9w/OTh/N9M/H4T0LZ/l4pTrdCoE+IfD4z3Md5HZ02nAbBCiQzZe7S7tj8IGfNeW TqHrX8k2BQCErfV+2szxnJB83zvrH59+2KJfWhvVt3xQxTeblXY9cCLAe1x/5wbc4+yNFVmD xLZdiMFYs5MNfMNj7HJ30pSq2KJsJ3XhS1/Hc4Fp67D5OHIHSRxEAoE0OtX/s3wJ5K0boSd3 xCemFoWK8k+ITw6gMAJLjnQynpdK1ORmee4fQIZC1UY8dGcowDpGDALVsudSY380SjAe3WK5 9zLIL7Lb33EFqTfuYIvb/kcLG8yBMFidquDNtgpzhRX6YQXFB37hnDfb33fgWURyVEEQVxV8 M4kVoRxWGHazAz7aHV17zqoemG9ZvmzKEvWlWfi1esm9sPARfaD90yzjPeOxZl7EDhL1CGJy 9gv9uKN2Ln5D17i0827/qH+2baJPhB4t/Y4tLgX/56V0eJgqxJaoM+kCb+j7CHlNzvrEsCgp 6nJwvX6BQwHFX9DvVmN+y4qp6dry0RlLW53S2umNIes0pkyDMERRZXG162yv15aXyJstlPWW WmZLIXFmsnTKIaojKXiye1IXLzEL7dqJB4qe+9duFPhINfwY4McYZWBNUeIp65AeSrgHAoKv U117KdsBtYeJDiYtsz3jWTa1L1moQxfDEHHpDmMMgPByhn6IVWZVAs0aXWmEHMByRU9cnUYe wQYTX9Zj1pqFjmxGjUGgemAfGDmoqXfa/9P9nb3D/Qf3/26t/zU7HbT56P9tdLqbjQ76f63O 0/ufHuWfYfz0fqfP9o7ZT/vs/c6P8GX/dP8fRnXeP+N93iTn37o04xiAVSejCaY6NfeGQb5F 7ixqN2MSoKHUc+ngqEdC145ygCoGQl7Hu3DPyspeY9NC7ILVRd+gha6GB/YJgipUgxCtQnQ/ CZgnjSN1o4MNpleDrNt/VNi/QPPHkwocd7qqVsaCplQ2b/snTLgx35KdCsM43KrX4Wtt9/j8 qH/6oSaRqgXRqB4mg7qHLk+dcNEZSI1b/RqQqxuG9IqULzLHx8nd5NO+hCq6KfMJehkDfUP5 Ma+R0hXaqU6iUA+HpS8LwKbQeQF/Sxd6qcuywo72++TbGFg4XEcA2pNSqJTxxl8+dE/JmVOj wFgsS2KXN1WDwTUiT8oaYO9aIaGM21SUvIyJlESvqrby8p0tAGLEa2CJ6ygyHFkRBB5VQ+n/ u5ODF8opo4/S7nOVYZnwAfEMMbjG97cYKCtnbOfN8Xmf9cHJYtjv2Ts+mi/lKOgFN9gJuGyD 1BxCKWtIQYWdhxEHlnFM7mayjnusMrJISoSzhIobT6WCnjHMbOh66K/KzvlTrnp/04MWgE3m dM0CPp7SgUlX+hAkL4AY/CP4YrFMyqCHKUcH8C24ovQjGwS4EZnjCXy1FvGULn+iS0jemYLb Vy250qzAubhx2EQ8Bdqb2GJsgXsjpn5sfZRbQf9QLpDKbpr90c2NxYOgSVxhQVYGV0MVKDUh 7X7XF2XMl7S+XNgiYaTOWIekNgDtpOIT2BsKvNyRVAI52a/AKRmHlk0vbqgwpfHkLyhy6GIa wxx26U1O8o1NG1YyGUk7d8os69B1UBJ7R2f9nYOD3tG7nOzR+cm1XFR1TDFHjYKiiqbqngVw c5hgYKHPOzDKmHGyDbbeLDNweuMI90TRh3zLEXi2Ab7yiI+B4PjmJAdcJRvigancqMoRWrFq L1DkR6mTTrUanSmFiEQLnFqP1m3Buj3phJAcm4VY0lRCuEXdanbICoFmYajBAFoboJ0EYYKK XYHLHR4zwycFWI1YvrKTH04QOwDxEDdJyKu8rMzj5dWyvDdMrdB4dri8DUJiJuWJ2jTUjWrZ Hw2qFs5jmh21g3BaSMti0UufwTiYTZAqWOmGZNuHzye8eEZld2cucZvZ4JQGNwu6bE6RlwY7 +Sf03i2fVQUEOunMyG7DnLNGJzdtwaAfmt/fPqh7H0jdIiTDOPbZD/L445HAmCU91RXKSmOP 48TyiazWdeA62g3WHUmCo9cPRDZDewxR6++2gNNq2VegDoBtPd3xjnHfKKI7DZRVv2mvlQUK Q25FwsA5qGfxKgNP7ShemIfjgN9lT7xMelD/D3X6XJLtdmVCX8sLHG3QUIe7vR04vBts4MZY a4gcuccXAM9zr7DVnia4MblWXFnHJHRUaC5PCehl0tbVRm0z3am8sW8HGMziecLXvE0MM7sm YoLQjseEHO4ShgO9XAmoVWvWXpk3QQh3DIY4Qsrq91mZsN8zzrVZzqwyKY1Zl4GUvgBy2pd6 hrGO6YoKi8IxXh8p07zTk0McuXPSTzviGRiqQOD9uAC4NsYrDF6Y2mtSyoZmnImK2Nw9Ptgz GTpQ70AbM/CB3xwfg3vQO9xf6BaQsu7BAaFsB2nBWSOgLuihL0KWNnYhggUjAO7BNCcgkuOG m1ePeerD9vJk1NwQtNF59R3sBTPyXjgSCrfNUkWGlis1uzE5Vim50mCRDeTDqUGZrhj1I/GJ NhJTyEkiQaeNGonR54hcuuiJfb+eNLEQyKaGkMyNAOU1pBuhMRtGwbigZF1fkhD0or6yJpvM 0fAo1Yyxf4xITayIXs2ACTETqYxMLRNpAISst6l7oalHrF6BOOWxgdcoAyFcdBknWBjLtduB XsfcF5blyI3CNA9l9pBamtoETJ5VQ+D7ZpF9cNzROaK4Qx4a9IRgHhbMNL8oP0VnE9hjc9Uv JxuuARjV+VjabWjlgyVXiITnrgDnZG4mxUhdmQAtV21U2msdGAXkFWmykvxIemMudnjjJYIk IlMipynaYrsCvVOx4FuUgcm9IclYjsk6ktP3lVFM1mmyutS14IDAPAMtII9gF7JWXq4obmiP x5fGMybqRlz9hlp7KLeDCwu2jidLCxcpyDLdU8JYhtDFdavkrSl5RYWATu5hb3ef7RztsR/2 P7w53jndOzMWKYEbGhtgIwjwAIR8nwr7udmsEId/1q++zCeX9X1Z2LJvmFQJdP0wietjoJJZ FGZcSr6+JU2vqoXwSeihCEokKDCEhV/jjuVy6qWcUsiA+rLPv0aXmwOPPAlpLNSNkYAuP+O5 y1wLECtpUshFUMAoKavCOdCHQF770or+v72r6WkbCKL3/IpVLgXJSQTcyimRU5UKisWHqHoB xzbJ0iSOHALKv++8mdn12kWpeq28F4hCFu/s2zdvZnc2g1X6UlaDkzPDw5F3mfL5NS0BGioB co8SBhkFfnkp9/RDcwTvKTSo8qJ8zA1AKW5OCEl3r+WqRr6UL/CCxsMHJg2DAneY1hzN9o3J AZx7t8mUvO7lxc9pzLMpJSvm+sbVC97eJ8n1zd1BD9EASqzcUpKKlN0FE6bLfbjDXlbyI+Kh OXCgz+SCMP3DnrCkUM4W2dH3VBT4jARFI2BoqCP1G1zvZ4U6esSzSys1Fd6uATCrghPtok71 SiGs/DfmARAZPtjDZvaMnDTqw9mk9RjIorcAnwbAq4LwQb1AMdcxe+VyKwOWuc3oTpZ1zvkh Pu4gtTmPMi+Pd+PJ5bQdOqp8Bohx1NkGwA0uhxjJhH4fX02HErrqppWwJsew5bP2NVramUP9 6GnHefJB9eQXgnTAdw5Mf4yvksvpZ2Me3GEMyRbIwCLZM/t6EXuvc0TQx07Nr22EDmDN4tUl ogQwOIRTK517sjwL4OGJ7IJZyRME3wCGjrR/H8m70l54L+K9N8ICPExRDZSZiXXJo7qwhAz/ aavXOsGhgGZQK/TsQx2p8qGRHrKtT0dnkotuG8kdTCFIrcnlSiyGpZfE4ygQGSrq8enmupeA DXdt0BPQxGUmT4sVrow3R292W1bH/MABxFCLFZZioUYYM9+s2pxMJqM4joU6jiPHwcCVWuCf 0BXJKZoDIOs30YT7qZq2YmrE/iif+cFmifiZG1uaq+QME7THcEAA/EZu55ZUHXrJCLJV6hN7 slbnCT1yeXpOMOhnC/r3fR5hsRZxwrKP5OEa+gOdbIuM5MHrXrYarMjeNQtXKUfTOmLZStVE lhoeRABXT4+AHES6bK90wDJgH9XJqZlzEaRANHJrW/WnEANDQyRGfWgKXX3gH4AK3kGsExqi McSa5HKqgv9cJxM5YTnZRHOXLjeLdFZwj6TQ86IaHhvzDYXlNSpgwNWGjPT3VQFotRfEbpFZ Hh9WM16cC3em67186wH0Iwh1t7QbTv3yzHjrSlhJJsuR9OIsFXn8De93hUl1Xy3qpAz4ksNA r8t5KlRHc6qo7VUi08+LDeOGTYeMUc+2HbOjZ11lHzA4pPsXPh5w2orpey5cYQr0iUfvNYMj bSpanMwkqvjjPiDleZpJnjx2m1bCdk1Ad6UnXeta17rWta51rWtd61rX/t/2G5DPaL4AaAEA --=_jive-16724-1002345252-0001-2-- _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel