Commit graph

2302 commits

Author SHA1 Message Date
cinap_lenrek 9652f5bec5 pc kernel: simulate FXSAVE/FXRSTOR tag-byte from x87 tag-word, copy fp state across fork
the tag-word is not compatible between x87 and sse, have to convert
properly for emulation to work.

we now copy fp state across fork (again!) to preserve FCW and MXCSR
registers. this might not be neccesary as we could probably just
get the current value for the curren process and avoid the fpsave()
call, but become conservative again.
2013-05-30 23:16:22 +02:00
cinap_lenrek 580a467f63 libmach: fix reversed F0-F7 register order 2013-05-30 23:01:59 +02:00
ppatience0 9fee166e10 io, seg: we should exits(nil) at the end of main 2013-05-28 20:06:53 -04:00
ppatience0 6a0d21acca mothra: clicking on the url scroll bar, snarfing, or saving a hit when no urls have been loaded (right after running mothra) would crash. this was due to use of w->url and selection when they are actually nil.
to fix this, make genwww return 0 if w->url is nil and output an error message when attempting to access selection if it's nil. the problem with the w->url fix is that after clicking on the url scroll bar, an empty url history row could be highlighted by clicking on it. fix this by making sure lp->lo is not less than zero.
2013-05-27 00:26:19 -04:00
ppatience0 ffef3278ef tojpg: GREY[1248] images should be grayscale 2013-05-27 19:32:28 -04:00
cinap_lenrek 723018c1de merge 2013-05-28 23:42:59 +02:00
cinap_lenrek 8cce104fcb kernel: sysrfork abortion
when we fail to fork resources for the child due to resource
exhaustion, make the half forked child process call pexit()
to free the resources that where allocated and error out.
2013-05-28 23:41:54 +02:00
ppatience0 410ce8feec tojpg: add jpeg encoder 2013-05-26 21:56:56 -04:00
cinap_lenrek 71a3ab3f13 kernel: make imagereclaim() skip notext pages (prevent it from blowing the mount cache)
imagereclaim would happily uncache pages from the mountcache (port/cache.c)
without ever getting a Image* released from it. simple fix, just check for
p->image->notext but make sure todo it under the page lock :)
2013-05-27 03:26:53 +02:00
cinap_lenrek 6025ad06da merge 2013-05-27 01:20:46 +02:00
cinap_lenrek 44e4aad870 kernel: dont copy fpsave on fork, simplify freeing waitq in pexit(), remove unused semlock from Proc sturcure 2013-05-27 01:17:11 +02:00
cinap_lenrek 410d6bea6a devfs/devsd: fix waserror() and unused variable compiler problem
the compiler optimizes setting unused variables out, which is
problematic if they are used in waserror() handler which the
compiler isnt aware of. rearrange the code to avoid this problem.
2013-05-27 01:12:21 +02:00
cinap_lenrek c4153b7755 kernel: closechanq error
catch potential interrupt error from kproc(). this can happen when
we run out of processes, then newproc() will call rsrcwait()
which does tsleep(). if the process gets a note, this might
raise a interrupt error.
2013-05-27 01:09:34 +02:00
cinap_lenrek 24b908be8a kernel: image reclaim pauses
get a bit more verbose about process image exhaustion and make
imagreclaim() try to get at least one image on the freelist.

use rsrcwait() to notify the state, and call freebroken() in
case imagereclaim() couldnt free any images.
2013-05-27 01:04:53 +02:00
cinap_lenrek 3e567afed5 kernel: fix sysexec() error handling compiler problem, sysrendez() busyloop
the variables elem and file0 and commited are explicitely
set to avoid that they get freed in ther waserror() handlers.

but it turns out the compiler optimizes this out as he
thinks the variables arent used any further. (the compiler
is not aware of the waserror() / longjmp() semantics).

rearrange the code to account for this. instead of using
a local variable to check for point of no return (commited),
we use up->seg[SSEG] to figure it out.

for file0 and elem, we just rearrange the code. elem can be
checked in the error handler if it was already assigned to
up->text, and file0 is just free()'d after the poperror().

