[PATCH 18/21] Replace pci_dn with eeh_dev for EEH aux components

2012-02-27 Thread Gavin Shan
The original EEH implementation is heavily depending on struct pci_dn. We have to put EEH related information to pci_dn. Actually, we could split struct pci_dn so that the EEH sensitive information to form an individual struct, then EEH looks more independent. The patch replaces pci_dn with eeh_de

[PATCH 15/21] Replace pci_dn with eeh_dev for EEH sysfs

2012-02-27 Thread Gavin Shan
With original EEH implementation, all EEH related statistics have been put into struct pci_dn. We've introduced struct eeh_dev to replace struct pci_dn in EEH core components, including EEH sysfs component. The patch shows EEH statistics from struct eeh_dev instead of struct pci_dn in EEH sysfs co

[PATCH 11/21] pSeries platform EEH configure bridge

2012-02-27 Thread Gavin Shan
In order to enable particular PCI device, which has been included in the parent PE. The involved PCI bridges should be enabled explicitly if there has. On pSeries platform, there're dedicated RTAS calls to fulfil the purpose. The patch implements the function of configuring PCI bridges through the

[PATCH 16/21] Replace pci_dn with eeh_dev for EEH address cache

2012-02-27 Thread Gavin Shan
With original EEH implementation, struct pci_dn is used while building PCI I/O address cache, which helps on searching the corresponding PCI device according to the given physical I/O address. Besides, pci_dn is associated with the corresponding PCI device while building its I/O cache. The patch r

[PATCH 20/21] Introduce struct eeh_stats for EEH

2012-02-27 Thread Gavin Shan
With the original EEH implementation, the EEH global statistics are maintained by individual global variables. That makes the code a little hard to maintain. The patch introduces extra struct eeh_stats for the EEH global statistics so that it can be maintained in collective fashion. Signed-off-by

[PATCH 19/21] Replace pci_dn with eeh_dev for EEH on pSeries

2012-02-27 Thread Gavin Shan
The pci_dn has been replaced with eeh_dev. In order to comply with the rule, the EEH platform implementation on pSeries should also be adjusted for a little bit so that it will depend on eeh_dev instead of pci_dn. The patch replaces pci_dn with eeh_dev. The corresponding information will be retrie

[PATCH 14/21] Introduce EEH device

2012-02-27 Thread Gavin Shan
Original EEH implementation depends on struct pci_dn heavily. However, EEH shouldn't depend on that actually because EEH needn't share much information with other PCI components. That's to say, EEH should have worked independently. The patch introduces struct eeh_dev so that EEH core components ne

[PATCH 21/21] pSeries platform config space access in EEH

2012-02-27 Thread Gavin Shan
With the original EEH implementation, the access to config space of the corresponding PCI device is done by RTAS sensitive function. That depends on pci_dn heavily. That would limit EEH extension to other platforms like powernv because other platforms might have different ways to access PCI config

[PATCH 03/21] Platform dependent EEH operations

2012-02-27 Thread Gavin Shan
EEH has been implemented on RTAS-compliant pSeries platform. That's to say, the EEH operations will be implemented through RTAS calls eventually. The situation limited feasible extension on EEH. In order to support EEH on multiple platforms like pseries and powernv simutaneously. We have to split t

[PATCH 17/21] Replace pci_dn with eeh_dev for EEH core

2012-02-27 Thread Gavin Shan
The original EEH implementation is heavily depending on struct pci_dn. We have to put EEH related information to pci_dn. Actually, we could split struct pci_dn so that the EEH sensitive information to form an individual struct, then EEH looks more independent. The patch replaces pci_dn with eeh_de

[PATCH 04/21] pSeries platform EEH initialization

2012-02-27 Thread Gavin Shan
The platform specific EEH operations have been abstracted by struct eeh_ops. The individual platroms, including pSeries, needs doing necessary initialization before the platform dependent EEH operations work properly. The patch is addressing that and do necessary platform initialization for pSerie

[PATCH 01/21] Cleanup on comments of EEH core

