Re: [PATCH 05/10] pylibfdt: Support device-tree creation/expansion

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



Hi David,

On 4 June 2018 at 20:10, David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> wrote:
> On Wed, May 23, 2018 at 10:03:41PM -0600, Simon Glass wrote:
>> Add support for fdt_open_init() and fdt_create_empty_tree() from the
>> Python library.
>>
>> Signed-off-by: Simon Glass <sjg@xxxxxxxxxxxx>
>> ---
>>
>>  pylibfdt/libfdt.i       | 33 +++++++++++++++++++++++++++++++++
>>  tests/pylibfdt_tests.py | 18 +++++++++++++++++-
>>  2 files changed, 50 insertions(+), 1 deletion(-)
>>
>> diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
>> index c0cd096..129f000 100644
>> --- a/pylibfdt/libfdt.i
>> +++ b/pylibfdt/libfdt.i
>> @@ -432,6 +432,39 @@ class Fdt:
>>              return pdata
>>          return Property(pdata[0], pdata[1])
>>
>> +    @staticmethod
>> +    def create_empty_tree(size, quiet=()):
>> +        """Create an empty device tree ready for use
>> +
>> +        Args:
>> +            size: Size of device tree in bytes
>> +
>> +        Returns:
>> +            Fdt object containing the device tree
>> +        """
>> +        data = bytearray(size)
>> +        err = check_err(fdt_create_empty_tree(data, size), quiet)
>> +        if err:
>> +            return err
>> +        return Fdt(data)
>> +
>> +    def open_into(self, size, quiet=()):
>
> So, usually keeping the same names here as in C is a good idea.
> However, when Python is managing the buffer, rather than the caller
> having to thing about it explicitly the "open_into" name is kind of
> misleading.

Yes it is I suppose.

>
> I can see two ways to go:
>     1) Call it resize() instead (which would probably need to do
>        either fdt_open_into() or fdt_resize) depending on if you're in
>        sw or rw mode)

This seems best, although not that the sw interface uses a different
class entirely, which already has a resize() method.

>     2) Change the interface so that rather than changing the buffer
>        "in place", it leaves the existing Fdt object as is and returns
>        a new Fdt object with the "opened" buffer.

This is a bit ugly, since the caller then has to manage a new Fdt
appearing and the old one going away. It breaks the idea of
encapsulation of the Fdt operations I think. This is necessary in C
(unless we changed whole interface to use some sort of struct to hold
the FDT pointer) but not in Python.

So I much prefer option 1.

>
>
>> +        """Move the device tree into a larger or smaller space
>> +
>> +        This creates a new device tree of size @size and moves the existing
>> +        device tree contents over to that. It can be used to create more space
>> +        in a device tree.
>> +
>> +        Args:
>> +            size: Required new size of device tree in bytes
>> +        """
>> +        fdt = bytearray(size)
>> +        fdt[:len(self._fdt)] = self._fdt
>
> You don't need this - fdt_open_into() will already copy data from the
> old buffer into the new one.

OK, will drop.

>
>> +        err = check_err(fdt_open_into(self._fdt, fdt, size), quiet)
>> +        if err:
>> +            return err
>> +        self._fdt = fdt
>> +

[...]

Regards,
Simon
--
To unsubscribe from this list: send the line "unsubscribe devicetree-compiler" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

  Powered by Linux