From: Dave Brolley <brolley@redhat.com>
To: Dave Brolley <brolley@redhat.com>
Cc: sid@sources.redhat.com
Subject: Re: [patch][rfa] Inheriting from cache_component and friends
Date: Thu, 29 Apr 2004 21:28:00 -0000 [thread overview]
Message-ID: <4091735C.6000203@redhat.com> (raw)
In-Reply-To: <408EDD4A.80706@redhat.com>
Received some feedback offline. I've now committed this.
Dave
Dave Brolley wrote:
> Following up on my recent posting regarding specializing on the
> existing cache_component. Here is the patch which allows use of
> cache_component and cache_line as base classes. The purpose of this is
> to allow me to implement a target-specific cache with a unique cache
> line implementation. The main changes are:
>
> 1) Make cache_line into a virtual base class. The original cache_line
> class is now called internal_cache_line (it keeps its data internally)
> and its functionality is unchanged.
>
> 2) Introduce a new cache_line_factory class which is used to allocate
> cache lines. Each cache_component is now passed a reference to a
> cache_line_factory which it uses to allocate its cache lines. An
> instance called internal_line_factory is used to create lines of type
> internal_cache_line.
>
> 3) The find mechanism of cache and cache_set previously passed cache
> lines by assignment via reference arguments. This is no longer
> possible with a virtual class implementation. The mechanism now
> returns a pointer to the found line (if found) and NULL otherwise.
>
> 4) Similarly, the 'replace' method of cache_replacement_algorithm
> previously passed in a new line and returned the old one by assignment
> using reference arguments. Now, a pointer to the expelled line is
> returned (if any --- all lines might be locked) and NULL otherwise.
> The expelled line is updated using access methods. The 'replace'
> method has been renamed to 'expell' since the line is no longer
> replaced. This also eliminates construction and destruction overhead
> for each cache miss. Also, the copy constructor and assignment
> operator for cache_line are no longer necessary.
>
> 5) The 'insert' and 'extract' methods of cache_line are now declared
> using a macro for the cartesian product of possible datatypes as is
> common elsewhere. It was not possible to instantiate the necessary
> termplate methods automatically in the virtual base class.
>
> 6) The changes the sid/component/cfgroot were found necessary while
> debugging problems in my implementation.
>
> 7) The changes to main/dynamic/commonCfg.h were necessary in order to
> allow me to inherit from CacheCfg for my specialized cache
> configurator and to get a handle to the loader configuration from the
> SessionCfg so that I could connect the loader's "set-endian" pin to my
> cache line implementation.
>
> I have tested this against my own port (with specialized cache and
> cache lines) as well as against xstormy16. All of the sid testsuite
> checks without regression (including the cache-specific tests). I'm
> seeking comments and approval to commit.
>
> Regards,
> Dave
>
>
>------------------------------------------------------------------------
>
>2004-04-27 Dave Brolley <brolley@redhat.com>
>
> * cache.cxx: Update calls to cache::find.
> * cacheutil.cxx (cache_set::allocate_lines): Now takes cache index as
> an argument. Update all callers.
> (cache_set::find): Now returns a pointer to the line, if found. Update
> all callers.
> (cache::find): Ditto.
> (cache_set::expell_line): Update the status of the expelled line.
> * cacheutil.h (cache_line_factory::make_line): Now takes cache index as
> an argument. Update all callers.
> (cache_set::allocate_lines): Now takes cache index as
> an argument. Update all callers.
> (cache_set::find): Now returns a pointer to the line, if found. Update
> all callers.
> (cache::find): Ditto.
>
>2004-04-27 Dave Brolley <brolley@redhat.com>
>
> * cacheutil.h (cache_line): Removed copy constructor. Now virtual base
> class.
> (cache_line::operator=): Removed.
> (internal_cache_line): New class implements former cache_line class.
> (cache_set): Now takes cache_line_factory.
> (allocate_lines): New method moves line allocation from the constructor.
> (cache_set::set_line): Now takes reference to cache_line.
> (cache_set::replace_line): Renamed to expell_line. Now returns a pointer
> to the expelled line.
> (cache): Now takes cache_line_factory argument.
> (cache::init): New method moves set allocation from the constructor.
> (cache_set::expell_line): Renamed to expell_line. Now returns a pointer
> to the expelled line.
> (cache_line_factory): New class.
> * cacheutil.cxx (cache_line): Removed copy constructor. Now virtual base
> class.
> (cache_line::operator=): Removed.
> (internal_cache_line): New class implements former cache_line class.
> (cache_set): Now takes cache_line_factory.
> (allocate_lines): New method moves line allocation from the constructor.
> (cache_set::set_line): Now takes reference to cache_line.
> (dummy): Now internal to cache_set::find.
> (cache_set::replace_line): Renamed to expell_line. Now returns a pointer
> to the expelled line.
> (cache): Now takes cache_line_factory argument.
> (cache::init): New method moves set allocation from the constructor.
> (cache_set::expell_line): Renamed to expell_line. Now returns a pointer
> to the expelled line.
> * cache.h (cache_replacement_algorithm::expell): Renamed from 'replace'.
> Returns a pointer to the expelled line. Update specializations.
> (cache_component): Now takes a cache_line_factory as an argument.
> Private data now protected.
> (line_factory): New member of cache_component.
> (~cache_component): Now virtual.
> (CacheCreate): Pass internal_line_factory to cache_component.
> * cache.cxx (line_sizes): Make it static.
> (line_sizes): Ditto.
> (replacement_algorithms): Ditto.
> (internal_line_factory): New static cache_line_factory.
> (cache_component): Now takes a cache_line_factory as an argument. Pass
> the cache line factory to the constructor for acache. Save a reference
> to the line factory. Call acache.init
> (write_any): Rewrite to use cache::expell_line instead of the former
> cache::replace.
> (read_any): Ditto.
> (cache_replacement_algorithm::expell): Renamed from 'replace'. Returns
> a pointer to the expelled line. Update all callers and specializations.
> (CacheCreate): Pass internal_line_factory to cache_component.
>
>2004-04-27 Dave Brolley <brolley@redhat.com>
>
> * compConfig.cxx (register_dso): Check dl_handle before attempting to
> open ".a".
> * Makefile.am (libconfig_la_DEPENDENCIES): Add @LIBLTDL@.
> * Makefile.in: Regenerated.
>
>2004-04-27 Dave Brolley <brolley@redhat.com>
>
> * commonCfg.h (CacheCfg::compute_comptype): Now virtual.
> (SessionCfg::get_loader): New method.
>
>
>
>
>
prev parent reply other threads:[~2004-04-29 21:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-27 22:23 Dave Brolley
2004-04-29 21:28 ` Dave Brolley [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4091735C.6000203@redhat.com \
--to=brolley@redhat.com \
--cc=sid@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).