12:36karolherbst: imirkin: now that we can know from the kernel when the channel is dead, any idea what we should do in case an application hits a dead channel? just crashing so that X/whatever doesn't freeze forever?
12:36karolherbst: kind of next on my todo list after getting the MT stuff figured out
12:56imirkin: karolherbst: well, there's a way to indicate to the application that the context is lost
12:57karolherbst: ohh sure
12:57imirkin: karolherbst: an application should indicate whether it supports this event or not
12:57karolherbst: but not if they don't create a robustness context
12:57karolherbst: and I am talking aboue the case where applications don't
12:57imirkin: if it doesn't, then the kernel should just kill it
12:57imirkin: but you have to be careful to kill the right application
12:57karolherbst: well, the kernel doesn't know if the application requested a robustness context ;)
12:58karolherbst: hence me thinking we should kill in mesa
12:58karolherbst: there we know it
12:58karolherbst: and we know when the channel is dead
12:58karolherbst: special error value on command submission
12:58imirkin: mesa would be an example of an application that can handle the signal
12:58imirkin: but e.g. "old mesa"
12:58imirkin: or other applications
12:58imirkin: which use the nouveau api's directly
12:58imirkin: might not
12:58imirkin: the client should indicate that it supports this on channel creation
12:58karolherbst: well, they have to handle error values anyway
12:59karolherbst: can't just do ioctls and ignore errors
12:59HdkR: Applications use nouveau directly? That's madness
12:59karolherbst: I honestly don't think we would want to add a new communication channel between applications and the kernel just to report channel events
12:59karolherbst: I tried that
12:59karolherbst: it's not feasible
13:00karolherbst: not at all
13:00karolherbst: as you would have to rewrite all clients one way or the other
13:00imirkin: karolherbst: ah, so you just want to return a new error from gem_pushbuf or whatever?
13:00karolherbst: we already have that
13:00karolherbst: I think you get ENODEV when the channel ist dead
13:01karolherbst: not 100% on the exact error value
13:01imirkin: ok
13:01imirkin: yeah, that sounds familiar actually
13:01karolherbst: wondering if we should just check for that in mesa and segfault or wahtever
13:01karolherbst: or abort()
13:01karolherbst: well..
13:02karolherbst: for clients without a robustness context
13:02karolherbst: there is the rare case of clients not doing another submit after submitting the pushbuffer breaking the context, but.. mhh
13:02karolherbst: we could also poll randomly if we really want to
13:03karolherbst: we do so when waiting on fences anyway
13:03karolherbst: and I think there we also get the same error
13:03imirkin: adding a kernel ioctl for "wait on this fence" would be super.
13:03karolherbst: anyway... I would work out the details, just wondering if you agree with the general idea
13:03karolherbst: mhh, yeah... right
13:03karolherbst: currently we busy loop
13:03imirkin: yes.
13:04karolherbst: and I think skeggsb_ mm/cs rework will give us new options anyway
13:04karolherbst: so I'd rather just reuse whatever we have today
13:04imirkin: ok
14:13karolherbst: mixing 1.2V and 1.35V DDR4 ram modules is always fun...
14:52karolherbst: okay... 2.533 GHz seems to work alirght... I got like super random compilation issues at 2.666GHz :D
14:52karolherbst: and somehow the firmware enabled XMP on its own
14:55imirkin: karolherbst: btw, you didn't finish with the https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9740 review
14:56karolherbst: ehh.. yes, forgot to respond
14:58imirkin: thanks
16:57imirkin: mwk: is I2F.F32.S16.BEXT nvidia's way of saying "F32.S8"? What's "BEXT"?
16:59mwk: I'd guess so
16:59mwk: BEXT would probably be "byte extend"
17:00imirkin: i'm seeing a really odd issue with my rgba8_snorm conversion to/from fp32 failing ... for some values.
17:00imirkin: like a handful of values
17:00imirkin: still need to track down which values.
17:01mwk: so the thing you have to know about conversions from s8/u8 is... actually there are two variants of that instruction
17:01mwk: one which has the input in a 32-bit register, and the other that has input in a 16-bit register
17:01imirkin: yeah, doing the 32-bit ones:
17:01imirkin: cvt rn f32 $r3 s8 $r1l
17:01imirkin: and then going the other way:
17:01mwk: I suppose S16 signifies that input is a 16-bit reg, and BEXT that it's actually 8-bit
17:02imirkin: cvt rni s16 $r2l f32 $r2
17:02imirkin: (since f32->s8 directly doesn't exist)
17:02imirkin: but then i just & 0xff it, and all is well
17:02mwk: hold on a minute
17:02mwk: i2f does have hardware bugs
17:02mwk: which are actually simulated in hwtest
17:02mwk: let me just verify the preconditions...
17:03imirkin: if (!(op2 & 0x04000000)) {
17:03imirkin: /* simulate hardware bugs. */
17:03imirkin: if (rm == FP_RN || rm == FP_RP) {
17:03imirkin: if ((s1 >> 5 & 0x1ffffff) == 0x1ffffff)
17:03imirkin: s1 = 0;
17:03mwk: yes, when converting from 16-bit register in RN or RP mode
17:04imirkin: which i guess is what i'm doing...
17:04mwk: mhm
17:04imirkin: wtf does rounding even mean in that case?
17:04imirkin: i guess 16-bit -> fp16 it matters
17:04imirkin: but 16-bit -> fp32 shouldn't matter
17:04mwk: oh wait, bug also happens in other rounding modes
17:04mwk: it's just slightly different for these two modes
17:05mwk: hmm
17:05imirkin: if (!(op2 & 0x04000000)) {
17:05imirkin: i don't think i satisfy that condition
17:05mwk: why doesn't this make sense...
17:05imirkin: 00000020: a0000409 44018780 cvt rn f32 $r2 s8 $r1l
17:05mwk: oh I screwed up
17:06mwk: it's conversion *to* 16-bit register, not from
17:06mwk: ie. convesion to f16
17:06imirkin: yea
17:06imirkin: i only do f32 <-> f16 conversions
17:06imirkin: never int <-> f16
17:06mwk: good
17:07imirkin: so i literally just round-trip it in registers (since the opt isn't smart enough to figure out what's going on)
17:07imirkin: https://paste.debian.net/1190488/
17:07imirkin: and somehow this produces errors ... sometimes
17:10imirkin: (there's normally be scaling factors involved in the conversion, but the optimizer *is* smart enough to remove those)
17:11mwk: I have no idea what could be wrong here
17:11imirkin: ok, thanks for looking :)
17:11imirkin: glad to know i'm not just *completely* incompetent
17:12imirkin: i'm going to start instrumenting the test to figure out wtf it's doing
17:12imirkin: it'll probably end up being like constbuf upload or something ridiculously unrelated like that
17:51Lyude: danvet, karolherbst - I submitted a patch to revert the adertised cursor sizes
17:51Lyude: i think the patch just hasn't gotten merged upstream yet
17:51Lyude: (neither have a couple of the other patches that I've got pending in the pipeline either)
17:51karolherbst: ohh that reminds me...
17:52Lyude: mupuf: btw - I'm very suspicious that the regression we saw in the kms_plane tests is a bug on i915's end, there shouldn't be any issue with using a primary plane fb when we previously weren't using one
17:53Lyude: i will try to take a look asap, if I get time <<<
17:53danvet: Lyude, maybe just ask skeggsb_ whether putting them all into drm-misc-fixes is ok?
17:59mupuf: Lyude: I agree, this is very suspicious, hence why I mentioned it first. However, I sent the revert because I fucked up during the review
17:59mupuf: We can send a revert of the revert when we know better!
17:59Lyude: yeah that's fine
18:00Lyude: hopefully i can get to it soon if work doesn't waste too much of my time
18:03RSpliet: Lyude: welcome back to the land of the living :-P sorry I and some others started making a lot of noise RE cursor patches. For Fedora, Hans has taken your v2 fix (expose 128x128 on Kepler) into the downstream Fedora kernel because it's broken today and that fixes stuff.
18:03Lyude: nah it's ok
20:47karolherbst: nice nice nice :) I think I fixed threading in a way that the android emulator runs nearly without any issues
20:48karolherbst: ahh..
20:48karolherbst: crashed it with opening chrome :3
21:00karolherbst: mhhh.. more data races :/
21:00karolherbst: this never ends
21:01karolherbst:cries in threads https://gist.githubusercontent.com/karolherbst/c709c4c54059418b65cf699499489920/raw/926301ef35189d1136988d796f13d948f1b624eb/gistfile1.txt
21:01karolherbst: not sure why there are even llvmpipe threads
21:04HdkR: I noticed that when running Zink as well
21:05karolherbst: HdkR: ehh.. that's vulkan
21:05karolherbst: /usr/lib64/libvulkan_lvp.so
21:06HdkR: zink != lavapipe though
21:06HdkR: Was zink to radv
22:18karolherbst: okay.. found the next race