remove silly busy loop in sysrendez. it is not needed.
dequeueproc() will make sure that the process has come to
rest.
2013-05-27 00:59:43 +02:00
cinap_lenrek 257c7e958e keep fpregs always in sse (FXSAVE) format, adapt libmach and acid files for new format
we now always use the new FXSAVE format in FPsave structure and fpregs
file, converting back and forth in fpx87save() and fpx87restore().

document that fprestore() is a destructive operation now.

change fp register definition in libmach and adapt fpr() acid funciton.

avoid unneccesary copy of fpstate and fpsave in sysfork(). functions
including syscalls do not preserve the fp registers and copying fpstate
from the current process would mean we had to fpsave(&up->fpsave); first.
simply not doing it, new process starts in FPinit state.
2013-05-26 22:41:40 +02:00
cinap_lenrek ef5e19b9be add leading dot for explicit domain in webcookies, bump redirection limit to 12 in webfs 2013-05-26 03:33:39 +02:00
cinap_lenrek 7aea1204b9 graphics(2): remove non existing char *mousedir argument from geninitdraw (from sources / geninitdraw-no-mousedir patch) 2013-05-25 04:39:53 +02:00
cinap_lenrek cf657b418b libdraw: fix agefont crash when display == nil (from sources / agefont-nodisplay patch)
If you run this:
	{for (i in `{seq 1 70000}) echo '½•α·'} | mc | wc
mc will eventually suicide. The error comes from
/sys/src/libdraw/font.c:/^agefont which assumes it has a
display. Normally, this is set up by geninitdraw (usually
via initdraw), but mc.c avoids that to avoid the screen
redraws (flicker, at a minimum, but worse in long-running
cases).

graphics(2) does not prohibit this use, so I made the least
intrusive change to make it work.
2013-05-25 04:36:16 +02:00
cinap_lenrek 96511b274d kernel: fix floating point exceptions (was broken by sse kernel changes)
the fpenv() instruction stores in x87 format, using mathstate()
would interpret fpsave as FPssestate in case it was enabled!
instead, pass the status word and fppc explicitely to mathnote()
in matherror().

get rid of m->fpsavealign buffer, as we can just use FPssesave struct
which has enougth padding so rounding up base pointer will not overflow.
2013-05-25 22:44:19 +02:00
cinap_lenrek 8b40eecea8 kernel: cleanup /sys/src/9/pc/mkfile PORT= and OBJ= lists 2013-05-21 19:45:40 +02:00
cinap_lenrek 92b550d665 kernel: prevent alarm(2) from returning instantly when the tick timer wraps. (from erik quanstros alarmwrap patch) 2013-05-21 19:31:41 +02:00
cinap_lenrek f6833ce428 wifi: properly size internal wifi input processing queue
we only used wifi->iq to process management frames only, now its also used
to forward encrypted data frames, so size it accordingly.
2013-05-21 19:29:57 +02:00
cinap_lenrek 7a9ecbed6a merge 2013-05-21 18:58:13 +02:00
jpathy 5331734335 merge 2013-05-22 21:55:08 +05:30
jpathy 81b7451972 sse kernel support (sources) 2013-05-22 23:47:05 +05:30
jpathy 213bf50893 add 6(a|l) sse support to 8(a|l) 2013-05-21 23:15:13 +05:30
cinap_lenrek 8a3a36fc05 kernel: make allocb() wait instead of panic() when possible
as long as our process doesnt hold any locks or ilocks, we
can try to wait for the memory to become available instead of
panicing.
2013-05-21 02:29:46 +02:00
cinap_lenrek 58201a67c1 uarti8250: print on malloc failure 2013-05-20 17:43:30 +02:00
cinap_lenrek 3ccf5db688 merge 2013-05-20 17:33:46 +02:00
cinap_lenrek c4f57ff492 pcuart: malloc error handling, cleanup 2013-05-20 17:32:48 +02:00
ftrvxmtrx 5aa2a1a845 kbmap/ua: fix uppercase ь 2013-05-20 13:48:09 +02:00
cinap_lenrek 6ac8a3ca65 devether: handle malloc error in etherprobe() 2013-05-20 01:17:38 +02:00
cinap_lenrek 926dd18a7a wifi: handle malloc errors in wifiattach() 2013-05-20 01:03:20 +02:00
cinap_lenrek 18b8ae56e8 use resrcwait() when waiting for memory to become available
use resrcwait() when waiting for memory to become available. randomize
the sleep time and properly restore old process status in case tsleep()
gets interrupted.
2013-05-20 23:55:38 +02:00
cinap_lenrek f97798e710 devsd: don't raise Enomem error if sdmalloc() fails, instead wait for the memory to become available
filesystems do not handle i/o errors well (cwfs will abandon the blocks),
and temporary exhaustion of kernel memory (because of too many i/o's in
parallel) causes read and write on the partition to fail.

i think it is better to wait for the memory to become available in
this case. the single allocation is at max SDmaxio bytes, which makes
it likely to become available. if we havnt even enought fo that, then
rebooting the machine would be the best option. (aux/reboot)
2013-05-19 20:59:55 +02:00
ftrvxmtrx 318cd6fbde kbmap/ru: fix uppercase ь 2013-05-19 17:50:51 +02:00
cinap_lenrek 4c6c7be688 nusb/kb: simplify repeat logic as scancode now contains the info about esc1 extension 2013-05-18 01:46:25 +02:00
ftrvxmtrx 506cae05df nusb/kb: oops, fixup 2013-05-18 01:03:13 +02:00
ftrvxmtrx 811c3e8d78 nusb/kb: use a flag to indicate extended code; fix the most unix-friendly key on se/fi kbd layout 2013-05-18 01:01:34 +02:00
stanley lieber d50ca72774 faces: just say no to dejavu 2013-05-15 15:38:42 -04:00
cinap_lenrek 4c6fa55456 make clear that the "ipgw" attribute has to be an ip address 2013-05-14 18:31:24 +02:00
stanley lieber 9e9521140d fortunes: Subject: [9fans] [gsoc] Dart9P 2013-05-14 10:18:49 -04:00
cinap_lenrek f990a6d30a rio: place text at beginning of line before cursor and host point 2013-05-13 04:40:02 +02:00
cinap_lenrek 303394314a rio: fix completion and readback and make it possible to complete history 2013-05-13 04:19:10 +02:00
ppatience0 7b4c8aac93 toppm: no need to initialize err 2013-05-12 18:00:47 -04:00
ppatience0 03d1d83deb toppm: checking for err is useless; it was initialized to nil earlier 2013-05-12 17:52:35 -04:00
ppatience0 df25791b33 toppm: multichan converts to RGB24, not RGBV 2013-05-12 17:46:39 -04:00
ppatience0 eee0141465 writeppm: replace WriteGIF by WritePPM 2013-05-12 17:08:52 -04:00
cinap_lenrek 6bcc1eb399 writeppm: simplify 2013-05-13 23:03:23 +02:00
ppatience0 a3f776a13e writeppm: for bitmaps, 1 is black, 0 is white 2013-05-12 16:36:29 -04:00
ppatience0 a1130d843d toppm: fix style 2013-05-12 16:17:09 -04:00
ppatience0 d5e3e4326c toppm: add -r flag for raw ppm 2013-05-12 16:11:43 -04:00
cinap_lenrek b78e9525cf writeppm: fix tab/spaces 2013-05-12 19:12:21 +02:00
cinap_lenrek 4c4fbdf78c merge 2013-05-12 19:05:51 +02:00
cinap_lenrek 3cccb8fb12 devaoe: avoid panic on malloc() error by using smalloc() instead. 2013-05-12 19:04:07 +02:00
ppatience0 1d760c9b3e file: recognize bitmap and graymap ppm images
writeppm: do not print extra space after each pixel for graymap formats to save space
2013-05-12 12:53:43 -04:00
cinap_lenrek 8020743579 ether8169: do phywakeup magic only for specific mac versions (from openbsd) 2013-05-12 18:25:24 +02:00
cinap_lenrek 29ece7fda4 ether8169: and phy wakeup and reset phy before enabling auto negotiation
this brings up the 8198B on BurnZeZ's ASRock Z68 Professional Gen3 board.
2013-05-12 02:58:02 +02:00
cinap_lenrek 25bc4e84e9 devmnt: fix mount device leak and allocation error handling in mntversion()
the fist problem is that qopen() might return nil and that kstrdup() will
sleep, so we should try to avoid holding the mntalloc lock. so we move
the kstrdup() and qopen() calls before the Mnt allocation, and properly
recover the memory if we fail later.

the second problem was that we error(Eshort) after we already created the Mnt
when returnlen < sizeof(f.version). this check has to happen *before* we
even attempt to allocate the Mnt structures. note that we only copy the
version string once everything is in the clear, so the semantics of the
user buffer not being modified in case of error is not changed.

a little cleanup in muxclose(), getting rid of mntptfree()...
2013-05-11 20:54:50 +02:00
cinap_lenrek fe073f852a sdide: add Intel SERIES 6 SATA controller pci ids 2013-05-11 18:45:46 +02:00
cinap_lenrek 3174ffc971 acme: apply nemos acmediskread patch (from sources)
pread does not guarantee that it would read all the data asked for.
But acme usage of disk assumes that. This issues as many reads as
needed to make acme work when read returns less data than it wanted.
2013-05-11 18:43:03 +02:00
cinap_lenrek 389d6a1054 ape: change types from unsigned long to void* for rendezvous() and segattach()/segbrk() (erik), use uniqueue rendezvous tags for _buf and listen 2013-05-11 18:34:40 +02:00
ppatience0 9af0b2c683 awk: proctab.c is always regenerated from maketab, so it is unnecessary to keep it 2013-05-09 20:48:23 -04:00
cinap_lenrek 9bb703e2cf srv: be nice, close the previously duped pipe filedescriptor 2013-05-10 01:24:11 +02:00
khm 03cf6cae57 fortunes: all the world's a social vax cloud 2013-05-08 21:07:02 -04:00
ppatience0 c24a442ae2 samterm: revert previous changes. 2013-05-08 20:34:50 -04:00
ppatience0 6a2b5055f5 samterm: move cursor to next tabstop or non-space character before backspacing in spaces mode. this makes it less annoying to backspace (it's more like tabs). 2013-05-08 17:47:48 -04:00
jpathy e3883b050e Add RDRAND Support for /dev/random 2013-05-08 23:27:58 +05:30
ppatience0 36287edc88 ape: remove unused variables 2013-05-06 20:51:18 -04:00
ppatience0 517c0feaca ape: fix uninitialized variable bug in getfields() 2013-05-06 20:24:19 -04:00
ppatience0 a1bc7c76ba merge 2013-05-06 19:37:51 -04:00
ppatience0 5ac6088b96 access: unused variable 2013-05-06 19:35:03 -04:00
cinap_lenrek cd66b11f67 pbs: allow 9bootfat start cluster beyond 0xFFFF
pbs failed to load (silently loading garbage) 9BOOTFAT from start
cluster beyond FFFF because we ignored the low word from the
directory entry. now taking the high 16 bit of the directory's
start cluster into account.
2013-05-06 01:15:46 +02:00
cinap_lenrek d3b727db18 devip: dont raise error() out of Fsprotocone()
Fsprotoclone() is not supposed to raise error, but return nil.
ipopen() seemed to assume otherwise as it setup error label
before calling Fsprotoclone(). fix ipopen(), make Fsprotoclone()
return nil instead of raising error.
2013-05-05 04:28:50 +02:00
cinap_lenrek 9500191af6 devip: handle malloc errors, fix queue leaks
Fsprotocone():

qopen() and qbypass() can fail and return nil, so make sure
the connection was not partially created by checking if read
and write queues have been setup by the protocol create hanler.
on error, free any resources of the partial connection and
error out.

netlogopen(): check malloc() error.
2013-05-05 03:56:11 +02:00
cinap_lenrek 30d7276d69 libdraw: fix font f->cacheimage nil dereference
the initial fontresize() might fail but its error code is ignored
potentially leaving f->cacheimage == nil. make sure we call
fontresize() in loadchar() when theres no cacheimage and check the
return value to avoid nil pointer dereference.
2013-05-04 20:36:28 +02:00
cinap_lenrek 3e8a38dfb3 libmach: update mips disassembler (from sources) 2013-05-04 18:40:05 +02:00
cinap_lenrek cf76ca4f32 sort: handle write error in debug mode 2013-05-04 18:33:52 +02:00
cinap_lenrek 18e480ceb2 bio: use UTFmax for Bungetsize and fix libmach to include <libc.h> before <bio.h> (from sources) 2013-05-04 18:30:49 +02:00
cinap_lenrek d359aed939 nedmail: recognize image/jpg mimetype 2013-05-04 07:03:37 +02:00
ftrvxmtrx 9186ae1355 u9fs: fix compilation warnings 2013-05-04 02:53:05 +02:00
ftrvxmtrx f33e22c444 u9fs: make it compile 2013-05-04 02:43:27 +02:00
cinap_lenrek 9de8d61fe6 ape: get rid of fixed MUXADDR for buffered i/o
instead of trying to resize the segment (which will not work when
the kernel picks the address as it will allocate right before
the base of the topmost segment), we create the mux segment with the
maximum size needed (arround 1.4MB) for OPEN_MAX filedescriptors.

buf slots will be reused and slots get demand paged once used.
2013-05-03 19:34:48 +02:00
cinap_lenrek e8efd0a242 mkpaqfs(8): correct maximum block size (from erik quanstros mkpaqfsman patch) 2013-05-03 13:57:00 +02:00
cinap_lenrek d1905d8063 ape: remove unused variables from _buf (from erik qunastros _bufupd patch) 2013-05-03 13:46:27 +02:00
qeed 5dc9c7f443 fixed operand size for ADD SP, n 2013-05-02 10:40:45 -04:00
cinap_lenrek 78794f03dd devsd: initialize unit->sense[0] in sdsetsense() (from erik quanstroms 9atom) 2013-05-02 23:12:37 +02:00
cinap_lenrek d0bb0f7757 chan: fix potential path leak on clone in namec() (from erik quanstroms 9atom) 2013-05-01 21:56:02 +02:00
cinap_lenrek 91818e7081 devpipe: fix channel and queue leaks (from erik quanstroms 9atom) 2013-05-01 19:03:56 +02:00
cinap_lenrek 0124d865a6 aoe: updating aoe driver from erik quanstros 9atom
1  the config string was grabbed Aoehsz too far into the packet due to using the wrong pointer to start.
  2  never accept a response with tag Tmgmt or Tfree.
  3  defend against "malicious" responses; ones with a response Aoehdr.type != request Aoehdr.type. this previously could
 cause the initiator to crash.
  4  vendor commands were improperly filtered out.
2013-05-01 18:50:07 +02:00
cinap_lenrek d4414b3959 devloopback: fix potential channel leak on allocation error (from eriks 9atom) 2013-05-01 18:31:13 +02:00
cinap_lenrek 58533c35fb cc: accept 24 bit numeric runes 2013-05-01 16:55:11 +02:00
cinap_lenrek decade55c6 frexp: handle NaN values (from sources) 2013-05-01 16:44:04 +02:00
cinap_lenrek 27f65a138a uartpci: add detection for StarTech PCI8S9503V (P588UG) (from sources) 2013-05-01 16:29:58 +02:00
stanley lieber b94a33e01c rio: fix highlight text for -b 2013-04-30 21:03:12 -04:00
cinap_lenrek ce62bbb853 5c: dont emit conditional integer division instructions
the integer division instructions are emulated with _div()
function patched in by 5l which does not handle conditional
execution. so do not optimize away the branch in that case.
2013-04-29 20:15:40 +02:00
cinap_lenrek b325475fc8 Fix double-free fault when isaconfig returns nothing for "etherN". (from richard millers devether-doublefree patch) 2013-04-29 18:39:44 +02:00
ppatience0 87785ee897 /sys/lib/rootstub: fix missing /alpha/lib/ape directory 2013-04-29 11:12:47 -04:00
ppatience0 84172fc961 bootrc: fix spacing when asking for fs/auth ip 2013-04-28 18:34:47 -04:00