Jeremy Kerr [Tue, 10 Sep 2013 06:04:41 +0000 (14:04 +0800)]
discover/grub2: Implement parser
Add our simple parser to handle a grub2 script. Since we're not building
a parse tree at the moment (we have no reduce rules), we just have a
simple word-based %union for our tokens.
Jeremy Kerr [Thu, 19 Sep 2013 09:16:53 +0000 (17:16 +0800)]
discover: Remove unnecessary event passing
Currently, we pass "events" between the udev, user-event and
device-handler layers. These events all get sent through
device_handler_event, then de-multiplexed to an appropriate handler,
depending on their source.
Instead, just export relevant device_handler functions, and have the
(old) event sources call these functions directly.
This also means we can include a lot more of the device hander code in
the parser tests.
Jeremy Kerr [Thu, 19 Sep 2013 04:18:56 +0000 (12:18 +0800)]
lib/log: Cleanup log API
Rather than exposing log internals (through always_flush and
set_stream), do all logging init through pb_log_init(). If pb_log_init()
hasn't been called, pb_log will drop messages.
Also, add a pb_debug() function, specifically for debugging information.
In a yaboot conf file, we may see a device= directive that actually
specifies a partition (eg, sda1) rather than the underlying block device
(sda). If we then encounter a partition= directive, we don't handle the
resolution of the partition correctly, as we simply append the
partition number to the device= string.
This change implements a smarter handling of the partition= directive,
where we strip away any partition information from the device=
parameter first.
Signed-off-by: Neelesh Gupta <neelegup@linux.vnet.ibm.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Jeremy Kerr [Mon, 12 Aug 2013 07:57:41 +0000 (15:57 +0800)]
lib/process: Add process helpers
We've grown-out of pb_run_cmd a little, as we have a number of different
process types:
boot():
- kexec: short-running process, run synchronously
- boot hooks: short-running, run sync, need exit code & stdout
network init:
- interface configuration: short running, run sync
- udhcp processes are long running, we may want completion, but
doesn't block other actions
config nvram:
- read: short running, can block, need stdout
- write: short running, can block
We'd like to introduce proper asynchronous processes, to allow config &
boot-option downloads without blocking the discover server.
This change introduces a new type for processes, 'struct process'. These
structures are created with process_create, and run with
process_run_sync or process_run_async. The latter reports completion
through a callback member of struct process.
Jeremy Kerr [Tue, 13 Aug 2013 03:23:57 +0000 (11:23 +0800)]
discover/boot: talloc struct boot_task
Rather than using the stack for struct boot_task, talloc one instead.
This gives us a short-lived context (active for the boot() process
only), and we don't need to use the externally-provided context
directly.
Jeremy Kerr [Thu, 8 Aug 2013 06:33:19 +0000 (14:33 +0800)]
discover: remove libparser object
There's no real need for a separate libparser object. Our tests pull-in
the parsers directly, and the discover server is the only thing that
actually links to libparser.ro.
Jeremy Kerr [Thu, 8 Aug 2013 05:54:19 +0000 (13:54 +0800)]
config: Split interface configuration from network configuration
This change moves the interface configuration into its own 'struct
interface_config'. We also remove the _config suffix from the network
and interface members.
Jeremy Kerr [Wed, 7 Aug 2013 06:00:16 +0000 (14:00 +0800)]
discover/yaboot: fix device parsing
A couple of fixes for yaboot's device-handling code. Firstly, we need to
use 'device=' rather than 'root=', as the latter is purely for ybin, to
define where the yaboot binary goes.
Secondly, we need to respect global and option-specific device=
parameters. To do this, we keep all boot_image and initrd strings in the
state, and create the actual resources in yaboot_finish.
Add a test for all override cases, and fix the incorrect boot= parsing
in the rh8 test.
Jeremy Kerr [Wed, 7 Aug 2013 02:31:05 +0000 (10:31 +0800)]
discover/yaboot: Allow all image options to be overridden by global options
All of the image options should be overridable by global options.
Instead of building the boot_args during yaboot_process_pair, we add
discovered data into the state struct, then create the boot args from
this data during yaboot_finish
For a more portable build system convert to using the
autoconf-archive AX_WITH_CURSES macros. Allows building
on openSUSE, which has a different header file layout than
other distros, and fixes menu entries with UTF-8 characters;
this causes fedora installs (codename "Schrödinger´s cat")
to break the UI.
Jeremy Kerr [Thu, 18 Jul 2013 05:21:37 +0000 (13:21 +0800)]
discover: Don't free URL in load_url
Previously, load_url took a char * argument, from which it parsed a
newly allocated URL, and freed the URL before returning.
Commit 5be946c changed load_url (then load_file) to accept a parsed URL
instead of a char *, but didn't remove the free. Any URLs passed to
load_url are currently being unintionally free()ed.
Jeremy Kerr [Wed, 10 Jul 2013 07:50:43 +0000 (15:50 +0800)]
lib/waiter: Defer free of removed waiters
We may end up calling remove()-d time waiters if the timeout expires as
we're processing an IO waiter. Instead of freeing the waiter in
waiter_remove, mark the waiter as inactive, and defer the free until the
end of waiter_poll().
Jeremy Kerr [Tue, 2 Jul 2013 02:36:47 +0000 (10:36 +0800)]
config/powerpc-nvram: Don't require petitboot, prefix on all params
Currently, we only store nvram params with a "petitboot," prefix, so
that we don't grow the config list to an unbound size. However,
the "auto-boot?" param has no prefix.
Instead, remove the requirement for the "petitboot," prefix, and use an
array of known parameters instead.
Geoff Levand [Sun, 30 Jun 2013 20:45:58 +0000 (13:45 -0700)]
discover: Fix automake warnings
Change the Makfile.am relocatable output files from automake _LIBRARIES
to automake _PROGRAMS. Also, change the output file name extension
from .o to .ro to better show these are relocatable files.
Fixes automake warnings like these:
discover/Makefile.am: `libparser.o' is not a standard library name
discover/Makefile.am: did you mean `libparser.a'?
Jeremy Kerr [Mon, 24 Jun 2013 05:03:14 +0000 (13:03 +0800)]
ui/ncurses: Remove unused 'cod' variable
When configured with --disable-debug, we get an unused variable warning:
ui/ncurses/nc-cui.c: In function 'cui_device_remove':
ui/ncurses/nc-cui.c:439:24: error: unused variable 'cod'
cc1: all warnings being treated as errors
Jeremy Kerr [Thu, 20 Jun 2013 04:00:26 +0000 (12:00 +0800)]
discover/event: Fix incorrect calculation of param data length
We're not accounting for the action in the event header (only the device
string) when we pass the length of param data to event_parse_params.
This means we walk past the end of the event data while parsing params.