[PATCH v3 18/24] powerpc/iommu: Split iommu_free_table into 2 helpers

2015-01-29 Thread Alexey Kardashevskiy
The iommu_free_table helper release memory it is using (the TCE table and @it_map) and release the iommu_table struct as well. We might not want the very last step as we store iommu_table in parent structures. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru ---

[PATCH v3 05/24] vfio: powerpc/spapr: Move locked_vm accounting to helpers

2015-01-29 Thread Alexey Kardashevskiy
There moves locked pages accounting to helpers. Later they will be reused for Dynamic DMA windows (DDW). While we are here, update the comment explaining why RLIMIT_MEMLOCK might be required to be bigger than the guest RAM. This also prints pid of the current process in pr_warn/pr_debug.

[PATCH v3 09/24] powerpc/iommu: Fix IOMMU ownership control functions

2015-01-29 Thread Alexey Kardashevskiy
This adds missing locks in iommu_take_ownership()/ iommu_release_ownership(). This marks all pages busy in iommu_table::it_map in order to catch errors if there is an attempt to use this table while ownership over it is taken. This only clears TCE content if there is no page marked busy in

[PATCH v3 13/24] powerpc/pseries/lpar: Enable VFIO

2015-01-29 Thread Alexey Kardashevskiy
The previous patch introduced iommu_table_ops::exchange() callback which effectively disabled VFIO on pseries. This implements exchange() for pseries/lpar so VFIO can work in nested guests. Since exchange() callback returns an old TCE, it has to call H_GET_TCE for every TCE being put to the table

[PATCH v3 22/24] powerpc/iommu: Get rid of ownership helpers

2015-01-29 Thread Alexey Kardashevskiy
iommu_take_ownership/iommu_release_ownership used to be used to mark bits in iommu_table::it_map. Since the IOMMU tables are recreated for VFIO, it_map is always NULL. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/include/asm/iommu.h | 2 - arch/powerpc/kernel/iommu.c

[PATCH v3 07/24] powerpc/iommu: Introduce iommu_table_alloc() helper

2015-01-29 Thread Alexey Kardashevskiy
This replaces multiple calls of kzalloc_node() with a new iommu_table_alloc() helper. Right now it calls kzalloc_node() but later it will be modified to allocate a powerpc_iommu struct with a single iommu_table in it. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru ---

[PATCH v3 10/24] powerpc/powernv/ioda2: Rework IOMMU ownership control

2015-01-29 Thread Alexey Kardashevskiy
At the moment the iommu_table struct has a set_bypass() which enables/ disables DMA bypass on IODA2 PHB. This is exposed to POWERPC IOMMU code which calls this callback when external IOMMU users such as VFIO are about to get over a PHB. The set_bypass() callback is not really an iommu_table

[PATCH v3 23/24] vfio/spapr: Enable multiple groups in a container

2015-01-29 Thread Alexey Kardashevskiy
Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- drivers/vfio/vfio_iommu_spapr_tce.c | 243 +++- 1 file changed, 155 insertions(+), 88 deletions(-) diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c index d0987ae..8bcafb7

[PATCH v3 21/24] powerpc/powernv/ioda: Define and implement DMA table/window management callbacks

2015-01-29 Thread Alexey Kardashevskiy
This extends powerpc_iommu_ops by a set of callbacks to support dynamic DMA windows management. query() returns IOMMU capabilities such as default DMA window address and supported number of DMA windows and TCE table levels. create_table() creates a TCE table with specific parameters. For now it

[PATCH v3 20/24] powerpc/powernv: Change prototypes to receive iommu

2015-01-29 Thread Alexey Kardashevskiy
This changes few functions to receive a powerpc_iommu pointer rather than PE as they are going to be a part of upcoming powerpc_iommu_ops callback set. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/platforms/powernv/pci-ioda.c | 13 - 1 file changed, 8

[PATCH v3 02/24] vfio: powerpc/iommu: Check that TCE page size is equal to it_page_size

