hi Phillipe, everyone,

happy 06 !

Out of curiosity, I applied adeos-ipipe-2.6.14-i386-1.1-01.patch on top of 15.

the rejects were small, and simple enough looking, that even
a lazy sod like myself might manually fix them, so I did.

whats more, it built clean and booted !
I havent done anything more demanding than ls, df, etc,
but hey, low hanging fruit tastes just as good / even better ;-)

So heres hoping that you've not started this particular thankless task,
and Ive saved your cycles for something more dependent on your particular talents.

enjoy.
jimc


Attachment: diff.try-15-ipipe-101.20060104.170829.bz2
Description: application/bzip

./arch/i386/kernel/io_apic.c.rej
./include/linux/preempt.h.rej
./init/main.c.rej
./kernel/irq/handle.c.rej
./kernel/Makefile.rej
***************
*** 1313,1322 ****
        /*
         * Add it to the IO-APIC irq-routing table:
         */
-       spin_lock_irqsave(&ioapic_lock, flags);
        io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
        io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
-       spin_unlock_irqrestore(&ioapic_lock, flags);
  
        enable_8259A_irq(0);
  }
--- 1315,1324 ----
        /*
         * Add it to the IO-APIC irq-routing table:
         */
+       spin_lock_irqsave_hw(&ioapic_lock, flags);
        io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
        io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
+       spin_unlock_irqrestore_hw(&ioapic_lock, flags);
  
        enable_8259A_irq(0);
  }
***************
*** 13,53 ****
    extern void fastcall add_preempt_count(int val);
    extern void fastcall sub_preempt_count(int val);
  #else
- # define add_preempt_count(val)       do { preempt_count() += (val); } while 
(0)
- # define sub_preempt_count(val)       do { preempt_count() -= (val); } while 
(0)
  #endif
  
- #define inc_preempt_count() add_preempt_count(1)
- #define dec_preempt_count() sub_preempt_count(1)
  
- #define preempt_count()       (current_thread_info()->preempt_count)
  
  #ifdef CONFIG_PREEMPT
  
  asmlinkage void preempt_schedule(void);
  
- #define preempt_disable() \
- do { \
-       inc_preempt_count(); \
-       barrier(); \
  } while (0)
  
- #define preempt_enable_no_resched() \
- do { \
-       barrier(); \
-       dec_preempt_count(); \
  } while (0)
  
- #define preempt_check_resched() \
- do { \
-       if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
-               preempt_schedule(); \
  } while (0)
  
- #define preempt_enable() \
- do { \
-       preempt_enable_no_resched(); \
-       preempt_check_resched(); \
  } while (0)
  
  #else
--- 13,70 ----
    extern void fastcall add_preempt_count(int val);
    extern void fastcall sub_preempt_count(int val);
  #else
+ #define add_preempt_count(val)        do { preempt_count() += (val); } while 
(0)
+ #define sub_preempt_count(val)        do { preempt_count() -= (val); } while 
(0)
  #endif
  
+ #define inc_preempt_count()   add_preempt_count(1)
+ #define dec_preempt_count()   sub_preempt_count(1)
  
+ #define preempt_count()               (current_thread_info()->preempt_count)
  
  #ifdef CONFIG_PREEMPT
  
  asmlinkage void preempt_schedule(void);
  
+ #ifdef CONFIG_IPIPE
+ 
+ #include <asm/ipipe.h>
+ 
+ extern struct ipipe_domain *ipipe_percpu_domain[], *ipipe_root_domain;
+ 
+ #define ipipe_preempt_guard() (ipipe_percpu_domain[ipipe_processor_id()] == 
ipipe_root_domain)
+ #else
+ #define ipipe_preempt_guard() 1
+ #endif
+ 
+ #define preempt_disable()                                             \
+ do {                                                                  \
+       if (ipipe_preempt_guard()) {                                    \
+               inc_preempt_count();                                    \
+               barrier();                                              \
+       }                                                               \
  } while (0)
  
+ #define preempt_enable_no_resched()                                   \
+ do {                                                                  \
+       if (ipipe_preempt_guard()) {                                    \
+               barrier();                                              \
+               dec_preempt_count();                                    \
+       }                                                               \
  } while (0)
  
+ #define preempt_check_resched()                                               
\
+ do {                                                                  \
+       if (ipipe_preempt_guard()) {                                    \
+               if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))       \
+                       preempt_schedule();                             \
+       }                                                               \
  } while (0)
  
+ #define preempt_enable()                                              \
+ do {                                                                  \
+       preempt_enable_no_resched();                                    \
+       preempt_check_resched();                                        \
  } while (0)
  
  #else
***************
*** 402,407 ****
         */
        schedule();
  
        cpu_idle();
  } 
  
--- 402,408 ----
         */
        schedule();
  
+       ipipe_reset_stats();
        cpu_idle();
  } 
  
***************
*** 117,130 ****
                /*
                 * No locking required for CPU-local interrupts:
                 */
                desc->handler->ack(irq);
                action_ret = handle_IRQ_event(irq, regs, desc->action);
                desc->handler->end(irq);
                return 1;
        }
  
        spin_lock(&desc->lock);
        desc->handler->ack(irq);
        /*
         * REPLAY is when Linux resends an IRQ that was dropped earlier
         * WAITING is used by probe to mark irqs that are being tested
--- 128,145 ----
                /*
                 * No locking required for CPU-local interrupts:
                 */
+ #ifndef CONFIG_IPIPE
                desc->handler->ack(irq);
+ #endif /* CONFIG_IPIPE */
                action_ret = handle_IRQ_event(irq, regs, desc->action);
                desc->handler->end(irq);
                return 1;
        }
  
        spin_lock(&desc->lock);
+ #ifndef CONFIG_IPIPE
        desc->handler->ack(irq);
+ #endif /* CONFIG_IPIPE */
        /*
         * REPLAY is when Linux resends an IRQ that was dropped earlier
         * WAITING is used by probe to mark irqs that are being tested
***************
*** 32,37 ****
  obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
  obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
  obj-$(CONFIG_SECCOMP) += seccomp.o
  
  ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
  # According to Alan Modra <[EMAIL PROTECTED]>, the -fno-omit-frame-pointer is
--- 32,38 ----
  obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
  obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
  obj-$(CONFIG_SECCOMP) += seccomp.o
+ obj-$(CONFIG_IPIPE) += ipipe/
  
  ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
  # According to Alan Modra <[EMAIL PROTECTED]>, the -fno-omit-frame-pointer is
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to