From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01E5EC32771 for ; Fri, 19 Aug 2022 19:28:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351370AbiHST2E (ORCPT ); Fri, 19 Aug 2022 15:28:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349705AbiHST16 (ORCPT ); Fri, 19 Aug 2022 15:27:58 -0400 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F6BE81B2F for ; Fri, 19 Aug 2022 12:27:56 -0700 (PDT) Received: by mail-pg1-x534.google.com with SMTP id bh13so4429725pgb.4 for ; Fri, 19 Aug 2022 12:27:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=OdVRHW5dgn9+ZFv7Dx3d9MQVdeaggjviefmhBuLYccY=; b=KLiHLmUnTwUW4nPAcccokb8rqDM7RaZKR3tAhfpWrqa4fyUZ11fQGnRCahlJbMSNkc K7onznVTAcTPdJ5ctU5qfok0xiXA4RUZWWeXukjQhEL0KrbtzmRpe90Uuw2GudQ6cB3z wqidMjhzn3TYXU35oygksNUgU3fknacc64G2XK3+HLTw5IWBs6csGTW6/65ggSWB/q94 VV1NbgwFLjrAIvYqiN/GSEoDRheHm2Jcs0J12eYCvBM3w1EYrjOcPA4TzdFyaz7+hBZg W08yNzJhuyiH6ybAoXgAL2/XGKRMYk/cdwhxrx/frztCzW3qlKJK1yFKPYJyVcVN9uzT Z1KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=OdVRHW5dgn9+ZFv7Dx3d9MQVdeaggjviefmhBuLYccY=; b=1DIyRp4EBP0Yhz6r93YhbhVGqhotUBp5uk4l8DgvOmrNQuQh8beqrHYsTBMwrd17hL aWZ+QO07RPPbBS3XIs0WrcWUB/VODuIT24Kmupg+6Zi6+p1uGmrUmZVYWlRY/RIX+xT9 h9o5/CPFBPM5zyHY99Pu1cBebC8n4H1p2BQKU3JYQ2zmyq4/pxOyl+8ozOZcfjNE47Si j18UsYVuRQanNZGaKBtPb8p4imSuQQ3Y8e7KKJdMgIQQ9RjoKr48/CZWaqFm+dSlhrqq /wGUdzCdPOSwIOyQThLZknbUnFRhsAmd9nXY2tYU7ZzpRAZ5sX9LXmNWIenn1UMcwGEP H7AA== X-Gm-Message-State: ACgBeo38jrBQ1duavcILj4CFXQj1myxeNhB3y44+77gWTS762usHS8PP Py5cP2Ws0DhYEguNiQkgObU6yaGYJh6YTqb8qrXpUA== X-Google-Smtp-Source: AA6agR6GwGgHvB/kIWBltf1ldR8xs3lS7wiIsIOwazSdhvuDPMSNX6TOwG4x6BLYFJ/S/btctxhQLjTtMJ9Rygnp60E= X-Received: by 2002:a65:5941:0:b0:41d:a203:c043 with SMTP id g1-20020a655941000000b0041da203c043mr7317812pgu.483.1660937275721; Fri, 19 Aug 2022 12:27:55 -0700 (PDT) MIME-Version: 1.0 References: <20220810152033.946942-1-pgonda@google.com> <20220810152033.946942-11-pgonda@google.com> In-Reply-To: <20220810152033.946942-11-pgonda@google.com> From: Vishal Annapurve Date: Fri, 19 Aug 2022 12:27:44 -0700 Message-ID: Subject: Re: [V3 10/11] KVM: selftests: Add ucall pool based implementation To: Peter Gonda Cc: kvm list , LKML , Marc Orr , Sean Christopherson , Michael Roth , Tom Lendacky , Joerg Roedel , Mingwei Zhang , Paolo Bonzini , andrew.jones@linux.dev Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Aug 10, 2022 at 8:20 AM Peter Gonda wrote: > ... > + > +static struct ucall *ucall_alloc(void) > +{ > + struct ucall *uc = NULL; > + int i; > + > + if (!use_ucall_pool) > + goto out; > + > + for (i = 0; i < KVM_MAX_VCPUS; ++i) { > + if (!atomic_test_and_set_bit(i, ucall_pool->in_use)) { > + uc = &ucall_pool->ucalls[i]; > + memset(uc->args, 0, sizeof(uc->args)); > + break; > + } > + } > +out: > + return uc; > +} > + > +static inline size_t uc_pool_idx(struct ucall *uc) > +{ > + return uc->hva - ucall_pool->ucalls; > +} > + > +static void ucall_free(struct ucall *uc) > +{ > + if (!use_ucall_pool) > + return; > + > + clear_bit(uc_pool_idx(uc), ucall_pool->in_use); > +} > > void ucall(uint64_t cmd, int nargs, ...) > { > - struct ucall uc = {}; > + struct ucall *uc; > + struct ucall tmp = {}; This steps seems to result in generating instructions that need SSE support on x86: struct ucall tmp = {}; movaps %xmm0,0x20(%rsp) movaps %xmm0,0x30(%rsp) movaps %xmm0,0x40(%rsp) movaps %xmm0,0x50(%rsp) This initialization will need proper compilation flags to generate instructions according to VM configuration. > va_list va; > int i; > > - WRITE_ONCE(uc.cmd, cmd); > + uc = ucall_alloc(); > + if (!uc) > + uc = &tmp; > + > + WRITE_ONCE(uc->cmd, cmd); > > nargs = min(nargs, UCALL_MAX_ARGS); > > va_start(va, nargs); > for (i = 0; i < nargs; ++i) > - WRITE_ONCE(uc.args[i], va_arg(va, uint64_t)); > + WRITE_ONCE(uc->args[i], va_arg(va, uint64_t)); > va_end(va); > > - ucall_arch_do_ucall((vm_vaddr_t)&uc); > ...