On Mon, Dec 14 23:20, Kevin Wolf wrote: > ! kernel: Interrupts an geloeschte Prozessen zu schicken ist keine > besonders gute Idee > > Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx> > --- > src/kernel/include/intr.h | 1 + > src/kernel/src/intr.c | 14 ++++++++++++++ > src/kernel/src/task.c | 3 +++ > 3 files changed, 18 insertions(+), 0 deletions(-) > > diff --git a/src/kernel/include/intr.h b/src/kernel/include/intr.h > index f07bf61..a9e558b 100644 > --- a/src/kernel/include/intr.h > +++ b/src/kernel/include/intr.h > @@ -17,6 +17,7 @@ > void init_idt(void); > void set_intr(int intr, word selector, void* handler, int dpl, int type); > void set_intr_handling_task(byte intr, struct task * task); > +void remove_intr_handling_task(struct task* task); > > typedef void(*pfIrqHandler)(int, dword*); > > diff --git a/src/kernel/src/intr.c b/src/kernel/src/intr.c > index 42f64fb..f7c6854 100644 > --- a/src/kernel/src/intr.c > +++ b/src/kernel/src/intr.c > @@ -434,6 +434,20 @@ void set_intr_handling_task(byte intr, struct task * task) > } > } > > +void remove_intr_handling_task(struct task* task) > +{ > + int i, intr; > + > + for (intr = IRQ_BASE; intr < IRQ_BASE + 0x10; intr++) { Hm also intr_handling_task hat ja 256 Einträge, und set_irq_handling_task scheint da auch keine einschränkung zu machen was man da registrieren darf (nebenbei macht es auch noch einen schönen Buffer overflow, wenn man einen nicht-IRQ registrieren möchte, wenn das mal nichts ist.... ;-)) Vielleicht also besser von 0 bis 256? > + for (i = 0; i < MAX_INTERRUPTS; i++) { > + if (intr_handling_task[intr][i] == task) { > + intr_handling_task[intr][i] = NULL; > + break; > + } > + } > + } > +} > + > void handle_exception(dword* esp) > { > struct int_stack_frame * isf = *((struct int_stack_frame **)esp); > diff --git a/src/kernel/src/task.c b/src/kernel/src/task.c > index 1a5b47a..59c05df 100644 > --- a/src/kernel/src/task.c > +++ b/src/kernel/src/task.c > @@ -285,6 +285,9 @@ void destroy_task(struct task* task_ptr) > next_task->parent_task = get_task(1); > } > } > + > + // Interrupthandler ausschalten > + remove_intr_handling_task(task_ptr); > > > // Melde das Beenden des Tasks per RPC an init -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgp4Vm4x0bdlA.pgp
Description: PGP signature