From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18724 invoked by alias); 3 Nov 2013 05:56:05 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 18331 invoked by uid 89); 3 Nov 2013 05:56:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,RDNS_NONE,URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from Unknown (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 03 Nov 2013 05:56:02 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1VcqfF-00022W-Sk from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Sat, 02 Nov 2013 22:55:57 -0700 Received: from SVR-ORW-FEM-02.mgc.mentorg.com ([147.34.96.206]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Sat, 2 Nov 2013 22:55:58 -0700 Received: from qiyao.dyndns.org (147.34.91.1) by svr-orw-fem-02.mgc.mentorg.com (147.34.96.168) with Microsoft SMTP Server id 14.2.247.3; Sat, 2 Nov 2013 22:55:56 -0700 From: Yao Qi To: Subject: [PATCH 08/10] Don't invalidate dcache when option stack-cache is changed Date: Sun, 03 Nov 2013 05:56:00 -0000 Message-ID: <1383458049-20893-9-git-send-email-yao@codesourcery.com> In-Reply-To: <1383458049-20893-1-git-send-email-yao@codesourcery.com> References: <1383458049-20893-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2013-11/txt/msg00033.txt.bz2 Nowadays, option "stack-cache" on->off and off->on transitions trigger cache invalidation. It is not very necessary and not friendly to using target_dcache for other purpose, such as code caching. Option "stack-cache" can be regarded as a switch, to decide whether to read through cache when reading data from target. When this switch is off, read from target. When the switch is on, read from cache. We need to keep cache in sync, so when GDB writes data, cache should be updated unconditionally. gdb: 2013-11-02 Yao Qi * target-dcache.c (stack_cache_enabled_p_1): Remove. (set_stack_cache_enabled_p): Remove. (_initialize_target_dcache): Update command register. * target.c (memory_xfer_partial_1): Don't check stack_cache_enabled. --- gdb/target-dcache.c | 24 ++++-------------------- gdb/target.c | 4 ++-- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/gdb/target-dcache.c b/gdb/target-dcache.c index a840c40..ce36bbb 100644 --- a/gdb/target-dcache.c +++ b/gdb/target-dcache.c @@ -100,26 +100,10 @@ target_dcache_get_or_init (void) } /* The option sets this. */ -static int stack_cache_enabled_p_1 = 1; -/* And set_stack_cache_enabled_p updates this. - The reason for the separation is so that we don't flush the cache for - on->on transitions. */ -static int stack_cache_enabled_p = 1; - -/* This is called *after* the stack-cache has been set. - Flush the cache for off->on and on->off transitions. - There's no real need to flush the cache for on->off transitions, - except cleanliness. */ -static void -set_stack_cache_enabled_p (char *args, int from_tty, - struct cmd_list_element *c) -{ - if (stack_cache_enabled_p != stack_cache_enabled_p_1) - target_dcache_invalidate (); +static int stack_cache_enabled_p = 1; - stack_cache_enabled_p = stack_cache_enabled_p_1; -} +/* Show option "stack-cache". */ static void show_stack_cache_enabled_p (struct ui_file *file, int from_tty, @@ -143,13 +127,13 @@ void _initialize_target_dcache (void) { add_setshow_boolean_cmd ("stack-cache", class_support, - &stack_cache_enabled_p_1, _("\ + &stack_cache_enabled_p, _("\ Set cache use for stack access."), _("\ Show cache use for stack access."), _("\ When on, use the data cache for all stack access, regardless of any\n\ configured memory regions. This improves remote performance significantly.\n\ By default, caching for stack access is on."), - set_stack_cache_enabled_p, + NULL, show_stack_cache_enabled_p, &setlist, &showlist); diff --git a/gdb/target.c b/gdb/target.c index 1212347..55c5d78 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -1593,14 +1593,14 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object, /* Make sure the cache gets updated no matter what - if we are writing to the stack. Even if this write is not tagged as such, we still need - to update the cache. */ + to update the cache. Update the cache to keep it in sync if it + has been initialized. */ if (res > 0 && inf != NULL && writebuf != NULL && target_dcache_init_p () && !region->attrib.cache - && stack_cache_enabled () && object != TARGET_OBJECT_STACK_MEMORY) { DCACHE *dcache = target_dcache_get (); -- 1.7.7.6