Date: Thu, 15 Feb 2007 09:43:42 -0800 From: Luigi Rizzo <rizzo@icir.org> To: current@freebsd.org Subject: one last firmware(9) issue Message-ID: <20070215094342.B91479@xorpc.icir.org>
next in thread | raw e-mail | index | archive | help
I have committed the cleanup to firmware(9) discussed earlier on this list, see the commit log below. There is a remaining issue on which i would like some advice. From the commit log: Note also that there is a subtle issue with the implementation of firmware_register(): currently, as in the previous version, we just store a reference to the 'imagename' argument, but we should rather copy it because there is no guarantee that this is a static string. Now, what do you think is the best way to handle this ? The existing code tries not to allocate memory on a firmware_register(), not sure if it is on purpose (e.g. to avoid sleeping) or for other reasons. To preserve this, we should use static buffers for the image names, and pick a reasonable size for them (128 ? 256 ? 1025 ?). If on the other hand, we can afford a malloc in firmware_register(), i'd move the whole registry to a linked list, to avoid the hard limit of 30 slots in the firmware table. suggestions ? cheers luigi > luigi 2007-02-15 17:21:31 UTC > > FreeBSD src repository > > Modified files: > sys/arm/xscale/ixp425 ixp425_npe.c > sys/dev/ipw if_ipw.c if_ipwvar.h > sys/dev/isp isp_freebsd.h > sys/dev/iwi if_iwi.c if_iwivar.h > sys/dev/mxge if_mxge.c > sys/kern subr_firmware.c > sys/sys firmware.h > sys/tools fw_stub.awk > Log: > Cleanup and document the implementation of firmware(9) based on > a version that i posted earlier on the -current mailing list, > and subsequent feedback received. > > The core of the change is just in sys/firmware.h and kern/subr_firmware.c, > while other files are just adaptation of the clients to the ABI change > (const-ification of some parameters and hiding of internal info, > so this is fully compatible at the binary level). > > In detail: > - reduce the amount of information exported to clients in struct firmware, > and constify the pointer; > > - internally, document and simplify the implementation of the various > functions, and make sure error conditions are dealt with properly. > > The diffs are large, but the code is really straightforward now (i hope). > > Note also that there is a subtle issue with the implementation of > firmware_register(): currently, as in the previous version, we just > store a reference to the 'imagename' argument, but we should rather > copy it because there is no guarantee that this is a static string. > I realised this while testing this code, but i prefer to fix it in > a later commit -- there is no regression with respect to the past. > > Note, too, that the version in RELENG_6 has various bugs including > missing locks around the module release calls, mishandling of modules > loaded by /boot/loader, and so on, so an MFC is absolutely necessary > there. I was just postponing it until this cleanup to avoid doing > things twice. > > MFC after: 1 week > > Revision Changes Path > 1.2 +1 -1 src/sys/arm/xscale/ixp425/ixp425_npe.c > 1.23 +1 -1 src/sys/dev/ipw/if_ipw.c > 1.6 +1 -1 src/sys/dev/ipw/if_ipwvar.h > 1.99 +1 -1 src/sys/dev/isp/isp_freebsd.h > 1.46 +2 -2 src/sys/dev/iwi/if_iwi.c > 1.12 +1 -1 src/sys/dev/iwi/if_iwivar.h > 1.21 +1 -1 src/sys/dev/mxge/if_mxge.c > 1.9 +272 -153 src/sys/kern/subr_firmware.c > 1.4 +15 -16 src/sys/sys/firmware.h > 1.4 +1 -1 src/sys/tools/fw_stub.awk
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070215094342.B91479>