Re: [PATCH v2 6/6] libfdt: Add overlay application function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Hi David,

On Wed, Jul 13, 2016 at 12:34:04AM +1000, David Gibson wrote:
> On Mon, Jul 11, 2016 at 09:20:44PM +0100, Phil Elwell wrote:
> > On 11/07/2016 20:56, Maxime Ripard wrote:
> [snip]
> 
> > > +static int overlay_merge(void *fdt, void *fdto)
> > > +{
> > > +	int fragment;
> > > +
> > > +	fdt_for_each_subnode(fragment, fdto, 0) {
> > > +		int overlay;
> > > +		int target;
> > > +		int ret;
> > > +
> > > +		target = overlay_get_target(fdt, fdto, fragment);
> > > +		if (target < 0)
> > > +			continue;
> > > +
> > > +		overlay = fdt_subnode_offset(fdto, fragment, "__overlay__");
> > > +		if (overlay < 0)
> > > +			return overlay;
> 
> > Why does the absence of a target cause a fragment to be ignored but
> > the absence of an "__overlay__" property cause the merging to be
> > abandoned with an error? Can't we just ignore fragments that aren't
> > recognised?
> 
> So, I had the same question.  But fragments we can't make sense MUST
> cause failures, and not be silently ignored.
> 
> An incompletely applied overlay is almost certainly going to cause you
> horrible grief at some point, so you absolutely want to know early if
> your overlay is in a format your tool doesn't understand.

I'm not sure how we can achieve that without applying it once, and see
if it fails. The obvious things are easy to detect (like a missing
__overlay__ node), but some others really aren't (like a poorly
formatted phandle, or one that overflows) without applying it
entirely. And that seems difficult without malloc.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux