1. 31 1月, 2008 23 次提交
    • J
      firewire: replace subtraction with bitwise and · 8f9f963e
      Jarod Wilson 提交于
      Replace an unnecessary subtraction with a bitwise AND when determining the
      value of ext_tcode in fw_fill_transaction() to save a cpu cycle or two in a
      somewhat critical path.
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      8f9f963e
    • S
      firewire: fw-core: react on bus resets while the config ROM is being fetched · f8d2dc39
      Stefan Richter 提交于
      read_rom() obtained a fresh new fw_device.generation for each read
      transaction.  Hence it was able to continue reading in the middle of the
      ROM even if a bus reset happened.  However the device may have modified
      the ROM during the reset.  We would end up with a corrupt fetched ROM
      image then.
      
      Although all of this is quite unlikely, it is not impossible.
      Therefore we now restart reading the ROM if the bus generation changed.
      
      Note, the memory barrier in read_rom() is still necessary according to
      tests by Jarod Wilson, despite of the ->generation access being moved up
      in the call chain.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      
      This is essentially what I've been beating on locally, and I've yet to hit
      another config rom read failure with it.
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      f8d2dc39
    • S
      firewire: enforce access order between generation and node ID, fix "giving up on config rom" · b5d2a5e0
      Stefan Richter 提交于
      fw_device.node_id and fw_device.generation are accessed without mutexes.
      We have to ensure that all readers will get to see node_id updates
      before generation updates.
      
      Fixes an inability to recognize devices after "giving up on config rom",
      https://bugzilla.redhat.com/show_bug.cgi?id=429950Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      
      Reviewed by Nick Piggin <nickpiggin@yahoo.com.au>.
      
      Verified to fix 'giving up on config rom' issues on multiple system and
      drive combinations that were previously affected.
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      Signed-off-by: NKristian Høgsberg <krh@redhat.com>
      b5d2a5e0
    • S
      firewire: fw-cdev: use device generation, not card generation · cf5a56ac
      Stefan Richter 提交于
      We have to use the fw_device.generation here, not the fw_card.generation,
      because the generation must never be newer than the node ID when we emit
      a transaction.  This cannot be guaranteed with fw_card.generation.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      
      Verified in concert with subsequent memory barriers patch to fix 'giving
      up on config rom' issues on multiple system and drive combinations that
      were previously affected.
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      cf5a56ac
    • S
      firewire: fw-sbp2: use device generation, not card generation · 5a8a1bcd
      Stefan Richter 提交于
      There was a small window where a login or reconnect job could use an
      already updated card generation with an outdated node ID.  We have to
      use the fw_device.generation here, not the fw_card.generation, because
      the generation must never be newer than the node ID when we emit a
      transaction.  This cannot be guaranteed with fw_card.generation.
      
      Furthermore, the target's and initiator's node IDs can be obtained from
      fw_device and fw_card.  Dereferencing their underlying topology objects
      is not necessary.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      
      Verified in concert with subsequent memory barriers patch to fix 'giving
      up on config rom' issues on multiple system and drive combinations that
      were previously affected.
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      5a8a1bcd
    • S
      firewire: fw-sbp2: try to increase reconnect_hold (speed up reconnection) · 14dc992a
      Stefan Richter 提交于
      Ask the target to grant 4 seconds instead of the standard and minimum of
      1 second window after bus reset for reconnection.  This accelerates
      reconnection if there are more than one targets on the bus:  If a login
      and inquiry to one target blocks the fw-sbp2 workqueue for more than 1s
      after bus reset, we now still can reconnect to the other target.
      
      Before that, fw-sbp2's reconnect attempts would be rejected with "error
      status: 0:9" (function rejected), and fw-sbp2 would finally re-login.
      All those futile reconnect attemps cost extra time until the target
      which needs re-login is ready for I/O again.
      
      The reconnect timeout field in the login ORB doesn't have to be honored
      by the target though.  I found that we could get up to
        - allegedly 32768s from an old OXFW911 firmware
        - 256s from LSI bridges
        - 4s from OXUF922 and OXFW912 bridges,
        - 2s from TI bridges,
        - only the standard 1s from Initio and Prolific bridges and from
          Apple OpenFirmware in target mode.
      
      We just try to get 4 seconds which already covers the case of a few
      HDDs on the same bus quite nicely.
      
      A minor drawback occurs in the following (rare and impractical) border
      case:
        - two initiators are there, initiator 1 holds an exclusive login to
          a target,
        - initiator 1 goes off the bus,
        - target refuses login attempts from initiator 2 until reconnect_hold
          seconds after bus reset.
      
      An alternative approach to the issue at hand would be to parallelize
      fw-sbp2's reconnect and login work.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      Acked-by: NJarod Wilson <jwilson@redhat.com>
      14dc992a
    • S
      firewire: fw-sbp2: skip unnecessary logout · 4dccd020
      Stefan Richter 提交于
      Don't attempt to send a logout ORB if the target was already unplugged
      or had its link switched off.  If two targets are attached, this
      enhances the chance to quickly reconnect to the remaining target when
      one target is plugged out.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      Acked-by: NJarod Wilson <jwilson@redhat.com>
      4dccd020
    • D
      firewire: fw-ohci: Dynamically allocate buffers for DMA descriptors · fe5ca634
      David Moore 提交于
      Previously, the fw-ohci driver used fixed-length buffers for storing
      descriptors for isochronous receive DMA programs.  If an application
      (such as libdc1394) generated a DMA program that was too large, fw-ohci
      would reach the limit of its fixed-sized buffer and return an error to
      userspace.
      
      This patch replaces the fixed-length ring-buffer with a linked-list of
      page-sized buffers.  Additional buffers can be dynamically allocated and
      appended to the list when necessary.  For a particular context, buffers
      are kept around after use and reused as necessary, so there is no
      allocation taking place after the DMA program is generated for the first
      time.
      
      In addition, the buffers it uses are coherent for DMA so there is no
      syncing required before and after writes.  This syncing wasn't properly
      done in the previous version of the code.
      
      -
      
      This is the fourth version of my patch that replaces a fixed-length
      buffer for DMA descriptors with a dynamically allocated linked-list of
      buffers.
      
      As we discovered with the last attempt, new context programs are
      sometimes queued from interrupt context, making it unacceptable to call
      tasklet_disable() from context_get_descriptors().
      
      This version of the patch uses ohci->lock for all locking needs instead
      of tasklet_disable/enable.  There is a new requirement that
      context_get_descriptors() be called while holding ohci->lock.  It was
      already held for the AT context, so adding the requirement for the iso
      context did not seem particularly onerous.  In addition, this has the
      side benefit of allowing iso queue to be safely called from concurrent
      user-space threads, which previously was not safe.
      Signed-off-by: NDavid Moore <dcm@acm.org>
      Signed-off-by: NKristian Høgsberg <krh@redhat.com>
      Signed-off-by: NJarod Wilson <jwilson@redhat.com>
      
      -
      
      Fixes the following issues:
        - Isochronous reception stopped prematurely if an application used a
          larger buffer.  (Reproduced with coriander.)
        - Isochronous reception stopped after one or a few frames on VT630x
          in OHCI 1.0 mode.  (Fixes reception in coriander, but dvgrab still
          doesn't work with these chips.)
      
      Patch update: struct member alignment, whitespace nits
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      fe5ca634
    • S
      firewire: fw-ohci: CycleTooLong interrupt management · bb9f2206
      Stefan Richter 提交于
      The firewire-ohci driver so far lacked the ability to resume cycle
      master duty after that condition happened, as added to ohci1394 in Linux
      2.6.18 by commit 57fdb58f.  This ports
      this patch to fw-ohci.
      
      The "cycle too long" condition has been seen in practice
        - with IIDC cameras if a mode with packets too large for a speed is
          chosen,
        - sporadically when capturing DV on a VIA VT6306 card with ohci1394/
          ieee1394/ raw1394/ dvgrab 2.
          https://bugzilla.redhat.com/show_bug.cgi?id=415841#c7
      (This does not fix Fedora bug 415841.)
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      bb9f2206
    • R
      firewire: Fix extraction of source node id · 478b233e
      Rabin Vincent 提交于
      Fix extraction of the source node id from the packet header.
      Signed-off-by: NRabin Vincent <rabin@rab.in>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      478b233e
    • D
      firewire: fw-ohci: Bug fixes for packet-per-buffer support · bcee893c
      David Moore 提交于
      This patch corrects a number of bugs in the current OHCI 1.0
      packet-per-buffer support:
      
      1. Correctly deal with payloads that cross a page boundary.  The
      previous version would not split the descriptor at such a boundary,
      potentially corrupting unrelated memory.
      
      2. Allow user-space to specify multiple packets per struct
      fw_cdev_iso_packet in the same way that dual-buffer allows.  This is
      signaled by header_length being a multiple of header_size.  This
      multiple determines the number of packets.  The payload size allocated
      per packet is determined by dividing the total payload size by the
      number of packets.
      
      3. Make sync support work properly for packet-per-buffer.
      
      I have tested this patch with libdc1394 by forcing my OHCI 1.1
      controller to use the packet-per-buffer support instead of dual-buffer.
      
      I would greatly appreciate testing by those who have a DV devices and
      other types of iso streamers to make sure I didn't cause any
      regressions.
      
      Stefan, with this patch, I'm hoping that libdc1394 will work with all
      your OHCI 1.0 controllers now.
      
      The one bit of future work that remains for packet-per-buffer support is
      the automatic compaction of short payloads that I discussed with
      Kristian.
      Signed-off-by: NDavid Moore <dcm@acm.org>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      bcee893c
    • D
      firewire: fw-ohci: Fix for dualbuffer three-or-more buffers · 0642b657
      David Moore 提交于
      This patch fixes the problem where different OHCI 1.1 controllers behave
      differently when a received iso packet straddles three or more buffers
      when using the dual-buffer receive mode.  Two changes are made in order
      to handle this situation:
      
      1. The packet sync DMA descriptor is given a non-zero header length and
      non-zero payload length.  This is because zero-payload descriptors are
      not discussed in the OHCI 1.1 specs and their behavior is thus
      undefined.  Instead we use a header size just large enough for a single
      header and a payload length of 4 bytes for this first descriptor.
      
      2. As we process received packets in the context's tasklet, read the
      packet length out of the headers.  Keep track of the running total of
      the packet length as "excess_bytes", so we can ignore any descriptors
      where no packet starts or ends.  These descriptors may not have had
      their first_res_count or second_res_count fields updated by the
      controller so we cannot rely on those values.
      
      The main drawback of this patch is that the excess_bytes value might get
      "out of sync" with the packet descriptors if something strange happens
      to the DMA program.  I'm not if such a thing could ever happen, but I
      appreciate any suggestions in making it more robust.
      
      Also, the packet-per-buffer support may need a similar fix to deal with
      issue 1, but I haven't done any work on that yet.
      
      Stefan, I'm hoping that with this patch, all your OHCI 1.1 controllers
      will work properly with an unmodified version of libdc1394.
      Signed-off-by: NDavid Moore <dcm@acm.org>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      0642b657
    • S
      firewire: fw-sbp2: remove unused misleading macro · 4b11ea96
      Stefan Richter 提交于
      SBP2_MAX_SECTORS is nowhere used in fw-sbp2.
      It merely got copied over from sbp2 where it played a role in the past.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      4b11ea96
    • S
      b7811da2
    • S
      firewire: fw-sbp2: refactor workq and kref handling · 285838eb
      Stefan Richter 提交于
      This somewhat reduces the size of firewire-sbp2.ko.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      285838eb
    • S
      ieee1394: ohci1394: don't schedule IT tasklets on IR events · 85c5798b
      Stefan Richter 提交于
      Bug noted by Pieter Palmers:  Isochronous transmit tasklets were
      scheduled on isochronous receive events, in addition to the proper
      isochronous receive tasklets.
      
      http://marc.info/?l=linux1394-devel&m=119783196222802Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      85c5798b
    • S
      ieee1394: sbp2: raise default transfer size limit · 4e6343a1
      Stefan Richter 提交于
      This patch speeds up sbp2 a little bit --- but more importantly, it
      brings the behavior of sbp2 and fw-sbp2 closer to each other.  Like
      fw-sbp2, sbp2 now does not limit the size of single transfers to 255
      sectors anymore, unless told so by a blacklist flag or by module load
      parameters.
      
      Only very old bridge chips have been known to need the 255 sectors
      limit, and we have got one such chip in our hardwired blacklist.  There
      certainly is a danger that more bridges need that limit; but I prefer to
      have this issue present in both fw-sbp2 and sbp2 rather than just one of
      them.
      
      An OXUF922 with 400GB 7200RPM disk on an S400 controller is sped up by
      this patch from 22.9 to 23.5 MB/s according to hdparm.  The same effect
      could be achieved before by setting a higher max_sectors module
      parameter.  On buses which use 1394b beta mode, sbp2 and fw-sbp2 will
      now achieve virtually the same bandwidth.  Fw-sbp2 only remains faster
      on 1394a buses due to fw-core's gap count optimization.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      4e6343a1
    • S
      ieee1394: remove unused code · 3e75b493
      Stefan Richter 提交于
      The code has been in "#if 0 - #endif" since Linux 2.6.12.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      3e75b493
    • S
      ieee1394: small cleanup after "nopage" · c7ea990f
      Stefan Richter 提交于
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      c7ea990f
    • N
      ieee1394: nopage · 61db8121
      Nick Piggin 提交于
      Convert ieee1394 from nopage to fault.
      Remove redundant vma range checks (correct resource range check is retained).
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      61db8121
    • J
      ieee1394: Add missing "space" · a5c52df8
      Joe Perches 提交于
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      a5c52df8
    • S
      ieee1394: sbp2: s/g list access cosmetics · 825f1df5
      Stefan Richter 提交于
      Replace sg->length by sg_dma_len(sg).  Rename a variable for shorter
      line lengths and eliminate some superfluous local variables.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      825f1df5
    • S
      8c4ac094
  2. 30 1月, 2008 17 次提交
    • L
      [net] Gracefully handle shared e1000/1000e driver PCI ID's · 60e23317
      Linus Torvalds 提交于
      Both the old e1000 driver and the new e1000e driver can drive some
      PCI-Express e1000 cards, and we should avoid ambiguity about which
      driver will pick up the support for those cards when both drivers are
      enabled.
      
      This solves the problem by having the old driver support those cards if
      the new driver isn't configured, but otherwise ceding support for PCI
      Express versions of the e1000 chipset to the newer driver.  Thus
      allowing both legacy configurations where only the old driver is active
      (and handles all chips it knows about) and the new configuration with
      the new driver handling the more modern PCIE variants.
      Acked-by: NJeff Garzik <jeff@garzik.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      60e23317
    • B
      x86: early boot debugging via FireWire (ohci1394_dma=early) · f212ec4b
      Bernhard Kaindl 提交于
      This patch adds a new configuration option, which adds support for a new
      early_param which gets checked in arch/x86/kernel/setup_{32,64}.c:setup_arch()
      to decide wether OHCI-1394 FireWire controllers should be initialized and
      enabled for physical DMA access to allow remote debugging of early problems
      like issues ACPI or other subsystems which are executed very early.
      
      If the config option is not enabled, no code is changed, and if the boot
      paramenter is not given, no new code is executed, and independent of that,
      all new code is freed after boot, so the config option can be even enabled
      in standard, non-debug kernels.
      
      With specialized tools, it is then possible to get debugging information
      from machines which have no serial ports (notebooks) such as the printk
      buffer contents, or any data which can be referenced from global pointers,
      if it is stored below the 4GB limit and even memory dumps of of the physical
      RAM region below the 4GB limit can be taken without any cooperation from the
      CPU of the host, so the machine can be crashed early, it does not matter.
      
      In the extreme, even kernel debuggers can be accessed in this way. I wrote
      a small kgdb module and an accompanying gdb stub for FireWire which allows
      to gdb to talk to kgdb using remote remory reads and writes over FireWire.
      
      An version of the gdb stub fore FireWire is able to read all global data
      from a system which is running a a normal kernel without any kernel debugger,
      without any interruption or support of the system's CPU. That way, e.g. the
      task struct and so on can be read and even manipulated when the physical DMA
      access is granted.
      
      A HOWTO is included in this patch, in Documentation/debugging-via-ohci1394.txt
      and I've put a copy online at
      ftp://ftp.suse.de/private/bk/firewire/docs/debugging-via-ohci1394.txt
      
      It also has links to all the tools which are available to make use of it
      another copy of it is online at:
      ftp://ftp.suse.de/private/bk/firewire/kernel/ohci1394_dma_early-v2.diffSigned-Off-By: NBernhard Kaindl <bk@suse.de>
      Tested-By: NThomas Renninger <trenn@suse.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      f212ec4b
    • I
      x86: remove flush_agp_mappings() · 5398f985
      Ingo Molnar 提交于
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      5398f985
    • T
      x86: cpa: move flush to cpa · d7c8f21a
      Thomas Gleixner 提交于
      The set_memory_* and set_pages_* family of API's currently requires the
      callers to do a global tlb flush after the function call; forgetting this is
      a very nasty deathtrap. This patch moves the global tlb flush into
      each of the callers
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      d7c8f21a
    • A
      x86: convert CPA users to the new set_page_ API · 6d238cc4
      Arjan van de Ven 提交于
      This patch converts various users of change_page_attr() to the new,
      more intent driven set_page_*/set_memory_* API set.
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      6d238cc4
    • Y
      cpufreq: fix obvious condition statement error · 53391fa2
      Yi Yang 提交于
      The function __cpufreq_set_policy in file drivers/cpufreq/cpufreq.c
      has a very obvious error:
      
              if (policy->min > data->min && policy->min > policy->max) {
                      ret = -EINVAL;
                      goto error_out;
              }
      
      This condtion statement is wrong because it returns -EINVAL only if
      policy->min is greater than policy->max (in this case,
      "policy->min > data->min" is true for ever.). In fact, it should
      return -EINVAL as well if policy->max is less than data->min.
      
      The correct condition should be:
      
      	if (policy->min > data->max || policy->max < data->min) {
      
      The following test result testifies the above conclusion:
      
      Before applying this patch:
      
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
      2394000 1596000
      [root@yangyi-dev /]# echo 1596000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      1596000
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      1596000
      [root@yangyi-dev /]# echo "2000000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      -bash: echo: write error: Invalid argument
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      1596000
      [root@yangyi-dev /]# echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      1596000
      [root@yangyi-dev /]# echo "1595000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      1596000
      [root@yangyi-dev /]#
      
      After applying this patch:
      
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
      2394000 1596000
      [root@yangyi-dev /]# echo 1596000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      1596000
      [root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      1596000
      [root@localhost /]# echo "2000000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      -bash: echo: write error: Invalid argument
      [root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      1596000
      [root@localhost /]# echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      -bash: echo: write error: Invalid argument
      [root@localhost /]# echo "1595000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      -bash: echo: write error: Invalid argument
      [root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      1596000
      [root@localhost /]# echo "1596000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@localhost /]# echo "2394000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      [root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      2394000
      [root@localhost /]
      Signed-off-by: NYi Yang <yi.y.yang@intel.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      53391fa2
    • Y
      x86: left over fix for leak of early_ioremp in dmi_scan · 3212bff3
      Yinghai Lu 提交于
      Signed-off-by: NYinghai Lu <yinghai@sun.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      3212bff3
    • B
      rtc: use the IRQ callback interface in (old) RTC driver · f8f76481
      Bernhard Walle 提交于
      the previous patch in the old RTC driver.  It also removes the direct
      rtc_interrupt() call from arch/x86/kernel/hpetc.c so that there's finally no
      (code) dependency to CONFIG_RTC in arch/x86/kernel/hpet.c.
      
      Because of this, it's possible to compile the drivers/char/rtc.ko driver as
      module and still use the HPET emulation functionality.  This is also expressed
      in Kconfig.
      Signed-off-by: NBernhard Walle <bwalle@suse.de>
      Cc: Alessandro Zummo <a.zummo@towertech.it>
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Andi Kleen <ak@suse.de>
      Cc: john stultz <johnstul@us.ibm.com>
      Cc: Robert Picco <Robert.Picco@hp.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      f8f76481
    • I
      x86: fix DMI ioremap leak · 0d64484f
      Ingo Molnar 提交于
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      0d64484f
    • A
      x86: don't disable TSC in any C states on AMD Fam10h · ddb25f9a
      Andi Kleen 提交于
      The ACPI code currently disables TSC use in any C2 and C3
      states. But the AMD Fam10h BKDG documents that the TSC
      will never stop in any C states when the CONSTANT_TSC bit is
      set. Make this disabling conditional on CONSTANT_TSC
      not set on AMD.
      
      I actually think this is true on Intel too for C2 states
      on CPUs with p-state invariant TSC, but this needs
      further discussions with Len to really confirm :-)
      
      So far it is only enabled on AMD.
      
      Cc: lenb@kernel.org
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      ddb25f9a
    • A
      git-x86: drivers/pnp/pnpbios/bioscalls.c build fix · 39657b65
      Andrew Morton 提交于
      drivers/pnp/pnpbios/bioscalls.c:64: warning: (near initialization for 'bad_bios_desc.<anonymous>')
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      39657b65
    • V
      x86: voluntary leave_mm before entering ACPI C3 · bde6f5f5
      Venki Pallipadi 提交于
      Aviod TLB flush IPIs during C3 states by voluntary leave_mm()
      before entering C3.
      
      The performance impact of TLB flush on C3 should not be significant with
      respect to C3 wakeup latency. Also, CPUs tend to flush TLB in hardware while in
      C3 anyways.
      
      On a 8 logical CPU system, running make -j2, the number of tlbflush IPIs goes
      down from 40 per second to ~ 0. Total number of interrupts during the run
      of this workload was ~1200 per second, which makes it ~3% savings in wakeups.
      
      There was no measurable performance or power impact however.
      
      [ akpm@linux-foundation.org: symbol export fixes. ]
      Signed-off-by: NVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      bde6f5f5
    • P
      x86: fix DMI out of memory problems · 79da4721
      Parag Warudkar 提交于
      People with HP Desktops (including me) encounter couple of DMI errors
      during boot - dmi_save_oem_strings_devices: out of memory and
      dmi_string: out of memory.
      
      On some HP desktops the DMI data include OEM strings (type 11) out of
      which only few are meaningful and most other are empty. DMI code
      religiously creates copies of these 27 strings (65 bytes each in my
      case) and goes OOM in dmi_string().
      
      If DMI_MAX_DATA is bumped up a little then it goes and fails in
      dmi_save_oem_strings while allocating dmi_devices of sizeof(struct
      dmi_device) corresponding to these strings.
      
      On x86_64 since we cannot use alloc_bootmem this early, the code uses a
      static array of 2048 bytes (DMI_MAX_DATA) for allocating the memory DMI
      needs. It does not survive the creation of empty strings and devices.
      
      Fix this by detecting and not newly allocating empty strings and instead
      using a one statically defined dmi_empty_string.
      
      Also do not create a new struct dmi_device for each empty string - use
      one statically define dmi_device with .name=dmi_empty_string and add
      that to the dmi_devices list.
      
      On x64 this should stop the OOM with same current size of DMI_MAX_DATA
      and on x86 this should save a good amount of (27*65 bytes +
      27*sizeof(struct dmi_device) bootmem.
      
      Compile and boot tested on both 32-bit and 64-bit x86.
      Signed-off-by: NParag Warudkar <parag.warudkar@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      79da4721
    • G
      x86: get rid of _MASK flags · 053de044
      Glauber de Oliveira Costa 提交于
      There's no need for the *_MASK flags (TF_MASK, IF_MASK, etc), found in
      processor.h (both _32 and _64). They have a one-to-one mapping with the
      EFLAGS value. This patch removes the definitions, and use the already
      existent X86_EFLAGS_ version when applicable.
      
      [ roland@redhat.com: KVM build fixes. ]
      Signed-off-by: NGlauber de Oliveira Costa <gcosta@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      053de044
    • I
      x86: replace outb_p() with udelay(2) in drivers/input/mouse/pc110pad.c · 41e191e8
      Ingo Molnar 提交于
      replace outb_p() with udelay(2). This is a real ISA device so it likely
      needs this particular delay.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      41e191e8
    • G
      x86: unify struct desc_ptr · 6b68f01b
      Glauber de Oliveira Costa 提交于
      This patch unifies struct desc_ptr between i386 and x86_64.
      They can be expressed in the exact same way in C code, only
      having to change the name of one of them. As Xgt_desc_struct
      is ugly and big, this is the one that goes away.
      
      There's also a padding field in i386, but it is not really
      needed in the C structure definition.
      Signed-off-by: NGlauber de Oliveira Costa <gcosta@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      6b68f01b
    • I
      x86: clean up drivers/char/rtc.c · 5fd1fe9c
      Ingo Molnar 提交于
      tons of style cleanup in drivers/char/rtc.c - no code changed:
      
         text    data     bss     dec     hex filename
         6400     384      32    6816    1aa0 rtc.o.before
         6400     384      32    6816    1aa0 rtc.o.after
      
      since we seem to have a number of open breakages in this code we might
      as well start with making the code more readable and maintainable.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      5fd1fe9c