Date: Wed, 9 Aug 1995 00:04:09 +1000 From: Bruce Evans <bde@zeta.org.au> To: bde@zeta.org.au, dyson@freefall.cdrom.com Cc: CVS-commiters@freefall.cdrom.com, cvs-sys@freefall.cdrom.com, jkh@time.cdrom.com Subject: Re: cvs commit: src/sys/i386/isa syscons.cy Message-ID: <199508081404.AAA11579@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>Actually, I believe that the drivers should generally try to handle the
>low memory conditions correctly. I don't want to have sporadic program
>failures just because memory is low. I would like to see ENOMEM to mostly
>mean "out of VM". Note that memory can be low fairly often... For
>example my syscons problem in 4MB!!! There would probably be more
>program failures (and then that would reflect on the system quality,
>whether or not the calling program should handle the problem "correctly".)
>Right now, the syscons changes mostly keep the system from crashing, and
>a proper fix should be implemented in the next couple of days.
Also, backing out cleanly may be harder than (correctly) waiting. I used
M_WAITOK in the tty driver and in the slice non-driver because backing
out would be hard. However, at least the slice non-driver should be
_much_ more careful: what happens memory runs out when a swap device is
being opened?
The fixed version of scopen() should look something like this:
#ifdef new
loop:
#endif
if (!(tp->t_state & TS_ISOPEN))
...
if (!console[minor(dev)]) {
#ifndef new
console[minor(dev)] = alloc_scp();
#else
sc_stat *tmp;
tmp = alloc_scp();
if (console[minor(dev)])
free_scp(tmp);
else
console[minor(dev)] = tmp;
/*
* Restart open to check for changed conditions. scopen()
* is simple, but there's still TS_XCLUDE to worry about.
* Note that we have to loop even if TS_ISOPEN is now clear,
* because another process may have opened and closed the
* device and messed up the settings while alloc_scp()
* was asleep.
*/
goto loop;
#endif
}
This can be simplified a bit by allocating all resources before checking
TS_ISOPEN, but that may not be practical in all cases.
Are you going to rewrite 238 cases like this? :-)
Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199508081404.AAA11579>
