Page MenuHomeFreeBSD

linuxkpi: Update `struct irq_work`
ClosedPublic

Authored by dumbbell on Oct 12 2022, 7:12 PM.
Tags
None
Referenced Files
F166629320: D36955.id111725.diff
Sat, Aug 15, 12:35 AM
Unknown Object (File)
Thu, Aug 13, 6:22 PM
Unknown Object (File)
Thu, Aug 13, 4:29 PM
Unknown Object (File)
Thu, Aug 13, 12:14 PM
Unknown Object (File)
Thu, Aug 13, 6:12 AM
Unknown Object (File)
Wed, Aug 12, 12:25 PM
Unknown Object (File)
Wed, Aug 12, 8:20 AM
Unknown Object (File)
Mon, Aug 10, 3:24 PM

Details

Summary

The previous llnode field is moved inside another field node.

This node field is a struct __call_single_node in Linux. Here, we
simply add an anonymous struct with the llnode field inside. That
field's new name is llist now.

struct irq_work was changed in an incompatible way. I'm thinking of adding a
#define beside the new structure so that drivers can check it to determine
how to use it, and thus have a single code base working with multiple versions
of FreeBSD. What do you think?

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

struct irq_work was changed in an incompatible way. I'm thinking of adding a #define beside the new structure so that drivers can check it to determine how to use it, and thus have a single code base working with multiple versions of FreeBSD. What do you think?

Anonymous union of struct node and struct llnode?

I think something like this will work. It's not pretty but kills compilation breakage.

union {
	struct llist_node llnode;
	struct {
		struct llist_node llist;
	} node;
};

Good idea @wulf and @hselasky! I just updated the patch.

This revision is now accepted and ready to land.Nov 5 2022, 5:20 PM
This revision was automatically updated to reflect the committed changes.