2015-01-29 Thread Alexey Kardashevskiy
This checks that the TCE table page size is not bigger that the size of a page we just pinned and going to put its physical address to the table. Otherwise the hardware gets unwanted access to physical memory between the end of the actual page and the end of the aligned up TCE page. Since

[PATCH v3 04/24] vfio: powerpc/spapr: Use it_page_size

2015-01-29 Thread Alexey Kardashevskiy
This makes use of the it_page_size from the iommu_table struct as page size can differ. This replaces missing IOMMU_PAGE_SHIFT macro in commented debug code as recently introduced IOMMU_PAGE_XXX macros do not include IOMMU_PAGE_SHIFT. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru

[PATCH v3 08/24] powerpc/spapr: vfio: Switch from iommu_table to new powerpc_iommu

2015-01-29 Thread Alexey Kardashevskiy
Modern IBM POWERPC systems support multiple (currently two) TCE tables per IOMMU group (a.k.a. PE). This adds a powerpc_iommu container for TCE tables. Right now just one table is supported. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/include/asm/iommu.h| 18

[PATCH v3 06/24] powerpc/iommu: Move tce_xxx callbacks from ppc_md to iommu_table

2015-01-29 Thread Alexey Kardashevskiy
This adds a iommu_table_ops struct and puts pointer to it into the iommu_table struct. This moves tce_build/tce_free/tce_get/tce_flush callbacks from ppc_md to the new struct where they really belong to. This adds the requirement for @it_ops to be initialized before calling iommu_init_table() to

[PATCH v3 11/24] powerpc/powernv/ioda/ioda2: Rework tce_build()/tce_free()

2015-01-29 Thread Alexey Kardashevskiy
The pnv_pci_ioda_tce_invalidate() helper invalidates TCE cache. It is supposed to be called on IODA1/2 and not called on p5ioc2. It receives start and end host addresses of TCE table. This approach makes it possible to get pnv_pci_ioda_tce_invalidate() unintentionally called on p5ioc2. Another

[PATCH v3 19/24] powerpc/powernv: Implement multilevel TCE tables

2015-01-29 Thread Alexey Kardashevskiy
This adds multi-level TCE tables support to pnv_pci_ioda2_create_table() and pnv_pci_ioda2_free_table() callbacks. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/include/asm/iommu.h | 4 + arch/powerpc/platforms/powernv/pci-ioda.c | 125

[PATCH v3 12/24] powerpc/iommu/powernv: Release replaced TCE

2015-01-29 Thread Alexey Kardashevskiy
At the moment writing new TCE value to the IOMMU table fails with EBUSY if there is a valid entry already. However PAPR specification allows the guest to write new TCE value without clearing it first. Another problem this patch is addressing is the use of pool locks for external IOMMU users such

[PATCH v3 15/24] poweppc/powernv/ioda2: Rework iommu_table creation

2015-01-29 Thread Alexey Kardashevskiy
This moves iommu_table creation to the beginning. This is a mechanical patch. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/platforms/powernv/pci-ioda.c | 31 +-- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git

[PATCH v3 16/24] powerpc/powernv/ioda2: Introduce pnv_pci_ioda2_create_table

2015-01-29 Thread Alexey Kardashevskiy
This is a part of moving TCE table allocation into an iommu_ops callback to support multiple IOMMU groups per one VFIO container. This is a mechanical patch. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/platforms/powernv/pci-ioda.c | 88 +++ 1

[PATCH v3 17/24] powerpc/powernv/ioda2: Introduce pnv_pci_ioda2_set_window

2015-01-29 Thread Alexey Kardashevskiy
This is a part of moving DMA window programming to an iommu_ops callback. This is a mechanical patch. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru --- arch/powerpc/platforms/powernv/pci-ioda.c | 84 --- 1 file changed, 56 insertions(+), 28 deletions(-) diff

[PATCH v3 00/24] powerpc/iommu/vfio: Enable Dynamic DMA windows

2015-01-29 Thread Alexey Kardashevskiy
This enables PAPR defined feature called Dynamic DMA windows (DDW). Each Partitionable Endpoint (IOMMU group) has a separate DMA window on a PCI bus where devices are allows to perform DMA. By default there is 1 or 2GB window allocated at the host boot time and these windows are used when an

