]> git.neil.brown.name Git - history.git/commitdiff
Linux 2.1.131 2.1.131
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:17:31 +0000 (15:17 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:17:31 +0000 (15:17 -0500)
2.1.131 is out there now - and will be the last kernel release for a
while. I'm going to Finland for a week and a half, and will be back mid
December. During that time I hope people will beat on this. I'll be able
to read email when I'm gone, but as I haven't been back in over a year,
I'm not very likely to.

Alan, I have got any replies (positive or negative) about the VFS fixes in
pre-2.1.131-3 (which are obviously in the real 131 too), so I hope that
means that I successfully fixed all filesystems. The chance of that being
true is remote, but hey, I can hope.  If not, I assume you'll be doing
your ac patches anyway (any bugs wrt rmdir() should be fairly obvious once
seen), and people might as well consider those official..

                Linus

arch/alpha/kernel/time.c
arch/i386/kernel/entry.S
fs/nfs/write.c
include/linux/nfs_fs.h
scripts/mkdep.c

index 78ea3c6aa9d0e7312c8e81387f839cff0bead10a..acbb76896d3dfdc8d7fa9dd8b0e9bef1addb81b5 100644 (file)
@@ -60,6 +60,8 @@ static struct {
        unsigned long scaled_ticks_per_cycle;
        /* last time the CMOS clock got updated */
        time_t last_rtc_update;
+       /* partial unused tick */
+       unsigned long partial_tick;
 } state;
 
 unsigned long est_cycle_freq;
@@ -79,8 +81,6 @@ static inline __u32 rpcc(void)
  */
 void timer_interrupt(int irq, void *dev, struct pt_regs * regs)
 {
-       const unsigned long half = 1UL << (FIX_SHIFT - 1);
-       const unsigned long mask = (1UL << (FIX_SHIFT + 1)) - 1;
        unsigned long delta;
        __u32 now;
        long nticks;
@@ -96,22 +96,21 @@ void timer_interrupt(int irq, void *dev, struct pt_regs * regs)
 #endif
 
        /*
-        * Estimate how many ticks have passed since the last update.
-        * Round the result, .5 to even.  When we loose ticks due to
-        * say using IDE, the clock has been seen to run up to 15% slow
-        * if we truncate.
+        * Calculate how many ticks have passed since the last update,
+        * including any previous partial leftover.  Save any resulting
+        * fraction for the next pass.
         */
        now = rpcc();
        delta = now - state.last_time;
        state.last_time = now;
-       delta = delta * state.scaled_ticks_per_cycle;
-       if ((delta & mask) != half)
-               delta += half;
+       delta = delta * state.scaled_ticks_per_cycle + state.partial_tick;
+       state.partial_tick = delta & ((1UL << FIX_SHIFT) - 1); 
        nticks = delta >> FIX_SHIFT;
 
-       do {
+       while (nticks > 0) {
                do_timer(regs);
-       } while (--nticks > 0);
+               nticks--;
+       }
 
        /*
         * If we have an externally synchronized Linux clock, then update
@@ -325,6 +324,7 @@ time_init(void)
        state.scaled_ticks_per_cycle
                = ((unsigned long) HZ << FIX_SHIFT) / cycle_freq;
        state.last_rtc_update = 0;
+       state.partial_tick = 0L;
 
        /* setup timer */ 
         irq_handler = timer_interrupt;
@@ -366,7 +366,7 @@ do_gettimeofday(struct timeval *tv)
         */
 
        delta_usec = delta_cycles * state.scaled_ticks_per_cycle * 15625;
-       delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6)) * HZ)) + 1) / 2;
+       delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
 
        usec += delta_usec;
        if (usec >= 1000000) {
index 4af2173bb67f26a5a8aa7dec82f0b4d39b69726a..390c10c1f74c98b937d9b86c162ccee31acc2afc 100644 (file)
@@ -237,14 +237,13 @@ ret_from_intr:
 
        ALIGN
 handle_bottom_half:
-       pushl $ret_from_intr
-       jmp SYMBOL_NAME(do_bottom_half)
+       call SYMBOL_NAME(do_bottom_half)
+       jmp ret_from_intr
 
        ALIGN
 reschedule:
-       pushl $ret_from_sys_call
-       jmp SYMBOL_NAME(schedule)    # test
-
+       call SYMBOL_NAME(schedule)    # test
+       jmp ret_from_sys_call
 
 ENTRY(divide_error)
        pushl $0                # no error code
index 6ee83a82577ec3ea94a29bd80bb55342b324f370..33b4dd16a67f4a7d9d84b7a0cf432b76dd803202 100644 (file)
@@ -583,29 +583,6 @@ nfs_wb_pid(struct inode *inode, pid_t pid)
        NFS_WB(inode, req->wb_pid == pid);
 }
 
-/*
- * Write back and invalidate. Sometimes we can't leave the stuff
- * hanging if we can't write it out.
- */
-int
-nfs_wbinval(struct inode *inode)
-{
-       int retval = nfs_wb_all(inode);
-
-       if (retval)
-               nfs_cancel_dirty(inode,0);
-       return retval;
-}
-
-int nfs_wbinval_pid(struct inode *inode, pid_t pid)
-{
-       int retval = nfs_wb_pid(inode, pid);
-       
-       if (retval)
-               nfs_cancel_dirty(inode,pid);
-       return retval;
-}
-
 void
 nfs_inval(struct inode *inode)
 {
index cc66279acce48cb41c03e6373b73f82ce2c7d400..9a9297cac3761d7ee5c131c6ecafd5b3e4519dbb 100644 (file)
@@ -228,9 +228,6 @@ extern int  nfs_wb_pid(struct inode *, pid_t);
  * back first..
  */
 extern void nfs_inval(struct inode *);
-extern int  nfs_wbinval(struct inode *);
-extern int  nfs_wbinval_pid(struct inode *, pid_t);
-
 extern int  nfs_truncate_dirty_pages(struct inode *, unsigned long);
 extern int  nfs_updatepage(struct file *, struct page *, unsigned long, unsigned int, int);
 
index 3742dc12cf13c76a8efdb422c8a3af99d02034d7..daecb7f50768d73f25dae5cfc6f23696c2d4d6f2 100644 (file)
@@ -31,7 +31,7 @@ struct path_struct {
        int len;
        char buffer[256-sizeof(int)];
 } path_array[2] = {
-       { 23, "/usr/src/linux/include/" },
+       {  0, "" },
        {  0, "" }
 };
 
@@ -462,8 +462,11 @@ int main(int argc, char **argv)
        char *hpath;
 
        hpath = getenv("HPATH");
-       if (!hpath)
-               hpath = "/usr/src/linux/include";
+       if (!hpath) {
+               fputs("mkdep: HPATH not set in environment.  "
+                     "Don't bypass the top level Makefile.\n", stderr);
+               return 1;
+       }
        len = strlen(hpath);
        memcpy(path_array[0].buffer, hpath, len);
        if (len && hpath[len-1] != '/')