Log device only suspendable now
This commit is contained in:
parent
ed6459b304
commit
28958cca35
|
@ -12,7 +12,7 @@
|
||||||
#include "../../kernel/const.h"
|
#include "../../kernel/const.h"
|
||||||
#include "../../kernel/type.h"
|
#include "../../kernel/type.h"
|
||||||
|
|
||||||
#define LOG_DEBUG 1 /* enable/ disable debugging */
|
#define LOG_DEBUG 0 /* enable/ disable debugging */
|
||||||
|
|
||||||
#define NR_DEVS 1 /* number of minor devices */
|
#define NR_DEVS 1 /* number of minor devices */
|
||||||
#define MINOR_KLOG 0 /* /dev/klog */
|
#define MINOR_KLOG 0 /* /dev/klog */
|
||||||
|
@ -33,7 +33,6 @@ FORWARD _PROTOTYPE( int log_select, (struct driver *dp, message *m_ptr) );
|
||||||
FORWARD _PROTOTYPE( int log_other, (struct driver *dp, message *m_ptr) );
|
FORWARD _PROTOTYPE( int log_other, (struct driver *dp, message *m_ptr) );
|
||||||
FORWARD _PROTOTYPE( void log_geometry, (struct partition *entry) );
|
FORWARD _PROTOTYPE( void log_geometry, (struct partition *entry) );
|
||||||
FORWARD _PROTOTYPE( void log_reply, (int code, int replyee, int proc, int status) );
|
FORWARD _PROTOTYPE( void log_reply, (int code, int replyee, int proc, int status) );
|
||||||
FORWARD _PROTOTYPE( void log_notify, (int code, int replyee, int line, int ops) );
|
|
||||||
FORWARD _PROTOTYPE( int subread, (struct logdevice *log, int count, int proc_nr, vir_bytes user_vir) );
|
FORWARD _PROTOTYPE( int subread, (struct logdevice *log, int count, int proc_nr, vir_bytes user_vir) );
|
||||||
|
|
||||||
/* Entry points to this driver. */
|
/* Entry points to this driver. */
|
||||||
|
@ -69,10 +68,8 @@ PUBLIC void main(void)
|
||||||
logdevices[i].log_select_alerted =
|
logdevices[i].log_select_alerted =
|
||||||
logdevices[i].log_selected =
|
logdevices[i].log_selected =
|
||||||
logdevices[i].log_select_ready_ops = 0;
|
logdevices[i].log_select_ready_ops = 0;
|
||||||
#if SUSPENDABLE
|
|
||||||
logdevices[i].log_proc_nr = 0;
|
logdevices[i].log_proc_nr = 0;
|
||||||
logdevices[i].log_revive_alerted = 0;
|
logdevices[i].log_revive_alerted = 0;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
driver_task(&log_dtab);
|
driver_task(&log_dtab);
|
||||||
}
|
}
|
||||||
|
@ -133,7 +130,6 @@ subwrite(struct logdevice *log, int count, int proc_nr, vir_bytes user_vir)
|
||||||
LOGINC(log->log_read, overflow);
|
LOGINC(log->log_read, overflow);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SUSPENDABLE
|
|
||||||
if(log->log_size > 0 && log->log_proc_nr && !log->log_revive_alerted) {
|
if(log->log_size > 0 && log->log_proc_nr && !log->log_revive_alerted) {
|
||||||
/* Someone who was suspended on read can now
|
/* Someone who was suspended on read can now
|
||||||
* be revived.
|
* be revived.
|
||||||
|
@ -144,7 +140,6 @@ subwrite(struct logdevice *log, int count, int proc_nr, vir_bytes user_vir)
|
||||||
alert(log->log_source);
|
alert(log->log_source);
|
||||||
printf("alert for revive done..\n");
|
printf("alert for revive done..\n");
|
||||||
log->log_revive_alerted = 1;
|
log->log_revive_alerted = 1;
|
||||||
/* log_reply(REVIVE, log->log_source, log->log_proc_nr, r); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(log->log_size > 0)
|
if(log->log_size > 0)
|
||||||
|
@ -158,20 +153,13 @@ subwrite(struct logdevice *log, int count, int proc_nr, vir_bytes user_vir)
|
||||||
* swallow all the data (log_size > 0).
|
* swallow all the data (log_size > 0).
|
||||||
*/
|
*/
|
||||||
if(log->log_selected & SEL_RD) {
|
if(log->log_selected & SEL_RD) {
|
||||||
/*
|
|
||||||
log_notify(DEV_SELECTED,
|
|
||||||
log->log_select_proc, log_device, SEL_RD);
|
|
||||||
*/
|
|
||||||
printf("alert select\n");
|
|
||||||
alert(log->log_select_proc);
|
alert(log->log_select_proc);
|
||||||
printf("alert select done\n");
|
|
||||||
log->log_select_alerted = 1;
|
log->log_select_alerted = 1;
|
||||||
#if LOG_DEBUG
|
#if LOG_DEBUG
|
||||||
printf("log notified %d\n", log->log_select_proc);
|
printf("log notified %d\n", log->log_select_proc);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -254,7 +242,6 @@ unsigned nr_req; /* length of request vector */
|
||||||
|
|
||||||
case MINOR_KLOG:
|
case MINOR_KLOG:
|
||||||
if (opcode == DEV_GATHER) {
|
if (opcode == DEV_GATHER) {
|
||||||
#if SUSPENDABLE
|
|
||||||
if (log->log_proc_nr || count < 1) {
|
if (log->log_proc_nr || count < 1) {
|
||||||
/* There's already someone hanging to read, or
|
/* There's already someone hanging to read, or
|
||||||
* no real I/O requested.
|
* no real I/O requested.
|
||||||
|
@ -279,11 +266,6 @@ unsigned nr_req; /* length of request vector */
|
||||||
#endif
|
#endif
|
||||||
return(SUSPEND);
|
return(SUSPEND);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (!log->log_size) {
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
count = subread(log, count, proc_nr, user_vir);
|
count = subread(log, count, proc_nr, user_vir);
|
||||||
if(count < 0) {
|
if(count < 0) {
|
||||||
return count;
|
return count;
|
||||||
|
@ -307,18 +289,6 @@ unsigned nr_req; /* length of request vector */
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*===========================================================================*
|
|
||||||
* log_notify *
|
|
||||||
*===========================================================================*/
|
|
||||||
PRIVATE void log_notify(int code, int replyee, int line, int ops)
|
|
||||||
{
|
|
||||||
message lm;
|
|
||||||
lm.NOTIFY_TYPE = code;
|
|
||||||
lm.NOTIFY_ARG = line;
|
|
||||||
lm.NOTIFY_FLAGS = ops;
|
|
||||||
notify(replyee, &lm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* log_reply *
|
* log_reply *
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
|
@ -367,14 +337,12 @@ PRIVATE int log_cancel(dp, m_ptr)
|
||||||
struct driver *dp;
|
struct driver *dp;
|
||||||
message *m_ptr;
|
message *m_ptr;
|
||||||
{
|
{
|
||||||
#if SUSPENDABLE
|
|
||||||
int d;
|
int d;
|
||||||
d = m_ptr->TTY_LINE;
|
d = m_ptr->TTY_LINE;
|
||||||
if(d < 0 || d >= NR_DEVS)
|
if(d < 0 || d >= NR_DEVS)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
logdevices[d].log_proc_nr = 0;
|
logdevices[d].log_proc_nr = 0;
|
||||||
logdevices[d].log_revive_alerted = 0;
|
logdevices[d].log_revive_alerted = 0;
|
||||||
#endif
|
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,7 +461,6 @@ message *m_ptr;
|
||||||
|
|
||||||
ops = m_ptr->PROC_NR & (SEL_RD|SEL_WR|SEL_ERR);
|
ops = m_ptr->PROC_NR & (SEL_RD|SEL_WR|SEL_ERR);
|
||||||
|
|
||||||
#if SUSPENDABLE
|
|
||||||
/* Read blocks when there is no log. */
|
/* Read blocks when there is no log. */
|
||||||
if((m_ptr->PROC_NR & SEL_RD) && logdevices[d].log_size > 0) {
|
if((m_ptr->PROC_NR & SEL_RD) && logdevices[d].log_size > 0) {
|
||||||
#if LOG_DEBUG
|
#if LOG_DEBUG
|
||||||
|
@ -501,10 +468,6 @@ message *m_ptr;
|
||||||
#endif
|
#endif
|
||||||
ready_ops |= SEL_RD; /* writes never block */
|
ready_ops |= SEL_RD; /* writes never block */
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/* Read never blocks. */
|
|
||||||
if(m_ptr->PROC_NR & SEL_RD) ready_ops |= SEL_RD;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Write never blocks. */
|
/* Write never blocks. */
|
||||||
if(m_ptr->PROC_NR & SEL_WR) ready_ops |= SEL_WR;
|
if(m_ptr->PROC_NR & SEL_WR) ready_ops |= SEL_WR;
|
||||||
|
|
Loading…
Reference in a new issue