[PATCH v3 03/24] powerpc/powernv: Do not set read flag if direction==DMA_NONE

2015-01-29 Thread Alexey Kardashevskiy
Normally a bitmap from the iommu_table is used to track what TCE entry is in use. Since we are going to use iommu_table without its locks and do xchg() instead, it becomes essential not to put bits which are not implied in the direction flag. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru

[PATCH v3 14/24] vfio: powerpc/spapr: Register memory

2015-01-29 Thread Alexey Kardashevskiy
The existing implementation accounts the whole DMA window in the locked_vm counter which is going to be even worse with multiple containers and huge DMA windows. This introduces 2 ioctls to register/unregister DMA memory which receive user space address and size of the memory region which needs

[PATCH v3 24/24] vfio: powerpc/spapr: Support Dynamic DMA windows

2015-01-29 Thread Alexey Kardashevskiy
This adds create/remove window ioctls to create and remove DMA windows. This changes VFIO_IOMMU_SPAPR_TCE_GET_INFO handler to return additional information such as a number of supported windows and maximum number levels of TCE tables. Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru ---

[PATCH 3/4] powerpc/fsl-booke: Add T1024RDB board support

2015-01-29 Thread Shengzhou Liu
T1024RDB is a Freescale Reference Design Board that hosts the T1024 SoC. T1024RDB board Overview --- - Processor: T1024 SoC integrating two 64-bit e5500 cores up to 1.4GHz - DDR: 64-bit 4GB DDR3L UDIMM with ECC and interleaving support - Ethernet: two 10M/100M/1Gbps RGMII

[PATCH 4/4] powerpc/fsl-booke: Add T1023 RDB board support

2015-01-29 Thread Shengzhou Liu
T1023RDB is a Freescale Reference Design Board that hosts T1023 SoC. T1023RDB board Overview --- - T1023 SoC integrating two 64-bit e5500 cores up to 1.4GHz - CoreNet fabric supporting coherent and noncoherent transactions with prioritization and bandwidth allocation - SDRAM

[PATCH v3 01/24] vfio: powerpc/spapr: Move page pinning from arch code to VFIO IOMMU driver

2015-01-29 Thread Alexey Kardashevskiy
This moves page pinning (get_user_pages_fast()/put_page()) code out of the platform IOMMU code and puts it to VFIO IOMMU driver where it belongs to as the platform code does not deal with page pinning. This makes iommu_take_ownership()/iommu_release_ownership() deal with the IOMMU table bitmap

[PATCH 1/4] powerpc/fsl-booke: Add device tree support for T1024/T1023 SoC

2015-01-29 Thread Shengzhou Liu
The T1024 SoC includes the following function and features: - Two 64-bit Power architecture e5500 cores, up to 1.4GHz - private 256KB L2 cache each core and shared 256KB CoreNet platform cache (CPC) - 32-/64-bit DDR3L/DDR4 SDRAM memory controller with ECC and interleaving support - Data Path

[PATCH 2/4] powerpc/fsl-booke: Add T1024 QDS board support

2015-01-29 Thread Shengzhou Liu
Add support for Freescale T1024/T1023 QorIQ Development System Board. T1024QDS is a high-performance computing evaluation, development and test platform for T1024 QorIQ Power Architecture processor. T1024QDS board Overview --- - T1024 SoC integrating two 64-bit e5500 cores up

Re: [PATCH] mmc: sdhci: Apply FSL ESDHC reset handling quirk to OF

2015-01-29 Thread Ulf Hansson
On 28 January 2015 at 20:52, Martin Hicks m...@bork.org wrote: The reset code was pushed into the esdhc-imx driver, but missed being pushed into the FSL OF driver at the same time. The commit that broke the OF ESDHC driver was 0718e59ae259f7c48155b4e852d8b0632d59028e Signed-off-by: Martin

Re: [PATCH v2 0/4] VPHN parsing fixes

