lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080515170256.GE14846@ghostprotocols.net>
Date:	Thu, 15 May 2008 14:02:56 -0300
From:	Arnaldo Carvalho de Melo <acme@...hat.com>
To:	Jesse Barnes <jbarnes@...tuousgeek.org>,
	linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org,
	linux-rt-users@...r.kernel.org
Subject: Re: [PATCH][PCI]: Introduce pci_find_capability_cached and make
	MSI use it

Em Thu, May 15, 2008 at 01:04:26PM -0300, Arnaldo Carvalho de Melo escreveu:
> Hi,
> 
> 	While using the preemptirqsoff ftrace tracer I noticed that
> everytime handle_edge_irq is called it needs to mask and unmask MSI, and
> that leads to a series of very expensive calls to pci_find_capability,
> as can be seen here, with preemption disabled:
> 
>           <idle>-0     [03]   422.558652: unmask_msi_irq <-handle_edge_irq
>           <idle>-0     [03]   422.558653: msi_set_mask_bits <-unmask_msi_irq
>           <idle>-0     [03]   422.558653: msi_set_enable <-msi_set_mask_bits
>           <idle>-0     [03]   422.558654: pci_find_capability <-msi_set_enable
>           <idle>-0     [03]   422.558655: __pci_bus_find_cap_start <-pci_find_capability
>           <idle>-0     [03]   422.558655: pci_bus_read_config_word <-__pci_bus_find_cap_start
>           <idle>-0     [03]   422.558656: _spin_lock_irqsave <-pci_bus_read_config_word
>           <idle>-0     [03]   422.558656: add_preempt_count <-_spin_lock_irqsave
>           <idle>-0     [03]   422.558657: pci_read <-pci_bus_read_config_word
>           <idle>-0     [03]   422.558657: raw_pci_read <-pci_read
>           <idle>-0     [03]   422.558658: pci_conf1_read <-raw_pci_read
>           <idle>-0     [03]   422.558658: _spin_lock_irqsave <-pci_conf1_read
>           <idle>-0     [03]   422.558659: add_preempt_count <-_spin_lock_irqsave
> 
> 	  BZZT! 37us
> 
>           <idle>-0     [03]   422.558696: _spin_unlock_irqrestore <-pci_conf1_read
>           <idle>-0     [03]   422.558697: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558697: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558698: _spin_unlock_irqrestore <-pci_bus_read_config_word
>           <idle>-0     [03]   422.558698: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558699: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558699: __pci_find_next_cap <-pci_find_capability
>           <idle>-0     [03]   422.558700: __pci_find_next_cap_ttl <-__pci_find_next_cap
>           <idle>-0     [03]   422.558700: pci_bus_read_config_byte <-__pci_find_next_cap_ttl
>           <idle>-0     [03]   422.558701: _spin_lock_irqsave <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558701: add_preempt_count <-_spin_lock_irqsave
>           <idle>-0     [03]   422.558702: pci_read <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558702: raw_pci_read <-pci_read
>           <idle>-0     [03]   422.558703: pci_conf1_read <-raw_pci_read
>           <idle>-0     [03]   422.558703: _spin_lock_irqsave <-pci_conf1_read
>           <idle>-0     [03]   422.558704: add_preempt_count <-_spin_lock_irqsave
> 
> 	  BZZT! 38us
> 
>           <idle>-0     [03]   422.558742: _spin_unlock_irqrestore <-pci_conf1_read
>           <idle>-0     [03]   422.558743: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558743: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558744: _spin_unlock_irqrestore <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558744: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558745: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558745: pci_bus_read_config_byte <-__pci_find_next_cap_ttl
>           <idle>-0     [03]   422.558746: _spin_lock_irqsave <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558746: add_preempt_count <-_spin_lock_irqsave
>           <idle>-0     [03]   422.558747: pci_read <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558747: raw_pci_read <-pci_read
>           <idle>-0     [03]   422.558748: pci_conf1_read <-raw_pci_read
>           <idle>-0     [03]   422.558748: _spin_lock_irqsave <-pci_conf1_read
>           <idle>-0     [03]   422.558749: add_preempt_count <-_spin_lock_irqsave
> 
> 	  BZZT! 39us
> 
>           <idle>-0     [03]   422.558788: _spin_unlock_irqrestore <-pci_conf1_read
>           <idle>-0     [03]   422.558789: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558789: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558790: _spin_unlock_irqrestore <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558790: sub_preempt_count <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558791: preempt_schedule <-_spin_unlock_irqrestore
>           <idle>-0     [03]   422.558791: pci_bus_read_config_byte <-__pci_find_next_cap_ttl
>           <idle>-0     [03]   422.558792: _spin_lock_irqsave <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558792: add_preempt_count <-_spin_lock_irqsave
>           <idle>-0     [03]   422.558793: pci_read <-pci_bus_read_config_byte
>           <idle>-0     [03]   422.558793: raw_pci_read <-pci_read
>           <idle>-0     [03]   422.558794: pci_conf1_read <-raw_pci_read
>           <idle>-0     [03]   422.558794: _spin_lock_irqsave <-pci_conf1_read
>           <idle>-0     [03]   422.558795: add_preempt_count <-_spin_lock_irqsave
> 
> 	  BZZT! 39us
> 
>           <idle>-0     [03]   422.558834: _spin_unlock_irqrestore <-pci_conf1_read
>           <idle>-0     [03]   422.558834: sub_preempt_count <-_spin_unlock_irqrestore
> 
> 	  <SNIP many more such BZZT!s>
> 
> 	So I implemented pci_find_capability_cached and made MSI use it
> for good measure, please consider applying.
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@...hat.com>
> 
> diff --git a/Makefile b/Makefile
> index 14f34b4..d79fdac 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1,7 +1,7 @@
>  VERSION = 2
>  PATCHLEVEL = 6
>  SUBLEVEL = 25
> -EXTRAVERSION =
> +EXTRAVERSION = .pci_cached
>  NAME = Funky Weasel is Jiggy wit it
>  
>  # *DOCUMENTATION*

Ouch, left this in, do you want another patch or can you just remove
this bit?

Thanks,

- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