From ccd02a6028c6feef8a1b4ad2246f3ff4be0771ba Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Tue, 1 May 2007 13:29:50 +0000 Subject: [PATCH] Backports and a fix for the 3.1.3 branch. . backports of various fixes already on the trunk . pass label of driver as argv[0], allowing the pci driver to free pci resources for it (solved differently on the trunk code), allowing pci drivers to be restarted --- commands/ibm/autopart.c | 15 +-------------- commands/scripts/setup.sh | 1 - commands/simple/mkfs.c | 3 +-- commands/simple/readall.c | 4 ++-- drivers/dp8390/rtl8029.c | 13 ++++++++++--- drivers/memory/memory.c | 3 ++- drivers/pci/main.c | 2 -- drivers/pci/pci.c | 2 -- etc/binary_sizes | 4 ++-- servers/is/dmp_pm.c | 2 +- servers/rs/manager.c | 9 +++++---- servers/rs/manager.h | 1 + servers/vfs/device.c | 27 ++++++++++++++------------- tools/release.sh | 25 +++++++++++++++++-------- 14 files changed, 56 insertions(+), 55 deletions(-) diff --git a/commands/ibm/autopart.c b/commands/ibm/autopart.c index 70c384d56..dca991a5d 100755 --- a/commands/ibm/autopart.c +++ b/commands/ibm/autopart.c @@ -63,9 +63,6 @@ int min_region_mb = 500; #define MIN_REGION_SECTORS (1024*1024*min_region_mb/SECTOR_SIZE) -#define MAX_REGION_MB 4095 -#define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB) - #define arraysize(a) (sizeof(a) / sizeof((a)[0])) #define arraylimit(a) ((a) + arraysize(a)) @@ -339,7 +336,7 @@ void newdevice(char *name, int scanning, int disk_only) if (curdev->rdev != DEV_C0D0) curdev= firstdev; } -void getdevices() +void getdevices(void) /* Get all block devices from /dev that look interesting. */ { DIR *d; @@ -2154,18 +2151,8 @@ scribble_region(region_t *reg, struct part_entry **pe, int *made_new) { int ex, changed = 0, i; struct part_entry *newpart; - if(reg->is_used_part && reg->used_part.size > MAX_REGION_SECTORS) { - reg->used_part.size = MAX_REGION_SECTORS; - changed = 1; - cylinderalign(reg); - } if(!reg->is_used_part) { ex = reg->free_sec_last - reg->free_sec_start + 1; - if(ex > MAX_REGION_SECTORS) { - reg->free_sec_last -= ex - MAX_REGION_SECTORS; - changed = 1; - cylinderalign(reg); - } if(made_new) *made_new = 1; } else if(made_new) *made_new = 0; if(!reg->is_used_part) { diff --git a/commands/scripts/setup.sh b/commands/scripts/setup.sh index 0696ba9fe..62dc9d818 100755 --- a/commands/scripts/setup.sh +++ b/commands/scripts/setup.sh @@ -246,7 +246,6 @@ do echo -n " MINIX needs one primary partition of $TOTALMB MB for a full install, plus what you want for /home. -The maximum file system currently supported is 4 GB. If there is no free space on your disk then you have to choose an option: (1) Delete one or more partitions diff --git a/commands/simple/mkfs.c b/commands/simple/mkfs.c index 315212b85..faddeb51d 100755 --- a/commands/simple/mkfs.c +++ b/commands/simple/mkfs.c @@ -233,8 +233,7 @@ char *argv[]; * reporting a 0-sized device (displays usage). */ if(blocks < 1) { - fprintf(stderr, "%s: this device can't hold a filesystem.\n", - progname); + fprintf(stderr, "%s: zero size device.\n", progname); return 1; } } diff --git a/commands/simple/readall.c b/commands/simple/readall.c index 5b8fd65a0..1b935884c 100755 --- a/commands/simple/readall.c +++ b/commands/simple/readall.c @@ -124,8 +124,8 @@ char *argv[]; /* Read the entire file. Try it in large chunks, but if an error * occurs, go to single reads for a while. */ while (1) { - if(lseek(fd, BLOCK_SIZE * b, SEEK_SET) < 0) { - perror("lseek"); + if(lseek64(fd, mul64u(BLOCK_SIZE, b), SEEK_SET, NULL) < 0) { + perror("lseek64"); return 1; } s = read(fd, a, BLOCK_SIZE * chunk); diff --git a/drivers/dp8390/rtl8029.c b/drivers/dp8390/rtl8029.c index 2d31d6291..189e2e30c 100644 --- a/drivers/dp8390/rtl8029.c +++ b/drivers/dp8390/rtl8029.c @@ -37,10 +37,12 @@ PRIVATE struct pcitab }; _PROTOTYPE( static void rtl_init, (struct dpeth *dep) ); +#if 0 _PROTOTYPE( static u16_t get_ee_word, (dpeth_t *dep, int a) ); _PROTOTYPE( static void ee_wen, (dpeth_t *dep) ); _PROTOTYPE( static void set_ee_word, (dpeth_t *dep, int a, U16_t w) ); _PROTOTYPE( static void ee_wds, (dpeth_t *dep) ); +#endif _PROTOTYPE( static void micro_delay, (unsigned long usecs) ); PUBLIC int rtl_probe(dep) @@ -79,7 +81,7 @@ struct dpeth *dep; for(;;) { - for (i= 0; pcitab[i].vid != 0; i++) + for (i= 0; pcitab[i].vid != 0 || pcitab[i].did != 0; i++) { if (pcitab[i].vid != vid) continue; @@ -93,7 +95,7 @@ struct dpeth *dep; } break; } - if (pcitab[i].vid != 0) + if (pcitab[i].vid != 0 || pcitab[i].did != 0) break; if (just_one) @@ -116,7 +118,8 @@ struct dpeth *dep; dname= "unknown device"; printf("%s: %s (%04X/%04X) at %s\n", dep->de_name, dname, vid, did, pci_slot_name(devind)); - pci_reserve(devind); + if(pci_reserve_ok(devind) != OK) + return 0; /* printf("cr = 0x%x\n", pci_attr_r16(devind, PCI_CR)); */ bar= pci_attr_r32(devind, PCI_BAR) & 0xffffffe0; @@ -199,6 +202,7 @@ dpeth_t *dep; printf("\n"); #endif +#if 0 if (getenv("RTL8029MN")) { ee_wen(dep); @@ -226,8 +230,10 @@ dpeth_t *dep; assert(get_ee_word(dep, 0x76/2) == 0x8029); } +#endif } +#if 0 static u16_t get_ee_word(dep, a) dpeth_t *dep; int a; @@ -365,6 +371,7 @@ dpeth_t *dep; outb_reg3(dep, 1, 0x00); /* back to normal */ outb_reg0(dep, DP_CR, CR_PS_P0); /* back to bank 0 */ } +#endif static void micro_delay(unsigned long usecs) { diff --git a/drivers/memory/memory.c b/drivers/memory/memory.c index f6564d697..d5b9af796 100644 --- a/drivers/memory/memory.c +++ b/drivers/memory/memory.c @@ -148,7 +148,8 @@ int safe; /* safe copies */ return EPERM; } - if (ex64hi(pos64) != 0) + /* ZERO_DEV and NULL_DEV are infinite in size. */ + if (m_device != ZERO_DEV && m_device != NULL_DEV && ex64hi(pos64) != 0) return OK; /* Beyond EOF */ position= cv64ul(pos64); diff --git a/drivers/pci/main.c b/drivers/pci/main.c index 9283e4617..6fa300d56 100644 --- a/drivers/pci/main.c +++ b/drivers/pci/main.c @@ -140,10 +140,8 @@ message *mp; { /* Ignore all init calls for a process after the first one */ } -#if 0 else pci_release(names[i].name); -#endif names[i].tasknr= mp->m_source; mp->m_type= 0; diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 1e70d89c5..6bd94de20 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -387,7 +387,6 @@ char *name; return OK; } -#if 0 /*===========================================================================* * pci_release * *===========================================================================*/ @@ -405,7 +404,6 @@ char *name; pcidev[i].pd_inuse= 0; } } -#endif /*===========================================================================* * pci_ids * diff --git a/etc/binary_sizes b/etc/binary_sizes index e3d3e46f4..814134926 100644 --- a/etc/binary_sizes +++ b/etc/binary_sizes @@ -5,5 +5,5 @@ /usr/lib/em_opt 208000 /usr/lib/i386/as 55000 /usr/lib/i386/cg 50655 -/bin/sh 102400 -/usr/bin/make 337920 +/bin/sh 142400 +/usr/bin/make 380000 diff --git a/servers/is/dmp_pm.c b/servers/is/dmp_pm.c index c6441c788..2853aec2c 100644 --- a/servers/is/dmp_pm.c +++ b/servers/is/dmp_pm.c @@ -20,7 +20,7 @@ PUBLIC struct mproc mproc[NR_PROCS]; *===========================================================================*/ PRIVATE char *flags_str(int flags) { - static char str[10]; + static char str[13]; str[0] = (flags & WAITING) ? 'W' : '-'; str[1] = (flags & ZOMBIE) ? 'Z' : '-'; str[2] = (flags & PAUSED) ? 'P' : '-'; diff --git a/servers/rs/manager.c b/servers/rs/manager.c index 42449205b..183a0f9ad 100644 --- a/servers/rs/manager.c +++ b/servers/rs/manager.c @@ -82,7 +82,7 @@ int flags; /* extra flags, if any */ * arguments vector is: path, arguments, NULL. */ arg_count = 0; /* initialize arg count */ - rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */ + rp->r_file = rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */ cmd_ptr = rp->r_cmd; /* do some parsing */ while(*cmd_ptr != '\0') { /* stop at end of string */ if (*cmd_ptr == ' ') { /* next argument */ @@ -184,7 +184,7 @@ message *m_ptr; /* request message pointer */ * arguments vector is: path, arguments, NULL. */ arg_count = 0; /* initialize arg count */ - rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */ + rp->r_file = rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */ cmd_ptr = rp->r_cmd; /* do some parsing */ while(*cmd_ptr != '\0') { /* stop at end of string */ if (*cmd_ptr == ' ') { /* next argument */ @@ -720,8 +720,9 @@ endpoint_t *endpoint; setuid(rp->r_uid); if (!use_copy) { - execve(rp->r_argv[0], rp->r_argv, NULL); /* POSIX execute */ - file_only = strrchr(rp->r_argv[0], '/') + 1; + rp->r_argv[0] = rp->r_label; + execve(rp->r_file, rp->r_argv, NULL); /* POSIX execute */ + file_only = strrchr(rp->r_file, '/') + 1; execve(file_only, rp->r_argv, NULL); /* POSIX execute */ } printf("RS: exec failed for %s: %d\n", rp->r_argv[0], errno); diff --git a/servers/rs/manager.h b/servers/rs/manager.h index e1862754d..73b723735 100644 --- a/servers/rs/manager.h +++ b/servers/rs/manager.h @@ -42,6 +42,7 @@ extern struct rproc { char r_cmd[MAX_COMMAND_LEN]; /* raw command plus arguments */ char r_script[MAX_SCRIPT_LEN]; /* name of the restart script executable */ char *r_argv[MAX_NR_ARGS+2]; /* parsed arguments vector */ + char *r_file; /* path to binary to exec */ int r_argc; /* number of arguments */ /* Resources */ diff --git a/servers/vfs/device.c b/servers/vfs/device.c index 1f0f94836..37f68c91b 100644 --- a/servers/vfs/device.c +++ b/servers/vfs/device.c @@ -37,7 +37,7 @@ FORWARD _PROTOTYPE( int safe_io_conversion, (endpoint_t, cp_grant_id_t *, int *, cp_grant_id_t *, int, endpoint_t *, - void **, int *, vir_bytes, off_t *)); + void **, int *, vir_bytes, u32_t *)); FORWARD _PROTOTYPE( void safe_io_cleanup, (cp_grant_id_t, cp_grant_id_t *, int)); @@ -170,7 +170,7 @@ PUBLIC void dev_status(message *m) * safe_io_conversion * *===========================================================================*/ PRIVATE int safe_io_conversion(driver, gid, op, gids, gids_size, - io_ept, buf, vec_grants, bytes, pos) + io_ept, buf, vec_grants, bytes, pos_lo) endpoint_t driver; cp_grant_id_t *gid; int *op; @@ -180,7 +180,7 @@ endpoint_t *io_ept; void **buf; int *vec_grants; vir_bytes bytes; -off_t *pos; +u32_t *pos_lo; { int access = 0, size; int j; @@ -242,7 +242,7 @@ off_t *pos; *buf = new_iovec; break; case VFS_DEV_IOCTL: - *pos = *io_ept; /* Old endpoint in POSITION field. */ + *pos_lo = *io_ept; /* Old endpoint in POSITION field. */ *op = DEV_IOCTL_S; if(_MINIX_IOCTL_IOR(m_in.REQUEST)) access |= CPF_WRITE; if(_MINIX_IOCTL_IOW(m_in.REQUEST)) access |= CPF_READ; @@ -303,6 +303,7 @@ int gids_size; return; } +#if 0 /*===========================================================================* * dev_bio * *===========================================================================*/ @@ -420,22 +421,23 @@ int bytes; /* how many bytes to transfer */ return(m.REP_STATUS); } } +#endif /*===========================================================================* * dev_io * *===========================================================================*/ -PUBLIC int dev_io(op, dev, proc_e, buf, posX, bytes, flags) +PUBLIC int dev_io(op, dev, proc_e, buf, pos, bytes, flags) int op; /* DEV_READ, DEV_WRITE, DEV_IOCTL, etc. */ dev_t dev; /* major-minor device number */ int proc_e; /* in whose address space is buf? */ void *buf; /* virtual address of the buffer */ -u64_t posX; /* byte position */ +u64_t pos; /* byte position */ int bytes; /* how many bytes to transfer */ int flags; /* special flags, like O_NONBLOCK */ { /* Read or write from a device. The parameter 'dev' tells which one. */ struct dmap *dp; - off_t pos; + u32_t pos_lo, pos_high; message dev_mess; cp_grant_id_t gid = GRANT_INVALID; static cp_grant_id_t gids[NR_IOREQS]; @@ -443,9 +445,8 @@ int flags; /* special flags, like O_NONBLOCK */ void *buf_used; endpoint_t ioproc; - if (ex64hi(posX) != 0) - panic(__FILE__, "dev_io: postition too high", NO_NUM); - pos= ex64lo(posX); + pos_lo= ex64lo(pos); + pos_high= ex64hi(pos); /* Determine task dmap. */ dp = &dmap[(dev >> MAJOR) & BYTE]; @@ -471,7 +472,7 @@ int flags; /* special flags, like O_NONBLOCK */ buf_used = buf; safe = safe_io_conversion(dp->dmap_driver, &gid, &op, gids, NR_IOREQS, &dev_mess.IO_ENDPT, &buf_used, - &vec_grants, bytes, &pos); + &vec_grants, bytes, &pos_lo); if(buf != buf_used) panic(__FILE__,"dev_io: safe_io_conversion changed buffer", NO_NUM); @@ -484,9 +485,9 @@ int flags; /* special flags, like O_NONBLOCK */ /* Set up the rest of the message passed to task. */ dev_mess.m_type = op; dev_mess.DEVICE = (dev >> MINOR) & BYTE; - dev_mess.POSITION = pos; + dev_mess.POSITION = pos_lo; dev_mess.COUNT = bytes; - dev_mess.HIGHPOS = 0; + dev_mess.HIGHPOS = pos_high; /* This will be used if the i/o is suspended. */ ioproc = dev_mess.IO_ENDPT; diff --git a/tools/release.sh b/tools/release.sh index 3d156b4be..ee6822534 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -95,11 +95,13 @@ SVNREV="" REVTAG="" PACKAGES=1 -while getopts "pchu?r:" c +FILENAMEOUT="" + +while getopts "s:pchu?r:f:" c do case "$c" in \?) - echo "Usage: $0 [-p] [-c] [-h] [-r ] [-u]" >&2 + echo "Usage: $0 [-p] [-c] [-h] [-r ] [-u] [-f ] [-s ]" >&2 exit 1 ;; h) @@ -123,6 +125,11 @@ do HDEMU=1 USB=1 ;; + f) + FILENAMEOUT="$OPTARG" + ;; + s) USERNAME="--username=$OPTARG" + ;; esac done @@ -214,7 +221,7 @@ then fi echo " * Cleanup old files" -rm -rf $RELEASEDIR $IMG $IMAGE $ROOTIMAGE $IMGBZ $CDFILES image* +rm -rf $RELEASEDIR $IMG $IMAGE $ROOTIMAGE $CDFILES image* mkdir -p $CDFILES || exit mkdir -p $RELEASEDIR mkfs -B $BS -b $ROOTBLOCKS $TMPDISK3 || exit @@ -280,9 +287,9 @@ if [ "$COPY" -ne 1 ] then echo " * Doing new svn export" REPO=https://gforge.cs.vu.nl/svn/minix/trunk/$SRC - REVISION="`svn info $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`" + REVISION="`svn info $USERNAME $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`" echo "Doing export of revision $REVISION from $REPO." - ( cd $RELEASEDIR/usr && svn export -r$REVISION $REPO ) + ( cd $RELEASEDIR/usr && svn $USERNAME export -r$REVISION $REPO ) REVTAG=r$REVISION echo " @@ -303,8 +310,6 @@ if [ "$USB" -ne 0 ]; then else IMG=${IMG_BASE}_${REVTAG}.iso fi -IMGBZ=${IMG}.bz2 -echo "Making $IMGBZ" echo " * Fixups for owners and modes of dirs and files" chown -R bin $RELEASEDIR/usr/$SRC @@ -337,7 +342,7 @@ then hdemu_root_changes fi -echo $version_pretty >$RELEASEDIR/etc/version +echo $version_pretty, SVN revision $SVNREV, generated `date` >$RELEASEDIR/etc/version echo " * Counting files" extrakb=`du -s $RELEASEDIR/usr/install | awk '{ print $1 }'` expr `df $TMPDISK | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb @@ -403,3 +408,7 @@ else partition -m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS fi fi + +if [ "$FILENAMEOUT" ] +then echo "$IMG" >$FILENAMEOUT +fi -- 2.44.0