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 X-Spam-Level: X-Spam-Status: No, score=-2.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CA42C433DF for ; Wed, 3 Jun 2020 15:39:27 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D641720679 for ; Wed, 3 Jun 2020 15:39:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D641720679 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=eik.bme.hu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:54526 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jgVUE-0006Tv-1K for qemu-devel@archiver.kernel.org; Wed, 03 Jun 2020 11:39:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgVTS-0005rt-RA for qemu-devel@nongnu.org; Wed, 03 Jun 2020 11:38:38 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:57145) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jgVTQ-0003gG-Iz for qemu-devel@nongnu.org; Wed, 03 Jun 2020 11:38:37 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id ECE9674594E; Wed, 3 Jun 2020 17:38:31 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id D0B20745712; Wed, 3 Jun 2020 17:38:31 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zero.eik.bme.hu (Postfix) with ESMTP id CEF0E7456F8; Wed, 3 Jun 2020 17:38:31 +0200 (CEST) Date: Wed, 3 Jun 2020 17:38:31 +0200 (CEST) From: BALATON Zoltan To: P J P Subject: Re: [PATCH] ati-vga: increment mm_index in ati_mm_read/write In-Reply-To: Message-ID: References: <20200603124732.1137892-1-ppandit@redhat.com> <20200603134404.xdb2koul7fatv4ez@sirius.home.kraxel.org> User-Agent: Alpine 2.22 (BSF 395 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=US-ASCII Received-SPF: pass client-ip=2001:738:2001:2001::2001; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ren Ding , Yi Ren , Gerd Hoffmann , Hanqing Zhao , QEMU Developers Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On Wed, 3 Jun 2020, P J P wrote: > +-- On Wed, 3 Jun 2020, Gerd Hoffmann wrote --+ > | Hmm, why modify mm_index? Shouldn't we just check it is non-zero > | before calling ati_mm_read/ati_mm_write? > > if (s->regs.mm_index & BIT(31)) { > ... > } else { > ati_mm_write(s, s->regs.mm_index + addr - MM_DATA, data, size); > } > > Exit condition for recursion is to set (mm_index & BIT(31)), so recursion > would continue even with non-zero values I think. MM_INDEX and MM_DATA allows access to registers (or memory if BIT(31) is set) via only these two registers. This is called indexed access in docs. So it does not really make sense to allow access to these registers as well thus we can avoid infinite recursion. It's not meant to recurse until BIT(31) is set. I think you can do: if (s->regs.mm_index & BIT(31)) { ... - } else { + } else if (s->regs.mm_index >= BIOS_0_SCRATCH) { ati_mm_write(s, s->regs.mm_index + addr - MM_DATA, data, size); } and do the same in ati_mm_read() as well. Regards, BALATON Zoltan