This commit is contained in:
rsc 2007-08-28 04:13:24 +00:00
parent a759b8a450
commit 3341e30f6e
4 changed files with 11 additions and 13 deletions

6
cat.c
View file

@ -5,7 +5,7 @@
char buf[512]; char buf[512];
void void
rfile(int fd) cat(int fd)
{ {
int n; int n;
@ -23,7 +23,7 @@ main(int argc, char *argv[])
int fd, i; int fd, i;
if(argc <= 1) { if(argc <= 1) {
rfile(0); cat(0);
exit(); exit();
} }
@ -32,7 +32,7 @@ main(int argc, char *argv[])
printf(1, "cat: cannot open %s\n", argv[i]); printf(1, "cat: cannot open %s\n", argv[i]);
exit(); exit();
} }
rfile(fd); cat(fd);
close(fd); close(fd);
} }
exit(); exit();

View file

@ -1,4 +1,4 @@
#define O_CREATE 0x200
#define O_RDONLY 0x000 #define O_RDONLY 0x000
#define O_WRONLY 0x001 #define O_WRONLY 0x001
#define O_RDWR 0x002 #define O_RDWR 0x002
#define O_CREATE 0x200

6
fs.c
View file

@ -205,7 +205,7 @@ ilock(struct inode *ip)
if(!(ip->flags & I_VALID)){ if(!(ip->flags & I_VALID)){
bp = bread(ip->dev, IBLOCK(ip->inum)); bp = bread(ip->dev, IBLOCK(ip->inum));
dip = &((struct dinode*)(bp->data))[ip->inum % IPB]; dip = (struct dinode*)bp->data + ip->inum%IPB;
ip->type = dip->type; ip->type = dip->type;
ip->major = dip->major; ip->major = dip->major;
ip->minor = dip->minor; ip->minor = dip->minor;
@ -275,7 +275,7 @@ ialloc(uint dev, short type)
readsb(dev, &sb); readsb(dev, &sb);
for(inum = 1; inum < sb.ninodes; inum++) { // loop over inode blocks for(inum = 1; inum < sb.ninodes; inum++) { // loop over inode blocks
bp = bread(dev, IBLOCK(inum)); bp = bread(dev, IBLOCK(inum));
dip = (struct dinode*)(bp->data) + inum%IPB; dip = (struct dinode*)bp->data + inum%IPB;
if(dip->type == 0) { // a free inode if(dip->type == 0) { // a free inode
memset(dip, 0, sizeof(*dip)); memset(dip, 0, sizeof(*dip));
dip->type = type; dip->type = type;
@ -296,7 +296,7 @@ iupdate(struct inode *ip)
struct dinode *dip; struct dinode *dip;
bp = bread(ip->dev, IBLOCK(ip->inum)); bp = bread(ip->dev, IBLOCK(ip->inum));
dip = (struct dinode*)(bp->data) + ip->inum%IPB; dip = (struct dinode*)bp->data + ip->inum%IPB;
dip->type = ip->type; dip->type = ip->type;
dip->major = ip->major; dip->major = ip->major;
dip->minor = ip->minor; dip->minor = ip->minor;

10
main.c
View file

@ -5,9 +5,7 @@
#include "proc.h" #include "proc.h"
#include "x86.h" #include "x86.h"
extern char edata[], end[]; static void bootothers(void);
void bootothers(void);
// Bootstrap processor starts running C code here. // Bootstrap processor starts running C code here.
int int
@ -15,6 +13,7 @@ main(void)
{ {
int i; int i;
static volatile int bcpu; // cannot be on stack static volatile int bcpu; // cannot be on stack
extern char edata[], end[];
// clear BSS // clear BSS
memset(edata, 0, end - edata); memset(edata, 0, end - edata);
@ -65,7 +64,6 @@ mpmain(void)
idtinit(); idtinit();
lapic_init(cpu()); lapic_init(cpu());
setupsegs(0); setupsegs(0);
cpuid(0, 0, 0, 0, 0); // memory barrier cpuid(0, 0, 0, 0, 0); // memory barrier
cpus[cpu()].booted = 1; cpus[cpu()].booted = 1;
@ -76,7 +74,7 @@ mpmain(void)
scheduler(); scheduler();
} }
void static void
bootothers(void) bootothers(void)
{ {
extern uchar _binary_bootother_start[], _binary_bootother_size[]; extern uchar _binary_bootother_start[], _binary_bootother_size[];
@ -91,7 +89,7 @@ bootothers(void)
if(c == cpus+cpu()) // We've started already. if(c == cpus+cpu()) // We've started already.
continue; continue;
// Set target %esp, %eip // Fill in %esp, %eip and start code on cpu.
*(void**)(code-4) = c->mpstack + MPSTACK; *(void**)(code-4) = c->mpstack + MPSTACK;
*(void**)(code-8) = mpmain; *(void**)(code-8) = mpmain;
lapic_startap(c->apicid, (uint)code); lapic_startap(c->apicid, (uint)code);