Messages in this thread | | | Subject | Re: [PATCH v2 0/6] perf: Introduce extended syscall error reporting | From | Johannes Berg <> | Date | Tue, 25 Aug 2015 10:52:19 +0200 |
| |
On Mon, 2015-08-24 at 17:32 +0300, Alexander Shishkin wrote:
> This time around, I employed a linker trick to convert the structures > containing extended error information into integers, which are then > made to look just like normal error codes so that IS_ERR_VALUE() and > friends would still work correctly on them. So no extra pointers in > the struct perf_event or anywhere else; the extended error codes are > passed around like normal error codes. They only need to be converted > in syscalls' topmost return statements. This is done in 1/6. >
For the record, as we discussed separately, I'd love to see this move to more general infrastructure. In wireless (nl80211), for example, we have a few hundred (!) callsites returning -EINVAL, mostly based on malformed netlink attributes, and it can be very difficult to figure out what went wrong; debugging mostly employs a variation of Hugh's trick.
It would be absolutely necessary to support modules, however that could get tricky: unless we pass a THIS_MODULE through in some way to netlink_ack() (in the nl80211 case) we'd have to store the actual index inside the err_site and assign it on module load somehow. Passing the module pointer seems better, but has even more wrinkles like what to do when the error came from a nested call (e.g. nla_parse()) that's in a different modules ...
Unrelated to all that - maybe perf_errno_to_site() should have some range checking?
johannes
| |