1. 28 Aug, 2002 27 commits
    • Andrew Morton's avatar
      [PATCH] ensure that the per-zone locks fall in separate cachelines · 1cfb7a16
      Andrew Morton authored
      Use the new max cache alignment to optimise the layout of struct zone.
      
      struct zone goes from ~270 bytes (UP) to 768 bytes (SMP, x86).  This is
      not a trick which should be generally used.
      1cfb7a16
    • Andrew Morton's avatar
      [PATCH] add L1_CACHE_SHIFT_MAX · f9da78fb
      Andrew Morton authored
      zone->lock and zone->lru_lock are two of the hottest locks in the
      kernel.  Their usage patterns are quite independent.  And they have
      just been put into the same structure.  It is essential that they not
      fall into the same cacheline.
      
      That could be fixed by padding with L1_CACHE_BYTES.  But the problem
      with this is that a kernel which was configured for (say) a PIII will
      perform poorly on SMP PIV.  This will cause problems for kernel
      vendors.  For example, RH currently ship PII and Athlon binaries.  To
      get best SMP performance they will end up needing to ship a lot of
      differently configured kernels.
      
      To solve this we need to know, at compile time, the maximum L1 size
      which this kernel will ever run on.
      
      This patch adds L1_CACHE_SHIFT_MAX to every architecture's cache.h.
      
      Of course it'll break when newer chips come out with increased
      cacheline sizes.   Better suggestions are welcome.
      f9da78fb
    • Andrew Morton's avatar
      [PATCH] per-zone LRU locking · a8382cf1
      Andrew Morton authored
      Now the LRUs are per-zone, make their lock per-zone as well.
      
      In this patch the per-zone lock shares a cacheline with the zone's
      buddy list lock, which is very bad.  Some groundwork is needed to fix
      this well.
      
      This change is expected to be a significant win on NUMA, where most
      page allocation comes from the local node's zones.
      
      For NUMA the `struct zone' itself should really be placed in that
      node's memory, which is something the platform owners should look at.
      However the internode cache will help here.
      
      Per-node kswapd would make heaps of sense too.
      a8382cf1
    • Andrew Morton's avatar
      [PATCH] per-zone-LRU · e6f0e61d
      Andrew Morton authored
      Replace the global page LRUs with per-zone LRUs.
      
      This fixes the failure described at
      http://mail.nl.linux.org/linux-mm/2002-08/msg00049.html
      
      It will also fixes the problem wherein a search for a reclaimable
      ZONE_NORMAL page will undesirably move aged ZONE_HIGHMEM pages to the
      head of the inactive list.  (I haven't tried to measure any benefit
      from this aspect).
      
      It will also reduces the amount of CPU spent scanning pages in page
      reclaim. I haven't instrumented this either.
      
      This is a minimal conversion - the aging and reclaim logic is left
      unchanged, as far as is possible.
      
      I was bitten by the "incremental min" logic in __alloc_pages again.
      There's a state in which the sum-of-mins exceeds zone->pages_high.  So
      we call into try_to_free_pages(), which does nothing at all (all zones
      have free_pages > pages_high).  The incremental min is unchanged and
      the VM locks up.
      
      This was fixed in __alloc_pages: if zone->free_pages is greater than
      zone->pages_high then just go and grab a page.
      e6f0e61d
    • Andrew Morton's avatar
      [PATCH] rename zone_struct and zonelist_struct, kill zone_t and · 4fce9c6f
      Andrew Morton authored
      - Remove the zonelist_t typedef.  Rename struct zonelist_struct to
      struct zonelist and use that everywhere.
      
      - Remove the zone_t typedef.  Rename struct zone_struct to struct
      zone and use that everywhere.
      4fce9c6f
    • Andrew Morton's avatar
      [PATCH] better buffer_head slab packing · 9e3030bf
      Andrew Morton authored
      Don't align the buffer_head slab on hardware cacheline boundaries.
      It's on the wrong side of the speed/space tradeoff, especially for
      P4's.
      9e3030bf
    • Andrew Morton's avatar
      [PATCH] reduced TLB invalidation rate · 37717bca
      Andrew Morton authored
      It has been noticed that across a kernel build many calls to
      tlb_flush_mmu() do not have anything to flush, apparently because glibc
      is mmapping a file over a previously-mapped region which has no
      faulted-in ptes.
      
      This patch detects this case and optimises away a little over one third
      of the tlb invalidations.
      
      The functions which potentially cause an invalidate are
      tlb_remove_tlb_entry(), pte_free_tlb() and pmd_free_tlb().  These have
      been front-ended in asm-generic/tlb.h and the per-arch versions now
      have leading double-underscores.  The generic versions tag the
      mmu_gather_t as needing a flush and then call the arch-specific
      version.
      
      tlb_flush_mmu() looks at tlb->need_flush and if it sees that no real
      activity has happened, the invalidation is avoided.
      
      The success rate is displayed in /proc/meminfo for the while.  This
      should be removed later.
      37717bca
    • Andrew Morton's avatar
      [PATCH] minor page_alloc.c things · ec4affa6
      Andrew Morton authored
      - Kill duplicate debug check
      
      - Add a test for pages which have a pte_chain coming off the buddy lists.
      ec4affa6
    • Linus Torvalds's avatar
      Don't use __func__ - not all versions of gcc support it. · 97f068ec
      Linus Torvalds authored
      Some day gcc may drop support for __FUNCTION__ entirely, we'll
      just add a #define __FUNCTION__ __func__ at that point. In the
      meantime, gcc-3.x warns about pasting __FUNCTION__, so don't do it.
      97f068ec
    • Pete Zaitcev's avatar
      [PATCH] Patch to irq compat stuff in 2.5.32 · 9d5dd622
      Pete Zaitcev authored
      This came up in 2.5.30, apparently someone was fooled by names
      which do not quite match actual functions.
      9d5dd622
    • Alexander Viro's avatar
      [PATCH] move add_gendisk()/del_gendisk() into ->reinit() and ->cleanup() · b6b7580f
      Alexander Viro authored
      add_gendisk()/del_gendisk() moved into ->reinit() and ->cleanup() of
      ide-{disk,cd,floppy} - i.e.  moments when high-levle driver claims/gives
      up a drive.
      
      register_disk() also shifted into ->reinit().
      
      consequently, revalidate_drives() is gone (it did messy postponed
      rereading of partition tables; not needed anymore).  Ditto for
      ide_geninit().
      
      regular 2.5 changes in ->revalidate() and BLKRRPART handling - same as
      all other block devices.
      b6b7580f
    • Alexander Viro's avatar
      [PATCH] put ide_driver_t on lists · 9e8a6e88
      Alexander Viro authored
      instead of messing with ide_module_t, we put ide_driver_t themselves on
      a (cyclic) list - said list being the only use of ide_module_t for
      high-level drivers.  ide_register_module()/ide_unregister_module() takes
      ide_driver_t now (renamed to ide_register_driver()).  /proc/ide/drivers
      switched to use of that cyclic list and uses seq_file instead of old
      home-grown code.
      9e8a6e88
    • Alexander Viro's avatar
      [PATCH] Remove unused high-level IDE ->init method · 0d567824
      Alexander Viro authored
      ->init() for high-level drivers is never called (other than as
      module_init() when they are initialized).  Method removed, instances
      cleaned up.
      0d567824
    • Alexander Viro's avatar
      [PATCH] turn ide_reinit_drive() into ata_attach() · b20830fb
      Alexander Viro authored
      ide_reinit_drive() turned into ata_attach().  Said beast takes a drive,
      tries to feed it to high-level drivers and drops it on the ata_unused if
      nobody claims the sucker.  IOW, that's what ide_register_module() used
      to do, but for a single drive.
      
      ideprobe_init() calls ata_attach() instead of putting on ata_unused.
      
      ide_register_module() eliminated.  Some of the callers do not need it
      anymore, some (ide_replace_subdriver()) actually want ata_attach(drive).
      
      ide_scan_devices() is gone.  There were two remaining callers - in
      ide_register_module() and ide_unregister_module().  The former had been
      turned into "put driver on the list, empty ata_unused into temporary
      list and call ata_attach() on all drives there".  The latter is "remove
      driver from the list, call ->cleanup() and ata_attach() for all drives"
      (->cleanup() gives the drive up, ata_attach() gives the remaining
      drivers a shot for that drive; if nobody claims it - it's put on
      ata_unused).
      b20830fb
    • Alexander Viro's avatar
      [PATCH] Add ->owner to ide_driver_t · ce3058ec
      Alexander Viro authored
      ->owner added to ide_driver_t.  MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT
      taken out of ->reinit().  ide_reinit_drive() turned into "call
      ->reinit() for all high-level drivers that are registered until somebody
      claims the drive" (instead of open-coded variant in 2.5.32; cleaner and
      works correctly for modular drivers).
      ce3058ec
    • Alexander Viro's avatar
      [PATCH] per-drive IDE deregistration · 20d346ec
      Alexander Viro authored
      loops in ide_cdrom_init()/ide_cdrom_exit(), etc. are pulled into
      ide_register_module()/ide_unregister_module() resp.
      20d346ec
    • Alexander Viro's avatar
      [PATCH] Remove duplicate calls to ide_cdrom_init(), idedisk_init(), etc · 47a1397b
      Alexander Viro authored
      Duplicate calls of ide_cdrom_init(), idedisk_init(), etc. are removed
      from ide_init_builtin_drivers() (they were called both from there (i.e.
      from ide_init()) and later as module_init() for high-level drivers).
      47a1397b
    • Alexander Viro's avatar
      [PATCH] move media_type checks from ide_scan_devices() to ->reinit · 2923c262
      Alexander Viro authored
      Checks for media type, ->driver_req, etc.  are moved from the
      ide_scan_devices() to ->reinit().  ide_scan_devices() had lost first two
      arguments (it will completely disappear later).
      2923c262
    • Alexander Viro's avatar
      [PATCH] put IDE drives on lists · 06330ca4
      Alexander Viro authored
      This puts drives on cyclic lists - per-driver ones for drives that had
      been claimed by high-level drivers and ata_unused for unclaimed drives.
      We put drives on ata_unused in the very end of ideprobe_init() and then
      move them to drivers' lists as they are claimed.
      06330ca4
    • Alexander Viro's avatar
      [PATCH] finish introduction of ->reinit() · 86a995ac
      Alexander Viro authored
      Finish introduction of ->reinit() - Jens had missed MOD_DEC_USE_COUNT on
      several exits from ide-cd one and forgot to remove the loop from
      ide-floppy ide-tape and ide-scsi ones ;-) (->reinit() is the body of
      loop in ->init() - stuff that should be done one drive; in 2.5.32
      ide-disk one is OK, ide-cd is OK modulo minor bugs and in the rest it's
      a copy of ->init())
      86a995ac
    • Alexander Viro's avatar
      [PATCH] move stuff from ide_register_subdriver() to ide-probe.c · 65862d88
      Alexander Viro authored
      Move stuff from ide_register_subdriver() (associating drive with
      high-level driver) to ide-probe.c, so that remaining stuff can be safely
      called in parallel with IO on other drives [Andre]
      65862d88
    • Rusty Russell's avatar
      [PATCH] list_for_each_entry · 00a8a8c1
      Rusty Russell authored
      This adds list_for_each_entry, which is the equivalent of list_for_each
      and list_entry, except only one variable is needed.
      00a8a8c1
    • Anton Blanchard's avatar
      [PATCH] compile fix for st.c · 23f7ec50
      Anton Blanchard authored
      23f7ec50
    • Matthew Wilcox's avatar
      [PATCH] push the BKL down in setfl · 529787ea
      Matthew Wilcox authored
      Just pushes the BKL down a little, no big deal.
      529787ea
    • Matthew Wilcox's avatar
      [PATCH] reintroduce close() optimisation · 25aef71f
      Matthew Wilcox authored
      This optimisation is really noticeable as it avoids having to take the
      BKL on every close().
      25aef71f
    • Matthew Wilcox's avatar
      [PATCH] More support for upward growing stacks · ea3bc13f
      Matthew Wilcox authored
       - remove elf_caddr_t. It's positively dangerous to #define this since
         elf_caddr_t foo, bar; creates variables of different types (foo is
         char *, bar is char).
       - rewrite large chunks of create_elf_tables(), it needed cleaning anyway.
       - add upwards-growing stack support to create_elf_tables.
       - redefine the ARCH_DLINFO stuff on powerpc -- it's tested, works.
       - add upwards-growing-stack support to exec.c too.
      ea3bc13f
    • Linus Torvalds's avatar
  2. 27 Aug, 2002 13 commits