2012-02-27 Thread Gavin Shan
The EEH has been implemented on pSeries platform. The original code looks a little bit nasty. The patch does cleanup on the current EEH implementation so that it looks more clean. * Duplicated comments have been removed from the corresponding header files. * Comments have

[PATCH 10/21] pSeries platform EEH error log retrieval

2012-02-27 Thread Gavin Shan
On RTAS compliant pSeries platform, one dedicated RTAS call has been introduced to retrieve EEH temporary or permanent error log. The patch implements the function of retriving EEH error log through RTAS call. Besides, it has been abstracted by struct eeh_ops::get_log so that EEH core components c

[PATCH 07/21] pSeries platform PE state retrieval

2012-02-27 Thread Gavin Shan
On pSeries platform, there're 2 dedicated RTAS calls introduced to retrieve the corresponding PE's state: ibm,read-slot-reset-state and ibm,read-slot-reset-state2. The patch implements the retrieval of PE's state according to the given PE address. Besides, the implementation has been abstracted by

[PATCH 12/21] Cleanup on comments of EEH aux components

2012-02-27 Thread Gavin Shan
There're several EEH aux components and the patch does some cleanup for them so that they look more clean. * Duplicated comments have been removed from the header file. * Comments have been reorganized so that it looks more clean. * The leading comments of functions are adj

[PATCH 13/21] Cleanup on function names of EEH aux components

2012-02-27 Thread Gavin Shan
The patch does some cleanup on the function names of EEH aux components. Currently, only couple of function names from eeh_cache have been adjusted so that: * The function name has prefix "eeh_addr_cache". * Move around pci_addr_cache_build() in the header file to reflect

[PATCH 02/21] Cleanup on function names of EEH core

2012-02-27 Thread Gavin Shan
The EEH has been implemented on pSeries platform. The original code looks a little bit nasty. The patch does cleanup on the current EEH implementation so that it looks more clean. * Try adding prefix "eeh" for functions. * Some function names have been adjusted so that they looks

[PATCH 05/21] pSeries platform EEH operation

2012-02-27 Thread Gavin Shan
There're 4 EEH operations that are covered by the dedicated RTAS call : enable or disable EEH, enable MMIO and enable DMA. At early stage of system boot, the EEH would be tried to enable on PCI device related device node. MMIO and DMA for particular PE should be enabled when doing recovery on EEH e

[PATCH 09/21] pSeries platform EEH reset PE

2012-02-27 Thread Gavin Shan
On RTAS compliant pSeries platform, there is a dedicated RTAS call (ibm,set-slot-reset) to reset the specified PE. Furthermore, two types of resets are supported: hot and fundamental. the type of reset is to be used actually depends on the included PCI device's requirements. The patch implements r

[PATCH 08/21] pSeries platform EEH wait PE state

2012-02-27 Thread Gavin Shan
On pSeries platform, the PE state might be temporarily unavailable. In that case, the firmware will return the corresponding wait time. That means the kernel has to wait for appropriate time in order to get the PE state. The patch does the implementation for that. Besides, the function has been ab

[PATCH 06/21] pSeries platform EEH PE address retrieval

2012-02-27 Thread Gavin Shan
There're 2 types of addresses used for EEH operations. The first one would be BDF (Bus/Device/Function) address which is retrieved from the reg property of the corresponding FDT node. Another one is PE address that should be enquired from firmware through RTAS call on pSeries platform. When issuing

[PATCH v5 00/21] EEH reorganization

2012-02-27 Thread Gavin Shan
This series of patches is going to reorganize EEH so that it could support multiple platforms in future. The requirements were raised from the aspects. * The original EEH implementation only support pSeries platform, which would be regarded as guest system. Platform powernv is co

Re: [PATCH 08/18] PCI, powerpc: Register busn_res for root buses

2012-02-27 Thread Bjorn Helgaas
On Mon, Feb 27, 2012 at 7:09 PM, Yinghai Lu wrote: > Signed-off-by: Yinghai Lu > Cc: Benjamin Herrenschmidt > Cc: Paul Mackerras > Cc: linuxppc-dev@lists.ozlabs.org > --- >  arch/powerpc/kernel/pci-common.c |    7 ++- >  1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/arch

