Skip to content

Core Changes Versus UZI180 WRS

EtchedPixels edited this page Nov 17, 2014 · 2 revisions

Changes made (base UZI-WRS) before this became git tracked:

  • Correct order of cr/lf in putchar()/printk etc
  • O_APPEND mode
  • Added saving of O_flags beyond r/w/rw
  • O_CREAT, O_TRUNC, O_EXCL
  • creat now obsolete (frobs and runs open)
  • mknod only allows non root user to create pipes
  • readi/writei are passed file flag and pass it on
  • readi/writei implement non blocking on pipes (minimally)
  • rwsetup retrieves access bits for readi/writei to use
  • flags are propogated to char devices (but not yet to block devices)
  • added uarea.u_root and ref/derefs for it on fork/exit/startup
  • n_open starts from udata.u_root and also checks for /.. through root
  • modified execve() to honour O_CLOEXEC (sort of)
  • support for O_NDELAY on tty_read (open doesn't do blocking for carrier at all yet, and write is complicated)
  • Added fcntl method
  • Added u_cloexec to uarea (16bit mask), and made CLOEXEC handlers use it including fcntl, moved CLOEXEC into open only flags.
  • Added fchown, fchmod, fchdir
  • check if fchown/fchmod are smaller by using shared helpers (yes)
  • use a helper for fchdir/chdir/chroot
  • add a helper for suser that also sets EPERM
  • switch from lib printf to a simple kprintf and kputs etc
  • panic tidied to use kputs (also PANIC is now panic in the text)
  • added mkdir/rmdir
  • forbid unlink of a dir, fix perms checking
  • add uf_alloc_base/uf_alloc split, implement F_DUPFD
  • added an analyser for size reporting and memory hogs
  • return resulting not old position on seek()
  • keep a pointer to the offsets we play with in seek (saves 139 bytes)
  • add CONFIG_ options for idump and monitor trap (saves over 1K by default and fixes a bug)
  • Move long boot up texts into buf 0-2 (cheap trick) (saves 302 bytes)
  • All swap* names are now switch* ready for adding a real swapper
  • Fix bug in new open() that gave unknown error for opening an unknown file
  • Add setpgrp(), and change kill() to honour 0, and -ve for process groups (still need to fix tty ^C to match)
  • Fixed "kill 0" semantics
  • Added O_NOCTTY to devtty.c and switched to pgrps by changing siggrp to do pgrp not tty matching
  • Added a uname that passes 0 seperated strings, return is len so caller can tell if new ones added to ABI
  • Added waitpid, and WNOHANG, no support for stopped etc waits
  • save p->p_pid before marking slot empty
  • dieted sd_init
  • added profil syscall pieces, and configurable. Not yet added int handler bits (needs care on mmu mappings)
  • Set MAXTICKS to 10 (no reason for switching every tick!)
  • implemented the nice syscall
  • minimal implementation of uadmin for shutdown/reboot
  • extend uname to cover sysconf data and "free" type stuff
  • fixed bug introduced in the new tiny kprintf
  • fixed memory size in socz80.s
  • added rename()
  • fix "link" to check only dir permissions and also disallow link to dir
  • uninline long shifts in sd_init which bloat the code horribly
  • split sd_init parition printing code
  • remove fname checks by pushing the "creat /" handlin into ch_link
  • clear u_cloexec on exec
  • proc interface return 0 for EOF not 1 !!
  • remove proc and zero private no-write interfaces and make no_read no_rdwr
  • switch to new ugetsys/uputsys for driver buffer copies
  • fix error returns on no_ioctl, no_rdwr
  • remove progtop uput hacks on minor code
  • Make valaddr() handle wraps correctly
  • Initial split towards platform/ and generic code
  • Fixed optimisation bug introduced in devps
  • Allow uname customisation via makefile
  • Tweak makeversion to set up uname_len, and make it const
  • Fixed bug in devsd SPI init that broke MMC and SDSC cards
  • Fix handling of smaller than 32MB final device
  • Correct broken permission checks in mount (introdced in esuser mods)
  • Correct esuper cases - fixes mkdir with no . and .. and umount bugs
  • Clean up fname checking leftovers
  • Split the platform dir properly with its own Makefile and moved includes
  • Move kprint and friends out of devtty into devio
  • Add a sleep/O_NDELAY/signal helper
  • NMOUNT so mount table can be smaller than number of devices (can't yet set it differently) [put mount ptr in device table ???]
  • fs_tab is device sized pointer table, small mount table of actual filesys objects
  • further clean up of shared v private asm code
  • get to the point a kernel can be built for either socz80 or z80pack (untested on z80pack!)
  • put into git
  • UZIX calls driver poll in idle loop rather than halting, implement this choice
  • Mini UZI for small boxes with no hd, always runs just the "top" process of the stack (ie fork is fork/sleep). Possibly plus tty irq only mode for some other crap boxes if needed (bg tasks only when fg is in tty waits)
  • Clean init died handler
  • Add brk() to expand data space within chmem space only
  • Adjust allocator so program only get the number of banks they need
  • Support better use of memory. New binary type to allow chmem
  • Z80pack port needs the bank copier and user copiers done properly
  • create a "library" of standard mmu types etc
  • split includes further
  • clean up assembler common/private bits
  • Platform specific mapping
  • Introduce 4 bytes of pagemap, pass ptr to pagemap not pagemap data in HL
  • Fixed banks, no change Single user - allocate only that space also
  • single user swap out in strict parental order and swap just the range specifie d.
  • Map small binaries in less pages when non relocatable, map the image at bottom and top repeating. UAREA remains as expected at top, vectors bottom but uses less real pages
  • Single user mode with crap swap, instead of relocatables we can ldir binaries up in memory and stack ram from the PROGTOP
    • means PROGTOP becomes a variable
    • means SWAP mapping is not fixed (good thing to sort anyway)
    • stack into upper ram, swap to disk if option, each new app gets
    • 0x0000->the base of the stacked apps
  • 30 char names
  • Proper major/minor numbers
  • uput and efault API
  • mapping table for swaps (hand a swap out to users with page1 = swapmap page0=0 meaning swapped). Means we can have a swap where we openswap (check for sig), read the size and set up that many maps. Means swap out can fail but that is fine a s we already cover the out of memory paths it causes. Means we need less swaps as w hile we eat 48K or 64K per task we don't waste any - big deal with large proc tab
  • remove doclose hacks on device close occuring each close not final ?
  • Add getpagesize() [can be part of a single getsysinfo call with uname etc]
  • fix off_t/time_t to be proper values in libc API
  • make kernel provide lseek and proper off_t
  • make kernel provide proper time_t
  • 32 byte directory entries (SYS5 style)
  • steal the 'reuse the last buffer exec and file optimisation trick' from OMU