01:44RSpliet: imirkin: I could find it useful yes
01:45RSpliet: I tend to infer a lot currently from NV50_PROG_DEBUG, but having it out on paper is nice... of course if you have the time and willingness to write it down :-)
03:15kiranos: Hi I have issues with nouveau and my two nvidia graphics cards, I have these connected to three monitors
03:16kiranos: is there some info you need about my system to easier pinpoint my exact setup?
03:16kiranos: my mouse stutters, and disapperas
03:16kiranos: the mouse pointer that is
03:16kiranos: I think its because of the two graphics cards
03:17kiranos: I'm just a regular user when it comes to GUI and linux so any pointers on how to make a better bug report would be appriciated
03:17kiranos: I have tested alot of dists and now I'm on fedora 22 and have the same issue on all recent
03:17mupuf: imirkin: is reator still problematic?
04:01kiranos: about my issue with mouse pointer flickering and going in the backgroud, someone earlier here said it might be because of clockspeed? I think it was and this isnt set and could cause all kind of strange issues when using two graphics cards
04:01kiranos: I have a testserver where I can reproduce
04:05RSpliet: kiranos: clocks are definitely set, otherwise your GPU wouldn't run at all
04:05RSpliet: nouveau just doesn't touch them
04:10kiranos: RSpliet: ok is there anyone which might be working with this which I can highlight?
04:13kiranos: if you search for kiranos there there are something about reclocking
04:21kiranos: imirkin_: are you arround to debug some?
04:30RSpliet: kiranos: please paste a copy of dmesg on a website of choice
04:32RSpliet: and share the URL
04:34kiranos: sure one moment
04:36kiranos: RSpliet: http://pastebin.com/VXx3iD0x
04:38kdub: do maxwell cores work with nouveau? (i don't mind compiling tip mesa if needed)
04:39tobijk: RSpliet: he got 2x nva3, havent you implemented reclocking for that? :)
04:39tobijk: kdub: epends on the specific maxwell chip you have
04:40tobijk: well for the GM20x, which yours is, we need a signed firmware from nvidia to use 3D accel
04:40tobijk: sadly they haven provided some as far as i know
04:41kdub: tobijk, ah, thanks for the info
04:41tobijk: go tell them to release the firmware :D
04:42tobijk: kdub: oh wait 960M, me should look closer
04:43tobijk: that'd be a gm107 chip if you are lucky
04:43tobijk: paste dmesg and we'll see
04:43tobijk: those would work with nouveau
04:44kdub: tobijk, cannot atm, but will scan through and see if I can figure it out later... thanks for the info
04:44kdub: annoying that the firmware has to be signed
04:44tobijk: kdub: only for the gm20X
04:45tobijk: the gm10X should work
04:47kdub: according to wikipedia, its a gm10x, so yay
04:54hno: Trying out nouveau on a K2100M (GK106 acording to wiki) with quite unstable results. What support level should I expect?
04:57tobijk: hno: kepler is supported pretty well, we even have experimental reclocking for it (may hang your system)
04:59hno: I am running Fedora 22. Stock install hangs immediately. Ugraded install can boot into terminal mode and from there I can start X once.
05:00hno: Trying to boot into graphical mode (GDM) hangs.
05:00hno: Trying to exit from X hangs.
05:00hno: Trying to suspend fails.
05:00hno: Reboot often hangs.
05:01hno: kernel 4.0.8.
05:03tobijk: hno: well you could try a 4.1 kernel first, if that does not help, report back here for deeper investigation
05:24RSpliet: tobijk: I have
05:24RSpliet: kiranos: try as root
05:25RSpliet: echo f > /sys/class/drm/card0/device/pstate
05:25RSpliet: and probably for /sys/class/drm/card1/device/pstate as well
05:29kiranos: ok sure
05:29kiranos: one moment
05:33kiranos: RSpliet: there is no such file currently in either of the card0,1 and I get access denied when I try to echo it as root
05:33kiranos: and I am root :)
05:33RSpliet: hmm oh right yes
05:34RSpliet: there's a kernel parameter to enable that
05:45kiranos: RSpliet: I have done this now and it now says AC DC * laston the 0f: line
05:45kiranos: but it still display the same mouse dissapearence
05:45RSpliet: well... so it's not related to memory bandwidth then, since we just doubled it :-D
05:46RSpliet: (your GPU effective now has become 50% faster...)
05:46kiranos: oh easy overclock :)
05:47RSpliet: could you "paste" the output of /sys/class/drm/card0/device/pstate please?
05:48RSpliet: (it's just upclock btw, no worries... it's running at the speed as "advertised"
05:49kiranos: RSpliet: http://pastebin.com/PNjv5z6y
05:49RSpliet: cool! haha, well, not useful for solving your issue, but I'm glad to see another sample of working reclocking
05:50kiranos: glad to be of service .:)
05:50RSpliet: keep this trick in mind if you want to do any sort of gaming or other 3d workloads ;-)
05:51kiranos: yea :D
05:51RSpliet: as for your issue... mmm... it's Fedora 22, I'm succesfully running that
05:51RSpliet: does it exist when you have two monitors on one GPU?
05:51RSpliet: (and the other one disabled)
05:51kiranos: I've not tried
05:52kiranos: dont think I can just now either, but the mouse is actually more stable now, about the vanishing issue, now it mostly stalls
05:52kiranos: it dissaperars u til a menu loads up
05:53kiranos: its a pretty sluggish system
05:53RSpliet: well, slowness is expected with multi-GPU systems, because I don't think it tries to do 3D acceleration
05:53RSpliet: (since it doesn't know how to separate the 3d objects sanely between the two cards)
05:54RSpliet: the symptoms are awfully strange though
05:56RSpliet: hence I'm curious whether it works with one GPU
06:00kiranos: yea its strange, also evevry time I move the cursor between monitors the mouse freezes
06:01kiranos: and dissapears while it freezes
06:03kiranos: RSpliet: should it be enough if I remove the DVI cable from the monitor and reboot?
06:05kiranos: RSpliet: now it works just as expected
06:05kiranos: fast aswell
06:06RSpliet: and you can make it even faster :-P
06:06RSpliet: so yes, this is an odd limitation with multi-GPU set-ups
06:06kiranos: another thing I noticed, with two GPU active the a mouse cursor is stuck directly at login prompt, and it stays there even atfter I login and drag a second mouse cursor
06:07kiranos: but with two gpu, this is not the case then it starts to use the first cursor
06:07kiranos: but with 1 gpu sorry
06:07RSpliet: you might want to look at http://nouveau.freedesktop.org/wiki/MultiMonitorDesktop/
06:07RSpliet: the bit on "zaphodheads" could be useful
06:07RSpliet: might be that explicit configuration like that is required for X.org to play nicely
06:08RSpliet: (don't just copy-paste, double-check the parameters as well)
06:09kiranos: ok I'll take a look, it says its experimental, is it a work in progress that you hope someday will add itself if it autodetects two GPU's?
06:10kiranos: RSpliet: thanks for all your help
06:10RSpliet: it's about as experimental as changing clock frequencies... and that worked :-P
06:10kiranos: yea :)
06:20hno: tobijk, now running 4.1.2. cannot say it runs any better.
06:21hno: still hangs at basic startup/shutdown.
06:21hno: except that it is possible to boot into text mode and then startx without hang.
06:28hno: I do notice some error messages in dmesg. "HUB_INIT timed out", "grctx template channel unload timeout" and a bit more when trying to suspend.
07:09karolherbst: imirkin: what are the current plans with the pstate sysfs interface? should it be moved inside debugfs?
07:09karolherbst: or should that be done after some automatic reclocking works
07:11kiranos: RSpliet: its not working any better, I'm thinking I'll go with the official drivers, its nothing you would like me to debug more, I'm guessing multiple GPU support is low down the list?
07:12RSpliet: kiranos: I'm afraid it is, I can't help you further at the moment either
07:13kiranos: no problem, thanks for all the help you could give
07:42karolherbst: does anybody have a clue, why internally there is a 0 cstate with 0 for all values?
07:45karolherbst: mhh, seems like I did something terrible wrong
07:56karolherbst: would you like to leave any comment on these? https://github.com/karolherbst/nouveau/compare/master...karolherbst:cstate_interface I know it isn't as clean as it should be (especially the nvkm_cstate_prog thing), but well, it seems to work and isn't as bad as it was before
08:08imirkin: karolherbst: should be moved to debugfs, yes. and then we can drop the pstate=1 thing
08:15karolherbst: imirkin: is debugfs similiar to sysfs?
08:15karolherbst: like move files, replace some stuff and done?
08:16imirkin: karolherbst: something like that yeah
08:18karolherbst: imirkin: but are you fine with the first and second commit? (the second commit has a wrong message anyway)
08:19imirkin: haven't looked
08:20imirkin: karolherbst: what happens if an invalid cstate is provided?
08:20imirkin: (i.e. one that's not found)
08:20imirkin: does it end up using the last one?
08:20imirkin: (not sure how list_for_each_entry works precisely
08:20karolherbst: the last in the list gets choosen
08:21karolherbst: which is the slowest one
08:21karolherbst: I feel bad about the list either
08:21imirkin: should be fastest...
08:21karolherbst: list_entry(pstate->list.prev, typeof(*cstate), head); returns the fastest one
08:21imirkin: yeah, which is the last item on the list... no?
08:21karolherbst: and this is what the pstate thing currently depends on
08:21karolherbst: mhh don't know
08:21karolherbst: it seems like to iterate with the highest number first
08:22imirkin: anyways wtvr
08:22imirkin: first 2 patches seem fine yeah
08:22karolherbst: although I don't like the -1 idea that way
08:22karolherbst: should be more explicit
08:23karolherbst: maybe NVKM_CLK_SET_FASTEST_CSTATE constant and some magic inside the function?
08:33karolherbst: imirkin: should there be a new directory in the debugfs or just in the top level?
08:33imirkin: karolherbst: top level is fine by me :)
08:33imirkin: is there anything in there other than vbios?
08:34karolherbst: drm stuff
08:34imirkin: ah, a few files i guess
08:34imirkin: anyways, unless you plan on making 1000 files, top-level should be fine
08:34karolherbst: yeah, there is just a few things
08:34karolherbst: connectors get their own directories
08:35karolherbst: mhh my card reports a VGA port
08:36imirkin: maybe on a docking thing?
08:36karolherbst: mhh I wouldn't worry about that much
08:37karolherbst: for my intel card there is one eDP, 2 DP, 3 HDMI and one VGA ;)
08:37karolherbst: maybe the laptop may be able to do docking, but there is no port
08:39imirkin: or maybe it's just phantom ports, happens too
08:39imirkin: the laptop maker left them in the vbios but didn't pin them out
08:39imirkin: or shared the vbios with a diff model
08:39imirkin: or who knows
08:39karolherbst: its a clevo laptop, so most likely yes
08:40imirkin: either way, the driver has no actual way of telling what's there... it just reads stuff out of DCB for nvidia, and somewhere else for intel
08:40karolherbst: I see
08:40karolherbst: so I could actually add a port if I knew enough about the card in theory?
08:41imirkin: highly theoretical, but yes
08:41imirkin: at that point you'd be making your own PCB
08:41karolherbst: I don't want a port on my nvidia card anyway
08:42karolherbst: okay, what should I do about the kernel parameters?
08:42karolherbst: mhh or the one parameter?
08:43karolherbst: ahh you want to drop that
09:09karolherbst: imirkin: is there a way to also change data using the drm infrastructure?
09:10karolherbst: drm_info_list only has a callback called show
09:10karolherbst: but nothing for writing stuff in it
09:10imirkin: what's drm_info_list?
09:10karolherbst: its a struct needed for drm_debugfs_create_files
09:11karolherbst: its also used inside nouveau_debugfs.c
09:11imirkin: ask in #dri-devel what the deal is
09:11imirkin: coz i don't know
09:15mupuf: imirkin: oopsie, I know what happened to reator
09:15mupuf: one cable was blocking the fan
09:16imirkin: hope nothing bad broke
09:16imirkin: mupuf: btw, if you could plop the maxwell in place instead of the GT218, that'd be super
09:16mupuf: ok, I will
09:16mupuf: let's give the bios a rest and see if it boots again
09:17imirkin: mupuf: i turned it off last night though, didn't i?
09:17imirkin: yeah i did.
09:18mupuf: well, it was still running a few minutes ago
09:18mupuf: so I guess the bios got insane
09:18imirkin: someone else turned it on
09:18imirkin: 2015/07/28-06:32:03: The power LED went OFF
09:18karolherbst: imirkin: ohhhh I just looked at the i915 debugfs source and guess what: it calls the drm stuff and the plain debugfs functions
09:18imirkin: that was me.
09:18imirkin: mupuf: everything after wasn't me :)
09:19mupuf: imirkin: don't worry, not your fault
09:19karolherbst: this looks ugly
09:19mupuf: imirkin: doesn;t look good for the moment
09:20mupuf: the PSU starts again, the hdd is powered-up
09:20karolherbst: mupuf: what happend? fan blocked and too much heat?
09:20mupuf: but the processors' fans do not run
09:20mupuf: karolherbst: no idea
09:20mupuf: the bios should have avoided the machine from booting up if the fan was not rotating
09:21mupuf: and then, if the cpu was running too hot, it should have killed the power
09:21mupuf: and I doubt it would have reached this state while doing nothing
09:21mupuf: it is not like the cpu was idle 99.99% of the time
09:21mupuf: so, I guess it is a bios malfunction
09:22mupuf: I will take out the bios battery
09:22mupuf: and leave it rest for some time
09:22mupuf: hoping that a fuse will reset itself
09:22karolherbst: did you check memory?
09:22mupuf: memory does not prevent fans from turning :p
09:22karolherbst: memory issues can really mess up booting and power up
09:22mupuf: otherwise ... I will have lost 2 pcs in one week :o
09:22karolherbst: try without memory
09:23karolherbst: and check what it does
09:23karolherbst: my laptop for example powers down after 0.2s if the meory is corrupt for now reasons and power on again
09:24mupuf: nope, no changes whem taking out the memory, as expected
09:25mupuf: it is unplugged now
09:25mupuf: be back later
09:25mupuf: we'll see how it turns
09:29karolherbst: this is stupid :/
09:29karolherbst: imirkin: you should check how intel worksaround this problem and this is really messy
09:51imirkin_: mupuf: let me know when/if reator regains conciousness :)
09:51imirkin_: karolherbst: check with #dri-devel people, like i said, they know tons more on the topics
09:53mupuf: imirkin: sure!
09:54imirkin_: i really should just set up my own
09:54imirkin_: but it goes against my $10 rule :)
09:55karolherbst: maybe mupuf knows something ;)
09:56mupuf: karolherbst: I know some things but, I will need more input!
09:56mupuf: what are you talking about?
09:56karolherbst: mhh the intel dri driver hacks around the drm debugfs stuff to add support for anything besides read(), do you know if drm only provides support for read?
10:00mupuf: hmm. that sounds weird
10:00mupuf: why is drm involved in this?
10:00karolherbst: drm has some helper functions
10:01karolherbst: drm_debugfs_create_files for example
10:04karolherbst: imirkin_: I already asked there but maybe I choose the wrong time for that
10:13imirkin_: karolherbst: be patient, and try pinging specific people... e.g. danvet does the intel driver, so he should have some opinions
10:14imirkin_: karolherbst: btw, while you're around, could i convince you to do a mmt trace of barrier.shader_test?
10:15imirkin_: (you did barrier-patch a while ago)
10:15karolherbst: .... :D
10:15karolherbst: is there nobody else with a kepler card? :p
10:15karolherbst: or does it have to be nve6
10:15imirkin_: you're a lot more responsive than others
10:15imirkin_: no good deed goes unpunished :)
10:16karolherbst: I actually added a mmt alias in my bashrc, so I don't have to look it up anymore
10:16imirkin_: i have that too ;)
10:17karolherbst: --trace-file was the parameter?
10:19imirkin_: karolherbst: on the bright side, you can use new blob now :)
10:21karolherbst: the debugfs is pretty low level :/
10:21karolherbst: I totaly understand why somebody used sysfs for the pstate thing
10:24karolherbst: imirkin_: how is the test name?
10:26imirkin_: in tests/spec/arb_tessellation_shader/execution iirc
10:29karolherbst: imirkin_: http://www.filebin.ca/2AD6CreuEhc7/foo.mmt.xz
10:31imirkin_: karolherbst: could i trouble you to name them things like barrier.mmt.xz in the future? i can do the rename locally, but it can get confusing :)
10:44karolherbst: something unexpected happend?
10:45imirkin_: at least i think it's unexpected ;)
10:56karolherbst: mhh debugfs is fundamentally different than sysfs I assume?
10:57imirkin_: it's all software...
10:57karolherbst: yeah but I mean this userspace-kernelspace stuff
10:57imirkin_: sysfs has rules
10:57imirkin_: debugfs has no rules
10:57karolherbst: I see
10:57karolherbst: except that __user declared stuff has to be read special?
10:58imirkin_: that's always true
10:58karolherbst: yeah, but sysfs doesn't have it
10:58imirkin_: it doesn't read user stuff
10:58imirkin_: a higher-up level handles it
10:58imirkin_: and deals with the get_user_pages thing
10:58imirkin_: coz it'll only ever read 1 page at a time
10:58imirkin_: which makes life easier
10:58imirkin_: while a generic read() can do whatever
10:59karolherbst: intel uses copy_to_user, which is the thing to use I guess
10:59imirkin_: er right
10:59imirkin_: same diff
10:59imirkin_: copy_to_user == write_user_pages :)
10:59imirkin_: get_user_pages == read
10:59karolherbst: and all this nvif stuff has to be removed and moved inside this debugfs thing
11:00karolherbst: I mean the thing behind it
11:00imirkin_: you see why we've been lazy about moving it ;)
11:00karolherbst: shouldn't be that hard actually
11:00karolherbst: just need to replace some bits
11:02karolherbst: I could call nvkm_control_mthd_pstate_clock_info directly first and then clean up further
11:19imirkin_: hrmph. for reasons unknown the blob tries to get $laneid in the tcs...
11:19imirkin_: and adds it to something
11:34imirkin_: hm, i bet the laneid is the pre-computed thing for the current invocation
11:34imirkin_: that seems like a nice opt
11:38karolherbst: I think I give up for now
11:38karolherbst: I am not in the mood for restarting franzy of my laptop 20 times an hour :D
11:42imirkin_: yeah, this stuff works a lot better when you have a separate dev box
11:42imirkin_: this is also why i've largely stayed away from kernel dev
11:46mlankhorst: imirkin_: why? just get netboot working :-)
11:46mlankhorst: it's easier
11:46imirkin_: mlankhorst: how would netboot help me?
11:46imirkin_: mlankhorst: the issue at hand is that the box i do dev on is the same box the hw is in
11:47imirkin_: and is also my primary (and only real) machine
11:47mlankhorst: well that makes it harder :)
11:47imirkin_: i have a laptop, but some jokers decided it'd be hilarious to stick a wide screen on it
11:48imirkin_: so i can't really use it for anything other than watch movies
11:48mlankhorst: I can't dev on a laptop :(
11:49imirkin_: i used to do it all the time on a T42 with a 15" display... but it's a giant pain now =/
11:49mlankhorst: I need my dual 2560x1440 screens
11:50imirkin_: well i've gotten spoiled by dual 1200x1920 screens for a while, but the T42 was during that time too
11:52mlankhorst: cheap korean 27 inch ips screens, even with import duty still cheap :)
11:53mlankhorst: never going back to tn!
11:55imirkin_: mlankhorst: well, at home i just have the one monitor, 1920x1200... and it's old too
11:56imirkin_: i think my new panels (U2415) are IPS
11:56imirkin_: yeah. U2412 is also IPS. i think the U2405 or so that i have at home is before IPS was a thing.
11:57mlankhorst: I have a dell now too, it'll be fun to make MST working..
11:57imirkin_: MST works on i915
11:57mlankhorst: sort of
11:57imirkin_: even with audio, with airlied's patches
11:57imirkin_: well, i'm using it
11:57imirkin_: that's soft-of enough for me
11:57imirkin_: every other boot one of the panels doesn't come up
11:57mlankhorst: heheh. :P
11:57imirkin_: and i get i915 bitching at me about various issues
11:57imirkin_: but... it works
11:58mlankhorst: well I haven't tried much yet, too busy with other stuff
11:58imirkin_: although the audio is dumb (at least for my use-case)
11:59imirkin_: it's designed for like a digital receiver
11:59imirkin_: which has its own volume/etc controls
11:59imirkin_: whereas the monitor offers no such functionality, so i have to use softvol if i want to control volume
11:59imirkin_: i'm sticking with the PCH :)
12:00mlankhorst: first time I used the monitor it blew up within a day. :P
12:00mlankhorst: haven't dared to enable MST since
12:01imirkin_: "blew up" as in...?
12:01imirkin_: little monitor pieces all over the room?
12:01mlankhorst: nah just failed to turn on
12:01imirkin_: oh yeah, that happens to me too
12:01imirkin_: but only once per boot
12:01mlankhorst: except it failed to turn on completely :/
12:05mlankhorst: but I sent it back, replacement works but still afraid to turn on MST. O:-)
12:05imirkin_: oh wow, bricked forever?
12:07mlankhorst: seems so, might have been unlucky though since it happened on the first day
12:07mlankhorst: most electronic failures are usually within first few days or after a few years anyway
12:18tobijk: hno: sorry was away for quite a while, can you post a dmesg (to start with something)
13:28karolherbst: imirkin: do you want to take a look at the cstate file patch too? I just want to know if the interface itself is nice enough or if I should change something radically
13:34imirkin_: karolherbst: not really my call
13:34karolherbst: I see
13:34karolherbst: maybe mupuf could take a look, but I guess skeggsb would be the best one?
13:35imirkin_: skeggsb is the right person
13:35karolherbst: sadly the timing isn't that good most of the time :(
13:46mupuf: karolherbst: I can look at the cstate patch, I have spent quite a lot of time on the boost table
14:09karolherbst: mupuf: here are all 3: https://github.com/karolherbst/nouveau/compare/master...karolherbst:cstate_interface
14:09karolherbst: the first two are rather simple
14:10imirkin_: karolherbst: mail to list if you want people to look
14:11karolherbst: yeah, have to set it up first anyway :/ I would like to do it via git
14:12imirkin_: 'git send-email'
14:12imirkin_: email is the way things are done... that's the workflow. not going to random later-disappearing links on github, putting comments into the void that no one will ever see
14:13karolherbst: yeah I know, just wanted a quick look at it
14:13tobijk: its strange first, if you have done it once its really nice :)
14:14karolherbst: the problem is just, that the patches aren't in a state, where I would post them on a mailing list
14:14imirkin_: karolherbst: send mail if you want quick look :p
14:14mupuf: imirkin: reator is back online
14:14mupuf: with a nv50 and nv117
14:14imirkin_: mupuf: awesome. you can keep it off for now, i won't be able to make use of it for a few hours
14:14mupuf: well, at least the fans are spining again
14:14imirkin_: good start
14:14tobijk: karolherbst: [RFC] in front and you are good to go :)
14:14mupuf: hmm, it does not want to post
14:15imirkin_: bad continuation :(
14:15karolherbst: I need something like nvkm_clk_ustate but only with the option to select a cstate+
14:15mupuf: please tell me I will not need to flash the bios again
14:15imirkin_: mupuf: you will not need to flash the bios again
14:15tobijk: go flash the bios again
14:20mupuf: imirkin: well, it seems like a real problem
14:20mupuf: it will wait until tomorrow
14:20imirkin_: mupuf: oh well :(
14:21mupuf: I'll be home tomorrow morning
14:23imirkin_: mupuf: no rush
14:24imirkin_: i apparently have some things to learn about how vertex lookup works =/
14:25mupuf: hmm, have fun!
14:26mupuf: That is stupid though, because I already ordered a cpu from intel and I could have bought two instead
15:32RSpliet: you should've bought AMD instead, much more reliable :-P
15:44specing: and friendly when it comes to FOSS
15:44imirkin_: i think the joke was vs intel, which is where mupuf works...
15:45specing: well then obviously amd is a no-go when he can get chips hot from the press
15:46specing: probably has insane discount, too
16:01karolherbst: imirkin_: did you see that? http://cgit.freedesktop.org/~mareko/mesa/commit/?id=af3955b050e6b7f83c143bd6b8a5872375d2481c
16:03karolherbst: maybe this oe has more details: https://bugs.freedesktop.org/show_bug.cgi?id=89069
17:06imirkin: okkk.... i think there's something dodgy going on with invocation id. i think $invoc contains things that aren't part of the invocation id, but *are* part of what's necessary to be provided as the vertex base address. grrrrr.
21:35drbombay: hello all, I get this message when trying to start several apps I get this error ( Unable to find suitable fbconfig for the GLX context: Failed to find any compatible fbconfigs ) please help
23:28mupuf: imirkin_: reator is alive and kicking, but I am having problems with wtrpm (the hw part)