Hi Alex,

Bounine, Alexandre wrote:
struct rio_dev {
    struct list_head global_list;
    struct list_head net_list;
    .....
    ..... rest of rio_dev
    .....
    struct rio_switch switch[0];
}

It makes sense to let rio_dev structures point to the switch they are attached to. That can be useful in various situations, but is not possible with this setup.

If a rio_dev is a switch then rdev->rswitch->rdev == rdev holds.

This will remove extra memory allocation, remove overlapping structure
members and clean code sections like one shown below:

        u8 hopcount = 0xff;
        u16 destid = rdev->destid;

        if (rdev->rswitch) {
                destid = rdev->rswitch->destid;
                hopcount = rdev->rswitch->hopcount;
}

Note that it is possible for rdev->destid to differ from rdev->rswitch->destid even if rswitch->rdev == rdev (for non-hosts i.e. agents). rswitch->destid is the destid by which we discovered the switch (and can reach it) but rdev->destid is the actual id given to the switch.

Micha
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to