Re: linux-next: manual merge of the devicetree tree with the powerpc tree

2012-02-27 Thread Grant Likely
On Mon, Feb 27, 2012 at 7:06 PM, Stephen Rothwell wrote: > Hi Grant, > > Today's linux-next merge of the devicetree tree got a conflict in > arch/powerpc/platforms/iseries/Kconfig between commit 3d066d77cf46 > ("powerpc: remove CONFIG_PPC_ISERIES from the architecture Kconfig > files") from the po

linux-next: manual merge of the irqdomain tree with the powerpc tree

2012-02-27 Thread Stephen Rothwell
Hi Grant, Today's linux-next merge of the irqdomain tree got a conflict in arch/powerpc/sysdev/mpic.c between commit fe83364f0bf1 ("powerpc/mpic: Fix allocation of reverse-map for multi-ISU mpics") from the powerpc tree and commit a8db8cf0d894 ("irq_domain: Replace irq_alloc_host() with revmap-spe

[PATCH 08/18] PCI, powerpc: Register busn_res for root buses

2012-02-27 Thread Yinghai Lu
Signed-off-by: Yinghai Lu Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: linuxppc-dev@lists.ozlabs.org --- arch/powerpc/kernel/pci-common.c |7 ++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index

linux-next: manual merge of the devicetree tree with the powerpc tree

2012-02-27 Thread Stephen Rothwell
Hi Grant, Today's linux-next merge of the devicetree tree got a conflict in arch/powerpc/platforms/iseries/Kconfig between commit 3d066d77cf46 ("powerpc: remove CONFIG_PPC_ISERIES from the architecture Kconfig files") from the powerpc tree and commit 0f22dd395fc4 ("of: Only compile OF_DYNAMIC on P

Re: [PATCH 14/21] Introduce EEH device

2012-02-27 Thread Gavin Shan
> Hi Gavin, > > On Fri, 24 Feb 2012 17:38:11 +0800 Gavin Shan > wrote: > > > > diff --git a/arch/powerpc/include/asm/device.h > > b/arch/powerpc/include/asm/device.h > > index d57c08a..4668344 100644 > > --- a/arch/powerpc/include/asm/device.h > > +++ b/arch/powerpc/include/asm/device.h > > @@

Re: [PATCH 20/21] Introduce struct eeh_stats for EEH

