Re: Question regarding L4_err class usage in method commit_result.
Adam Lackorzynski <[email protected]>
| Newsgroups | gmane.comp.micro-kernel.l4.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, On Thu Mar 21, 2013 at 13:55:29 +0400, Sergey Grekhov wrote: > I have a question regarding method Kobject_iface::commit_result() in > the code of Fiasco.OC. One can easily find in the code something > similar to following: > > return commit_result(-L4_err::EPerm); > > And this call is very confusing: it looks like returning message tag > with error, but in fact the error bit (0x8000) is not set. Moreover, > some values from L4_err is intersection with enumeration > L4_msg_tag::Protocol because of: > 1) sign '-' used when commiting result; > 2) place where both values are saved - bits 31...16 of the message > tag. > And, finally, there are lots of returns similar to mentioned one > (return commit_result(-L4_err::EPerm)) and there are no _any_ code > which checks presence of these errors in the tag. > > I am very confused about these strange values saved in L4_msg_tag and > it appears to me that in these cases should be used method > Kobject_iface::commit_error(). > Can someone explain the logic behind returning values defined in class > L4_err? The error bit 0x8000 indicates an IPC error, i.e. an error related to communication. Just using commit_result() returns a return code to the caller, also meaning that the IPC itself was ok. And indeed, the label field in the msg_tag is used for both transmitting a protocol number to the callee and the return code back to the caller, that's why they are also negative to indicate errors. The msg_tag error bit is checked in userland, see l4_ipc_error() and l4_error() functions in l4sys. Adam -- Adam [email protected] Lackorzynski http://os.inf.tu-dresden.de/~adam/