2015-01-29 Thread Greg Kurz
On Wed, 17 Dec 2014 10:40:46 +0100 Greg Kurz gk...@linux.vnet.ibm.com wrote: Hi, This series addresses remarks from Ben and Michael (see individual patches). The most notable changes are: - the parsing code being pull out into a separate file in patch 3/4. This allows to write userland

Re: [1/4] powerpc/fsl-booke: Add device tree support for T1024/T1023 SoC

2015-01-29 Thread Scott Wood
On Thu, Jan 29, 2015 at 03:52:24PM +0800, Shengzhou Liu wrote: +/include/ qoriq-i2c-0.dtsi +/include/ qoriq-i2c-1.dtsi t1023 has only three i2c controllers -- where do you disable the fourth? +/include/ t1023si-post.dtsi + +/ { + aliases { + vga = display; +

Re: [v3,1/2] powerpc/corenet: Enable muxing MDIO buses via GPIO

2015-01-29 Thread Scott Wood
On Thu, Jan 22, 2015 at 04:48:37AM -0600, Emil Medve wrote: From: Andy Fleming aflem...@gmail.com Change-Id: I4489db79957ad533f4ba3f04fe7d5bcb3288e981 Signed-off-by: Andy Fleming aflem...@gmail.com Signed-off-by: Shaohui Xie shaohui@freescale.com Signed-off-by: Shruti Kanetkar

Re: [1/1] powerpc/iommu: Handling null return of kzalloc_node

2015-01-29 Thread Michael Ellerman
On Tue, 2014-10-06 at 07:32:10 UTC, Zhouyi Zhou wrote: NULL return of kzalloc_node should be handled Yeah it should. But just returning doesn't seem like it's going to end well. We end up with a device that's not properly setup. I think we need to rework that further so that either the error

Re: [1/4] powerpc/fsl-booke: Add device tree support for T1024/T1023 SoC

2015-01-29 Thread Scott Wood
On Thu, Jan 29, 2015 at 03:52:24PM +0800, Shengzhou Liu wrote: + corenet-cf@18000 { + compatible = fsl,corenet2-cf; While the damage has already been done by the t1040 device tree, this is not 100% compatible with what's on t4240. I'm not sure if it's worth doing anything about

Re: [PATCHv2 0/8] Fix perf probe issues on powerpc

2015-01-29 Thread Michael Ellerman
On Wed, 2015-01-28 at 12:13 +0530, Naveen N. Rao wrote: On 2015/01/28 05:14PM, Michael Ellerman wrote: On Wed, 2015-01-28 at 11:12 +0530, Naveen N. Rao wrote: On 2014/12/15 08:20PM, Naveen N Rao wrote: This patchset fixes various issues with perf probe on powerpc across ABIv1 and

Re: AW: SPE Interrupt context (was how to make use of SPE instructions)

2015-01-29 Thread Scott Wood
On Wed, 2015-01-28 at 05:00 +, Markus Stockhausen wrote: Von: Scott Wood [scottw...@freescale.com] Gesendet: Mittwoch, 28. Januar 2015 05:21 An: Markus Stockhausen Cc: Michael Ellerman; linuxppc-dev@lists.ozlabs.org; Herbert Xu Betreff: Re: SPE Interrupt context (was how to

Re: [PATCH] powerpc/pseries: Avoid context switch in EEH reset if required

2015-01-29 Thread Gavin Shan
On Wed, Jan 28, 2015 at 10:58:42AM +1100, Benjamin Herrenschmidt wrote: On Tue, 2015-01-27 at 16:58 -0600, Brian King wrote: I'd argue we are our own worst enemy here really. The new user is EEH code. I don't see a huge reason that code would need to use this exact same API. In fact, even

RE: [PATCH][v4] power/fsl: add MDIO dt binding for FMan

2015-01-29 Thread Shaohui Xie
-Original Message- From: Wood Scott-B07421 Sent: Friday, January 30, 2015 8:54 AM To: shh@gmail.com Cc: linuxppc-dev@lists.ozlabs.org; devicet...@vger.kernel.org; Medve Emilian-EMMEDVE1; Xie Shaohui-B21989 Subject: Re: [PATCH][v4] power/fsl: add MDIO dt binding for FMan On

[PATCH v2] powernv: Add OPAL soft-poweroff routine

2015-01-29 Thread Joel Stanley
Register a notifier for a OPAL message indicating that the machine should prepare itself for a graceful power off. OPAL will tell us if the power off is a reboot or shutdown, but for now we perform the same orderly_poweroff action. Signed-off-by: Joel Stanley j...@jms.id.au --- v2: - combine

Re: [v5, 5/6] powerpc/mpc85xx: Add FSL QorIQ DPAA BMan support to device tree(s)

2015-01-29 Thread Scott Wood
On Mon, Dec 08, 2014 at 04:29:20AM -0600, Emil Medve wrote: From: Kumar Gala ga...@kernel.crashing.org Change-Id: If643fa5ba0a903aef8f5056a2c90ebecc995b760 Signed-off-by: Kumar Gala ga...@kernel.crashing.org Signed-off-by: Geoff Thorpe geoff.tho...@freescale.com Signed-off-by: Hai-Ying Wang

Re: [PATCH] cpuidle/powernv: Enter fastsleep on checking if deep idle states are allowed

2015-01-29 Thread Preeti U Murthy
On 09/15/2014 02:22 PM, Preeti U Murthy wrote: On 09/15/2014 12:29 PM, Michael Ellerman wrote: On Fri, 2014-09-12 at 16:31 +0530, Preeti U Murthy wrote: Today the procfs interface /proc/sys/kernel/powersave-nap is used to control entry into deep idle states beyond snooze. Check for the value

Re: perf/powerpc: reset event hw state when adding it to the PMU

2015-01-29 Thread Scott Wood
On Thu, Jun 26, 2014 at 11:58:58AM +0300, Alexandru-Cezar Sardan wrote: When adding an event to the PMU with PERF_EF_START the STOPPED and UPTODATE flags need to be cleared in the hw.event status variable because they are preventing the update of the event count on overflow interrupt.

RE: [PATCH][v4] power/fsl: add MDIO dt binding for FMan

2015-01-29 Thread Shaohui Xie
-Original Message- From: Wood Scott-B07421 Sent: Friday, January 30, 2015 10:44 AM To: Xie Shaohui-B21989 Cc: linuxppc-dev@lists.ozlabs.org; devicet...@vger.kernel.org; Medve Emilian-EMMEDVE1 Subject: Re: [PATCH][v4] power/fsl: add MDIO dt binding for FMan On Thu, 2015-01-29 at

Re: [1/3] powerpc/pmac: Fix DT refcount imbalance in pmac_pic_probe_oldstyle

2015-01-29 Thread Michael Ellerman
On Wed, 2015-14-01 at 13:51:57 UTC, Geert Uytterhoeven wrote: of_find_node_by_name() calls of_node_put() on its from parameter, which must not be done on master, as it's still in use, and will be released manually later. This may cause a zero kref refcount. Use of_get_child_by_name() instead

Re: [v4] QE: Move QE from arch/powerpc to drivers/soc

2015-01-29 Thread Scott Wood
On Wed, Nov 12, 2014 at 11:40:13AM +0800, Zhao Qiang wrote: ls1 has qe and ls1 has arm cpu. move qe from arch/powerpc to drivers/soc/fsl to adapt to powerpc and arm Signed-off-by: Zhao Qiang b45...@freescale.com --- Changes for v2: - move code to driver/soc Changes for v3: -

Re: [PATCH][v4] power/fsl: add MDIO dt binding for FMan

2015-01-29 Thread Scott Wood
On Thu, 2015-01-29 at 20:38 -0600, Xie Shaohui-B21989 wrote: -Original Message- From: Wood Scott-B07421 Sent: Friday, January 30, 2015 8:54 AM To: shh@gmail.com Cc: linuxppc-dev@lists.ozlabs.org; devicet...@vger.kernel.org; Medve Emilian-EMMEDVE1; Xie Shaohui-B21989

Re: [V2] cpuidle/powernv: Read target_residency value of idle states from DT if available

2015-01-29 Thread Michael Ellerman
On Wed, 2015-28-01 at 02:13:06 UTC, Preeti U Murthy wrote: The device tree now exposes the residency values for different idle states. Read these values instead of calculating residency from the latency values. The values exposed in the DT are validated for optimal power efficiency. However

Re: [PATCH] powerpc/dts: Update platform PLL node

2015-01-29 Thread Scott Wood
On Tue, 2015-01-20 at 02:51 -0600, Liberman Igal-B31950 wrote: Regaeds, Igal Liberman. -Original Message- From: Wood Scott-B07421 Sent: Tuesday, January 20, 2015 9:44 AM To: Liberman Igal-B31950 Cc: linuxppc-dev@lists.ozlabs.org; Medve Emilian-EMMEDVE1 Subject: Re:

AW: AW: SPE Interrupt context (was how to make use of SPE instructions)

2015-01-29 Thread Markus Stockhausen
Von: Scott Wood [scottw...@freescale.com] Gesendet: Freitag, 30. Januar 2015 01:49 An: Markus Stockhausen Cc: Michael Ellerman; linuxppc-dev@lists.ozlabs.org; Herbert Xu Betreff: Re: AW: SPE Interrupt context (was how to make use of SPE instructions) On Wed, 2015-01-28 at 05:00 +,

Re: [RFC,1/2] powerpc/fsl-pci: atomic get_user when pagefault_disabled

2015-01-29 Thread Scott Wood
On Tue, Nov 25, 2014 at 12:43:25PM +0100, David Hildenbrand wrote: Whenever we have pagefaults disabled, we have to use the atomic variants of (set|get)_user and copy_(from|to)_user. Signed-off-by: David Hildenbrand d...@linux.vnet.ibm.com --- arch/powerpc/sysdev/fsl_pci.c | 2 +- 1 file

Re: powerpc/book3s: Fix the MCE code to use CONFIG_KVM_BOOK3S_HV_POSSIBLE

2015-01-29 Thread Michael Ellerman
On Wed, 2015-07-01 at 04:43:07 UTC, Mahesh Salgaonkar wrote: From: Mahesh Salgaonkar mah...@linux.vnet.ibm.com commit id 9975f5e added new config variable CONFIG_KVM_BOOK3S_HV_POSSIBLE that helps to select the relevant code in the kernel when HV and PR bits are built as separate modules. As

[PATCH] powernv: Add OPAL soft-poweroff routine

2015-01-29 Thread Joel Stanley
Register a notifier for a OPAL message indicating that the machine should prepare itself for a graceful power off. OPAL will tell us if the power off is a reboot or shutdown, but for now we perform the same orderly_poweroff action. Signed-off-by: Joel Stanley j...@jms.id.au ---

Re: [PATCH][v4] power/fsl: add MDIO dt binding for FMan

2015-01-29 Thread Scott Wood
On Wed, 2015-01-28 at 19:54 +0800, shh@gmail.com wrote: +- interrupts + Usage: required + Value type: prop-encoded-array + Definition: Event interrupt of external MDIO controller. What if this MDIO controller is not external? Should Usage say required

Re: [v3,1/2] powerpc/corenet: Enable muxing MDIO buses via GPIO

2015-01-29 Thread Scott Wood
On Thu, Jan 22, 2015 at 04:48:37AM -0600, Emil Medve wrote: From: Andy Fleming aflem...@gmail.com Change-Id: I4489db79957ad533f4ba3f04fe7d5bcb3288e981 Signed-off-by: Andy Fleming aflem...@gmail.com Signed-off-by: Shaohui Xie shaohui@freescale.com Signed-off-by: Shruti Kanetkar

Re: [RFC,1/2] powerpc/fsl-pci: atomic get_user when pagefault_disabled

2015-01-29 Thread David Hildenbrand
On Tue, Nov 25, 2014 at 12:43:25PM +0100, David Hildenbrand wrote: Whenever we have pagefaults disabled, we have to use the atomic variants of (set|get)_user and copy_(from|to)_user. Signed-off-by: David Hildenbrand d...@linux.vnet.ibm.com --- arch/powerpc/sysdev/fsl_pci.c | 2 +-