2012-02-27 Thread Gavin Shan
> > > +/* > > + * The struct is used to maintain the EEH global statistic > > + * information. Besides, the EEH global statistics will be > > + * exported to user space through procfs > > + */ > > +struct eeh_stats { > > + unsigned long no_device;/* PCI device not found > */ > > + uns

Re: [PATCH 20/21] Introduce struct eeh_stats for EEH

2012-02-27 Thread Gavin Shan
> Hi Gavin, > > On Fri, 24 Feb 2012 17:38:17 +0800 Gavin Shan > wrote: > > > > diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h > > index 1310971..226c9a5 100644 > > --- a/arch/powerpc/include/asm/eeh.h > > +++ b/arch/powerpc/include/asm/eeh.h > > @@ -98,6 +98,21 @@ s

Re: [PATCH 14/21] Introduce EEH device

2012-02-27 Thread Gavin Shan
> Hi Gavin, > > On Fri, 24 Feb 2012 17:38:11 +0800 Gavin Shan > wrote: > > > > +#define EEH_DEV_TO_OF_NODE(edev) (edev->dn) > > +#define EEH_DEV_TO_PCI_DEV(edev) (edev->pdev) > > +#define OF_NODE_TO_EEH_DEV(dn) ((struct eeh_dev *)(dn->edev)) > > +#define PCI_DEV_TO_EEH_DEV(pdev)

[PATCH] powerpc/prom: remove limit on maximum size of properties

2012-02-27 Thread Nishanth Aravamudan
Hi Ben, On 27.02.2012 [10:22:14 +1100], Benjamin Herrenschmidt wrote: > On Fri, 2012-02-24 at 16:23 -0800, Nishanth Aravamudan wrote: > > On a 16TB system (using AMS/CMO), I get: > > > > WARNING: ignoring large property [/ibm,dynamic-reconfiguration-memory] > > ibm,dynamic-memory length 0x00

Re: linux-next: build failure after merge of the final tree

2012-02-27 Thread Benjamin Herrenschmidt
On Mon, 2012-02-27 at 20:19 +1100, Benjamin Herrenschmidt wrote: > On Mon, 2012-02-27 at 17:37 +1100, Stephen Rothwell wrote: > > pci_add_resource_offset(resources, res, > > - (resource_size_t) hose->io_base_virt - _IO_BASE); > > + (resource_size_

Re: [PATCH 09/24] PCI, powerpc: Register busn_res for root buses

2012-02-27 Thread Bjorn Helgaas
On Sat, Feb 25, 2012 at 12:47 AM, Yinghai Lu wrote: > On Fri, Feb 24, 2012 at 2:24 PM, Jesse Barnes > wrote: >> On Thu, 23 Feb 2012 12:51:30 -0800 >> Bjorn Helgaas wrote: >>> 2) We already have a way to add resources to a root bus: the >>> pci_add_resource() used to add I/O port and MMIO apertu

Re: [PATCH 1/2] powerpc: Move GE GPIO and PIC drivers

2012-02-27 Thread Benjamin Herrenschmidt
On Mon, 2012-02-27 at 13:57 +, Martyn Welch wrote: > This patch (or one like it) has been around for a while now. Kumar wanted me > to put them here rather than sysdev[1], but I'm easy either way. Ah well, I disagree with Kumar here :-) One thing you can do is put all your platforms files inc

Re: [PATCH v6 1/4] KVM: PPC: epapr: Factor out the epapr init

2012-02-27 Thread Scott Wood
On 02/23/2012 03:22 AM, Liu Yu wrote: > +static int __init epapr_paravirt_init(void) > +{ > + struct device_node *hyper_node; > + const u32 *insts; > + int len, i; > + > + hyper_node = of_find_node_by_path("/hypervisor"); > + if (!hyper_node) > + return -ENODEV; > +

Re: [PATCH net-next] ibm emac: delete module references; phy.c only supported as built-in

2012-02-27 Thread Paul Gortmaker
[Re: [PATCH net-next] ibm emac: delete module references; phy.c only supported as built-in] On 27/02/2012 (Mon 14:57) David Miller wrote: > From: Paul Gortmaker > Date: Mon, 27 Feb 2012 14:47:04 -0500 > > > The Makefile has it as "ibm_emac-y := mal.o core.o phy.o" so there is > > no way this ca

Re: [PATCH net-next] ibm emac: delete module references; phy.c only supported as built-in

2012-02-27 Thread Ben Hutchings
On Mon, 2012-02-27 at 14:47 -0500, Paul Gortmaker wrote: > The Makefile has it as "ibm_emac-y := mal.o core.o phy.o" so there is > no way this can be built modular, so remove all references to module > support. No, that's nonsense. You need to look at whether ibm_emac.o can be added to obj-m (whi

Re: [PATCH net-next] ibm emac: delete module references; phy.c only supported as built-in

2012-02-27 Thread David Miller
From: Paul Gortmaker Date: Mon, 27 Feb 2012 14:47:04 -0500 > The Makefile has it as "ibm_emac-y := mal.o core.o phy.o" so there is > no way this can be built modular, so remove all references to module > support. That doesn't mean it's only buildable statically. "ibm_emacs-y :=" is merely a way

Re: [PATCH v6 4/4] KVM: PPC: epapr: Update other hypercall invoking

2012-02-27 Thread Scott Wood
On 02/23/2012 03:22 AM, Liu Yu wrote: > diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig > index 2dcdbc9..99ebdde 100644 > --- a/drivers/virt/Kconfig > +++ b/drivers/virt/Kconfig > @@ -15,6 +15,7 @@ if VIRT_DRIVERS > config FSL_HV_MANAGER > tristate "Freescale hypervisor management d

[PATCH net-next] ibm emac: delete module references; phy.c only supported as built-in

2012-02-27 Thread Paul Gortmaker
The Makefile has it as "ibm_emac-y := mal.o core.o phy.o" so there is no way this can be built modular, so remove all references to module support. Signed-off-by: Paul Gortmaker diff --git a/drivers/net/ethernet/ibm/emac/phy.c b/drivers/net/ethernet/ibm/emac/phy.c index d3b9d10..fb96387 100644

Re: [PATCH 36/37] KVM: PPC: booke: expose guest registers on irq reinject

2012-02-27 Thread Scott Wood
On 02/26/2012 05:59 AM, Alexander Graf wrote: > > On 25.02.2012, at 00:40, Scott Wood wrote: > >> On 02/24/2012 08:26 AM, Alexander Graf wrote: >>> +static void kvmppc_fill_pt_regs(struct kvm_vcpu *vcpu, struct pt_regs >>> *regs) >>> { >>> - int r = RESUME_HOST; >>> + int i; >>> >>> - /* u

Re: [PATCH 24/37] KVM: PPC: booke: rework rescheduling checks

2012-02-27 Thread Scott Wood
On 02/24/2012 08:26 AM, Alexander Graf wrote: > -void kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu) > +int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu) > { > unsigned long *pending = &vcpu->arch.pending_exceptions; > unsigned long old_pending = vcpu->arch.pending_exception

Re: [PATCH 1/2] powerpc/e500: make load_up_spe a normal fuction

2012-02-27 Thread Scott Wood
On 02/27/2012 04:59 AM, Olivia Yin wrote: > So that we can call it in kernel. > > Signed-off-by: Liu Yu Explain why we want this, and point out that this makes it similar to load_up_fpu. > --- > arch/powerpc/kernel/head_fsl_booke.S | 23 ++- > 1 files changed, 6 insertion

RE: [PATCH 24/37] KVM: PPC: booke: rework rescheduling checks

2012-02-27 Thread Bhushan Bharat-R65777
> -Original Message- > From: Alexander Graf [mailto:ag...@suse.de] > Sent: Monday, February 27, 2012 11:53 PM > To: Bhushan Bharat-R65777 > Cc: kvm-...@vger.kernel.org; k...@vger.kernel.org; > linuxppc-dev@lists.ozlabs.org; > Wood Scott-B07421 > Subject: Re: [PATCH 24/37] KVM: PPC: booke

Re: [PATCH 24/37] KVM: PPC: booke: rework rescheduling checks

2012-02-27 Thread Alexander Graf
On 02/27/2012 06:33 PM, Alexander Graf wrote: On 02/27/2012 05:34 PM, Bhushan Bharat-R65777 wrote: +} + +/* + * Common checks before entering the guest world. Call with interrupts + * disabled. + * + * returns !0 if a signal is pending and check_signal is true */ +static int kvmppc_prepare

Re: [PATCH] powerpc: icswx: fix race condition where threads do not get their ACOP register updated in time.

2012-02-27 Thread Jimi Xenidis
On Feb 26, 2012, at 5:47 PM, Benjamin Herrenschmidt wrote: > >> >> +/* >> + * We could be here because another thread has enabled acop >> + * but the ACOP register has yet to be updated. >> + * >> + * This should have been taken care of by the IPI to sync all >> + * the

Re: [PATCH 24/37] KVM: PPC: booke: rework rescheduling checks

2012-02-27 Thread Alexander Graf
On 02/27/2012 05:34 PM, Bhushan Bharat-R65777 wrote: +} + +/* + * Common checks before entering the guest world. Call with interrupts + * disabled. + * + * returns !0 if a signal is pending and check_signal is true */ +static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu, bool +check_sign

RE: [PATCH 24/37] KVM: PPC: booke: rework rescheduling checks

2012-02-27 Thread Bhushan Bharat-R65777
> -Original Message- > From: kvm-ow...@vger.kernel.org [mailto:kvm-ow...@vger.kernel.org] On Behalf > Of > Alexander Graf > Sent: Friday, February 24, 2012 7:56 PM > To: kvm-...@vger.kernel.org > Cc: k...@vger.kernel.org; linuxppc-dev@lists.ozlabs.org; Wood Scott-B07421 > Subject: [PATCH

Re: [PATCH] of/mdio: fix fixed link bus name

2012-02-27 Thread Rob Herring
On 02/27/2012 06:48 AM, Baruch Siach wrote: > Since 9e6c643b (phy/fixed: use an unique MDIO bus name) the name of the fixed > PHY bus is "fixed-0". Teach of_phy_connect_fixed_link() the new name. > Applied for 3.3. Rob > Tested on a P1020RDB PowerPC system. > > Signed-off-by: Baruch Siach > -

Re: [PATCH 1/2] powerpc/e500: make load_up_spe a normal fuction

2012-02-27 Thread Tabi Timur-B04825
On Mon, Feb 27, 2012 at 4:59 AM, Olivia Yin wrote: > So that we can call it in kernel. And why would we want that? -- Timur Tabi Linux kernel developer at Freescale ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/l

Re: [PATCH] of/mdio: fix fixed link bus name

2012-02-27 Thread Florian Fainelli
Le 02/27/12 13:48, Baruch Siach a écrit : Since 9e6c643b (phy/fixed: use an unique MDIO bus name) the name of the fixed PHY bus is "fixed-0". Teach of_phy_connect_fixed_link() the new name. Tested on a P1020RDB PowerPC system. Signed-off-by: Baruch Siach Acked-by: Florian Fainelli ---

Re: [PATCH 1/2] powerpc: Move GE GPIO and PIC drivers

2012-02-27 Thread Martyn Welch
On 26/02/12 23:37, Benjamin Herrenschmidt wrote: > On Tue, 2012-02-07 at 11:28 +, Martyn Welch wrote: >> Move the GE GPIO and PIC drivers to allow these to be used by non-86xx >> boards. > > Hi, Sorry for the late review... > No problem, thanks for the review! >> Signed-off-by: Martyn Welch

[PATCH] of/mdio: fix fixed link bus name

2012-02-27 Thread Baruch Siach
Since 9e6c643b (phy/fixed: use an unique MDIO bus name) the name of the fixed PHY bus is "fixed-0". Teach of_phy_connect_fixed_link() the new name. Tested on a P1020RDB PowerPC system. Signed-off-by: Baruch Siach --- drivers/of/of_mdio.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(

[PATCH net-next] ucc_geth: separate out rx/tx ring alloc and free operations

2012-02-27 Thread Paul Gortmaker
Factor out the the existing allocation and free operations so that they can be used individually. This is to improve code readability, and also to prepare for possible future changes like better error recovery and more dynamic configuration (e.g on-the-fly resizing of the rings). This change repr

[PATCH] mpc836x: fix failed phy detection for ucc ethernet on MDS

2012-02-27 Thread Paul Gortmaker
The mpc836x_mds platform has been broken since the commit 6fe3264945ee63292cdfb27b6e95bc52c603bb09 "netdev/phy: Use mdiobus_read() so that proper locks are taken" which caused the fsl_pq_mdio TBI autoprobe to oops. The oops was "fixed" in commit 28d8ea2d568534026ccda3e8936f5ea1e04a86a1 "fsl

[PATCH 2/2] KVM: booke: Improve SPE switch

2012-02-27 Thread Olivia Yin
Like book3s did for fp switch, instead of switch SPE between host and guest, the patch switch SPE state between qemu and guest. In this way, we can simulate a host loadup SPE when load guest SPE state, and let host to decide when to giveup SPE state. Therefor it cooperates better with host SPE usag

[PATCH 1/2] powerpc/e500: make load_up_spe a normal fuction

2012-02-27 Thread Olivia Yin
So that we can call it in kernel. Signed-off-by: Liu Yu --- arch/powerpc/kernel/head_fsl_booke.S | 23 ++- 1 files changed, 6 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index d5d78c4..c96e025 100

Re: linux-next: build failure after merge of the final tree

2012-02-27 Thread Benjamin Herrenschmidt
On Mon, 2012-02-27 at 17:37 +1100, Stephen Rothwell wrote: > pci_add_resource_offset(resources, res, > - (resource_size_t) hose->io_base_virt - _IO_BASE); > + (resource_size_t)(unsigned long)hose->io_base_virt - > _IO_BASE); We have to be carefu