Index: sys/conf/Makefile.powerpc =================================================================== --- sys/conf/Makefile.powerpc +++ sys/conf/Makefile.powerpc @@ -47,7 +47,9 @@ LDFLAGS+= -pie # Workaround module metadata parsing in bootloader +.if ${LINKER_TYPE} == "lld" LDFLAGS+= --apply-dynamic-relocs +.endif .if !empty(DDB_ENABLED) CFLAGS+= -fno-omit-frame-pointer Index: sys/powerpc/pseries/phyp-hvcall.S =================================================================== --- sys/powerpc/pseries/phyp-hvcall.S +++ sys/powerpc/pseries/phyp-hvcall.S @@ -36,8 +36,13 @@ ASENTRY(phyp_hcall) mflr %r0 std %r0,16(%r1) +#if defined(_CALL_ELF) && _CALL_ELF == 2 + ld %r11,96(%r1) /* Last couple args into volatile regs*/ + ld %r12,104(%r1) +#else ld %r11,112(%r1) /* Last couple args into volatile regs*/ ld %r12,120(%r1) +#endif hc /* invoke the hypervisor */ ld %r0,16(%r1) mtlr %r0 Index: sys/powerpc/pseries/phyp_llan.c =================================================================== --- sys/powerpc/pseries/phyp_llan.c +++ sys/powerpc/pseries/phyp_llan.c @@ -425,7 +425,7 @@ { struct llan_softc *sc = xsc; uint64_t bufdescs[6]; - int i; + int i, err; bzero(bufdescs, sizeof(bufdescs)); @@ -435,7 +435,7 @@ bufdescs[i] |= segs[i].ds_addr; } - phyp_hcall(H_SEND_LOGICAL_LAN, sc->unit, bufdescs[0], + err = phyp_hcall(H_SEND_LOGICAL_LAN, sc->unit, bufdescs[0], bufdescs[1], bufdescs[2], bufdescs[3], bufdescs[4], bufdescs[5], 0); /* * The hypercall returning implies completion -- or that the call will @@ -443,6 +443,10 @@ * H_BUSY based on the continuation token in R4. For now, just drop * the packet in such cases. */ + if (err == H_SUCCESS) + if_inc_counter(sc->ifp, IFCOUNTER_OPACKETS, 1); + else + if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1); } static void