- 28 Aug, 2002 27 commits
-
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
Andrew Morton authored
- Kill duplicate debug check - Add a test for pages which have a pte_chain coming off the buddy lists.
-
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.
-
Pete Zaitcev authored
This came up in 2.5.30, apparently someone was fooled by names which do not quite match actual functions.
-
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.
-
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.
-
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.
-
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).
-
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).
-
Alexander Viro authored
loops in ide_cdrom_init()/ide_cdrom_exit(), etc. are pulled into ide_register_module()/ide_unregister_module() resp.
-
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).
-
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).
-
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.
-
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())
-
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]
-
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.
-
Anton Blanchard authored
-
Matthew Wilcox authored
Just pushes the BKL down a little, no big deal.
-
Matthew Wilcox authored
This optimisation is really noticeable as it avoids having to take the BKL on every close().
-
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.
-
Linus Torvalds authored
-
- 27 Aug, 2002 13 commits
-
-
http://gkernel.bkbits.net/net-drivers-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Christoph Hellwig authored
and one USB net driver: 3c574_cs, ibmtr_cs, pcnet_cs, ray_cs, xirc2ps_cs, xircom_cb, and usb/net/kaweth
-
Jeff Garzik authored
return EOPNOTSUPP if no eeprom present, in ETHTOOL_SEEPROM ioctl
-
Jeff Garzik authored
(thanks for DaveM for advice and help)
-
Jeff Garzik authored
-
Jeff Garzik authored
-
Jeff Garzik authored
* fix tx checksumming (it's still ifdef'd out by default) * bump version to 0.2.0 * ifdef out dev->change_mtu support, it is reported broken.
-
Jeff Garzik authored
-
Jeff Garzik authored
-
Jeff Garzik authored
-
Jeff Garzik authored
-
Scott Feldman authored
o Feature: Merged NAPI support from Robert Olsson
-
Scott Feldman authored
o Bug fix: moved tx_timeout processing from interrupt context to process context so h/w controller reset can busy-wait.
-